<?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 大飞的博客</title>
    <link>https://www.dafei.me/tags/%E9%87%8D%E6%9E%84/</link>
    <description>Recent content in 重构 on 大飞的博客</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 02 Jun 2026 03:00:00 +0000</lastBuildDate>
    <atom:link href="https://www.dafei.me/tags/%E9%87%8D%E6%9E%84/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>tclaw（三）：重构——换一种方式让 Agent 协作</title>
      <link>https://www.dafei.me/posts/tclaw-03-refactor-subagent/</link>
      <pubDate>Tue, 02 Jun 2026 03:00:00 +0000</pubDate>
      <guid>https://www.dafei.me/posts/tclaw-03-refactor-subagent/</guid>
      <description>&lt;h2 id=&#34;问题出在哪里&#34;&gt;问题出在哪里&lt;/h2&gt;
&lt;p&gt;消息总线那套方案放弃之后，我坐下来想了一下，问题到底出在哪。&lt;/p&gt;
&lt;p&gt;根本原因是：消息总线是对等的，每个 bot 都可以给任何人发消息。这种自由度在人类团队里没问题，因为人有判断力，知道什么时候该说话、什么时候不该插嘴。但 LLM 不一样，它的&amp;quot;判断&amp;quot;是概率性的，今天遵守规则，明天又忘了。你加再多提示词约束它，它该乱的时候还是会乱。&lt;/p&gt;
&lt;p&gt;既然对等通信管不住，那就换成单向调用——上级调下级，下级只干自己的事，不主动找别人。&lt;/p&gt;
&lt;h2 id=&#34;新的设计&#34;&gt;新的设计&lt;/h2&gt;
&lt;p&gt;重构后的 tclaw，多 agent 协作的方式变成了这样：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;list_categories → list_agents → run_agent
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;用户或者顶层 agent 先用 &lt;code&gt;list_categories&lt;/code&gt; 看看现在有哪些领域，再用 &lt;code&gt;list_agents&lt;/code&gt; 列出某个领域下的所有 agent，然后用 &lt;code&gt;run_agent&lt;/code&gt; 调用具体的 agent 去做事。&lt;/p&gt;
&lt;p&gt;就像公司里的层级结构：你要找人做事，先找到对应的部门，再找到对应的人，直接下任务。这个人完成任务后把结果交回来，不会自己跑去找别的部门。&lt;/p&gt;
&lt;p&gt;这样一来，协作的控制权始终在调用方手里，被调用的 agent 只负责完成自己的任务，不能主动发起新的协作链路。&lt;/p&gt;
&lt;h2 id=&#34;pcclaw--tclaw&#34;&gt;pcclaw → tclaw&lt;/h2&gt;
&lt;p&gt;这次重构等于把整个架构重新来过，代码改动很大，干脆起了个新名字：&lt;strong&gt;tclaw&lt;/strong&gt;。t 是我名字的首字母。&lt;/p&gt;
&lt;p&gt;2026 年 4 月 21 日，tclaw 第一次提交。从 pcclaw 的第一次提交到现在，差不多过了五周。&lt;/p&gt;
&lt;p&gt;新架构稳定多了。agent 之间的协作变得可预测，出了问题也知道去哪里找。当然也不是完美的——有时候顶层 agent 该调用专业 agent 的时候，它自己就把事情做了，没有委托出去。但比起消息总线那套，已经好太多了。&lt;/p&gt;
&lt;h2 id=&#34;同期做的其他事&#34;&gt;同期做的其他事&lt;/h2&gt;
&lt;p&gt;重构完内核，顺手把周边也整理了一遍：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;把引擎抽成独立包，方便后续扩展&lt;/li&gt;
&lt;li&gt;加了 WebSocket server，可以用浏览器访问&lt;/li&gt;
&lt;li&gt;做了 WebGUI，有 tool call 展示&lt;/li&gt;
&lt;li&gt;加了 session 历史侧边栏&lt;/li&gt;
&lt;li&gt;做了 onboarding wizard，引导新用户配置&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;从只能在命令行用的小工具，开始变成一个像样的产品。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
