本地模型部署与知识库搭建

一、准备环境与模型拉取

1. 安装 Ollama

$ brew install ollama
# 启动ollama
$ brew services start ollama

这一步可能会顺便更新 Homebrew,所以时间可能比较久。

执行完成后,可以通过 ollama list 查看已下载的模型。

2. 配置ollama镜像源

在终端执行以下命令,创建 Ollama 的配置文件:

# 创建.ollama目录
$ mkdir -p ~/.ollama
# 写入配置
$ cat > ~/.ollama/config.json << 'EOF'
{
    "registry": {
        "mirrors": {
            "registry.ollama.ai": "https://ollama.modelscope.cn"
        }
    }
}
EOF

镜像源

地址

阿里云

https://registry.ollama.ai(上面的配置已使用此地址)

魔搭社区

https://ollama.modelscope.cn

DeepSeek官方

https://ollama.deepseek.com

建议先用阿里云(已配置),如果速度不理想,后续可以替换为其他地址。

3. 拉取模型

借助ollama拉取deepseek免费模型,后期可在配置文件 config.yaml 替换为其他模型

模型大小:8.9GB(Q4_0 量化) 预计耗时:10–20 分钟(取决于镜像源速度)

Ollama 支持断点续传,可以重新执行命令继续下载,其他模型可以在 https://ollama.com/libraryarrow-up-right 中寻找。

二、Python版本与依赖安装

1. 安装[email protected]版本

先判断是否有conda,通过:

查看是否有返回类似 conda 25.11.1 的版本号。如果没返回版本号,自行上网寻找。

然后执行:

1、 activate后想退出rag环境,可使用:conda deactivate

2、 rag环境中可通过 which python 得到python在conda中的安装位置。

2. 依赖安装

现在确保你处于 (rag) 环境下,然后执行:

依赖说明:

包名

作用

langchain

构建 RAG 流程的框架,负责加载文档、切分文本、管理检索链

chromadb

向量数据库,存储知识库的嵌入向量,支持本地持久化和相似度检索

sentence-transformers

生成文本的向量嵌入,将文档和查询转换为语义向量

fastapi

提供 REST API 服务,供 VSCode 插件调用,接收代码并返回审查结果

uvicorn

ASGI 服务器,用于运行 FastAPI 应用

pypdf

解析 PDF 文件,提取其中的文本内容,供知识库学习

python-multipart

处理 API 中接收到的 multipart/form-data 数据(如上传代码文件)

langchain-community

提供 LangChain 的社区维护集成,包括各种文档加载器(如 TextLoaderPyPDFLoaderDirectoryLoader)、向量存储、工具等。我们用它来加载知识库文件。

langchain-huggingface

提供 HuggingFace 模型的 LangChain 集成,包括嵌入模型(HuggingFaceEmbeddings)和对话模型。我们用它来生成文本向量。

这些包共同构成了 RAG 服务的核心功能。

如果出现安装失败,尝试: pip install --upgrade pip setuptools wheel # 升级 pip 和安装工具

pip cache purge # 清缓存

然后再安装一次,如果还不行,就每个包都单独安装,具体哪个包错误再查问题。

三、配置文件

现在用户目录下创建 ~/ai-code-review 文件夹,用于存放所有相关代码和配置文件。

然后编辑 config.yaml

保存退出后,通过以下指令验证 YAML 格式是否正确:

如果没有报错,说明格式正确。

四、配置RAG并初次构建知识库

~/ai-code-review/ 目录下执行:

bash

然后将以下代码完整复制到 rag.py 中:

说明

  • load_knowledge_base(reload=False):从 company_knowledge 目录加载所有文档(支持 .txt, .md, .pdf, 常见代码文件),切分后存入向量库。reload=True 会清空旧数据重新构建。

  • retrieve(query, top_k=5):根据查询文本返回最相关的文档块。

  • 代码中使用了 langchain_community 的文档加载器和 langchain_huggingface 的嵌入模型,这些依赖已在安装中包含。

接下来直接运行:

运行后可以测试配置是否正确,并初次构建知识库。

如果能出现大致这结果:

就相当于通过了。

五、FastAPI 服务

~/ai-code-review/ 目录下创建 main.py,内容如下:

然后直接运行 python main.py,如果能出现:

需要安装 requests(如果未安装,执行 pip install requests)。

首次启动前,确保 Ollama 服务已在后台运行(之前已通过 brew services start ollama 启动)

服务启动后,简单测试一句代码审查:

返回可能会有点久,要耐心等一会。到目前这一步,由于知识库还没有东西,所以理论上会返回类似:

但无论如何,已经有返回了。

关于速度慢的原因

  • 模型较大:deepseek-coder-v2:16b 是 16B 参数,量化后 8.9GB,在 M2 上推理约 10–20 token/s,首次调用会加载模型(耗时数十秒),后续调用会快一些。

  • 建议:如果追求速度,可换成更小的模型,如 qwen2.5-coder:7b-instruct-q4_K_M(约 4.7GB),推理速度会明显提升。

六、知识库索引json

~/ai-code-review 下:

然后写入你的参考资料路径,可配置排除检索的目录及文件,比如:

字段说明

  • name:来源名称(用于日志)

  • path:目录绝对路径(可指向单个文件,但我们假设是目录)

  • include_extensions:要加载的文件扩展名(留空则加载所有支持的扩展名,但需与排除规则配合)

  • exclude_dirs:要跳过的目录名(支持通配符?这里简化为精确匹配目录名,若需复杂匹配可扩展)

  • exclude_files:要跳过的文件名模式(支持通配符如 *.log

接下来,在 ~/ai-code-review/ 下创建 update_kb.py,内容:

运行方式:

即可增量更新知识库。会出现类似:

七、测试知识库

做完上一步的增量更新,直接在 ~/ai-code-review 下执行:

运行起服务后,新开一个终端测试:

看看返回了什么,与第五步有没有区别。我这里返回的是:

至此,就完成了知识库的更新、重启,并获取到返回数据。

八、通过对话形式调用大模型

需要一个交互式脚本,每次输入问题,系统自动检索知识库,然后调用模型生成回答。

~/ai-code-review/ 目录下创建 chat.py,内容如下:

运行对话:

效果:

最后更新于