AI Code Review 工具

目录:
Spring AI 框架介绍
Spring AI 对话模型
Spring AI 图像模型
LLM 工具与 RAG 原理
AI Code Review 工具

随着 LLM 的发展,出现了很多利用 LLM 进行 Code Review 的工具。本文介绍工具 PR-Agent。

PR-Agent

PR-Agent 是 Github 上比较受欢迎的一个根据 PR 来进行代码审查和相关功能的项目,提供开源和收费两种不同的版本。本文将介绍免费版本的使用。

本地使用

根据官方文档,本地使用 PR-Agent 的方式有三种。第一种方式是通过 docker 来拉取镜像并以容器的方式运行。第二种方式是安装 pr-agent 的 python 包,然后创建一个 python 脚本来调用。

这里介绍一下第三种方式,即运行源码。

将项目下载到本地后,执行以下命令来创建一个 Secret 相关的配置文件:

复制代码
cp pr_agent/settings/.secrets_template.toml pr_agent/settings/.secrets.toml

在该配置文件中,主要有两种类型的 Secret 配置,一个是大模型的配置,一个是代码托管仓库的配置。找到你使用的代码托管平台,例如 Github。从 Github 的开发者设置中找到你的 personal access token,将其设置到 user_token 。再找到你使用的大模型,如 openai,配置其访问参数。

需要注意的是,Github 的 personal access token 需要有仓库和 PR 相关的权限,否则会无法访问你的 PR 或添加评论。

此外,仓库的 issues 功能必须打开。在GitHub的设计中,PR 被视作一种特殊类型的Issue,PR 的许多讨论功能依赖于底层的 Issue 系统。

接着要安装项目依赖。创建一个虚拟环境,在虚拟环境中通过 pip3 install -r requirements.txt 来安装依赖包。需要注意的是,依赖项中有一个 tiktoken 包是 Rust 编写的,需要 Rust 编译器进行编译。因此可以先在本地安装 Rust 编译器,但 Rust 官网在国内是访问不了的,需要使用阿里云镜像下载和安装。Rust 安装完成后再安装项目依赖就没问题了。

下面就可以正式使用了。

有以下功能可供使用:

复制代码
python3 -m pr_agent.cli --pr_url <pr_url> review
python3 -m pr_agent.cli --pr_url <pr_url> ask <your question>
python3 -m pr_agent.cli --pr_url <pr_url> describe
python3 -m pr_agent.cli --pr_url <pr_url> improve
python3 -m pr_agent.cli --pr_url <pr_url> add_docs
python3 -m pr_agent.cli --pr_url <pr_url> generate_labels
python3 -m pr_agent.cli --issue_url <issue_url> similar_issue

python3 -m pr_agent.cli 其实就等价于 python3 path/to/pr_agent/cli.py,因此可以直接找到 cli.py 文件。该文件中,main 函数直接调用 run(), 没办法传参, 需要将 run() 改成 run_command('https://github.com/xxx/pull/xxx', 'review') 来运行。

执行结束后会在你的 PR 下面添加 review 的评论,下面是一个示例:

除了本地使用之外,还可以集成到代码仓库的流水线、App 或 Webhook 中使用。具体方式请参考官方文档:https://qodo-merge-docs.qodo.ai/installation/pr_agent/。

CR 原理

所有的这类利用大模型进行 CR 的工具都有一个共同的原理。

首先一定有一个提示词模版,用于构建提示词。PR-Agent 的 CR 提示词模板配置在pr_reviewer_prompts.py 文件中,其中包括系统提示词和用户提示词。系统提示词用于定义模型的身份、语气、规则、安全边界等,用户提示词负责提出具体任务请求。

需要通过代码仓库的 API 获取到 PR 相关的内容,最主要的是 PR 的 code change。在 PR-Agent 中,通过 self.vars 来定义 PR 相关的内容,如下所示:

复制代码
self.vars = {
    "title": self.git_provider.pr.title,
    "branch": self.git_provider.get_pr_branch(),
    "description": self.pr_description,
    "language": self.main_language,
    "diff": "",  # empty diff for initial calculation
    "num_pr_files": self.git_provider.get_num_of_files(),
    "num_max_findings": get_settings().pr_reviewer.num_max_findings,
    "require_score": get_settings().pr_reviewer.require_score_review,
    "require_tests": get_settings().pr_reviewer.require_tests_review,
    "require_estimate_effort_to_review": get_settings().pr_reviewer.require_estimate_effort_to_review,
    "require_estimate_contribution_time_cost": get_settings().pr_reviewer.require_estimate_contribution_time_cost,
    'require_can_be_split_review': get_settings().pr_reviewer.require_can_be_split_review,
    'require_security_review': get_settings().pr_reviewer.require_security_review,
    'require_todo_scan': get_settings().pr_reviewer.get("require_todo_scan", False),
    'question_str': question_str,
    'answer_str': answer_str,
    "extra_instructions": get_settings().pr_reviewer.extra_instructions,
    "commit_messages_str": self.git_provider.get_commit_messages(),
    "custom_labels": "",
    "enable_custom_labels": get_settings().config.enable_custom_labels,
    "is_ai_metadata":  get_settings().get("config.enable_ai_metadata", False),
    "related_tickets": get_settings().get('related_tickets', []),
    'duplicate_prompt_examples': get_settings().config.get('duplicate_prompt_examples', False),
    "date": datetime.datetime.now().strftime('%Y-%m-%d'),
}

在调用大模型的时候,会将 PR 信息填充到提示词模板中。将全部的提示词发送给大模型,以获取响应结果。如下所示:

CR 的质量取决于两方面,一个是提示词是否足够的完整和清晰,更重要的是取决于大模型本身的能力。

参考资料

1. https://qodo-merge-docs.qodo.ai/installation/locally/

相关推荐
步步为营DotNet7 分钟前
借助 Microsoft.Extensions.AI 与 ASP.NET Core 10 实现智能 Web 应用故障预测
人工智能·microsoft·asp.net
AI创界者18 分钟前
零基础上手!ComfyUI + LTX-2.3 图生视频完整工作流搭建与调优指南(附避坑细节)
大数据·人工智能
怕浪猫29 分钟前
AI图片工具到底有哪些?一份按能力维度整理的清单
人工智能
hongmai6668881 小时前
FH8856V310芯片详解:6M高清+0.5TOPS算力,赋能智能安防新方案
人工智能·单片机·嵌入式硬件·物联网·智能家居
一颗小树x1 小时前
NVIDIA Jetson Thor 运行 LLM / VLM:模型全整理与 vLLM 实践
人工智能·llm·jetson·vllm
每日综合1 小时前
蓝白风暴席卷BW2026!雷克沙展台首日燃情纪实
人工智能
To_OC1 小时前
手搓 LangChain 工具调用:原来 Agent 的核心逻辑,就是个 while 循环
人工智能·langchain·llm
Drgfd1 小时前
机器人从工厂走进生活:通用机器人开启大众商用时代
人工智能
硕迪科技SOLIDWORKS1 小时前
SOLIDWORKS与ERP对接不再是研发孤岛:硕迪科技数据同步方案让BOM流转提速百分之三百
人工智能·科技·solidworks与erp
RestCloud1 小时前
借助ETL工具,实现AI智能体+数据的落地
数据仓库·人工智能·sql·etl·etlcloud·数据集成平台·java脚本