TL; DR

Composio中,我們每週都會審查數十個拉取請求。

這需要花費很多時間,所以我嘗試讓人工智慧來幫助我們在審查所有拉取請求之前對其進行驗證。

我建立了一個人工智慧代理來審查傳入的拉取請求,從而節省了我的時間和精力。

我是這樣做的:

  • 當有人提出拉取請求時,我們會追蹤儲存庫。

  • 將拉取請求事件資料轉送至事件偵聽器。

  • 使用法學碩士來審查 PR。

  • 最後,將評論作為評論發佈在 PR 中,並在 Slack 中發送摘要。

什麼是人工智慧代理?

但在此之前,先熟悉一下人工智慧代理。

人工智慧代理是由人工智慧模型驅動的系統,可以自主執行任務,與環境交互,並根據其編程和處理的資料做出決策。

審查公關


您的 AI 代理工具平台🛠️

Composio 是一個開源平台,提供 150 多種可立即投入生產的工具和集成,例如 GitHub、Slack、Code Interpreter 等,使 AI 代理能夠完成複雜的現實工作流程。

動圖

請幫我們加一顆星。 🥹

這將幫助我們建立更多這樣的文章💖

{% cta https://github.com/ComposioHQ/composio %}為 Composio.dev 儲存庫加註星標 ⭐{% endcta %}


讓我們開始吧🔥

與每個 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插件。它允許您將所有 LlamaIndex 功能與 Composio 工具一起使用。

  • 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 頁面的儀表板新增觸發器。

轉到觸發器部分並新增您需要的觸發器。

Composio GitHub 觸發器


建立代理工作流程🏗️

現在我們已經完成了整合和觸發器的設置,讓我們開始編碼部分。

佩佩青蛙


📦 導入包並定義工具 🛠️

建立一個新的 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,
    ]
)

這是上面程式碼中發生的事情

  • 我們導入了專案所需的套件和模組。

  • 使用load_dotenv().env變數設定為環境變數。

  • 初始化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

注意:您可以從其 URL 中找到 Slack 頻道 ID,該 ID 通常以「C*」開頭;例如,URL https://app.slack.com/client/T074SRB4FGS/C073RUF0UQ5 中的通道 ID 為 C074RUF0UQ5。

Agent 將在指定管道發布 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()

在上面的程式碼區塊中,

  • 當 GitHub 中的觸發事件與github_pull_request_event相符時,會呼叫回呼函數review_new_pr

  • 程式碼變更是從事件負載中提取的。

  • 程式碼變更將傳遞到 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


共有 0 則留言