首页
/ 使用Agenta构建AI驱动的代码审查助手教程

使用Agenta构建AI驱动的代码审查助手教程

2025-07-10 05:10:56作者:郁楠烈Hubert

引言

在当今快节奏的软件开发环境中,代码审查是保证代码质量的重要环节。然而,人工审查往往耗时且难以规模化。本教程将展示如何利用Agenta平台构建一个AI驱动的代码审查助手,它能自动分析代码变更并提供有意义的审查意见。

系统架构概述

我们的AI代码审查助手由以下几个核心组件构成:

  1. GitHub PR解析模块:负责从GitHub获取代码变更差异(diff)
  2. LLM交互模块:使用LiteLLM与各种大语言模型交互
  3. Agenta集成层:提供可观测性、配置管理和部署能力
  4. 前端界面:简单的用户交互界面

核心功能实现

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平台上部署非常简单:

  1. 在概览页面选择要部署的变体
  2. 点击三点菜单选择"部署到生产环境"
  3. 获取API端点

Agenta支持两种部署模式:

  • 代理模式:直接使用Agenta的端点
  • 提示管理模式:部署自己的应用并使用Agenta SDK获取生产配置

前端界面开发

可以使用现代前端工具快速构建用户界面。一个简单的前端应该包含:

  • PR URL输入框
  • 提交按钮
  • 结果显示区域

未来优化方向

  1. 提示词优化:改进语言以获得更精确的批评意见
  2. 增加上下文:包含变更文件的完整代码,而不仅仅是差异
  3. 处理大差异:分解大量变更并分部分处理
  4. 多语言支持:扩展对更多编程语言的支持
  5. 自定义规则:允许团队添加特定的代码审查规则

总结

本教程展示了如何:

  1. 构建一个能审查Pull Request的AI助手
  2. 使用Agenta实现可观测性和提示工程
  3. 用LLM评估助手
  4. 部署助手并连接前端

通过这个项目,开发者可以体验到Agenta平台在构建、评估和部署AI应用方面的强大能力,以及如何将大语言模型集成到实际开发工作流中。