大模型的兴起已经有很长一段时间了,但是我大部分时候都是直接使用通用的大模型,并没有针对自己做个性化的定制。刚好最近在家里,有比较充足的时间,过去收集的资料和写的笔记也有不少,所以想着以这些文档为基础,压榨大模型,为自己搭建一个私有的知识库。

搭建知识库已经有比较成熟的方案了,所以网上也有不少可以参考的文章,这里只简单记录一下我自己的方案。另外再记录一下本地搭建 Cursor 平替的一种方案。

Obsidian + 豆包

跨端同步

为了实现跨端的资料同步,原有的方案是使用坚果云,但毕竟是商用的产品,一个月 1 G 的上行流量在搭建私有知识库时非常不够用,所以经过一番折腾之后,我果断弃用了坚果云,直接使用 Obsidian 的远程同步插件 Remotely Save + 腾讯云 COS 的方案,将需要同步的资料全部放在 Obsidian 的仓库内,然后在 Remotely Save 的配置中启用“同步配置文件夹”,这样整个仓库就会被同步到 COS ,进而实现多设备的同步。

我还有一台云服务器,部署了 Alist,只要在里面添加 COS 的接入点,就可以在没有安装 Obsidian 的设备非常方便的从 Web 端访问知识库内的资料。

AI 助手

Obsidian 的 AI 插件其实不算多,大部分也仅限于单开一个窗口,嵌入一个简单的交互页面,并不能提供与知识库的深度交互。经过一方搜索,我发现了 Smart Composer 这个插件,它既可以自定义接入的大模型,也可以通过构建文本向量数据库,将知识库与大模型结合,实现与已有知识结合,使得大模型在特定领域有更好的表现。

API 搭建

对话大模型

现在市面上的大模型非常多了,但测试下来,还是觉得豆包比较适合,对中文语境的支持比较好,交互过程比较自然。虽然国产化了,但是 API 的调用仍然会有不少开销。正好在 GitHub 上发现有个项目逆向网页的接口,提供符合 OpenAI 格式的 API 接口,可以非常方便地使用 Docker 部署。

docker-compose.yaml

version: '3'

services:
  doubao-free-api:
    container_name: doubao-free-api
    image: vinlic/doubao-free-api:latest
    restart: always
    ports:
      - "8000:8000"
    environment:
      - TZ=Asia/Shanghai

使用以下命令启动:

docker compose up -d

文本嵌入大模型

为了把大量资料喂给大模型,需要先将这些文本资料向量化。由于没有找到合适的逆向接口,本地部署显卡又跟不上,所以直接使用商业的中转 API 了,好在文本向量化的费用比对话大模型低太多了。

插件设置

启动容器之后,就可以把端点地址改为容器的地址了,API 密钥使用豆包网页的 Cookie,具体字段为 sessionid

在 Smart Composer 中设置如下:

注:Base URL 格式为:http(s)://<IP:PORT>/v1

文本向量化,我是用了 deerapi 提供的 text-embedding-3-large 。由于插件还未支持自定义文本嵌入模型,所以需要对插件源码进行一点修改,具体改动如下:

全局搜索 let c={apiKey:e,organization:t,project:G,...a,baseURL:l||"https://api.openai.com/v1"}; ,把 api.openai.com 改为 api.deerapi.com

然后在 Smart Composer 的设置中填写对应的 API 密钥:

使用效果

Vscode + Ollama

最近一段时间 Cursor 也是被炒的火热,体验确实不错,但是每个月的开销也确实不小,所以就想着能不能找到一种可行的替代方案。一番折腾之后得到以下方案。

Cursor 本身就是基于 Vscode 深度定制的,所以就选择 Vscode + 插件的方式来实现。选用的插件如下:

  • Continue:实现代码智能补全;
  • Roo Cline:实现自动编码工作流;

本地代码补全

使用 Ollama 可以非常方便地在本地运行大模型,由于我的显卡非常拉跨,所以只能选用比较小的模型,测试下来发现 qwen 2.5-coder: 3 b 这个模型比较适合,补全效果说得过去,资源占用也比较少。安装好 Ollama 之后直接 pull 模型到本地就可以了。

ollama pull qwen2.5-coder:3b

然后设置 Continue 插件:

注:这里的对话模型还是直接使用了刚才搭建的豆包 API。

自动编码工作流

使用 Roo Cline 插件,结合大模型就能实现类似于 Cursor 的自动编码功能,配置也比较简单,继续使用刚搭建的豆包 API。

使用效果

代码补全

自动编码