LangChain 提供了強大的工具呼叫代理和結構化聊天代理功能,讓開發者能更有效率地整合外部工具和 API,進而提升應用程式的智慧程度。工具呼叫代理能根據需求自動選擇並呼叫合適的工具,例如使用 Tavily Search 搜尋網路資訊。結構化聊天代理則更進一步,結合了多重輸入工具和自定義提示,提供更精確且自然的對話體驗。開發者可以透過設定 API 金鑰、匯入必要的模組、定義工具和代理,並使用指定的語言模型,例如 OpenAI 的 ChatGPT,來建構這些代理。實務上,可以應用於商業分析場景,例如協助分析如何降低營運成本,並提供相關資訊和建議。透過妥善處理代理的輸出和錯誤,並結合聊天記錄,可以打造更流暢且自然的對話流程,提升使用者經驗。
工具呼叫代理介紹
工具呼叫(Tool Calling)是一種強大的概念,能夠幫助代理偵測何時應該呼叫一個或多個工具,並以適當的輸入回應這些工具。透過工具呼叫,代理可以智慧地選擇正確的工具,並知道如何使用每個工具的相關引數。在 API 世界中,您可以將這些工具描述給代理,代理將輸出一個結構化物件(如 JSON),其中包含呼叫工具所需的引數。
工具呼叫的目標
工具呼叫的目標是確保代理可靠地傳回有效且有用的工具呼叫,超越一般文字完成或聊天 API 所能做到的。透過玄貓,您可以建立一個代理,反覆呼叫工具並接收結果,直到解決查詢。
設定工具呼叫
要開始使用工具呼叫,您需要一個支援它的模型。LangChain 提供了一系列選項,包括 Anthropic、Google Gemini、Mistral 和 OpenAI。您可以在 LangChain 檔案中檢視支援的模型。
安裝必要的依賴項
首先,安裝必要的依賴項:
pip install -qU langchain-openai langchain tavily-python
設定 API 金鑰
接下來,設定您的 OpenAI API 金鑰和 Tavily API 金鑰為環境變數:
import os
import getpass
os.environ["OPENAI_API_KEY"] = getpass.getpass()
os.environ["TAVILY_API_KEY"] = getpass.getpass("Enter your Tavily API key: ")
匯入必要的模組
然後,匯入必要的模組:
from langchain_openai import ChatOpenAI
from langchain.agents import AgentExecutor, create_tool_calling_agent
from langchain_community.tools.tavily_search import TavilySearchResults
from langchain_core.prompts import ChatPromptTemplate
建立工具
建立一個使用 Tavily 進行網路搜尋的工具:
tools = [TavilySearchResults(max_results=1)]
建立代理
建立一個工具呼叫代理:
prompt = ChatPromptTemplate.from_messages(
[
("system", "您是一個幫助助理。確保使用tavily_search_results_json工具進行資訊查詢。"),
("placeholder", "{chat_history}"),
("human", "{input}"),
("placeholder", "{agent_scratchpad}"),
]
)
agent = create_tool_calling_agent(llm, tools, prompt)
執行代理
建立一個代理執行器並使用查詢呼叫它:
agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True, handle_parsing_errors=True)
response = agent_executor.invoke({"input": "如何降低公司的營運成本?"})
print(response)
內容解密:
上述程式碼示範瞭如何建立一個工具呼叫代理,使用 Tavily 進行網路搜尋,並回應查詢結果。代理可以智慧地選擇正確的工具,並知道如何使用每個工具的相關引數。這種方法可以幫助代理可靠地傳回有效且有用的工具呼叫,超越一般文字完成或聊天 API 所能做到的。
圖表翻譯:
此圖表示了工具呼叫代理的建立和執行過程。首先,設定 API 金鑰,然後匯入必要的模組,建立工具和代理,最後執行代理並回應查詢結果。
玄貓:降低營運成本的策略
作為一名技術專家,玄貓認為降低營運成本是企業持續發展的關鍵。以下是玄貓提出的幾個策略:
1. 自動化常規任務
透過實施 AI 驅動的自動化,企業可以處理重複性和耗時的任務,例如資料輸入、客戶支援查詢和庫存管理。這樣可以減少手工勞動的需求,讓員工專注於更高價值的活動。
2. 預測性維護
利用 AI 進行預測性維護,可以預測裝置和機械的潛在故障,從而進行主動維護,減少停機時間。
3. 最佳化供應鏈管理
AI 可以最佳化供應鏈操作,預測庫存需求,確定最具成本效益的運輸路線。這樣可以降低庫存持有成本,提高效率。
4. 提高能源效率
透過實施 AI 驅動的系統,可以最佳化設施內的能源使用。AI 可以分析能源消耗模式,並自動調整照明、供暖和冷卻設定,從而節省成本。
5. 改善決策
AI 可以提供有價值的見解,幫助企業最佳化流程和資源分配。透過分析資料,企業可以做出更明智的決策,提高效率和生產力。
內容解密:
以上策略都需要企業對 AI 和資料分析有深入的理解。透過實施這些策略,企業可以降低營運成本,提高效率和生產力。然而,實施 AI 驅動的解決方案需要仔細的規劃和執行,以確保其有效性和安全性。
圖表翻譯:
此圖表示了玄貓提出的五個降低營運成本的策略之間的關係。從左到右,圖表展示了每個策略如何與下一個策略相連,形成一個完整的流程。透過實施這些策略,企業可以達到降低營運成本和提高效率的目標。
結構化聊天代理簡介
結構化聊天代理是一種強大的工具,利用多重輸入工具來提供更好的使用者經驗。要開始使用,請確保您已安裝必要的函式庫,包括 LangChain、Tavily Search 和 OpenAI 的 ChatGPT。
初始化工具
首先,初始化工具以便代理可以使用它們。以下範例使用 Tavily Search 工具來搜尋網際網路上的資訊,並設定 max_results 引數為 1,以表示工具將傳回最多一個搜尋結果:
tools = [TavilySearchResults(max_results=1)]
建立代理
接下來,建立結構化聊天代理,並自定義代理的提示以適應您的需求:
prompt = hub.pull("hwchase17/structured-chat-agent")
prompt.messages[0].prompt.template = """
您是一位商業分析師助理,負責幫助企業家和商業主做出明智的決定。
使用提供的搜尋工具來找到相關資訊並回答使用者的問題。
如果問題無法使用搜尋結果回答,請提供指導使用者在哪裡可以找到更多資訊。
請以清晰、簡潔和井然有序的格式提供您的回應。
"""
選擇語言模型
選擇語言模型(LLM)來驅動代理。在此範例中,使用 OpenAI 的 ChatGPT,溫度設為 0,並使用「gpt-3.5-turbo-1106」模型:
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-1106")
建構代理
最後,建構代理並傳入 LLM、工具和提示:
agent = create_structured_chat_agent(llm, tools, prompt)
內容解密:
以上程式碼的作用是建立一個結構化聊天代理,該代理可以使用 Tavily Search 工具來搜尋網際網路上的資訊,並使用 OpenAI 的 ChatGPT 來生成回應。代理的提示是自定義的,以適應商業分析師助理的角色。
定義輔助函式
定義一個輔助函式來處理代理生成的輸出。如果輸出包含「Invalid or incomplete response」的字串,則引發 ValueError 例外;否則,傳回輸出:
def process_llm_output(output):
if "Invalid or incomplete response" in output:
raise ValueError("語言模型生成了無效或不完整的回應。")
return output
圖表翻譯:
以下是程式碼邏輯的 Plantuml 流程圖:
@startuml
skinparam backgroundColor #FEFEFE
skinparam sequenceArrowThickness 2
title 工具呼叫代理與結構化聊天代理應用
actor "客戶端" as client
participant "API Gateway" as gateway
participant "認證服務" as auth
participant "業務服務" as service
database "資料庫" as db
queue "訊息佇列" as mq
client -> gateway : HTTP 請求
gateway -> auth : 驗證 Token
auth --> gateway : 認證結果
alt 認證成功
gateway -> service : 轉發請求
service -> db : 查詢/更新資料
db --> service : 回傳結果
service -> mq : 發送事件
service --> gateway : 回應資料
gateway --> client : HTTP 200 OK
else 認證失敗
gateway --> client : HTTP 401 Unauthorized
end
@enduml
圖表翻譯:
以上圖表展示了建立結構化聊天代理的步驟,從初始化工具到執行代理。
執行代理
建立一個 AgentExecutor 例項來執行代理,並提供代理、工具和各種組態選項:
agent_executor = AgentExecutor(
agent=agent,
tools=tools,
verbose=True,
handle_parsing_errors=True,
max_iterations=3,
early_stopping_method="force",
)
提問代理
向代理提出一個問題,並觀察其回應:
question = "如何在製造業中有效降低營運成本?"
處理代理回應
使用 try-except 區塊來執行代理並處理潛在錯誤。呼叫代理並傳入問題作為輸入,然後處理代理生成的輸出:
try:
output = agent_executor.invoke({"input": question})
processed_output = process_llm_output(output)
print(processed_output)
except ValueError as e:
print(f"錯誤:{e}")
內容解密:
以上程式碼的作用是執行結構化聊天代理,向其提出一個問題,並處理代理生成的輸出。如果輸出無效或不完整,則引發 ValueError 例外。
使用聊天記錄實作對話體驗
為了提供更自然的對話體驗,您可以使用與前兩種代理型別相同的方法來利用聊天記錄。透過玄貓的代理,您可以使代理以更具上下文和自然的方式回應。
從技術架構視角來看,本文介紹了三種使用 LangChain 建構工具呼叫代理的方法,分別是基本工具呼叫代理、結構化聊天代理和使用聊天記錄的代理。透過整合 Tavily 搜尋工具和 OpenAI 的 ChatGPT 模型,這些代理展現瞭如何利用外部工具增強大語言模型的功能,使其能執行更複雜的任務,例如搜尋資訊並提供更精確的答案。
分析不同代理的實作方式,可以發現其核心差異在於提示工程和代理架構。基本工具呼叫代理著重於工具的使用,結構化聊天代理則更強調輸出結構和使用者經驗,而使用聊天記錄的代理則更關註上下文理解和連貫性。 這些差異反映了不同應用場景的需求,也突顯了提示工程和代理設計的重要性。目前工具呼叫代理仍面臨一些挑戰,例如工具的可靠性和準確性、錯誤處理和異常情況的管理,以及如何有效地整合多個工具。
展望未來,工具呼叫代理的發展方向將聚焦於更精細的工具控制、更智慧的工具選擇和更自然的工具整合。隨著大語言模型和工具生態系統的持續發展,預計將出現更多功能更強大、更易於使用的工具呼叫代理框架和平臺。 對於開發者而言,掌握這些技術將成為構建下一代智慧應用程式的關鍵。 玄貓認為,工具呼叫代理代表了大語言模型應用的一個重要發展方向,值得技術團隊深入研究並積極探索其應用潛力。