🛠️ LangChain Tools 实战指南:让 AI 拥有“动手能力”

🛠️ LangChain Tools 实战指南:让 AI 拥有"动手能力"

LangChain 的核心魅力在于它能赋予大语言模型(LLM)"手脚"。通过 Tools(工具),我们可以让 AI 不再局限于文本生成,而是能够执行搜索、计算、查询数据库甚至编写代码。

本文将带你从零开始,掌握 LangChain Tools 的定义、使用以及如何在 Agent 中调用它们。


1. 自定义工具:赋予 AI 专属技能

虽然 LangChain 提供了许多内置工具,但在实际业务中,我们往往需要自定义工具。最推荐的方式是使用 @tool 装饰器,它简洁且功能强大。

关键点: 工具的 docstring(文档字符串)至关重要,因为 LLM 是依靠它来理解工具功能的。

python 复制代码
from langchain_core.tools import tool

@tool
def get_weather(city: str) -> str:
    """获取指定城市的当前天气。
    
    参数:
        city: 城市名称,例如 '北京', '上海'。
    """
    # 模拟数据,实际场景中可替换为 API 调用
    weather_data = {
        "北京": "晴天,25°C,湿度 40%",
        "上海": "多云,28°C,湿度 65%",
        "广州": "小雨,30°C,湿度 85%",
    }
    return weather_data.get(city, f"{city} 暂无天气数据")

@tool
def calculate(expression: str) -> str:
    """计算数学表达式。
    
    参数:
        expression: 数学算式字符串,例如 '2+3*4'。
    """
    try:
        return f"{expression} = {eval(expression)}"
    except Exception as e:
        return f"计算出错: {e}"

注意: 如果你需要更严格的参数校验(例如确保输入是整数),可以结合 PydanticBaseModel 来定义 args_schema


2. 使用内置工具:站在巨人的肩膀上

LangChain 社区维护了丰富的内置工具库,涵盖了搜索、文件系统、代码执行等领域。

常用内置工具一览:

工具名称 功能描述 适用场景
DuckDuckGoSearchRun 免费网络搜索 查询实时新闻、通用知识
PythonREPLTool 执行 Python 代码 数据分析、数学计算
WikipediaQueryRun 维基百科查询 查询百科知识
SQLDatabaseTool 查询 SQL 数据库 企业数据检索

代码示例:使用网络搜索工具

python 复制代码
from langchain_community.tools import DuckDuckGoSearchRun

# 初始化搜索工具
search = DuckDuckGoSearchRun()

# 直接调用
result = search.invoke("LangChain 最新版本发布特性")
print(result)

3. 进阶:在工具中实现实时流输出

对于耗时的操作(如大数据分析或长文本生成),用户往往希望看到进度反馈。LangChain 的 ToolRuntime 允许我们在工具执行过程中发送实时更新。

代码示例:

python 复制代码
from langchain.tools import tool, ToolRuntime

@tool
def analyze_data(query: str, runtime: ToolRuntime) -> str:
    """模拟一个耗时的数据分析工具"""
    writer = runtime.stream_writer
    
    # 发送进度更新
    writer(f"正在连接数据库查询: {query}...")
    # 模拟耗时操作
    import time
    time.sleep(1) 
    writer("数据获取成功,正在分析...")
    
    return f"关于 {query} 的分析结果:数据趋势良好。"

注意: runtime.stream_writer 必须在 LangGraph 的执行上下文中调用才会生效。


4. 核心实战:构建 Agent 自动调用工具

定义好工具后,我们需要一个"大脑"来决定何时使用它们。这就是 Agent 的作用。Agent 会根据用户的输入,自动判断是否需要调用工具、调用哪个工具,并处理返回结果。

我们将使用 create_tool_calling_agent 来构建一个智能助手。

完整代码示例:

python 复制代码
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate, MessagesPlaceholder
from langchain.agents import create_tool_calling_agent, AgentExecutor

# 1. 初始化 LLM (这里以 OpenAI 为例,也可替换为 ChatGLM, Kimi 等)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)

# 2. 准备工具列表
tools = [get_weather, calculate]

# 3. 定义 Agent 的提示词模板
# MessagesPlaceholder 用于存储 Agent 的思考过程(Thought-Action-Observation)
prompt = ChatPromptTemplate.from_messages([
    ("system", "你是一个乐于助人的助手,请尽可能准确地使用工具回答问题。"),
    ("human", "{input}"),
    MessagesPlaceholder(variable_name="agent_scratchpad"),
])

# 4. 创建 Agent
agent = create_tool_calling_agent(llm, tools, prompt)

# 5. 创建执行器
agent_executor = AgentExecutor(
    agent=agent, 
    tools=tools, 
    verbose=True,  # 开启详细日志,方便调试看它是怎么思考的
    max_iterations=5 # 防止死循环
)

# 6. 测试运行
response = agent_executor.invoke({
    "input": "北京今天天气怎么样?另外帮我算一下 15 * 23 + 7 等于多少?"
})

print("最终回答:", response["output"])

运行结果预期: Agent 会先调用 get_weather 查询北京天气,再调用 calculate 计算数学题,最后将两者的结果整合成一句通顺的话回复给你。


5. 生产环境最佳实践

在实际落地 LangChain Tools 时,还需要注意以下几点:

  1. 错误处理: 工具执行可能会失败(如网络超时、API 报错)。在 AgentExecutor 中可以配置 handle_tool_errors,或者在工具函数内部使用 try-except 块来捕获异常,避免整个应用崩溃。
  2. 安全性: 如果使用了 PythonREPLTool 这种可以执行代码的工具,务必注意沙箱隔离,防止恶意代码执行。
  3. 持久化: 如果工具涉及状态存储(如记忆用户偏好),建议使用持久化存储(如 Redis 或 Postgres),而不是仅保存在内存中,以免服务重启后数据丢失。

通过掌握 Tools,你的 LLM 应用将不再是一个只会聊天的"大脑",而是一个能真正解决复杂问题的"智能体"。

相关推荐
gorgeous(๑>؂<๑)2 小时前
【CVPR26-索尼】EW-DETR:通过增量低秩检测Transformer实现动态世界目标检测
人工智能·深度学习·目标检测·计算机视觉·transformer
xianluohuanxiang2 小时前
新能源功率预测的“生死局”:从“能报曲线”到“能做收益”,中间差的不是一点算法
人工智能
码农垦荒笔记2 小时前
Claude Code 2026 年 3 月全面进化:Auto 模式、Computer Use 与云端持续执行重塑 AI 编程工作流
人工智能·ai 编程·claude code·agentic coding·computer use
threerocks2 小时前
【Claude Code 系列课程】01 | Claude Code 架构全览
人工智能·ai编程·claude
熊猫代跑得快2 小时前
Agent 通用架构入门学习
人工智能·agent·智能体
格林威2 小时前
Baumer相机锂电池极片裁切毛刺检测:防止内部短路的 5 个核心方法,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·视觉检测
codeの诱惑3 小时前
推荐算法(三):余弦定理和余弦相似度的关系及公式推导
人工智能·机器学习·推荐算法
三枪一个麻辣烫3 小时前
gemini Adobe Illustrator visio draw.io画图
图像处理·人工智能·甘特图
HIT_Weston3 小时前
32、【Agent】【OpenCode】模型配置(配置 Qwen 模型)
人工智能·agent·opencode