引言
在人工智慧和大語言模型(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的開發過程。