[智能体-237]:总结拆分:bind_tools + RunnableLambda(tool_exec) 职责边界,前者是工具的使用说明书,生成调用说明书,后者是工具的调用说明书,并执行。
base_llm.bind_tools的目的是把特定的工具组绑定到特定的大模型上让大模感知到工具链的存在方便大模型生成对工具的调用RunnableLambda可按照大模型指示执行工具的节点并可以被添加到Chain的任何地方调用函数执行大模型的指示。一、bind_tools (base_llm.bind_tools (tools))决策层、指令下发方CPU 挂载外设清单核心职责只负责「让模型认识工具、产出调用指令」仅挂载工具描述name/desc/jsonSchema不携带工具函数代码每次 LLM 网络请求自动携带工具列表赋予大模型“能不能调用、用哪个工具、入参怎么填” 的认知用户提问后由 LLM 自主决策不用工具 → 返回普通 content需要工具 → 输出标准化tool_calls调用指令不执行任何函数、不碰本地代码只生产/生成调用指令。一句话bind_tools 给模型装工具使用说明书负责生成调用指令。二、RunnableLambda (tool_exec)执行层、指令落地方外设控制器核心职责接收模型指令、落地运行本地工具函数、回写结果接收上游 LLM 输出的 AIMessage 与内部tool_calls根据工具名称在本地tool_map查找真实 Python 函数入参透传、执行工具结果封装为ToolMessage把「原始对话 模型指令 工具结果」重新组装消息再次送入 LLM 生成最终答案完全不影响大模型的工具认知不知道 LLM 绑定了哪些工具只被动按指令干活。一句话RunnableLambda 工具节点 拿着指示说明书去找真实工具干活落地执行。三、二者在 LCEL 链路的固定协作范式plaintextPrompt(组装输入) | LLM.bind_tools(工具集)(决策生成tool_call) | RunnableLambda(tool_exec)(解析执行工具二次推理)LLM 环节动脑决策、发调用指令tool_exec 节点动手执行、回填结果 二者解耦、可单独替换换一套工具 → 仅修改bind_tools(新工具列表)tool_exec 执行代码完全不动改工具执行前后逻辑加日志、异常捕获→ 只修改 RunnableLambda 内部函数LLM 绑定逻辑不变。四、结合硬件类比复盘bind_toolsCPU 在固件中录入外设硬件参数清单CPU 知道本机有哪些外设RunnableLambda(tool_exec)主板 IO 控制器接收 CPUIO 指令驱动硬件真实读写外设。五、延伸多节点差异化落地同一套tool_exec执行节点可对接多个绑定不同工具组的 LLMLLM_A.bind_tools ([计算器]) → 输出计算指令 → 共用 tool_exec 执行计算器LLM_B.bind_tools ([字符统计]) → 输出统计指令 → 共用 tool_exec 执行字符函数执行逻辑一份复用工具认知随各个 LLM 自由绑定正是 LCEL 解耦设计精髓。