我构建了一个 AI 代理来验证我的 PR,而无需亲自执行🚀⚡
TL; DR
在Composio中,我们每周都会审查数十个拉取请求。
这需要花费大量时间,因此我尝试在审查所有拉取请求之前,使用人工智能来帮助我们验证它们。
我建立了一个人工智能代理来审查传入的拉取请求,从而节省了我的时间和精力。
以下是我的做法:
- 当有人提出拉取请求时,我们会跟踪存储库。
- 将拉取请求事件数据转发给事件监听器。
- 使用 LLM 来审查 PR。
- 最后,将评论作为评论发布在 PR 中,并在 Slack 中发送摘要。
什么是 AI 代理?
但在此之前,让我们先熟悉一下人工智能代理。
人工智能代理是由人工智能模型驱动的系统,可以自主执行任务、与环境交互并根据其编程和处理的数据做出决策。
您的 AI 代理工具平台🛠️
Composio 是一个开源平台,提供超过 150 种可用于生产的工具和集成,例如 GitHub、Slack、Code Interpreter 等,使 AI 代理能够完成复杂的现实世界工作流程。

请帮我们加一颗星。🥹
这将有助于我们创作更多这样的文章💖
让我们开始吧🔥
与每个 Python 项目一样,首先创建一个虚拟环境。
python -m venv pr-agent
cd pr-agent
source bin/activate
现在,安装所需的库。
pip install composio-core composio-langchain /
langchain-openai/
python-dotenv
图书馆的简要描述
- 这
composio-core
是访问和配置工具及集成的主要库。它还具有 CLI API,可方便地管理集成和触发器。 - 这
composio-langchain
是Composio 的LangChain插件。它允许您通过 Composio 工具使用 LlamaIndex 的所有功能。 - 这
langchain-openai
是 LangChain 的一个附加库,可让您在其框架内使用 OpenAI 模型。 python-dotenv
将文件中的环境变量加载.env
到 Python 项目的环境中,从而更容易管理配置设置。
接下来,创建一个 .env
文件并为 OpenAI API 密钥添加环境变量。
OPENAI_API_KEY=your API key
配置集成* 🔧 *
Composio 允许您配置 SlackBot 和 GitHub,而无需为集成编写任何代码。Composio 处理所有用户身份验证和授权流程,因此您可以专注于更快地交付。
您可以从 CLI 执行此操作,也可以使用 专用仪表板。
但在此之前,请从 CLI 登录 Composio 并通过运行以下命令来更新应用程序。
composio login
composio apps update
完成登录流程以使用 Composio CLI API。
从 CLI
Composio 核心 SDK 允许您从终端管理集成。
执行以下命令来配置 Slackbot 和 GitHub 用户帐户。
composio add slackbot
composio add github
完成身份验证流程以将两个集成添加到您的 Composio 帐户。
从仪表板
您还可以从仪表板手动添加集成。
首先,转到工具目录部分,找到要添加的集成,然后单击它。在本例中,它是 Slackbot。
现在,单击 右侧的“设置 SlackBot 集成” 。
单击“保存”将其添加到您的帐户并连接到 SlackBot 应用程序。
完成集成流程后,您的实时集成将出现在 “集成” 部分。
重复相同的过程以添加GitHub集成。
为新的 GitHub PR 添加触发器⚙️
Newt,我们为 GitHub 集成设置了一个触发器,以便在有新的拉取请求时获取事件数据。
同样,您可以从 CLI 或仪表板执行此操作。
从 CLI,您只需执行以下命令。
composio triggers enable github_pull_request_event
另外,您可以从 GitHub 页面的仪表板添加触发器。
转到触发器部分并添加您需要的触发器。
构建 Agentic 工作流程🏗️
现在我们已经完成了集成和触发器的设置,让我们进入编码部分。
📦导入包并定义工具🛠️
创建一个新的 Python 文件并粘贴以下代码。
import os
from dotenv import load_dotenv
from composio_langchain import Action, ComposioToolSet
from langchain import hub
from langchain.agents import AgentExecutor, create_openai_functions_agent
from langchain_openai import ChatOpenAI
from composio.client.collections import TriggerEventData
load_dotenv()
# Initialize the ComposioToolSet
composio_toolset = ComposioToolSet()
# Define the tools
tools = composio_toolset.get_actions(
actions=[
Action.GITHUB_GET_CODE_CHANGES_IN_PR,
Action.GITHUB_PULLS_CREATE_REVIEW_COMMENT,
Action.SLACKBOT_CHAT_POST_MESSAGE,
]
)
上面的代码是这样的
- 我们导入了项目所需的包和模块。
- 使用 将变量设置
.env
为环境变量load_dotenv()
。 - 已初始化
ComposioToolSet()
。 - 然后,我们
tool's
用一些动作定义变量,每个动作执行一项特定的任务。 Action.GITHUB_GET_CODE_CHANGES_IN_PR
:在 GitHub PR 中获取代码更改。Action.GITHUB_PULLS_CREATE_REVIEW_COMMENT
:在 PR 中创建评论意见。Action.SLACKBOT_CHAT_POST_MESSAGE
:通过配置的 SlackBot 在 Slack 中发布消息。
定义代理🤖
接下来,我们定义我们的 LangChain Agent 和 LLM。
# Initialize the language model
llm = ChatOpenAI(model="gpt-4o")
# Define the code review assistant prompt
code_review_assistant_prompt = f"""
You are an experienced code reviewer.
Your task is to review the provided file diff and give constructive feedback.
Follow these steps:
1. Identify if the file contains significant logic changes.
2. Summarize the changes in the diff in clear and concise English within 100 words.
3. Provide actionable suggestions if there are any issues in the code.
Send the summary of the PR review to the" "" +os.environ['CHANNEL_ID']+" "" channel on Slack. Slack doesn't have Markdown, so send a plain text message.
Also, add the comprehensive review to the PR as a comment.
"""
prompt = hub.pull("hwchase17/openai-functions-agent")
combined_prompt = prompt+code_review_assistant_prompt
query_agent = create_openai_functions_agent(llm, pr_agent_tools, combined_prompt)
agent_executor = AgentExecutor(agent=query_agent, tools=pr_agent_tools, verbose=True)
在上面的代码中,
- 我们用 GPT-4o 初始化了语言模型。
- 我们为代理定义了详细的提示,指定要采取的步骤。
- 我们从 LangChain hub 中提取了系统提示
openai-functions-agent.
- 然后,我们
create_openai_functions_agent
使用语言模型、工具和提示进行初始化。 - 最后,我们
agent_executor
使用之前定义的代理和工具进行初始化。
注意:您可以从 Slack 频道 ID 的 URL 中找到该频道 ID,该 URL 通常以“C*”开头;例如,URL https://app.slack.com/client/T074SRB4FGS/C073RUF0UQ5中的频道 ID为 C074RUF0UQ5。
代理人将在指定频道发布 PR 的摘要。
定义事件监听器
下一步是设置事件监听器。它将接收来自 Slack 中触发事件的有效负载。
有效载荷包含所需的事件信息,例如 PR 变化、时间戳等。
@listener.callback(filters={"trigger_name": "github_pull_request_event"})
def review_new_pr(event: TriggerEventData) -> None:
# Using the information from Trigger, execute the agent
code_to_review = str(event.payload)
query_task = f "Review the following code changes: {code_to_review}"
# Execute the agent
res = agent_executor.invoke({"input": query_task})
print(res)
print("Listener started!")
print("Create a pr to get the review")
listener.listen()
在上面的代码块中,
review_new_pr
当 GitHub 中的触发事件匹配时,会调用 回调函数github_pull_request_event
。- 代码更改是从事件有效负载中提取的。
- 代码更改被传递给 agent_executor,以
code_review_assistant_prompt
使用提供的语言模型和操作执行中提到的详细步骤。
现在,运行 Python 文件来设置事件监听器。
当您在配置的 GitHub 存储库中创建新的 PR 时,代理将采取行动。
它将检索并审查代码,将审查作为评论发布在 PR 中,并将 PR 审查的摘要发布到配置的 Slack 频道。
让我们联系吧!🔌
您可以加入我们的社区,与维护人员互动,并以开源开发者的身份做出贡献。欢迎访问我们的 GitHub 代码库,贡献代码并创建与 Composio 相关的问题。
本教程的源代码可以在这里找到:
https://github.com/ComposioHQ/composio/tree/master/python/examples/pr_agent/pr_agent_langchain
感谢您的阅读!
文章来源:https://dev.to/composiodev/i-built-an-ai-agent-to-validate-my-pr-without-actually-doing-it-myself-24f0