使用介紹
自定義工具時的元素概念介紹
在Langchain中,工具(Tool)是與語言模型交互的基本單元。以下是自定義工具時的關鍵元素:
name
- 定義:工具的名稱,用于唯一標識該工具。
- 作用:當工具被集成到Agent中時,Agent會根據工具名稱來調用它。
description
- 定義:工具的功能描述,通常是一個字符串。
- 作用:幫助語言模型理解工具的作用。例如,在ReAct模式下,模型會根據工具的描述選擇合適的工具來完成任務。
args_schema
- 定義:工具的輸入參數結構,通常使用Pydantic模型定義。
- 如何使用:
- 定義一個繼承自
pydantic.BaseModel
的類,指定工具的輸入參數。 - 將該類賦值給
args_schema
屬性。
- 定義一個繼承自
- 示例:
from pydantic import BaseModel, Fieldclass SearchInput(BaseModel):query: str = Field(description="The search query")tool = StructuredTool(name="search",description="Searches the web for information.",args_schema=SearchInput,func=search_function )
return_direct
- 定義:是否直接返回工具的結果,而不經過后續處理。
- 作用:如果設置為
True
,工具的結果將直接返回給用戶或Agent,而不會被進一步解析。
@tool/BaseTool/StructuredTool 的新建方式及參數介紹
@tool 裝飾器
- 同步工具:
from langchain.tools import tool@tool def search(query: str) -> str:return f"Search results for '{query}'"
- 異步工具:
from langchain.tools import tool@tool async def async_search(query: str) -> str:return f"Async search results for '{query}'"
BaseTool 類
- 同步工具:
from langchain.tools.base import BaseToolclass MyTool(BaseTool):name = "my_tool"description = "A custom tool"def _run(self, input_str: str) -> str:return f"Processed input: {input_str}"async def _arun(self, input_str: str) -> str:return f"Async processed input: {input_str}"
- 參數:
name
:工具名稱。description
:工具描述。_run
:同步執行函數。_arun
:異步執行函數(可選)。
StructuredTool 類
- 同步工具:
from langchain.tools.base import StructuredTooldef search_function(query: str) -> str:return f"Search results for '{query}'"tool = StructuredTool(name="search",description="Searches the web for information.",args_schema=SearchInput,func=search_function )
- 異步工具:
async def async_search_function(query: str) -> str:return f"Async search results for '{query}'"tool = StructuredTool(name="async_search",description="Performs an asynchronous web search.",args_schema=SearchInput,func=async_search_function )
使用場景
- @tool:適合快速定義簡單的工具。
- BaseTool:適合需要更多自定義邏輯的工具。
- StructuredTool:適合需要嚴格輸入驗證的工具。
工具異常處理方案 (ToolException)
如何使用函數進行異常處理
- 在工具函數中捕獲異常并返回友好的錯誤信息。
- 示例:
from langchain.tools.base import ToolExceptiondef error_handling_tool(input_str: str) -> str:try:# 模擬可能出錯的操作if not input_str:raise ValueError("Input cannot be empty")return f"Processed input: {input_str}"except Exception as e:raise ToolException(f"Error in tool: {e}")
集成到工具中
- 使用
StructuredTool
時,可以在func
中添加異常處理邏輯。 - 示例:
def safe_search_function(query: str) -> str:try:if not query:raise ValueError("Query cannot be empty")return f"Search results for '{query}'"except Exception as e:raise ToolException(f"Search failed: {e}")tool = StructuredTool(name="safe_search",description="Safe search with error handling.",args_schema=SearchInput,func=safe_search_function )
普通調用和Agent調用
普通調用
- 直接調用工具函數。
- 示例:
result = search("Langchain") print(result) # 輸出: Search results for 'Langchain'
Agent調用
- 將工具集成到Agent中,通過Agent調用工具。
- 示例:
from langchain.agents import initialize_agent from langchain.llms import OpenAIllm = OpenAI() tools = [search]agent = initialize_agent(tools, llm, agent="zero-shot-react-description", verbose=True) response = agent.run("What is Langchain?") print(response)
5. 最佳實踐
@tool 裝飾器
- 參數:
- 確保
description
清晰準確。 - 如果工具需要復雜輸入,考慮使用
StructuredTool
。
- 確保
- 異常處理:
- 在工具函數中捕獲所有可能的異常,并拋出
ToolException
。
- 在工具函數中捕獲所有可能的異常,并拋出
BaseTool
- 參數:
- 明確定義
_run
和_arun
方法。 - 使用
args_schema
確保輸入格式正確。
- 明確定義
- 異常處理:
- 在
_run
和_arun
中捕獲異常并拋出ToolException
。
- 在
StructuredTool
- 參數:
- 使用
args_schema
定義輸入參數。 - 確保
func
函數邏輯清晰。
- 使用
- 異常處理:
- 在
func
中捕獲異常并拋出ToolException
。
- 在
綜合建議
- 輸入驗證:始終驗證輸入數據,避免非法輸入導致工具失敗。
- 日志記錄:在工具中添加日志記錄,便于調試和監控。
- 文檔化:為每個工具提供詳細的
description
,幫助模型更好地理解和使用工具。
最佳實踐
文字轉SQL
1. 安裝必要的庫
首先,確保你已經安裝了所需的庫:
pip install langchain sqlalchemy openai
2. 創建 SQL 查詢工具
我們將創建一個自定義的 SQL 查詢工具,該工具可以執行 SQL 查詢并返回結果。這里我們使用 SQLite 數據庫作為示例。
2.1 定義工具類
from langchain.tools import BaseTool
from sqlalchemy import create_engine, textclass SQLQueryTool(BaseTool):name = "sql_query_tool"description = "A tool that executes SQL queries and returns the results."def __init__(self, db_url: str):self.engine = create_engine(db_url)def run(self, query: str) -> str:with self.engine.connect() as connection:result = connection.execute(text(query))rows = result.fetchall()columns = result.keys()return [dict(zip(columns, row)) for row in rows]
2.2 初始化工具
db_url = "sqlite:///example.db" # 替換為你的數據庫 URL
sql_query_tool = SQLQueryTool(db_url)
3. 創建自然語言到 SQL 的轉換工具
我們將使用一個簡單的自然語言處理庫(如 sqlglot
)來將自然語言文本轉換為 SQL 查詢。
3.1 安裝 sqlglot
pip install sqlglot
3.2 定義轉換工具類
import sqlglot
from langchain.tools import BaseToolclass NLtoSQLTool(BaseTool):name = "nl_to_sql_tool"description = "A tool that converts natural language to SQL queries."def run(self, nl_query: str) -> str:try:sql_query = sqlglot.transpile(nl_query, read="english", write="sql")[0]return sql_queryexcept Exception as e:return f"Error converting natural language to SQL: {e}"
3.3 初始化轉換工具
nl_to_sql_tool = NLtoSQLTool()
4. 創建 LangChain 環境
我們將創建一個 LangChain 環境,并將兩個工具添加到其中。
4.1 創建 Agent
我們將使用 OpenAI
的 LLM
和 ReAct
策略來創建一個 Agent。
from langchain.llms import OpenAI
from langchain.agents import initialize_agent, Tool# 初始化 OpenAI LLM
llm = OpenAI(api_key="your_openai_api_key") # 替換為你的 OpenAI API 密鑰# 創建工具列表
tools = [Tool(name=sql_query_tool.name,func=sql_query_tool.run,description=sql_query_tool.description),Tool(name=nl_to_sql_tool.name,func=nl_to_sql_tool.run,description=nl_to_sql_tool.description)
]# 初始化 Agent
agent = initialize_agent(tools, llm, agent="react-docstore", verbose=True)
5. 使用 Agent 執行自然語言查詢
現在我們可以使用這個 Agent 來執行自然語言查詢。
nl_query = "查詢年齡大于25歲的用戶"
response = agent.run(nl_query)
print(response)
6. 完整代碼示例
以下是完整的代碼示例,包含了上述所有步驟。
from langchain.tools import BaseTool
from sqlalchemy import create_engine, text
import sqlglot
from langchain.llms import OpenAI
from langchain.agents import initialize_agent, Tool# 定義 SQL 查詢工具類
class SQLQueryTool(BaseTool):name = "sql_query_tool"description = "A tool that executes SQL queries and returns the results."def __init__(self, db_url: str):self.engine = create_engine(db_url)def run(self, query: str) -> str:with self.engine.connect() as connection:result = connection.execute(text(query))rows = result.fetchall()columns = result.keys()return [dict(zip(columns, row)) for row in rows]# 初始化 SQL 查詢工具
db_url = "sqlite:///example.db" # 替換為你的數據庫 URL
sql_query_tool = SQLQueryTool(db_url)# 定義自然語言到 SQL 的轉換工具類
class NLtoSQLTool(BaseTool):name = "nl_to_sql_tool"description = "A tool that converts natural language to SQL queries."def run(self, nl_query: str) -> str:try:sql_query = sqlglot.transpile(nl_query, read="english", write="sql")[0]return sql_queryexcept Exception as e:return f"Error converting natural language to SQL: {e}"# 初始化自然語言到 SQL 的轉換工具
nl_to_sql_tool = NLtoSQLTool()# 初始化 OpenAI LLM
llm = OpenAI(api_key="your_openai_api_key") # 替換為你的 OpenAI API 密鑰# 創建工具列表
tools = [Tool(name=sql_query_tool.name,func=sql_query_tool.run,description=sql_query_tool.description),Tool(name=nl_to_sql_tool.name,func=nl_to_sql_tool.run,description=nl_to_sql_tool.description)
]# 初始化 Agent
agent = initialize_agent(tools, llm, agent="react-docstore", verbose=True)# 使用 Agent 執行自然語言查詢
nl_query = "查詢年齡大于25歲的用戶"
response = agent.run(nl_query)
print(response)
調用API
1. 自定義插件的基本概念
LangChain 的插件機制允許你通過 Python 類來封裝特定的功能。一個插件通常包含以下幾個部分:
- 初始化 (
__init__
):用于設置插件所需的配置或依賴。 - 核心功能方法:實現插件的核心邏輯。
- 與 LangChain 的集成:通過 LangChain 提供的接口(如
Tool
或Runnable
)將插件注冊到系統中。
2. 創建一個調用外部 API 的插件
假設我們有一個場景:需要調用一個天氣 API 來獲取某個城市的實時天氣信息。我們將創建一個自定義插件來實現這一功能。
步驟 1: 定義插件類
首先,我們需要定義一個 Python 類來封裝調用天氣 API 的邏輯。
import requestsclass WeatherAPIPlugin:def __init__(self, api_key):"""初始化插件,設置 API 密鑰。:param api_key: 天氣 API 的密鑰"""self.api_key = api_keyself.base_url = "https://api.weatherapi.com/v1/current.json"def get_weather(self, city):"""獲取指定城市的實時天氣信息。:param city: 城市名稱:return: 天氣信息的字符串描述"""params = {"key": self.api_key,"q": city}try:response = requests.get(self.base_url, params=params)response.raise_for_status() # 檢查請求是否成功data = response.json()weather_info = (f"當前 {city} 的天氣情況:\n"f"溫度: {data['current']['temp_c']}°C\n"f"濕度: {data['current']['humidity']}%\n"f"天氣狀況: {data['current']['condition']['text']}")return weather_infoexcept requests.exceptions.RequestException as e:return f"無法獲取天氣信息: {str(e)}"
步驟 2: 將插件封裝為 LangChain 的 Tool
LangChain 提供了 Tool
類,用于將自定義功能集成到鏈式邏輯中。我們需要將 WeatherAPIPlugin
的功能封裝為一個 Tool
。
from langchain.tools import Tool# 假設你的 API 密鑰如下
API_KEY = "your_weather_api_key_here"# 實例化插件
weather_plugin = WeatherAPIPlugin(api_key=API_KEY)# 將插件封裝為 LangChain 的 Tool
weather_tool = Tool(name="Weather API Tool",func=weather_plugin.get_weather,description="獲取指定城市的實時天氣信息。輸入應為城市名稱,例如 '北京'。"
)
步驟 3: 使用插件
現在我們可以將這個插件集成到 LangChain 的工作流中。以下是一個簡單的示例,展示如何調用插件并獲取天氣信息。
from langchain.agents import initialize_agent, AgentType
from langchain.llms import OpenAI# 初始化 LLM(這里使用 OpenAI 的 GPT 模型)
llm = OpenAI(temperature=0, openai_api_key="your_openai_api_key_here")# 初始化代理(Agent),并將插件添加到工具列表中
agent = initialize_agent(tools=[weather_tool],llm=llm,agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION,verbose=True
)# 調用插件
response = agent.run("請告訴我北京的天氣情況。")
print(response)
3. 示例運行結果
假設天氣 API 返回的數據如下:
{"current": {"temp_c": 15,"humidity": 60,"condition": {"text": "晴朗"}}
}
運行上述代碼后,輸出可能如下:
當前 北京 的天氣情況:
溫度: 15°C
濕度: 60%
天氣狀況: 晴朗
智能家居插件
1. 背景知識:LangChain 的 Agent 和 Tool
LangChain 提供了一個靈活的架構,允許我們定義 Tool
(工具)和 Agent
(代理)。Tool
是封裝特定功能的模塊,而 Agent
則負責根據用戶輸入選擇合適的 Tool
并執行任務。
對于家庭硬件的控制,我們可以將硬件接口封裝為一個 Tool
,然后通過 LangChain 的 Agent
來調用它。
2. 家庭硬件的典型場景
假設你有一個家庭自動化系統,其中包含以下硬件:
- 燈光控制器:可以打開或關閉燈光。
- 溫度傳感器:可以讀取當前室內溫度。
- 窗簾控制器:可以打開或關閉窗簾。
我們將這些硬件的功能封裝為 LangChain 的 Tool
,并通過自然語言交互來控制它們。
3. 創建自定義插件
3.1 硬件接口模擬
為了演示方便,我們假設有一個 Python API 可以與家庭硬件通信。以下是一個簡單的模擬接口:
class HomeHardwareAPI:def __init__(self):self.light_status = "off"self.temperature = 22.5 # 模擬當前溫度self.curtain_status = "closed"def toggle_light(self, action):if action.lower() == "on":self.light_status = "on"return "Light turned on."elif action.lower() == "off":self.light_status = "off"return "Light turned off."else:return "Invalid action."def get_temperature(self):return f"Current temperature is {self.temperature}°C."def control_curtains(self, action):if action.lower() == "open":self.curtain_status = "open"return "Curtains opened."elif action.lower() == "close":self.curtain_status = "closed"return "Curtains closed."else:return "Invalid action."
3.2 封裝為 LangChain 工具
接下來,我們將上述硬件接口封裝為 LangChain 的 Tool
:
from langchain.agents import Tool
from langchain.chains.conversation.memory import ConversationBufferMemory
from langchain.chat_models import ChatOpenAI
from langchain.agents import initialize_agent# 假設我們已經有一個硬件 API 實例
home_hardware_api = HomeHardwareAPI()# 定義工具函數
def toggle_light(action):return home_hardware_api.toggle_light(action)def get_temperature():return home_hardware_api.get_temperature()def control_curtains(action):return home_hardware_api.control_curtains(action)# 將工具封裝為 LangChain 的 Tool
tools = [Tool(name="Toggle Light",func=lambda action: toggle_light(action),description="Use this tool to turn the light on or off. Input should be 'on' or 'off'."),Tool(name="Get Temperature",func=get_temperature,description="Use this tool to get the current room temperature."),Tool(name="Control Curtains",func=lambda action: control_curtains(action),description="Use this tool to open or close the curtains. Input should be 'open' or 'close'.")
]
4. 初始化 Agent
LangChain 的 Agent
負責解析用戶的自然語言輸入并調用相應的 Tool
。以下是初始化 Agent
的代碼:
# 初始化對話記憶
memory = ConversationBufferMemory(memory_key="chat_history")# 使用 OpenAI 的 GPT-3.5-turbo 模型
llm = ChatOpenAI(temperature=0)# 初始化 Agent
agent_chain = initialize_agent(tools, llm, agent="chat-conversational-react-description", verbose=True, memory=memory
)
5. 實際場景調用
5.1 用戶輸入示例
假設用戶通過自然語言與系統交互,以下是一些可能的輸入及其響應:
# 示例 1: 打開燈光
response = agent_chain.run("Please turn the light on.")
print(response) # 輸出: Light turned on.# 示例 2: 獲取當前溫度
response = agent_chain.run("What is the current temperature?")
print(response) # 輸出: Current temperature is 22.5°C.# 示例 3: 打開窗簾
response = agent_chain.run("Can you open the curtains?")
print(response) # 輸出: Curtains opened.# 示例 4: 關閉燈光
response = agent_chain.run("Turn the light off.")
print(response) # 輸出: Light turned off.
6. 運行結果分析
- 當用戶輸入“Please turn the light on.”時,
Agent
會識別出這是對燈光的操作請求,并調用toggle_light
工具。 - 當用戶輸入“What is the current temperature?”時,
Agent
會調用get_temperature
工具返回當前溫度。 - 類似地,其他命令也會被正確解析并執行。
7. 擴展功能
7.1 添加更多硬件支持
如果需要支持更多的硬件(例如空調、音響等),只需擴展 HomeHardwareAPI
類并添加相應的 Tool
。
7.2 集成真實硬件
在實際應用中,你可以通過 MQTT、HTTP API 或其他協議與真實硬件通信。例如:
- 使用 MQTT 訂閱/發布消息來控制燈光和窗簾。
- 通過 HTTP 請求獲取傳感器數據。
7.3 自然語言優化
為了讓 Agent
更好地理解復雜的用戶輸入,可以訓練一個定制化的語言模型,或者使用更高級的提示工程技巧。
8. 總結
通過 LangChain 的 Tool
和 Agent
,我們可以輕松實現家庭硬件的智能化控制。本文展示了如何將硬件接口封裝為 LangChain 的工具,并通過自然語言交互調用這些工具。希望這個示例能幫助你更好地理解和應用 LangChain!
內置Tools
Langchain 內置工具介紹
Langchain 提供了豐富的內置工具,這些工具分為兩類:
langchain.tools
:核心庫中的工具。langchain_community.tools
:社區擴展的工具。
1. AI
工具 (生成文本)
簡介
- 使用 LLM 生成文本。
- 常用于回答問題、生成內容等。
代碼示例
from langchain.tools import AI
from langchain.llms import OpenAIllm = OpenAI(temperature=0)
ai_tool = AI(name="ai", llm=llm, description="Generates text using an LLM.")response = ai_tool.run("Write a short story about a cat.")
print(response)
2. Wikipedia
工具 (搜索維基百科)
簡介
- 搜索維基百科以獲取信息。
- 適合需要權威知識的任務。
代碼示例
from langchain.tools import WikipediaQueryRun
from langchain.utilities import WikipediaAPIWrapperwiki = WikipediaAPIWrapper()
wikipedia_tool = WikipediaQueryRun(api_wrapper=wiki, name="wikipedia")response = wikipedia_tool.run("Python programming language")
print(response)
3. Arxiv
工具 (搜索學術論文)
簡介
- 搜索 Arxiv 上的學術論文。
- 適合科研場景。
代碼示例
from langchain.tools import ArxivQueryRun
from langchain.utilities import ArxivAPIWrapperarxiv = ArxivAPIWrapper()
arxiv_tool = ArxivQueryRun(api_wrapper=arxiv, name="arxiv")response = arxiv_tool.run("machine learning")
print(response)
4. SerpAPI
工具 (搜索引擎)
簡介
- 使用 SerpAPI 搜索網絡信息。
- 需要 API 密鑰。
代碼示例
from langchain.tools import SerpAPIWrapperserp_api_key = "your_serp_api_key"
search = SerpAPIWrapper(serpapi_api_key=serp_api_key)response = search.run("LangChain tutorial")
print(response)
5. GoogleSearch
工具 (谷歌搜索)
簡介
- 使用 Google Custom Search API 搜索信息。
- 需要 API 密鑰和搜索引擎 ID。
代碼示例
from langchain.tools import GoogleSearchResultsgoogle_api_key = "your_google_api_key"
search_engine_id = "your_search_engine_id"search = GoogleSearchResults(api_key=google_api_key, k=3, cx=search_engine_id)
response = search.run("LangChain examples")
print(response)
6. DuckDuckGoSearch
工具 (DuckDuckGo 搜索)
簡介
- 使用 DuckDuckGo 搜索信息。
- 不需要 API 密鑰。
代碼示例
from langchain.tools import DuckDuckGoSearchRunduckduckgo_tool = DuckDuckGoSearchRun()response = duckduckgo_tool.run("LangChain documentation")
print(response)
7. SQLDatabase
工具 (數據庫查詢)
簡介
- 查詢 SQL 數據庫。
- 需要連接到數據庫。
代碼示例
from langchain.tools import SQLDatabaseTool
from langchain.utilities import SQLDatabasedb = SQLDatabase.from_uri("sqlite:///example.db")
sql_tool = SQLDatabaseTool(db=db, name="sql_database")response = sql_tool.run("SELECT * FROM users LIMIT 5;")
print(response)
8. YouTubeSearch
巐具 (YouTube 搜索)
簡介
- 搜索 YouTube 視頻。
- 需要 API 密鑰。
代碼示例
from langchain.tools import YouTubeSearchToolyoutube_tool = YouTubeSearchTool()response = youtube_tool.run("LangChain tutorial")
print(response)
9. FileManagement
工具 (文件管理)
簡介
- 管理本地或遠程文件。
- 支持讀取、寫入和刪除文件。
代碼示例
from langchain.tools.file_management import ReadFileTool, WriteFileTool# 寫入文件
write_tool = WriteFileTool()
write_tool.run("example.txt", "Hello, LangChain!")# 讀取文件
read_tool = ReadFileTool()
content = read_tool.run("example.txt")
print(content)
10. HumanInput
工具 (人工輸入)
簡介
- 請求人工輸入。
- 適用于需要用戶干預的場景。
代碼示例
from langchain.tools import HumanInputRunhuman_tool = HumanInputRun()response = human_tool.run("What is your opinion on this?")
print(response)
總結
工具名稱 | 主要用途 |
---|---|
AI | 生成文本 |
Wikipedia | 搜索維基百科 |
Arxiv | 搜索學術論文 |
SerpAPI | 使用 SerpAPI 搜索網絡信息 |
GoogleSearch | 使用 Google 搜索信息 |
DuckDuckGoSearch | 使用 DuckDuckGo 搜索信息 |
SQLDatabase | 查詢 SQL 數據庫 |
YouTubeSearch | 搜索 YouTube 視頻 |
FileManagement | 文件管理 |
HumanInput | 請求人工輸入 |
內置工具包
內置工具包的使用 (langchain_community.agent_toolkits
)
langchain_community.agent_toolkits
提供了一系列預定義的工具包(toolkits),這些工具包將多個相關工具組合在一起,方便快速構建特定領域的 Agent
1. Zapier Toolkit (集成 Zapier 自動化工具)
簡介
- 使用 Zapier API 調用各種自動化任務。
- 需要 Zapier 的 API 密鑰。
代碼示例
from langchain_community.agents.agent_toolkits import ZapierToolkit
from langchain_community.utilities.zapier import ZapierNLAWrapper# 初始化 Zapier NLA Wrapper
zapier = ZapierNLAWrapper()# 創建 Zapier Toolkit
toolkit = ZapierToolkit.from_zapier_nla_wrapper(zapier)# 查看工具包中的工具
print(toolkit.get_tools())
2. Conversational Agent Toolkit (對話型 Agent 工具包)
簡介
- 專為對話型 Agent 設計。
- 包含問答、搜索、生成等工具。
代碼示例
from langchain_community.agents.agent_toolkits import create_conversational_react_agent
from langchain_community.tools import AI, WikipediaQueryRun
from langchain_community.utilities.wikipedia import WikipediaAPIWrapper
from langchain.llms import OpenAI# 初始化 LLM 和工具
llm = OpenAI(temperature=0)
wiki = WikipediaAPIWrapper()
tools = [AI(name="ai", llm=llm, description="Generates text using an LLM."),WikipediaQueryRun(api_wrapper=wiki, name="wikipedia")]# 創建對話型 Agent
agent = create_conversational_react_agent(llm, tools)# 運行 Agent
response = agent.run("What is the capital of France?")
print(response)
3. SQL Database Toolkit (SQL 數據庫工具包)
簡介
- 用于查詢 SQL 數據庫。
- 支持 SQLite、PostgreSQL 等數據庫。
代碼示例
from langchain_community.agents.agent_toolkits import SQLDatabaseToolkit
from langchain_community.utilities.sql_database import SQLDatabase
from langchain_community.agents.agent_toolkits import create_sql_agent
from langchain.llms import OpenAI# 連接數據庫
db = SQLDatabase.from_uri("sqlite:///example.db")# 創建 SQL Toolkit
toolkit = SQLDatabaseToolkit(db=db)# 創建 SQL Agent
agent = create_sql_agent(llm=OpenAI(temperature=0),toolkit=toolkit,verbose=True
)# 查詢數據庫
response = agent.run("How many users are in the database?")
print(response)
4. GitHub Toolkit (GitHub 工具包)
簡介
- 用于與 GitHub 交互。
- 支持查詢倉庫、提交、Issues 等。
代碼示例
from langchain_community.agents.agent_toolkits import GitHubToolkit
from langchain_community.utilities.github import GitHubAPIWrapper# 初始化 GitHub API Wrapper
github = GitHubAPIWrapper()# 創建 GitHub Toolkit
toolkit = GitHubToolkit(github_api_wrapper=github)# 查看工具包中的工具
print(toolkit.get_tools())
5. VectorStore Toolkit (向量存儲工具包)
簡介
- 用于與向量數據庫交互。
- 常用于語義搜索和知識庫管理。
代碼示例
from langchain_community.agents.agent_toolkits import VectorStoreToolkit
from langchain_community.vectorstores import Chroma
from langchain_community.embeddings import OpenAIEmbeddings
from langchain_community.agents.agent_toolkits import create_vectorstore_agent
from langchain.llms import OpenAI# 初始化向量存儲
vectorstore = Chroma(embedding_function=OpenAIEmbeddings())# 創建 VectorStore Toolkit
toolkit = VectorStoreToolkit(vectorstore=vectorstore)# 創建 VectorStore Agent
agent = create_vectorstore_agent(llm=OpenAI(temperature=0),toolkit=toolkit,verbose=True
)# 搜索向量數據庫
response = agent.run("What is the most relevant document to 'LangChain'?")
print(response)
6. YouTube Toolkit (YouTube 工具包)
簡介
- 用于與 YouTube 交互。
- 支持搜索視頻、獲取視頻信息等。
代碼示例
from langchain_community.agents.agent_toolkits import YouTubeToolkit
from langchain_community.utilities.youtube import YouTubeAPIWrapper# 初始化 YouTube API Wrapper
youtube = YouTubeAPIWrapper()# 創建 YouTube Toolkit
toolkit = YouTubeToolkit(youtube=youtube)# 查看工具包中的工具
print(toolkit.get_tools())
7. SerpAPI Toolkit (搜索引擎工具包)
簡介
- 用于搜索網絡信息。
- 支持 Google、Bing 等搜索引擎。
代碼示例
from langchain_community.agents.agent_toolkits import SerpAPIToolkit
from langchain_community.utilities.serpapi import SerpAPIWrapper# 初始化 SerpAPI Wrapper
serpapi = SerpAPIWrapper(serpapi_api_key="your_serp_api_key")# 創建 SerpAPI Toolkit
toolkit = SerpAPIToolkit(serpapi_wrapper=serpapi)# 查看工具包中的工具
print(toolkit.get_tools())
8. File Management Toolkit (文件管理工具包)
簡介
- 用于管理本地或遠程文件。
- 支持讀取、寫入和刪除文件。
代碼示例
from langchain_community.agents.agent_toolkits import FileManagementToolkit# 創建 File Management Toolkit
toolkit = FileManagementToolkit(root_dir="./files")# 查看工具包中的工具
print(toolkit.get_tools())
總結
工具包名稱 | 主要用途 |
---|---|
Zapier Toolkit | 集成 Zapier 自動化任務 |
Conversational Agent Toolkit | 對話型 Agent 工具包 |
SQL Database Toolkit | 查詢 SQL 數據庫 |
GitHub Toolkit | 與 GitHub 交互 |
VectorStore Toolkit | 向量數據庫交互 |
YouTube Toolkit | 與 YouTube 交互 |
SerpAPI Toolkit | 搜索引擎工具包 |
File Management Toolkit | 文件管理 |