【LangChain】代理(Agent)支持的 工具(Tools)和说明

在 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_filewrite_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_getrequests_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 加载 wikipediaserpapi 工具,并创建代理的示例:

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"])

输出示例

成都的特色美食包括麻婆豆腐、辣子鸡、火锅、串串香,以及小吃如担担面、龙抄手和钟水饺。这些菜品以麻辣鲜香著称,深受本地人和游客喜爱。
代码说明
  1. OpenAI API 密钥
    • 设置 OPENAI_API_KEYSERPAPI_API_KEY,确保工具和模型正常运行。
    • 替换为实际密钥。
  2. 工具加载
    • 使用 load_tools(["wikipedia", "serpapi"], llm=llm) 加载工具。
    • wikipedia 查询知识库,serpapi 获取实时搜索结果。
  3. 代理
    • 使用 initialize_agent 创建 ReAct 代理,AgentType.CHAT_ZERO_SHOT_REACT_DESCRIPTION 适合聊天模型。
  4. 调用
    • 输入为 {"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"])

输出示例

成都的特色美食包括麻婆豆腐、辣子鸡、火锅、串串香,以及小吃如担担面、龙抄手和钟水饺。这些菜品以麻辣鲜香著称,深受本地人和游客喜爱。

注意事项

  1. API 密钥安全
    • 避免硬编码密钥,推荐使用 .env 文件和 python-dotenv
      from dotenv import load_dotenv
      load_dotenv()  # 加载 .env 文件中的 OPENAI_API_KEY 和 SERPAPI_API_KEY
      
    • 确保密钥支持指定模型和工具。
  2. 工具依赖
    • 安装工具所需包(如 wikipediagoogle-search-results)。
    • 某些工具需要额外 API 密钥(如 serpapitavily_search)。
  3. 工具选择
  4. LangGraph 迁移
    • initialize_agent 适合简单场景,LangGraph 支持状态持久化和复杂工作流。
    • 参考 LangGraph 迁移指南.
  5. 安全性
    • 文件管理(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:某些工具(如 wikipediaserpapi)需要 LLM 优化查询,但其他工具(如 python_repl)可独立运行。

Q4:如何处理工具调用失败?
A:使用 LangGraph 的错误处理机制,或在代理中设置重试逻辑。


总结

LangChain 代理通过 load_tools 支持的工具包括:

  • 搜索wikipediaserpapiduckduckgotavily_searchexa_search
  • 数据和 APIopenweathermapdataforseopubmedreddit_search
  • 代码和计算python_replwolfram-alpha
  • 文件和系统file_management(含读写、删除等)
  • 媒体和生成dalle_image_generatorelevenlabs_text2speech
  • 其他apifyaws_lambdarequestsscenexnucliaoracleai
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值