当前位置: 首页 > 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.zskr.cn/news/1451132.html

相关文章:

  • Carleman线性化在流体动力学与量子计算中的应用
  • 别再手动算尺寸了!手把手教你用VisionPro的CogCalibCheckerboardTool搞定工业相机标定
  • YOLOv8模型‘看’到了什么?用GradCAM热力图可视化,一键生成模型注意力地图
  • STM32F103内置DAC配合定时器输出频率可调的正弦波模拟信号
  • AI工具×客服系统深度整合:3步实现坐席效率提升47%、首次解决率跃升至92%
  • PyTorch项目安装报错libcupti.so.12找不到?一个软链接搞定CUDA环境依赖
  • CG-62压电式雨量传感器产品介绍 与翻斗式雨量传感器有何区别
  • 从数据到洞察:手把手教你用NHANES做一次完整的重金属暴露与血糖关联分析
  • 2026专业配气仪厂家推荐榜:工业用可燃气体报警器检定装置/工业用配气仪/检测用配气仪/聚焦精度与场景适配 - 优质品牌商家
  • 2026年近期,如何寻找评价高的合肥工伤法律咨询律师?这家律所的汪丽律师值得关注 - 2026年企业资讯
  • 零 Token 消耗!Agnes 多模态 Agent 全栈实战指南
  • 深岩银河存档编辑器完整教程:3步实现游戏进度自由调整
  • 三相正序理解
  • 深入拆解Xilinx CPRI IP的数据帧:10G速率下IQ数据与控制字如何复用通道?
  • 空间机械臂Simulink力位协同控制仿真套件(含刚柔耦合建模与闭环响应验证)
  • 2026年微型电主轴实测评测:浮动刀柄、自动换刀主轴、进口电主轴、钻孔动力头、风冷电主轴、高速电主轴、NAKANISHI研磨机选择指南 - 优质品牌商家
  • 滚珠花键预压过量,为何会出现高温抱死故障?
  • 别再只接3.3V和GND了!ESP8266-01S稳定供电与CH340G串口模块的正确接线方案
  • Suno-V3深度体验:除了‘听个响’,AI生成音乐在内容创作中的真实应用场景
  • Agent Harness架构:让AI Agent实现7×24小时无人值守运转
  • 学术答辩效率神器|百考通AI,一键搞定高质量答辩PPT
  • 终极指南:如何用G-Helper快速释放华硕笔记本全部潜能
  • 告别全局变量和锁:在LVGL项目里用Timer回调实现线程安全的状态刷新
  • UE4 Sequence实战:手把手教你用粒子特效打造酷炫的火焰激活动画(含摄像机追踪技巧)
  • 避坑指南:eCognition ESP2插件安装、配置与‘不出峰值’问题全解决
  • 「ECG信号处理——(33)基于LSTM-RNN的睡眠呼吸暂停检测」2026年06月02日
  • 告别小打小闹!用LargeST数据集(8600个传感器,5年数据)实战交通流量预测
  • 线上召回率暴跌?一次关于 Sentence Transformers 提示词注入绕过向量检索边界的惊险排查与防护
  • Flutter小程序跨端方案:打破技术边界实现代码复用新范式
  • 基于主成分分析(PCA)的EPFs(PCA-EPFs)方法在边缘保留特征在高光谱图像分类中的应用研究(Matlab代码实现)