AI大模型+本地RAG知识库+CodeReview

image.png

1. 需求背景

  1. 团队Code Review规范缺少执行:大部分团队的 Code Review 停留在文档纸面上,成员之间口口相传,并没有一个工具根据规范来严格执行

  2. 信息安全问题:公司内代码直接调DeepSeek/ChatGPT/Claude会有安全问题,为了使用这些AI大模型需要对代码脱敏,只提供抽象逻辑,这往往更花时间

  3. 低质量代码耗费时间:代码审核人每天至少 10~20 个 MR 需要审核,大部分团队在提交MR时是没有经过单测的,仅仅是IDE的代码规范插件过滤了一些低级错误,但还有些问题(代码合理性、经验、相关业务逻辑等)需要花费大量时间。所以可以先经过自动化审核,再进行人工审核,可大大提升CR效率

开源大模型 + 本地知识库 = 代码审核助手(CR-Copilot)

效果图1

2. 实现思路

3. 操作步骤

3.1. 申请DeepSeek(与硅基流动二选一)

https://platform.deepseek.com/usage

3.1.1. 充值

3.1.2. 申请API key

3.2. 申请硅基流动(与DeepSeek二选一)

https://siliconflow.cn/zh-cn/

3.2.1. 注册赠送14元

3.2.2. 申请ApiKey

3.3. 部署生成式AI应用创新引擎 Dify

3.3.1. 配置模型

3.3.2. 搭建私有知识库

上传自定义开发规范、java开发规范、安全开发规范

3.3.3. 搭建工作流

3.3.4. 创建apiKey

3.3.5. 测试效果

3.3.6. 查看调用日志

3.4. 部署内外网穿透(域名)

https://natapp.cn/tunnel/buy

3.5. 配置GitLab

3.5.1. 配置webhooks

webhooks:

Gitlab在用户触发提交代码、合并请求等一些列操作时,能够将事件的详细信息通过回调的形式,向用户自己配置的接口地址进行调用

http://gtmap-natural.natapp1.cc/code-review,即为CR-Coplilot服务接口地址

3.5.2. 生成访问令牌

生成令牌后,需要妥善保管,因为关闭弹窗后再也复制不了

3.6. 部署CR-Copilot

利用Cursor“零代码”开发,用于对接Gitlab和Dify的Web应用

http://sc.supermap.com/fangyinwei2/cr-copilot

3.6.1. 功能介绍

CR-Copilot是一个基于开源大模型的代码评审助手,它能够自动对GitLab合并请求(MR)中的代码变更进行智能评审。当您在GitLab上创建一个新的合并请求时,CR-Copilot会自动分析代码变更,并在MR的timeline或file changes中提供专业的代码评审意见。

主要特点:

  • 自动识别并分析MR中的代码变更

  • 支持多种AI模型(DeepSeek、Dify知识库等)

  • 灵活配置评审文件类型和规则

  • 实时任务管理和状态跟踪

3.6.2. 系统架构

CR-Copilot主要由以下组件构成:

  1. GitLab集成模块:负责与GitLab API通信,获取MR变更信息并发送评审意见

  2. AI模型调用模块:负责根据配置调用不同的大模型进行代码评审

  3. 任务管理模块:负责追踪和管理评审任务的状态

  4. Web服务:提供HTTP接口,接收GitLab webhook回调

3.6.3. 安装与启动

  1. 安装依赖:

    npm install

  2. 启动服务:

    npm run start

  3. 构建生产版本:

    npm run build

3.6.4. 配置说明

{
  "api_config_deepseek": {
    "host": "https://api.deepseek.com",
    "model": "deepseek-chat",
    "api_key": "your-api-key"
  },
  "api_config_dify": {
    "host": "http://your-dify-server/v1",
    "api_key": "your-dify-api-key"
  },
  "gitlab_access_token": "your-gitlab-access-token",
  "enable_model": "dify",
  "code_preview_file_type": ["py", "js", "ts", "jsx", "tsx", "html", "vue", "java", "dart", "yaml", "yml", "properties", "sql", "json", "toml", "ini", "xml"]
}

配置项说明:

  1. api_config_deepseek:DeepSeek模型的配置

  2. api_config_dify:Dify知识库的配置

  3. gitlab_access_token:GitLab API访问令牌

  4. enable_model:启用的AI模型,可选值为"deepseek"或"dify"

  5. code_preview_file_type:需要进行代码评审的文件类型

3.7. 部署Ollama(可选)

https://ollama.com/

Ollama用于本地部署大模型,类似于Docker的作用

部署 DeepSeek-R1-8B 模型

3.8. 部署XInference(可选)

https://inference.readthedocs.io/zh-cn/latest/index.html

docker pull xprobe/xinference

docker run  -d  --name xinference --gpus all  -v D:/sof/docker/volumes/xinference/models:/root/models  -v D:/sof/docker/volumes/xinference/.xinference:/root/.xinference -v D:/sof/docker/volumes/xinference/.cache/huggingface:/root/.cache/huggingface -e XINFERENCE_HOME=/root/models  -p 9997:9997 xprobe/xinference:latest xinference-local -H 0.0.0.0
  • -d: 让容器在后台运行。

  • --name xinference: 为容器指定一个名称,这里是xinference。

  • --gpus all: 允许容器访问主机上的所有GPU,这对于需要进行大量计算的任务(如机器学习模型的推理)非常有用。

  • -v E:/docker/xinference/models:/root/models, -v E:/docker/xinference/.xinference:/root/.xinference, -v E:/docker/xinference/.cache/huggingface:/root/.cache/huggingface: 这些参数用于将主机的目录挂载到容器内部的特定路径,以便于数据持久化和共享。例如,第一个挂载是将主机的E:/docker/xinference/models目录映射到容器内的/root/models目录。

  • -e XINFERENCE_HOME=/root/models: 设置环境变量XINFERENCE_HOME,其值为/root/models,这可能是在容器内配置某些应用行为的方式。

  • -p 9997:9997: 将主机的9997端口映射到容器的9997端口,允许外部通过主机的该端口访问容器的服务。

  • xprobe/xinference:latest: 指定要使用的镜像和标签,这里使用的是xprobe/xinference镜像的latest版本。

  • xinference-local -H 0.0.0.0: 在容器启动时执行的命令,看起来像是以本地模式运行某个服务,并监听所有网络接口。

http://127.0.0.1:9997/ui/#/launch_model/llm

评论