🛠️ 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 应用将不再是一个只会聊天的"大脑",而是一个能真正解决复杂问题的"智能体"。

相关推荐
阿里云大数据AI技术6 分钟前
PAI Physical AI Notebook详解8:Isaac Lab Arena 全身机器人机动+操控工作流
人工智能
高木木的博客20 分钟前
数字架构智能化测试平台(1)--总纲
人工智能·python·nginx·架构
wanghowie22 分钟前
11. AI 客服系统架构设计:不是调 API,而是系统工程
人工智能·系统架构
袋鼠云数栈UED团队28 分钟前
基于 OpenSpec 实现规范驱动开发
前端·人工智能
Raink老师30 分钟前
【AI面试临阵磨枪】什么是 Tokenization?子词分词(Subword)的优缺点?
人工智能·ai 面试
迷你可可小生1 小时前
面经(三)
人工智能·rnn·lstm
云烟成雨TD1 小时前
Spring AI Alibaba 1.x 系列【28】Nacos Skill 管理中心功能说明
java·人工智能·spring
AI医影跨模态组学1 小时前
Cancer Letters(IF=10.1)中科院自动化研究所田捷等团队:整合纵向MRI与活检全切片图像用于乳腺癌新辅助治疗反应的早期预测及个体化管理
人工智能·深度学习·论文·医学·医学影像
oioihoii1 小时前
Graphify 简明指南
人工智能
数字供应链安全产品选型1 小时前
AI全生命周期安全:从开发到下线,悬镜安全灵境AIDR如何覆盖智能体每一个环节?
人工智能