【OpenClaw】通过 Nanobot 源码学习架构---(8)Tools
接收模型的工具调用决策模型接收到请求后会进行意图判断与工具选择场景模型响应后续动作需要外部工具返回JSON 格式的工具调用指令包含工具名称与入参进入步骤 3执行工具无需外部工具返回自然语言格式的直接回复流程结束直接呈现给用户模型在此阶段扮演决策者角色它只生成调用指令并不实际执行工具。在应用端执行工具应用程序接收到 JSON 指令后进入工具执行层解析指令中的工具名称与参数在应用端或沙箱环境运行对应工具捕获工具输出结果成功返回数据或失败返回错误信息第二次模型调用获取工具输出后应用程序需要将结果回注上下文再次发起模型调用。此时的消息序列Messages结构为[用户问题] → [模型工具调用指令] → [工具执行结果]这相当于告诉模型你刚才要求执行的操作已完成这是结果请基于这些信息继续推理。接收模型的最终响应模型整合以下信息进行最终推理原始用户问题工具输出结果中间推理过程Chain-of-Thought最终生成自然语言格式的回复直接呈现给用户完成整个交互闭环。流程本质总结轮次角色动作第一轮模型决策是否需要工具 规划调用哪个工具应用端应用执行实际运行工具第二轮模型整合基于结果生成回复我们从 GitHub - shareAI-lab/claw0: 0 - 1 learn OpenClaw: sections to build an claw-AI agent from scratch · GitHub 的文档中也可以窥见端倪。工具 数据 (schema) 处理函数映射表. 模型选一个名字, 你查表执行.TOOLS: JSON schema 字典列表, 告诉模型有哪些工具可用.TOOL_HANDLERS:dict[str, Callable], 将工具名映射到 Python 函数.process_tool_call(): 字典查找 **kwargs分发.内层循环: 模型可能连续调用多个工具, 然后才生成文本.工具结果放在 user 消息中(Anthropic API 的要求).User Input | v messages[] -- LLM API (toolsTOOLS) | stop_reason? / \ end_turn tool_use | | Print for each tool_use block: TOOL_HANDLERS[name](**input) | tool_result | messages[] -- {role:user, content:[tool_result]} | back to LLM -- may chain more tools or end_turn -- Print0x02 核心代码作用与特色总结Nanobot Agent 工具系统的核心实现包括Tool抽象基类定义了 Agent 工具的标准化接口规范名称、描述、参数 Schema、执行逻辑提供通用的参数校验能力基于 JSON Schema和 OpenAI 函数 Schema 转换能力是所有自定义工具的 “模板”保证了工具体系的一致性和可扩展性。所有工具只需实现指定抽象方法即可接入 Agent无需修改核心逻辑同时基类内置通用能力参数校验、Schema 转换减少重复开发。ExecTool工具类基于Tool基类实现的具体工具为 Agent 提供安全可控的 Shell 命令执行能力支持超时控制、工作目录限制、危险命令拦截、路径遍历防护、工作目录限制、允许列表等安全机制既满足 Agent 与系统交互的核心需求又规避了 Shell 执行的典型安全风险。具体如下图所示。0x03 实现3.1 整体逻辑关系图架构图如下工具调用流程如下3.2 TOOLS.mdTOOLS.md 是本地工具提示。脚本存放在哪里哪些命令可用。这样 Agent 就不需要去猜而是确切知道。AGENTS.md 定义行为流程TOOLS.md 定义能力边界。简单说它是智能体的工具箱说明书告诉智能体可以使用哪些工具、怎么用、什么时候用。# Tool Usage Notes Tool signatures are provided automatically via function calling. This file documents non-obvious constraints and usage pat

相关新闻