<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>工具系统 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E5%B7%A5%E5%85%B7%E7%B3%BB%E7%BB%9F/</link><description>Recent content in 工具系统 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><lastBuildDate>Tue, 09 Jun 2026 00:00:00 +0800</lastBuildDate><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E5%B7%A5%E5%85%B7%E7%B3%BB%E7%BB%9F/index.xml" rel="self" type="application/rss+xml"/><item><title>第2章 Agent 的骨架：对象模型</title><link>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-02/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-02/</guid><description>&lt;h2 id="21-问题引入如何让-agent-拥有手脚"&gt;2.1 问题引入：如何让 Agent 拥有&amp;quot;手脚&amp;quot;&lt;/h2&gt;
&lt;p&gt;一个纯粹的大语言模型（LLM），无论多么聪明，都只是一颗&amp;quot;大脑&amp;quot;——它能思考、推理、生成文本，却无法触及真实世界。它读不了磁盘上的文件，执不了终端里的命令，搜不了代码库中的符号。要将这颗大脑变成一个真正能解决问题的 Agent，就必须为它接上&amp;quot;手脚&amp;quot;——一套能够操作外部世界的能力体系。&lt;/p&gt;
&lt;p&gt;这套能力体系在 Claude Code 中被称为&lt;strong&gt;工具（Tool）&lt;/strong&gt;。截至当前版本，Claude Code 内建了约 45 种工具，涵盖以下截然不同的能力域：&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;能力域&lt;/th&gt;
&lt;th&gt;代表性工具&lt;/th&gt;
&lt;th&gt;特征&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;文件操作&lt;/td&gt;
&lt;td&gt;FileReadTool、FileEditTool、FileWriteTool&lt;/td&gt;
&lt;td&gt;输入为文件路径，输出为文件内容或操作状态&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Shell 执行&lt;/td&gt;
&lt;td&gt;BashTool、PowerShellTool&lt;/td&gt;
&lt;td&gt;输入为命令字符串，输出为标准输出流&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;代码搜索&lt;/td&gt;
&lt;td&gt;GrepTool、GlobTool&lt;/td&gt;
&lt;td&gt;输入为正则/通配模式，输出为匹配结果集&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;网络访问&lt;/td&gt;
&lt;td&gt;WebFetchTool、WebSearchTool&lt;/td&gt;
&lt;td&gt;输入为 URL 或查询词，输出为网页内容&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agent 派生&lt;/td&gt;
&lt;td&gt;AgentTool&lt;/td&gt;
&lt;td&gt;输入为任务描述，输出为子 Agent 的执行结果&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;外部协议&lt;/td&gt;
&lt;td&gt;MCPTool&lt;/td&gt;
&lt;td&gt;输入完全由外部服务器定义，输出格式未知&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;用户交互&lt;/td&gt;
&lt;td&gt;AskUserQuestionTool&lt;/td&gt;
&lt;td&gt;输入为问题文本，输出取决于用户回答&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;问题的核心在于：这些工具的输入结构不同（有的是文件路径，有的是 Shell 命令，有的是完全开放的 JSON）、输出类型不同（有的返回纯文本，有的返回二进制图像，有的返回结构化对象）、执行语义不同（有的只读、有的破坏性写入、有的会派生出新的 Agent 循环）、安全要求不同（有的需要沙箱隔离，有的需要用户授权，有的可以自由执行）。&lt;/p&gt;
&lt;p&gt;然而，从调用方——也就是 Agent 主循环——的视角来看，它不关心这些差异。主循环的逻辑永远是：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;收到 LLM 的工具调用请求 → 找到对应工具 → 验证输入 → 检查权限 → 执行 → 返回结果
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这就是本章要探讨的核心设计问题：&lt;strong&gt;如何构建一个统一的工具抽象，使得 45 种截然不同的能力共享同一套接口，让调用方的代码在工具数量翻倍时依然一行不改？&lt;/strong&gt;&lt;/p&gt;
&lt;h2 id="22-算法思想工具多态的四重设计"&gt;2.2 算法思想：工具多态的四重设计&lt;/h2&gt;
&lt;h3 id="221-接口不变性原则"&gt;2.2.1 接口不变性原则&lt;/h3&gt;
&lt;p&gt;在软件工程中，接口不变性（Interface Invariance）是多态设计的基石。其核心命题是：&lt;/p&gt;</description></item></channel></rss>