深度解析 REAcT Agent 的實現:利用 LlamaIndex 和 Gemini 提升智能代理工作流 原創 精華
01、概述
在過去的兩三年中,人工智能領域經歷了令人矚目的發展,尤其是在大語言模型、擴散模型和多模態技術等方面。其中,我對智能代理工作流產生了濃厚的興趣。今年初,Coursera 的創始人、深度學習先鋒 Andrew Ng 發了一條推特:“智能工作流將推動今年的 AI 巨大發展”。自那時起,智能代理領域的進展令人驚嘆,許多人開始構建自主代理和多代理架構。
02、什么是 REAcT 提示?
REAcT 代表 Reasoning(推理)、Acting(行動) 和 Thinking(思考),它是一種提示技術,使大語言模型(LLMs)能夠將復雜任務分解為一系列思考過程、行動和觀察。
REAcT 提示的過程簡單明了,主要包括以下三個步驟:
- 思考:根據用戶查詢,代理生成關于如何解決問題的思路。
- 行動:代理根據其思考執行某些操作,利用可用的工具或 API,例如谷歌搜索、文件加載等。
- 觀察:代理分析其行動結果,并決定是否繼續該過程或提供最終答案。
這個過程會循環進行,直到獲得令人滿意的結果或達到最大迭代次數。
REAcT 提示的示例
讓我們看一個典型的 REAcT 提示結構:
- 思考:關于任務的推理。
- 行動:要執行的動作,例如“搜索”。
- 行動輸入:執行該動作的輸入,例如搜索查詢。
- 觀察:該動作的結果。
- 思考:基于觀察的進一步推理。
- 最終答案:代理的結論。
實時示例
假設用戶查詢:“最近的印度與英格蘭測試系列賽的最佳球員是誰,他們的關鍵表現如何?”
輸出(使用 crewAI 生成):
- 思考:為了準確回答這個查詢,我需要找到關于最近的印度與英格蘭測試系列賽的信息,確定最佳球員,并收集他們的表現細節。我將開始搜索系列賽的結果。
- 行動:搜索
- 行動輸入:“2024 年印度與英格蘭測試系列賽結果”
- 觀察:最近的印度與英格蘭測試系列賽以印度 4-1 獲勝告終,該系列賽于 2024 年 1 月至 3 月在印度進行。
通過不斷的思考、行動和觀察,代理最終得出了答案:Yashasvi Jaiswal 被評選為最佳球員,并列出了他的關鍵表現。
REAcT 提示在構建代理中的價值
傳統上,從 LLM 中獲取結果的方式是編寫結構良好的提示。然而,需要注意的是,LLMs 本身并不具備推理能力。雖然多種方法試圖使 LLMs 能夠推理和計劃,但許多方法未能取得成功。REAcT 的出現,在一定程度上成功地設計了比以往更合乎邏輯的研究計劃。
REAcT 通過將復雜任務分解為一系列思考、行動和觀察,使代理能夠以之前難以實現的透明度和適應性處理復雜問題。這種方法使開發者更容易理解代理的決策過程,從而進行調試、優化和改進。
此外,REAcT 提示的迭代特性使代理能夠處理不確定性。隨著代理在多個思考、行動和觀察周期中的進展,它可以根據新信息調整其方法,類似于人類在面對復雜任務時的應對方式。
03、REAcT 代理的關鍵應用與案例
接下來,我們將探索 REAcT 代理的多種應用和實際案例,突顯其在各個領域提升推理、決策和適應能力的潛力。
實時體育分析與預測
REAcT 代理可以利用互聯網上大量信息提供體育行業的分析和預測。例如,在 IPL 比賽中,代理可以:
- 分析球員表現趨勢。
- 預測最佳擊球順序或投球調整。
- 根據擊球手的擊球區域建議場上布陣。
自動化客戶支持
客戶支持需要提供有效反饋的技能。REAcT 代理非常適合在 LLM 或代理需要提供智能反饋時使用,幫助:
- 理解復雜的客戶查詢。
- 獲取相關產品信息和故障排除指南。
- 逐步引導客戶解決問題。
個性化學生學習
教育領域也是 REAcT 代理可能產生巨大影響的領域。想象一個個性化的 AI 輔導員,它可以:
- 評估學生當前的知識水平。
- 將復雜主題分解為可管理的小塊。
- 根據學生的反饋調整教學風格。
- 提供實時反饋并建議額外資源。
04、使用 LlamaIndex 實現 REAcT 代理
現在,我們進入實現 REAcT 代理的激動人心的部分。實際上,使用 LlamaIndex 實現起來相當簡單,只需幾行代碼。
安裝和設置
在進行代碼實現之前,我們需要安裝一些必要的庫,包括 LlamaIndex。LlamaIndex 是一個有效連接大語言模型與數據的框架。我們將使用 DuckDuckGo 搜索作為我們的動作工具,并將 Gemini 作為集成的 LLM。
!pip install llama-index
!pip install duckduckgo-search
!pip install llama-index-llms-gemini
導入必要組件
我們首先需要導入必要的組件。REAcT 代理需要與外部工具交互以獲取數據,這可以通過 LlamaIndex 核心工具中的 Function Tool 實現。邏輯很簡單:每當代理需要訪問真實數據時,它會觸發一個 Python 函數來檢索所需信息。
python
from llama_index.core.tools import FunctionTool
from duckduckgo_search import DDGS
from llama_index.llms.gemini import Gemini
定義 Gemini LLM
在 LlamaIndex 中,OpenAI 是默認的 LLM。為了覆蓋 Gemini,我們需要在設置中初始化它。您可以在 Google AI Studio 獲取 API 密鑰。
from llama_index.core import Settings
import os
GOOGLE_API_KEY = "" # 在這里添加您的 API 密鑰
os.environ["GOOGLE_API_KEY"] = GOOGLE_API_KEY
llm = Gemini()
Settings.llm = llm
創建 REAcT 代理的動作工具
接下來,我們定義搜索工具 DuckDuckGo 搜索。需要記住的一個重要細節是,在定義用于執行操作的 FunctionTool 時,需要指定輸入參數的數據類型。例如,search(query: str) -> str 確保查詢參數是字符串。由于 DuckDuckGo 返回的搜索結果包含附加元數據,我們將提取結果的主體內容以簡化響應。
def search(query:str) -> str:
"""
Args:
query: 用戶提示
return:
context (str): 用戶查詢的搜索結果
"""
req = DDGS()
response = req.text(query, max_results=4)
context = ""
for result in response:
context += result['body']
return context
search_tool = FunctionTool.from_defaults(fn=search)
編寫 LlamaIndex 的 REAcT 代理
隨著代理的主要組件已設置完畢,我們現在可以定義 REAcT 代理。我們可以直接使用 LlamaIndex 核心中的 ReAct Agent。此外,我們設置 verbose=True 以了解幕后發生的事情,設置 allow_parallel_tool_calls=True 允許代理在適當情況下做出決策而無需總是依賴外部操作。
from llama_index.core.agent import ReActAgent
agent = ReActAgent.from_tools(
[search_tool],
llm=llm,
verbose=True,
allow_parallel_tool_calls=True
)
這樣,我們就創建了 REAcT 代理?,F在可以使用它來回答查詢,通過運行 agent.chat 方法。
template = """
你是一位專業的體育分析記者。
分析 Virat Kohli 在 2024 年 IPL 的表現趨勢,并提供他的優缺點。
還需提供 Virat Kohli 在 IPL 2024 的總得分。
我還需要他在同一賽季的最高分。
"""
response = agent.chat(template)
print(response)
輸出
最終,我們得到了 REAcT 代理的響應。通過這樣的實現,代理能夠有效地回答實時用戶查詢。
05、結語
REAcT 代理代表了人工智能和智能工作流領域的一大進步。通過使用 LlamaIndex 實現 REAcT 代理,我們創建了一個強大的工具,能夠在實時用戶查詢中進行推理、行動和思考。
參考:
?
本文轉載自公眾號Halo咯咯 作者:基咯咯
