LangGraph入門:構建ReACT架構的智慧Agent

muzinan110發表於2024-11-11

引言

在人工智慧和大語言模型(LLM)快速發展的今天,如何構建高效、靈活的智慧Agent成為了一個熱門話題。LangGraph作為一個強大的工具,為我們提供了一種新的方式來實現複雜的AI工作流,特別是在構建ReACT(Reasoning and Acting)架構的智慧Agent方面表現出色。本文將深入探討如何使用LangGraph來實現ReACT架構,並提供詳細的程式碼示例和解釋。

LangGraph的基本概念

LangGraph是一個用於構建基於LLM的應用程式的Python框架。它的核心理念是將複雜的AI工作流程表示為一個狀態圖,其中包含節點、邊和資料狀態。這種方法使得我們可以更直觀地設計和實現智慧Agent的行為邏輯。

在LangGraph中,我們可以使用基礎元件(節點、邊、資料狀態)來構建Agent,這也是LangGraph自由度高的一個重要優點。同時,LangGraph還提供了一些預構建的代理,如ReACT智慧體和工具呼叫智慧體,使得我們可以更快速地建立智慧Agent。

ReACT架構簡介

ReACT(Reasoning and Acting)是一種智慧Agent架構,它結合了推理和行動的能力。在ReACT架構中,Agent透過不斷地思考(Reasoning)、採取行動(Acting)和觀察結果(Observing)來解決問題。這種方法使得Agent能夠更靈活地應對複雜的任務,並且可以利用外部工具來增強其能力。

使用LangGraph實現ReACT架構

現在,讓我們透過一個具體的例子來看看如何使用LangGraph實現ReACT架構的智慧Agent。

1. 環境設定

首先,我們需要匯入必要的庫和模組:

import dotenv
from langchain_community.tools import GoogleSerperRun
from langchain_community.tools.openai_dalle_image_generation import OpenAIDALLEImageGenerationTool
from langchain_community.utilities import GoogleSerperAPIWrapper
from langchain_community.utilities.dalle_image_generator import DallEAPIWrapper
from langchain_core.pydantic_v1 import BaseModel, Field
from langchain_openai import ChatOpenAI
from langgraph.prebuilt.chat_agent_executor import create_react_agent

dotenv.load_dotenv()

2. 定義工具和引數模式

接下來,我們定義了兩個工具:Google搜尋和DALL-E影像生成。同時,我們也為這些工具定義了引數模式:

class GoogleSerperArgsSchema(BaseModel):
    query: str = Field(description="執行谷歌搜尋的查詢語句")

class DallEArgsSchema(BaseModel):
    query: str = Field(description="輸入應該是生成影像的文字提示(prompt)")

google_serper = GoogleSerperRun(
    name="google_serper",
    description=(
        "一個低成本的谷歌搜尋API。"
        "當你需要回答有關時事的問題時,可以呼叫該工具。"
        "該工具的輸入是搜尋查詢語句。"
    ),
    args_schema=GoogleSerperArgsSchema,
    api_wrapper=GoogleSerperAPIWrapper(),
)

dalle = OpenAIDALLEImageGenerationTool(
    name="openai_dalle",
    api_wrapper=DallEAPIWrapper(model="dall-e-3"),
    args_schema=DallEArgsSchema,
)

tools = [google_serper, dalle]

3. 建立語言模型

我們使用OpenAI的GPT-4模型作為我們的大語言模型:

model = ChatOpenAI(model="gpt-4o-mini", temperature=0)

4. 使用預構建函式建立ReACT智慧體

LangGraph提供了預構建的函式來建立ReACT智慧體,使用起來非常簡單:

agent = create_react_agent(
    model=model,
    tools=tools
)

5. 呼叫智慧體並輸出內容

最後,我們可以呼叫我們建立的智慧體,並列印輸出結果:

print(agent.invoke({"messages": [("human", "幫我繪製一幅鯊魚在天上飛的圖片")]}))

執行結果分析

當我們執行這段程式碼時,智慧體會首先理解任務需求,然後決定使用DALL-E工具來生成影像。它會生成一個詳細的影像描述,然後呼叫DALL-E API來建立影像。最後,它會返回生成的影像URL,並提供一個簡短的描述。

輸出內容可能如下所示:

{'messages': [HumanMessage(content='幫我繪製一幅鯊魚在天上飛的圖片'), 
              AIMessage(content='', additional_kwargs={'tool_calls': [...]}), 
              ToolMessage(content='https://dalleproduse.blob.core.windows.net/...'), 
              AIMessage(content='這是您請求的畫面:一隻鯊魚在天上飛翔的圖片。您可以點選下面的連結檢視這幅圖。\n\n![鯊魚在天上飛](https://dalleproduse.blob.core.windows.net/...)')]
}

總結

透過這個例子,我們可以看到LangGraph如何簡化了ReACT架構智慧Agent的構建過程。它提供了高階抽象和預構建元件,使得我們可以快速實現複雜的AI工作流。同時,LangGraph的靈活性也允許我們根據需要自定義和擴充套件Agent的功能。

需要注意的是,LangGraph仍在快速發展中。例如,當前版本(截至文章撰寫時)的預構建ReACT智慧體是基於函式呼叫實現的,並且在0.3.0版本中可能會被移除。因此,在使用LangGraph時,建議關注其最新的文件和更新。

儘管如此,LangGraph的核心設計理念和封裝思路仍然非常值得學習和借鑑。隨著AI技術的不斷進步,我們可以期待LangGraph在未來會提供更多強大和易用的功能,進一步簡化智慧Agent的開發過程。

相關文章