LangChain AI Agent 工具规范与实战应用
AI Agent 依赖工具来执行超出 LLM 原生能力的任务。 LangChain 框架下的 Tool 规范,包括名称、描述和函数三个核心属性。内容涵盖了外部搜索、文生图、代码执行及 CSV 分析四种常用工具的实现方式,并提供了完整的 Agent 集成代码示例。此外,文章还补充了关于代码执行安全风险、错误处理机制及成本优化的最佳实践建议,帮助开发者构建安全可靠的 AI Agent 应用。

AI Agent 依赖工具来执行超出 LLM 原生能力的任务。 LangChain 框架下的 Tool 规范,包括名称、描述和函数三个核心属性。内容涵盖了外部搜索、文生图、代码执行及 CSV 分析四种常用工具的实现方式,并提供了完整的 Agent 集成代码示例。此外,文章还补充了关于代码执行安全风险、错误处理机制及成本优化的最佳实践建议,帮助开发者构建安全可靠的 AI Agent 应用。

只有让大语言模型(LLM)学会使用工具,才能构建出一系列实用的 AI Agent,从而充分发挥 LLM 的真正实力。本文将深入探讨如何让 AI Agent 调用更多工具,例如外部搜索、CSV 分析、文生图、执行代码等。
LLM 如果没有使用工具的能力,就相当于一个拥有聪明大脑但四肢僵硬的'渐冻人',无法处理实际任务。人类之所以区别于动物,正是因为学会了使用工具。因此,赋予 LLM 使用工具的能力至关重要。
我们需要 LLM 帮助执行各种任务。Tool(工具)就是 LLM 在执行任务过程中能够调用的外部能力。例如:需要检索外部资料时,可以调用检索工具;需要执行一段代码时,可以调用自定义函数去执行。
所有的工具必须遵守一套规范,才能让 LLM 随意调用。为此,LangChain 抽象出一个 Tool 层,只要是遵守这套规范的函数就是 Tool 对象,就可以被 LLM 调用。
Tool 的规范很简单,主要包含三个属性:
只要遵守这个规范就行,使用形式可以有多种,下文的实践代码会介绍到。
让 AI Agent 使用工具,需要定义 Agent 和 AgentExecutor。AgentExecutor 维护了 Tool.name 到 Tool 的 Map 结构。
流程如下:
Tool 的描述)和用户的问题,判断是否需要调用工具。Tool 的名称和调用参数,在映射 Map 中查找 Tool 实例。Tool 实例的 function。自定义 Tool 只需要遵守以上规范即可。下面以几个常用的工具做示例。
下文有些工具用到了 toolkits。toolkits 是 LangChain 提供的工具包,旨在简化使用工具的成本,里面提供了丰富的工具,还在不断叠加,大部分的工具都可以在里面找到。
使用外部搜索工具。本文使用的是 serpapi,它集成了 Google、百度等多家搜索引擎,通过 API 的形式调用,非常方便。
安装依赖:
pip install serpapi
注册账号: 访问 SerpAPI 官网自行注册,通常有免费额度可用。
外部搜索工具定义如下:
from langchain.tools import tool
from langchain_community.utilities import SerpAPIWrapper
@tool
def search(query: str) -> str:
"""只有在需要了解实时信息 或 不知道的事情的时候 才会使用这个工具,需要传入要搜索的内容。"""
serp = SerpAPIWrapper()
result = serp.run(query)
return result
文生图工具是使用 LangChain 社区提供的 DallEAPIWrapper 类。本文使用 OpenAI 的图片生成模型 Dall-E-3。
安装依赖:
pip install openai
具体代码如下:
from langchain.tools import Tool
from langchain_community.utilities.dalle_image_generator import DallEAPIWrapper
dalle_image_generator = Tool(
name="基于 OpenAI Dall-E-3 的图片生成器",
func=DallEAPIWrapper(model="dall-e-3").run,
description="OpenAI DALL-E API 的包装器。当你需要根据描述的文本生成图像时使用此工具,需要传入对于图像的描述。",
)
这里的 DallEAPIWrapper(model="dall-e-3").run 方法就是个函数,实际是去调用了 OpenAI 的接口。
代码执行器工具,可以执行代码或者根据自然语言生成代码。主要使用 LangChain 提供的 PythonREPLTool 和 toolkits。
比如 create_python_agent 就简化了创建 Python 解释器工具的过程。
from langchain_experimental.agents.agent_toolkits import create_python_agent
from langchain_experimental.tools import PythonREPLTool
# 假设 model 已经初始化
python_agent_executor = create_python_agent(
llm=model,
tool=PythonREPLTool(),
verbose=True,
agent_executor_kwargs={"handle_parsing_errors": True},
)
CSV 工具,用来分析 csv 文件。依旧是使用 toolkits 工具包里的 create_csv_agent 函数快速创建工具。
from langchain_experimental.agents.agent_toolkits import create_csv_agent
csv_agent_executor = create_csv_agent(
llm=model,
path="course_price.csv",
verbose=True,
agent_executor_kwargs={"handle_parsing_errors": True},
allow_dangerous_code=True, # 注意安全风险
)
上面介绍了 AI Agent 的常用工具,定义好工具之后,把工具放入到工具集中,最后再定义 Agent 和 AgentExecutor 就算完成了。短短几十行代码,就可以让 LLM 使用这么多工具了。
环境准备: 确保已安装以下库:
pip install langchain langchain-openai langchain-community langchain-experimental serpapi
完整代码如下:
import os
from langchain import hub
from langchain_openai import ChatOpenAI
from langchain.agents import create_structured_chat_agent, AgentExecutor, Tool
from langchain.tools import BaseTool, StructuredTool, tool
from langchain_experimental.agents.agent_toolkits import (
create_python_agent,
create_csv_agent,
)
from langchain_community.utilities import SerpAPIWrapper
from langchain_experimental.tools import PythonREPLTool
from langchain_community.utilities.dalle_image_generator import DallEAPIWrapper
# 需要先安装 serpapi, pip install serpapi,还需要到 https://serpapi.com/ 去注册账号
# SERPAPI_API_KEY 和 OPENAI 相关密钥,建议注册到环境变量
os.environ["SERPAPI_API_KEY"] = os.getenv("SERPAPI_API_KEY", "YOUR_SERPAPI_KEY")
os.environ["OPENAI_API_KEY"] = os.getenv("OPENAI_API_KEY", "YOUR_OPENAI_KEY")
os.environ["OPENAI_API_BASE"] = os.getenv("OPENAI_API_BASE", "https://api.openai.com/v1")
model = ChatOpenAI(model_name="gpt-3.5-turbo")
# 基于 reAct 机制的 Prompt 模板
prompt = hub.pull("hwchase17/structured-chat-agent")
# 各种方式定义工具
# 1. 使用@tool 装饰器,定义搜索工具
@tool
def search(query: str) -> str:
"""只有在需要了解实时信息 或 不知道的事情的时候 才会使用这个工具,需要传入要搜索的内容。"""
serp = SerpAPIWrapper()
result = serp.run(query)
return result
dalle_image_generator = Tool(
name=,
func=DallEAPIWrapper(model=).run,
description=,
)
python_agent_executor = create_python_agent(
llm=model,
tool=PythonREPLTool(),
verbose=,
agent_executor_kwargs={: },
)
csv_agent_executor = create_csv_agent(
llm=model,
path=,
verbose=,
agent_executor_kwargs={: },
allow_dangerous_code=,
)
tool_list = [
search,
dalle_image_generator,
Tool(
name=,
description=,
func=python_agent_executor.invoke,
),
Tool(
name=,
description=,
func=csv_agent_executor.invoke,
),
]
agent = create_structured_chat_agent(
llm=model,
tools=tool_list,
prompt=prompt
)
agent_executor = AgentExecutor.from_agent_and_tools(
agent=agent,
tools=tool_list,
verbose=,
handle_parsing_errors=
)
(agent_executor.invoke({: }))
一起看下使用工具后,reAct 的整个过程。Agent 会根据问题思考是否需要调用工具,如果需要,它会输出 Action 和 Action Input,然后执行工具得到 Observation,最后生成最终答案。
在使用 AI Agent 工具时,安全性是一个不可忽视的问题,特别是涉及代码执行和文件操作时。
在上面的 CSV 分析示例中,我们使用了 allow_dangerous_code=True。这允许 Agent 执行任意 Python 代码。在生产环境中,这可能导致严重的安全漏洞,如数据泄露、服务器入侵等。
建议:
Agent 可能会因为工具返回格式错误或网络超时而陷入死循环。配置 handle_parsing_errors=True 可以帮助 Agent 从解析错误中恢复,但更好的做法是在 Tool 内部增加完善的异常捕获逻辑。
每次调用外部 API(如 SerpAPI、OpenAI)都会产生费用。建议在 Prompt 中明确指示 Agent 仅在必要时调用工具,减少不必要的 Token 消耗和 API 调用次数。
本文主要聊了 AI Agent 的工具规范,以及常用工具的实现。AI Agent 只有借助工具才能发挥威力,从简单的搜索到复杂的代码执行,LangChain 提供了一套完整的解决方案。
通过遵循 Tool 规范,开发者可以快速集成各种外部能力,构建出功能强大的智能体。同时,务必注意代码执行的安全性,合理设计 Prompt 和工具描述,以确保 Agent 的行为符合预期且安全可控。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online