本教程演示使用 LLMOps 最佳实践构建可用于生产的 AI 拉取请求审核器。 最终应用程序可在此处访问,接受公共 PR URL 并返回人工智能生成的评论。
应用概述
本教程涵盖:
核心逻辑
AI 助手的工作流程很简单:给定 PR URL,它从 GitHub 检索差异并将其提交给 LLM 进行审核。
GitHub 差异可通过以下方式访问:
<code>https://patch-diff.githubusercontent.com/raw/{owner}/{repo}/pull/{pr_number}.diff</code>
这个 Python 函数获取差异:
<code class="language-python">def get_pr_diff(pr_url): # ... (Code remains the same) return response.text</code>
LiteLLM 促进了 LLM 交互,在不同提供商之间提供一致的界面。
<code class="language-python">prompt_system = """ You are an expert Python developer performing a file-by-file review of a pull request. You have access to the full diff of the file to understand the overall context and structure. However, focus on reviewing only the specific hunk provided. """ prompt_user = """ Here is the diff for the file: {diff} Please provide a critique of the changes made in this file. """ 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</code>
使用 Agenta 实现可观察性
Agenta 增强了可观察性,跟踪输入、输出和数据流,以便于调试。
初始化 Agenta 并配置 LiteLLM 回调:
<code class="language-python">import agenta as ag ag.init() litellm.callbacks = [ag.callbacks.litellm_handler()]</code>
带有 Agenta 装饰器的仪器函数:
<code class="language-python">@ag.instrument() def generate_critique(pr_url: str): # ... (Code remains the same) return response.choices[0].message.content</code>
设置AGENTA_API_KEY
环境变量(从Agenta获得)和可选的AGENTA_HOST
用于自托管。
创建法学硕士游乐场
Agenta 的自定义工作流程功能为迭代开发提供了类似 IDE 的游乐场。 以下代码片段演示了与 Agenta 的配置和集成:
<code class="language-python">from pydantic import BaseModel, Field from typing import Annotated import agenta as ag import litellm from agenta.sdk.assets import supported_llm_models # ... (previous code) class Config(BaseModel): system_prompt: str = prompt_system user_prompt: str = prompt_user model: Annotated[str, ag.MultipleChoice(choices=supported_llm_models)] = Field(default="gpt-3.5-turbo") @ag.route("/", config_schema=Config) @ag.instrument() def generate_critique(pr_url:str): diff = get_pr_diff(pr_url) config = ag.ConfigManager.get_from_route(schema=Config) 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</code>
使用 Agenta 进行服务和评估
agenta init
并指定应用程序名称和 API 密钥。agenta variant serve app.py
。这使得应用程序可以通过 Agenta 的游乐场进行访问以进行端到端测试。 LLM-as-a-judge用于评估。 评估者提示是:
<code>You are an evaluator grading the quality of a PR review. CRITERIA: ... (criteria remain the same) ANSWER ONLY THE SCORE. DO NOT USE MARKDOWN. DO NOT PROVIDE ANYTHING OTHER THAN THE NUMBER</code>
评估器的用户提示:
<code>https://patch-diff.githubusercontent.com/raw/{owner}/{repo}/pull/{pr_number}.diff</code>
部署和前端
部署是通过 Agenta 的 UI 完成的:
v0.dev 前端用于快速 UI 创建。
后续步骤和结论
未来的改进包括及时细化、合并完整的代码上下文以及处理大的差异。 本教程成功演示了使用 Agenta 和 LiteLLM 构建、评估和部署生产就绪的 AI 拉取请求审阅器。
以上是使用 vev、litellm 和 Agenta 构建 AI 代码审查助手的详细内容。更多信息请关注PHP中文网其他相关文章!