在 LangChain 中,代理(Agent)可以通过工具(Tools)与外部世界交互,执行诸如搜索、计算、数据查询等操作。langchain_community.agent_toolkits.load_tools
函数用于加载 LangChain 提供的预定义工具,这些工具可以通过 load_tools
函数集成到代理中。以下基于 LangChain 0.3.x 和官方文档(https://python.langchain.com/docs/integrations/tools/),,详细列出代理支持的工具及其功能,并提供代码示例。
代理支持的工具列表
LangChain 提供了丰富的工具集成,涵盖搜索、数据查询、文件管理、代码执行等场景。以下是 load_tools
支持的常用工具(截至 LangChain 0.3.x),根据 官方工具集成文档 和 langchain_community
源代码整理:
1. 搜索工具
-
wikipedia
- 功能:查询 Wikipedia 内容,支持通用知识问答。
- 依赖:
pip install wikipedia
- 输入:字符串查询
- 输出:Wikipedia 页面摘要
- 适用场景:历史事件、人物、地点等知识查询
- 示例工具名称:
wikipedia
-
serpapi
- 功能:通过 SerpAPI 进行 Google 搜索,获取实时网络信息。
- 依赖:
pip install google-search-results
和 SerpAPI 密钥 - 输入:字符串查询
- 输出:搜索结果摘要
- 适用场景:实时新闻、天气、趋势等
- 示例工具名称:
serpapi
-
duckduckgo
- 功能:通过 DuckDuckGo 进行隐私优先的网络搜索。
- 依赖:
pip install duckduckgo-search
- 输入:字符串查询
- 输出:搜索结果
- 适用场景:隐私敏感的搜索任务
- 示例工具名称:
duckduckgo-search
-
tavily_search
- 功能:使用 Tavily 搜索 API,专为 LLM 优化的搜索。
- 依赖:
pip install tavily-python
和 Tavily API 密钥 - 输入:字符串查询
- 输出:优化的搜索结果
- 适用场景:高效的网络信息检索
- 示例工具名称:
tavily-search
-
exa_search
- 功能:使用 Exa(原 Metaphor Search)进行语义搜索,适合 LLM 的文档检索。
- 依赖:
pip install exa-py
和 Exa API 密钥 - 输入:字符串查询
- 输出:清洗后的 HTML 内容
- 适用场景:学术或专业文档搜索
- 示例工具名称:
exa_search
2. 数据和 API 工具
-
openweathermap
- 功能:查询 OpenWeatherMap API 的天气信息。
- 依赖:
pip install pyowm
和 OpenWeatherMap API 密钥 - 输入:城市名称
- 输出:天气数据(如温度、湿度)
- 适用场景:实时天气查询
- 示例工具名称:
openweathermap
-
dataforseo
- 功能:通过 DataForSEO API 获取 SEO 和数字营销数据。
- 依赖:
pip install dataforseo-client
和 DataForSEO API 密钥 - 输入:SEO 查询
- 输出:SEO 数据
- 适用场景:市场分析、关键词研究
- 示例工具名称:
dataforseo
-
pubmed
- 功能:查询 PubMed 数据库的生物医学文献。
- 依赖:
pip install biopython
- 输入:文献查询
- 输出:文献引用和摘要
- 适用场景:医学研究、学术查询
- 示例工具名称:
pubmed
-
reddit_search
- 功能:搜索 Reddit 帖子和评论。
- 依赖:
pip install praw
和 Reddit API 凭证 - 输入:搜索查询
- 输出:Reddit 帖子摘要
- 适用场景:社交媒体分析
- 示例工具名称:
reddit-search
3. 代码和计算工具
-
python_repl
- 功能:执行 Python 代码,适合动态计算或脚本运行。
- 依赖:无(内置 Python 解释器)
- 输入:Python 代码字符串
- 输出:代码执行结果
- 适用场景:数学计算、数据处理
- 示例工具名称:
python_repl
-
wolfram-alpha
- 功能:通过 Wolfram Alpha API 进行复杂计算和知识查询。
- 依赖:
pip install wolframalpha
和 Wolfram Alpha API 密钥 - 输入:计算或知识查询
- 输出:计算结果或答案
- 适用场景:科学计算、单位转换
- 示例工具名称:
wolfram-alpha
4. 文件和系统工具
- file_management
- 功能:文件操作工具包,包括读取、写入、复制、删除、移动文件等。
- 依赖:
langchain_community.agent_toolkits.FileManagementToolkit
- 输入:文件路径和操作参数
- 输出:操作结果
- 适用场景:本地文件管理(需沙盒环境)
- 示例工具名称:
read_file
、write_file
等(通过FileManagementToolkit
加载)
5. 媒体和生成工具
-
dalle_image_generator
- 功能:使用 OpenAI 的 DALL-E API 生成图像。
- 依赖:
pip install openai
和 OpenAI API 密钥 - 输入:图像描述
- 输出:图像 URL 或数据
- 适用场景:创意内容生成
- 示例工具名称:
dalle_image_generator
-
elevenlabs_text2speech
- 功能:通过 ElevenLabs API 实现文本转语音。
- 依赖:
pip install elevenlabs
和 ElevenLabs API 密钥 - 输入:文本
- 输出:音频文件
- 适用场景:语音生成
- 示例工具名称:
elevenlabs-text2speech
6. 其他工具
-
apify
- 功能:通过 Apify 平台进行网页抓取和自动化任务。
- 依赖:
pip install apify-client
和 Apify API 密钥 - 输入:抓取任务配置
- 输出:网页数据
- 适用场景:数据采集、爬虫
- 示例工具名称:
apify
-
aws_lambda
- 功能:调用 AWS Lambda 函数,执行无服务器计算。
- 依赖:
pip install boto3
和 AWS 凭证 - 输入:Lambda 函数参数
- 输出:函数执行结果
- 适用场景:云端计算
- 示例工具名称:
aws_lambda
-
requests
- 功能:发送 HTTP 请求,获取网页或 API 数据。
- 依赖:
pip install requests
- 输入:URL
- 输出:HTTP 响应内容
- 适用场景:API 调用、网页抓取
- 示例工具名称:
requests_get
、requests_post
-
scenex
- 功能:通过 SceneXplain API 进行图像描述生成。
- 依赖:
pip install scenex
和 SceneXplain API 密钥 - 输入:图像 URL 或数据
- 输出:图像描述
- 适用场景:图像分析
- 示例工具名称:
scenex
-
nuclia
- 功能:通过 Nuclia 索引和搜索非结构化数据(视频、音频、文档)。
- 依赖:
pip install nuclia
和 Nuclia API 密钥 - 输入:查询或数据
- 输出:搜索结果或生成答案
- 适用场景:多模态数据处理
- 示例工具名称:
nuclia
-
oracleai
- 功能:使用 Oracle AI Vector Search 进行语义搜索。
- 依赖:
pip install oracledb
和 Oracle 凭证 - 输入:语义查询
- 输出:相关文档
- 适用场景:企业数据搜索
- 示例工具名称:
oracleai
代码示例
以下是一个使用 load_tools
加载 wikipedia
和 serpapi
工具,并创建代理的示例:
import os
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"
os.environ["SERPAPI_API_KEY"] = "Your SerpAPI Key"
from langchain.agents import initialize_agent, AgentType
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain_openai import ChatOpenAI
# 初始化 LLM
llm = ChatOpenAI(temperature=0, model="gpt-4o-mini")
# 加载工具
tools = load_tools(["wikipedia", "serpapi"], llm=llm)
# 初始化代理
agent = initialize_agent(
tools=tools,
llm=llm,
agent=AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION,
verbose=True
)
# 调用代理
response = agent.invoke({"input": "成都的特色美食是什么?"})
print(response["output"])
输出示例:
成都的特色美食包括麻婆豆腐、辣子鸡、火锅、串串香,以及小吃如担担面、龙抄手和钟水饺。这些菜品以麻辣鲜香著称,深受本地人和游客喜爱。
代码说明
- OpenAI API 密钥:
- 设置
OPENAI_API_KEY
和SERPAPI_API_KEY
,确保工具和模型正常运行。 - 替换为实际密钥。
- 设置
- 工具加载:
- 使用
load_tools(["wikipedia", "serpapi"], llm=llm)
加载工具。 wikipedia
查询知识库,serpapi
获取实时搜索结果。
- 使用
- 代理:
- 使用
initialize_agent
创建 ReAct 代理,AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION
适合聊天模型。
- 使用
- 调用:
- 输入为
{"input": "..."}
,代理根据任务选择工具并生成响应。
- 输入为
LangGraph 替代方案
由于 initialize_agent
不推荐,建议使用 LangGraph 创建代理:
import os
os.environ["OPENAI_API_KEY"] = "Your OpenAI API Key"
os.environ["SERPAPI_API_KEY"] = "Your SerpAPI Key"
from langchain_community.agent_toolkits.load_tools import load_tools
from langchain_openai import ChatOpenAI
from langgraph.prebuilt import create_react_agent
# 初始化 LLM
llm = ChatOpenAI(temperature=0, model="gpt-4o-mini")
# 加载工具
tools = load_tools(["wikipedia", "serpapi"], llm=llm)
# 创建 LangGraph 代理
agent = create_react_agent(llm, tools)
# 调用代理
response = agent.invoke({"messages": [{"role": "human", "content": "成都的特色美食是什么?"}]})
for message in response["messages"]:
if message["role"] == "assistant":
print(message["content"])
输出示例:
成都的特色美食包括麻婆豆腐、辣子鸡、火锅、串串香,以及小吃如担担面、龙抄手和钟水饺。这些菜品以麻辣鲜香著称,深受本地人和游客喜爱。
注意事项
- API 密钥安全:
- 避免硬编码密钥,推荐使用
.env
文件和python-dotenv
:from dotenv import load_dotenv load_dotenv() # 加载 .env 文件中的 OPENAI_API_KEY 和 SERPAPI_API_KEY
- 确保密钥支持指定模型和工具。
- 避免硬编码密钥,推荐使用
- 工具依赖:
- 安装工具所需包(如
wikipedia
、google-search-results
)。 - 某些工具需要额外 API 密钥(如
serpapi
、tavily_search
)。
- 安装工具所需包(如
- 工具选择:
- 根据任务选择工具:知识查询用
wikipedia
,实时信息用serpapi
或tavily_search
,计算用python_repl
。 - 查看完整工具列表:https://python.langchain.com/docs/integrations/tools/ 🔗
- 根据任务选择工具:知识查询用
- LangGraph 迁移:
initialize_agent
适合简单场景,LangGraph 支持状态持久化和复杂工作流。- 参考 LangGraph 迁移指南.
- 安全性:
- 文件管理(
file_management
)和代码执行(python_repl
)工具需在沙盒环境使用,避免安全风险。
- 文件管理(
常见问题
Q1:如何查看所有支持的工具?
A:访问 https://python.langchain.com/docs/integrations/tools/ 获取完整列表,或查看 langchain_community.agent_toolkits.load_tools
源代码。
Q2:可以自定义工具吗?
A:可以,使用 @tool
装饰器或 BaseTool
类定义自定义工具,参考 自定义工具指南。🔗
Q3:工具需要 LLM 吗?
A:某些工具(如 wikipedia
、serpapi
)需要 LLM 优化查询,但其他工具(如 python_repl
)可独立运行。
Q4:如何处理工具调用失败?
A:使用 LangGraph 的错误处理机制,或在代理中设置重试逻辑。
总结
LangChain 代理通过 load_tools
支持的工具包括:
- 搜索:
wikipedia
、serpapi
、duckduckgo
、tavily_search
、exa_search
- 数据和 API:
openweathermap
、dataforseo
、pubmed
、reddit_search
- 代码和计算:
python_repl
、wolfram-alpha
- 文件和系统:
file_management
(含读写、删除等) - 媒体和生成:
dalle_image_generator
、elevenlabs_text2speech
- 其他:
apify
、aws_lambda
、requests
、scenex
、nuclia
、oracleai