使用Agenta构建AI驱动的代码审查助手教程
2025-07-10 05:10:56作者:郁楠烈Hubert
引言
在当今快节奏的软件开发环境中,代码审查是保证代码质量的重要环节。然而,人工审查往往耗时且难以规模化。本教程将展示如何利用Agenta平台构建一个AI驱动的代码审查助手,它能自动分析代码变更并提供有意义的审查意见。
系统架构概述
我们的AI代码审查助手由以下几个核心组件构成:
- GitHub PR解析模块:负责从GitHub获取代码变更差异(diff)
- LLM交互模块:使用LiteLLM与各种大语言模型交互
- Agenta集成层:提供可观测性、配置管理和部署能力
- 前端界面:简单的用户交互界面
核心功能实现
1. 获取PR差异
首先需要实现从GitHub获取PR差异的功能。GitHub提供了一个简单的API端点来获取PR的diff格式内容:
def get_pr_diff(pr_url):
"""
根据GitHub PR URL获取代码差异
参数:
pr_url (str): GitHub PR完整URL
返回:
str: PR差异文本
"""
pattern = r"github\.com/([^/]+)/([^/]+)/pull/(\d+)"
match = re.search(pattern, pr_url)
if not match:
raise ValueError("无效的GitHub PR URL格式")
owner, repo, pr_number = match.groups()
api_url = f"https://patch-diff.githubusercontent.com/raw/{owner}/{repo}/pull/{pr_number}.diff"
headers = {
"Accept": "application/vnd.github.v3.diff",
"User-Agent": "PR-Diff-Fetcher"
}
response = requests.get(api_url, headers=headers)
response.raise_for_status()
return response.text
2. LLM交互实现
使用LiteLLM库可以统一访问不同的大语言模型提供商。我们设置系统提示词和用户提示词来指导模型进行代码审查:
prompt_system = """
你是一位专业的Python开发者,正在对Pull Request进行逐文件审查。
你可以访问文件的完整差异来理解整体上下文和结构。
但请专注于审查提供的特定代码块。
"""
prompt_user = """
这是文件的差异内容:
{diff}
请对文件中的变更提供批评意见。
"""
def generate_critique(pr_url: str):
diff = get_pr_diff(pr_url)
response = litellm.completion(
model=config.model,
messages=[
{"content": config.system_prompt, "role": "system"},
{"content": config.user_prompt.format(diff=diff), "role": "user"},
],
)
return response.choices[0].message.content
集成Agenta平台
1. 添加可观测性
可观测性对于理解和改进LLM应用至关重要。Agenta提供了简单的装饰器来实现这一点:
import agenta as ag
# 初始化Agenta
ag.init()
# 添加LiteLLM回调
litellm.callbacks = [ag.callbacks.litellm_handler()]
# 为函数添加instrumentation装饰器
@ag.instrument()
def generate_critique(pr_url: str):
# 函数实现...
2. 创建LLM Playground
Agenta允许我们为应用创建一个类似IDE的playground,便于实验不同的提示词和模型:
from pydantic import BaseModel, Field
from agenta.sdk.types import MCField
from agenta.sdk.assets import supported_llm_models
class Config(BaseModel):
system_prompt: str = prompt_system
user_prompt: str = prompt_user
model: str = MCField(default="gpt-3.5-turbo", choices=supported_llm_models)
@ag.route("/", config_schema=Config)
@ag.instrument()
def generate_critique(pr_url: str):
# 使用配置
config = ag.ConfigManager.get_from_route(schema=Config)
# 函数实现...
评估与优化
1. 创建测试集
评估AI代码审查助手的质量需要一组代表性的PR样本。建议收集不同复杂度、不同编程语言的PR作为测试集。
2. 使用LLM评估
Agenta支持使用LLM来评估输出质量。我们可以设置评估标准:
你是一位评估PR审查质量的评委。
评估标准:
1. 技术准确性 - 审查是否识别并解决了技术问题
2. 代码质量 - 审查是否确保代码整洁、可读
3. 功能与性能 - 反馈是否清晰、可操作
4. 及时性与全面性 - 审查是否全面理解代码变更
评分:
- 分数范围0-10
- 10分表示完美
- 0分表示完全不满足标准
仅输出分数数字,不要使用Markdown,不要提供数字以外的内容
部署生产环境
在Agenta平台上部署非常简单:
- 在概览页面选择要部署的变体
- 点击三点菜单选择"部署到生产环境"
- 获取API端点
Agenta支持两种部署模式:
- 代理模式:直接使用Agenta的端点
- 提示管理模式:部署自己的应用并使用Agenta SDK获取生产配置
前端界面开发
可以使用现代前端工具快速构建用户界面。一个简单的前端应该包含:
- PR URL输入框
- 提交按钮
- 结果显示区域
未来优化方向
- 提示词优化:改进语言以获得更精确的批评意见
- 增加上下文:包含变更文件的完整代码,而不仅仅是差异
- 处理大差异:分解大量变更并分部分处理
- 多语言支持:扩展对更多编程语言的支持
- 自定义规则:允许团队添加特定的代码审查规则
总结
本教程展示了如何:
- 构建一个能审查Pull Request的AI助手
- 使用Agenta实现可观测性和提示工程
- 用LLM评估助手
- 部署助手并连接前端
通过这个项目,开发者可以体验到Agenta平台在构建、评估和部署AI应用方面的强大能力,以及如何将大语言模型集成到实际开发工作流中。