<?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%8F%8D%E9%A6%88%E9%97%AD%E7%8E%AF/</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%8F%8D%E9%A6%88%E9%97%AD%E7%8E%AF/index.xml" rel="self" type="application/rss+xml"/><item><title>第5章：工具调度算法</title><link>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-05/</link><pubDate>Tue, 09 Jun 2026 00:00:00 +0800</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/aiagentalgorithm/chapter-05/</guid><description>&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;When a tool is called, the real challenge isn&amp;rsquo;t executing it — it&amp;rsquo;s everything that happens before and after.&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="51-问题引入"&gt;5.1 问题引入&lt;/h2&gt;
&lt;p&gt;当LLM生成一段包含 &lt;code&gt;tool_use&lt;/code&gt; 块的响应——例如&amp;quot;我需要读取文件 &lt;code&gt;src/main.ts&lt;/code&gt;&amp;quot;——系统面临一连串精密的调度决策：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;工具发现&lt;/strong&gt;：从40余个注册工具中，根据名称（或别名）精确定位到 &lt;code&gt;FileReadTool&lt;/code&gt;；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;输入验证&lt;/strong&gt;：用 Zod Schema 验证 LLM 生成的参数是否合法——模型并不总能生成正确的类型；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;权限裁决&lt;/strong&gt;：经过 PreToolUse Hook → 规则匹配 → 分类器 → 用户交互 的多级权限链，决定是否允许执行；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;并发编排&lt;/strong&gt;：如果 LLM 同时请求了5次文件读取和1次写入，系统需要判断哪些可以并行、哪些必须串行；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;流式执行&lt;/strong&gt;：工具在执行过程中通过 AsyncGenerator 逐步报告进度，而非等到完成才返回；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;结果注入&lt;/strong&gt;：将工具执行结果编排为 &lt;code&gt;tool_result&lt;/code&gt; 消息，按正确顺序注入回消息流，形成下一轮对话的上下文；&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;推测执行&lt;/strong&gt;：在用户还未确认提示建议时，系统就在后台预执行可能的工具调用，以减少端到端延迟。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;这不是一个简单的&amp;quot;查表→调用→返回&amp;quot;的过程。它是一个涉及并发控制、流式处理、权限安全、容错回退的完整调度系统。本章将逐一拆解这些算法。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="52-工具注册与发现算法"&gt;5.2 工具注册与发现算法&lt;/h2&gt;
&lt;h3 id="521-注册表的构建"&gt;5.2.1 注册表的构建&lt;/h3&gt;
&lt;p&gt;Claude Code 的工具注册采用&lt;strong&gt;静态声明 + 动态过滤&lt;/strong&gt;的两阶段模型。所有工具在 &lt;code&gt;src/tools.ts&lt;/code&gt; 中被集中声明，形成一个&amp;quot;全量工具池&amp;quot;：&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-gdscript3" data-lang="gdscript3"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;源码位置：&lt;/span&gt;src&lt;span style="color:#f92672"&gt;/&lt;/span&gt;tools&lt;span style="color:#f92672"&gt;.&lt;/span&gt;ts &lt;span style="color:#960050;background-color:#1e0010"&gt;—&lt;/span&gt; getAllBaseTools()
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&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;function getAllBaseTools() -&amp;gt; Tool[]:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; baseTools = [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; AgentTool, BashTool, FileReadTool, FileEditTool,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; FileWriteTool, GlobTool, GrepTool, WebFetchTool,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; WebSearchTool, NotebookEditTool, ...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; // 特性门控：根据环境变量和 feature flag 动态注入
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if feature(&amp;#39;AGENT_TRIGGERS&amp;#39;):
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; baseTools.append(CronCreateTool, CronDeleteTool, CronListTool)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if isWorktreeModeEnabled():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; baseTools.append(EnterWorktreeTool, ExitWorktreeTool)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; if isToolSearchEnabledOptimistic():
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; baseTools.append(ToolSearchTool)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; // ... 更多条件注入
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; return baseTools
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;关键设计决策有三个：&lt;/p&gt;</description></item></channel></rss>