当前位置: 首页 > news >正文

[智能体-229]:LangChain 工具调用原理 + 两类代码示例(传统 Agent / LCEL 原生 bind_tools,推荐 LCEL)

结合前面硬件类比:

工具调用 = LLM (CPU) 发起网卡网络请求,向外获取外部数据 / 算力

RAG 是本地硬盘读数据,Tool 是跨网拉取外部资源。

一、工具调用核心原理

  1. 工具定义:封装外部能力(查天气、计算器、SQL、HTTP 接口),具备名字、功能描述、入参格式;
  2. 工具绑定 LLM:把工具列表注入大模型LLM 识别用户问题缺信息时,输出结构化工具调用 JSON;工具注入大模型之后,大模型就可以在理解自然语言语义之后知道如何调用外部工具。
  3. 解析 + 执行工具:框架截取模型输出的工具名 + 参数,调用对应函数拿到结果;
  4. 工具结果回灌上下文把返回数据拼入 Prompt,再次送入 LLM 生成最终答案。

二、环境依赖

bash

运行

pip install langchain langchain-openai

python

运行

from langchain_openai import ChatOpenAI from langchain_core.tools import tool from langchain_core.messages import HumanMessage, ToolMessage

方式 1:LCEL 原生工具调用(新项目首选,RISC 思想,无黑盒)

1. 自定义工具(计算器示例)

python

运行

# 装饰器快速定义工具 @tool def calculator(a: float, b: float, op: str) -> float: """ 数学计算器,支持加减乘除 :param a: 第一个数字 :param b: 第二个数字 :param op: 运算符,可选 + - * / """ if op == "+": return a + b elif op == "-": return a - b elif op == "*": return a * b elif op == "/": return a / b else: raise ValueError("运算符非法") tools = [calculator]

2. LLM 绑定工具

python

运行

llm = ChatOpenAI(model="gpt-3.5-turbo", temperature=0) # bind_tools:把工具元数据注入模型,原生输出function_call llm_with_tools = llm.bind_tools(tools)

3. 完整一轮工具调用链路

python

运行

query = "123加456等于多少?" msg = [HumanMessage(content=query)] # 第一步:模型生成工具调用指令,由大模型生成调用指令指示。 ai_msg = llm_with_tools.invoke(msg) msg.append(ai_msg) # 第二步:由Agent负责遍历工具调用、调用执行函数,并把执行的结果添加的消息列表中 for tool_call in ai_msg.tool_calls: name = tool_call["name"] args = tool_call["args"] # 根据名字匹配工具 tool_func = globals()[name] res = tool_func(**args) # 工具执行结果封装成ToolMessage塞回消息列表 msg.append(ToolMessage(content=str(res), tool_call_id=tool_call["id"])) # 第三步:携带工具结果再次调用LLM生成最终答案 final_ans = llm_with_tools.invoke(msg) print(final_ans.content)

输出:

plaintext

123加上456的结果是579。

方式 2:传统 OpenAI Agent(旧版预定义 Chain/CISC 黑盒,老项目维护用)

python

运行

from langchain.agents import AgentExecutor, create_openai_tools_agent prompt = ChatPromptTemplate.from_messages([ ("system", "你是擅长使用工具的助手"), ("user", "{input}") ]) # 构造Agent链 agent = create_openai_tools_agent(llm, tools, prompt) agent_executor = AgentExecutor(agent=agent, tools=tools, verbose=True) res = agent_executor.invoke({"input": "78乘以9等于多少"}) print(res["output"])

三、拓展:多工具混合(计算器 + 查字符串长度)

python

运行

@tool def str_len(s: str) -> int: """获取字符串长度 :param s: 输入字符串 """ return len(s) tools = [calculator, str_len] # 重新绑定工具 llm_with_tools = llm.bind_tools(tools)

提问:"abcdef有几个字符,100除以20是多少",模型会自动拆分两次工具调用。

四、关键知识点(贴合之前架构类比)

  1. LCEL bind_tools:原子化,工具绑定、调用、结果拼接全流程白盒可控(ARM 精简指令);
  2. 传统 AgentExecutor:整套思考 + 调用逻辑内部封装黑盒(x86 CISC 复合指令);
  3. Tool ≈ 网卡外设:不在 LLM 上下文 / 内存 / RAG 硬盘中,需要跨外部系统实时获取数据;
  4. LangGraph 场景:复杂多轮循环工具调用(思考→调用→结果→再思考),用 LangGraph 替代手动循环。

五、生产常用扩展

  1. 第三方工具:LangChain 内置WikipediaQueryRun、DuckDuckGoSearchRun搜索引擎工具;
  2. 工具异常with_fallbacks做工具调用失败降级;
  3. 流式工具调用astream分段捕获模型输出的工具参数。
http://www.jsqmd.com/news/939729/

相关文章:

  • 分子预测与生成模型评估指标详解
  • Carleman线性化在流体动力学与量子计算中的应用
  • 在OKX上跑Crypto高频量化两年,我踩过的那些坑(数据、因子、手续费全解析)
  • ESXi 8.0U3j集成驱动版|2026年5月最新稳定版|家用硬件全能适配,零门槛部署指南
  • 别再手动找元件了!用Access+ODBC为OrCAD CIS搭建本地元器件库(附避坑指南)
  • Vivado硬件管理器里,如何把数字波形变成模拟波形?一个设置搞定
  • 别再让Vue Router的NavigationDuplicated警告烦你了!一个原型方法重写搞定(附源码解析)
  • AI 装修风格推荐器:从照片上传到家具搭配全流程指南
  • 告别串口调试助手乱码!STM32 HAL库下printf重定向的保姆级配置指南(含MicroLIB选择避坑)
  • 别再手动算尺寸了!手把手教你用VisionPro的CogCalibCheckerboardTool搞定工业相机标定
  • 用LMV358M和五阶巴特沃斯滤波器,手把手设计一个工频信号采集前端(附Proteus工程)
  • Claude敏感性分析终极清单:仅限首批200家认证企业的11项未公开评估指标与基线阈值表
  • YOLOv8模型‘看’到了什么?用GradCAM热力图可视化,一键生成模型注意力地图
  • 独家披露:Sora 2艺术复现未公开API调用层协议与motion token embedding映射表(限时开放24小时下载)
  • 终极指南:如何用vscode-plantuml插件快速创建专业UML图
  • 时间价值评估:从个人时薪计算到高效时间投资策略
  • DS4Windows终极指南:3分钟快速实现PS5手柄完美适配PC游戏
  • 告别手搓方程!一个Python正则脚本帮你自动提取CTF逆向中的z3约束条件
  • RAG系统可复现性设计与分布式架构实践
  • 新手福音:用快马AI生成带详解的51单片机LED闪烁入门代码
  • 基于Arduino与Pixy2的嵌入式视觉原型:从颜色识别到游戏交互设计
  • 从“找相似”到“抓重点”:用生活中的例子图解Self-Attention,理解Transformer为何如此强大
  • 2026年深度解析佛山好的家用舒服沙发源头厂家的核心优势与市场价值 - 2026年企业资讯
  • STM32F103内置DAC配合定时器输出频率可调的正弦波模拟信号
  • 用OpenCV和C++手把手实现AVM环视的3D碗型投影(附源码和避坑指南)
  • 魔兽争霸3终极优化指南:5分钟告别卡顿,享受流畅游戏体验
  • AI工具×客服系统深度整合:3步实现坐席效率提升47%、首次解决率跃升至92%
  • 3天彻底掌握Pulover‘s Macro Creator:完全免费的Windows自动化终极工具
  • CG-62压电式雨量传感器产品介绍 与翻斗式雨量传感器有何区别
  • 提升开发效率:用快马AI一键生成多路继电器协同管理代码