大模型的兴起已经有很长一段时间了,但是我大部分时候都是直接使用通用的大模型,并没有针对自己做个性化的定制。刚好最近在家里,有比较充足的时间,过去收集的资料和写的笔记也有不少,所以想着以这些文档为基础,压榨大模型,为自己搭建一个私有的知识库。
搭建知识库已经有比较成熟的方案了,所以网上也有不少可以参考的文章,这里只简单记录一下我自己的方案。另外再记录一下本地搭建 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。
使用效果
代码补全
自动编码