由 Gemini Pro 驅動的代理人:使用 LangTrace 解鎖代理人工作流程
探索 Gemini Pro 和 LangTrace 如何為先進的 LLM 功能解鎖主動式工作流程。探索規劃、外部工具使用和追蹤,以建立生產就緒的 AI 系統。
2025年1月15日
利用Gemini Pro實驗型號解鎖AI驅動代理的力量。探索這款尖端語言模型如何無縫整合外部工具和API,以處理複雜任務,提供全面和定制的響應。探索基於代理的方法的好處,並解鎖您內容和工作流程的新可能性。
什麼是代理人以及它如何運作?
什麼是代理人以及它如何運作?
代理本質上是一個具有額外功能的大型語言模型(LLM),包括:
-
規劃: 代理可以分解使用者的查詢,並制定全面的計劃來解決它。
-
外部工具/API: 代理可以訪問外部工具或API,以執行其計劃。
-
記憶: 代理會跟踪計劃執行的進度,並確定需要採取的其他步驟。
在提供的示例中,代理使用Gemini 1.5 Pro實驗模型作為LLM,並且可以訪問兩個工具:
-
RAG(檢索增強生成): 這充當代理的知識庫,使用"注意力是你所需要的一切"論文。
-
網絡搜索: 代理可以查找網上的信息,以補充其知識。
代理使用LangTrace來跟踪執行計劃的所有步驟。這種可觀察性對於理解代理的決策過程至關重要,特別是在生產環境中。
設置環境
設置環境
要開始,我們需要安裝必要的軟件包並設置所需的API密鑰。以下是我們的操作步驟:
-
安裝軟件包: 我們將安裝Google生成式AI軟件包、LangChain、Tavly Python(我們的搜索引擎)、FAISS(向量存儲)和LangTrace Python SDK。
-
導入軟件包: 我們將導入遞歸字符文本分割器、PDF加載器、Tavly搜索結果和Google生成式AI嵌入模型。
-
設置API密鑰:
- Tavly API密鑰: 您可以通過點擊視頻描述中提供的"獲取API密鑰"鏈接來獲取Tavly API密鑰。
- Google API密鑰: 您可以從您的Google AI Studio獲取Google API密鑰。
- LangTrace API密鑰: 您需要在LangTrace(一個用於LLM應用程序的開源可觀察性平台)上創建一個帳戶。然後點擊"生成API密鑰"來獲取您的API密鑰。
-
設置環境變量: 我們將把Tavly API密鑰和LangTrace API密鑰設置為環境變量。
-
處理錯誤: 如果您看到任何與LangSmith集成相關的錯誤,請不要擔心。我們現在只對LangChain和Gemini Pro集成感興趣。
現在我們已經設置好了環境,可以進入下一步,構建代理並集成必要的工具。
建立 RAG 管線
建立 RAG 管線
要設置基本的RAG管道,我們首先需要加載將作為我們知識庫的PDF文檔。在本例中,我們有"transformers.pdf"文件,其中包含12頁內容。
接下來,我們使用來自"langchain.text_splitter"模塊的"RecursiveCharacterTextSplitter"將文檔分割成較小的片段,每個片段最多500個令牌,重疊100個令牌。這使我們能夠創建總共24個不同的片段,可用於檢索。
然後,我們加載Google生成式AI嵌入模型,用於計算每個文檔片段的嵌入。嵌入的維度為768。
為了存儲嵌入,我們使用FAISS向量存儲。這允許我們在提供查詢時有效地執行相似性搜索。
最後,我們創建一個"RetrievalQA"工具,代理可以使用它從知識庫中檢索相關信息。該工具配置有FAISS檢索器和一個描述,指示它對於檢索與"注意力是你所需要的一切"論文相關的信息很有用。
有了這個設置,代理將能夠使用RAG管道找到並檢索相關信息,以回答有關變換器及相關主題的問題。
設置工具
設置工具
要為我們的代理設置工具,我們首先需要安裝必要的軟件包:
1# 安裝所需的軟件包 2!pip install google-generative-ai langchain tavlpy faiss-cpu langtracing
接下來,我們導入所需的模塊,並設置我們將使用的不同服務的API密鑰:
1import os 2from langchain.document_loaders import PyPDFLoader 3from langchain.text_splitter import RecursiveCharacterTextSplitter 4from langchain.embeddings.openai import OpenAIEmbeddings 5from langchain.vectorstores import FAISS 6from langtracing.sdk.python import LangTracer 7 8# 設置Tavly API密鑰 9TAVLY_API_KEY = os.environ.get("TAVLY_API_KEY") 10 11# 設置LangTrace API密鑰 12LANGTRACING_API_KEY = os.environ.get("LANGTRACING_API_KEY")
然後,我們設置RAG(檢索增強生成)管道,加載PDF文檔,將其分割成片段,並創建嵌入和向量存儲:
1# 加載PDF文檔 2loader = PyPDFLoader("transformers.pdf") 3documents = loader.load() 4 5# 將文檔分割成片段 6text_splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=100, length_function=len) 7chunks = text_splitter.split_documents(documents) 8 9# 創建嵌入和向量存儲 10embeddings = OpenAIEmbeddings() 11vector_store = FAISS.from_documents(chunks, embeddings)
最後,我們創建代理將能夠訪問的兩個工具:檢索工具和搜索工具:
1from langchain.agents import Tool 2 3# 創建檢索工具 4retriever_tool = Tool( 5 name="retriever_tool", 6 description="對於任何與變換器架構相關的信息,請使用此工具。對於檢索與"注意力是你所需要的一切"論文相關的信息很有用。", 7 func=lambda query: vector_store.similarity_search(query, k=3) 8) 9 10# 創建搜索工具 11search_tool = Tool( 12 name="search_tool", 13 description="一個針對全面、準確和可信結果進行優化的搜索引擎。在需要回答有關當前事件的問題時很有用。輸入應該是一個搜索查詢。", 14 func=lambda query: Tavly(TAVLY_API_KEY).search(query) 15)
設置好工具後,我們現在準備創建代理並開始使用它來回答問題。
建立代理人
建立代理人
要創建代理,我們將使用LangChain中的ReAct代理類。這是一種特殊類型的代理,可以進行規劃,有記憶,並可以訪問我們想要它使用的工具。
我們首先需要為代理提供詳細的提示或指令,以控制工具並制定計劃。LangChain提供了一個模板,使用LangChain Hub,類似於Llama Index Hub。
我們將使用ReAct模板並根據需要進行修改。提示包括以下內容:
- 盡可能回答以下問題。
- 您可以訪問以下工具:
- 檢索工具:用於與"注意力是你所需要的一切"論文相關的任何信息。
- 搜索工具:一個針對全面、準確和可信結果進行優化的搜索引擎。對於回答有關當前事件的問題很有用。
- 使用以下格式:
- 您必須回答的輸入問題。
- 您的思考過程。
- 要採取的行動(即使用哪個工具)。
- 工具的輸出。
- 最終答案。
有了這個提示,我們可以創建ReAct代理:
1agent = ReActAgent( 2 name="Gemini 1.5 Pro", 3 tools=tools, 4 system_message=system_prompt 5)
這裡,tools
是我們之前定義的工具列表,system_prompt
是我們基於ReAct模板創建的提示。
現在,我們可以使用AgentExecutor
來執行代理並為其提供查詢:
1executor = AgentExecutor( 2 agent=agent, 3 tools=tools, 4 verbose=True 5) 6 7result = executor.run("What is the current weather in LA?") 8print(result)
代理將經歷思考過程,使用適當的工具,並提供最終答案。您還可以使用LangTrace庫檢查跟蹤,以了解代理的決策過程。
與代理人互動
與代理人互動
我們設置的代理是一個反應式代理,這意味著它可以規劃、執行操作並根據這些操作的結果更新其內部狀態。讓我們看看如何與這個代理互動。
首先,我們將問代理一個關於洛杉磯當前天氣的簡單問題:
1question = "What is the current weather at LA?" 2result = agent.run(question) 3print(result)
代理經歷思考過程,決定使用搜索工具查找當前天氣,執行搜索,然後提供最終答案。
接下來,讓我們問代理當前奧運會每個國家的金牌數:
1question = "Can you give me a list of gold medals per country in the current Olympics?" 2result = agent.run(question) 3print(result)
在這裡,代理再次決定使用搜索工具查找相關信息,處理結果,並提供答案。
最後,讓我們問代理解釋變換器中注意力的概念:
1question = "Can you explain the concept of attention in transformers?" 2result = agent.run(question) 3print(result)
在這種情況下,代理認識到這個問題與"注意力是你所需要的一切"論文有關,所以它決定使用檢索工具從論文中獲取相關信息。然後,它處理信息並提供了對縮放點積注意力核心概念的簡明解釋。
在這些互動中,您可以看到代理的思考過程和它達到最終答案的步驟。使用像LangTrace這樣的工具可以幫助我們理解代理的內部工作原理和系統的性能。
結論
結論
Gemini 1.5 Pro實驗模型已經展示了其作為有效代理的能力,利用RAG和網絡搜索等工具提供全面和簡明的回答各種查詢。使用LangTrace對代理的思考過程和執行步驟進行跟踪,為優化系統性能提供了寶貴的見解。
雖然模型的天氣信息略有偏差,但代理重寫查詢並檢索更相關信息的能力展示了其適應性和解決問題的技能。對變換器中注意力核心概念的詳細解釋,進一步突出了模型的理解深度,以及其作為用戶尋求信息和洞見的有價值工具的潛力。
總的來說,Gemini 1.5 Pro實驗模型已被證明是一個有前景的代理,能夠整合外部工具、規劃和執行全面的回應。隨著大型語言模型和基於代理的系統領域的不斷發展,這個示例證明了該領域的進步,以及未來更複雜和能力更強的代理的潛力。
常問問題
常問問題