<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://www.anwsome.com//index.php?action=history&amp;feed=atom&amp;title=%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E5%AE%9E%E8%B7%B5%EF%BC%9A%E4%BB%8E%E5%8D%95%E6%89%93%E7%8B%AC%E6%96%97%E5%88%B0%E5%9B%A2%E9%98%9F%E4%BD%9C%E6%88%98%EF%BC%88%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent%29</id>
	<title>多智能体协作实践：从单打独斗到团队作战（构建自己的AI Agent) - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://www.anwsome.com//index.php?action=history&amp;feed=atom&amp;title=%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E5%AE%9E%E8%B7%B5%EF%BC%9A%E4%BB%8E%E5%8D%95%E6%89%93%E7%8B%AC%E6%96%97%E5%88%B0%E5%9B%A2%E9%98%9F%E4%BD%9C%E6%88%98%EF%BC%88%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent%29"/>
	<link rel="alternate" type="text/html" href="http://www.anwsome.com//index.php?title=%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E5%AE%9E%E8%B7%B5%EF%BC%9A%E4%BB%8E%E5%8D%95%E6%89%93%E7%8B%AC%E6%96%97%E5%88%B0%E5%9B%A2%E9%98%9F%E4%BD%9C%E6%88%98%EF%BC%88%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent)&amp;action=history"/>
	<updated>2026-04-15T01:44:12Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>http://www.anwsome.com//index.php?title=%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E5%AE%9E%E8%B7%B5%EF%BC%9A%E4%BB%8E%E5%8D%95%E6%89%93%E7%8B%AC%E6%96%97%E5%88%B0%E5%9B%A2%E9%98%9F%E4%BD%9C%E6%88%98%EF%BC%88%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent)&amp;diff=120&amp;oldid=prev</id>
		<title>Admin：​创建页面，内容为“&lt;blockquote&gt;&quot;任务太大一个人干不完，要能分给队友&quot; —— 持久化队友 + JSONL 邮箱。&lt;/blockquote&gt;前面的子智能体是一次性的：生成、干活、返回摘要、消亡。没有身份，没有跨调用的记忆。  真正的团队协作需要三样东西：  # &#039;&#039;&#039;能跨多轮对话存活的持久智能体&#039;&#039;&#039; # &#039;&#039;&#039;身份和生命周期管理&#039;&#039;&#039; # &#039;&#039;&#039;智能体之间的通信通道&#039;&#039;&#039;  == 一、团队架构 ==  &lt;code&gt;Teammate lifecycle…”</title>
		<link rel="alternate" type="text/html" href="http://www.anwsome.com//index.php?title=%E5%A4%9A%E6%99%BA%E8%83%BD%E4%BD%93%E5%8D%8F%E4%BD%9C%E5%AE%9E%E8%B7%B5%EF%BC%9A%E4%BB%8E%E5%8D%95%E6%89%93%E7%8B%AC%E6%96%97%E5%88%B0%E5%9B%A2%E9%98%9F%E4%BD%9C%E6%88%98%EF%BC%88%E6%9E%84%E5%BB%BA%E8%87%AA%E5%B7%B1%E7%9A%84AI_Agent)&amp;diff=120&amp;oldid=prev"/>
		<updated>2026-03-23T05:04:36Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“&amp;lt;blockquote&amp;gt;&amp;quot;任务太大一个人干不完，要能分给队友&amp;quot; —— 持久化队友 + JSONL 邮箱。&amp;lt;/blockquote&amp;gt;前面的子智能体是一次性的：生成、干活、返回摘要、消亡。没有身份，没有跨调用的记忆。  真正的团队协作需要三样东西：  # &amp;#039;&amp;#039;&amp;#039;能跨多轮对话存活的持久智能体&amp;#039;&amp;#039;&amp;#039; # &amp;#039;&amp;#039;&amp;#039;身份和生命周期管理&amp;#039;&amp;#039;&amp;#039; # &amp;#039;&amp;#039;&amp;#039;智能体之间的通信通道&amp;#039;&amp;#039;&amp;#039;  == 一、团队架构 ==  &amp;lt;code&amp;gt;Teammate lifecycle…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;blockquote&amp;gt;&amp;quot;任务太大一个人干不完，要能分给队友&amp;quot; —— 持久化队友 + JSONL 邮箱。&amp;lt;/blockquote&amp;gt;前面的子智能体是一次性的：生成、干活、返回摘要、消亡。没有身份，没有跨调用的记忆。&lt;br /&gt;
&lt;br /&gt;
真正的团队协作需要三样东西：&lt;br /&gt;
&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;能跨多轮对话存活的持久智能体&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;身份和生命周期管理&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
# &amp;#039;&amp;#039;&amp;#039;智能体之间的通信通道&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== 一、团队架构 ==&lt;br /&gt;
 &amp;lt;code&amp;gt;Teammate lifecycle:&lt;br /&gt;
   spawn -&amp;gt; WORKING -&amp;gt; IDLE -&amp;gt; WORKING -&amp;gt; ... -&amp;gt; SHUTDOWN&lt;br /&gt;
 &lt;br /&gt;
 Communication:&lt;br /&gt;
   .team/&lt;br /&gt;
     config.json           &amp;lt;- 团队名册 + 状态&lt;br /&gt;
     inbox/&lt;br /&gt;
       alice.jsonl         &amp;lt;- 追加式，读取即清空&lt;br /&gt;
       bob.jsonl&lt;br /&gt;
       lead.jsonl&lt;br /&gt;
 &lt;br /&gt;
               +--------+    send(&amp;quot;alice&amp;quot;,&amp;quot;bob&amp;quot;,&amp;quot;...&amp;quot;)    +--------+&lt;br /&gt;
               | alice  | -----------------------------&amp;gt; |  bob   |&lt;br /&gt;
               | loop   |    bob.jsonl &amp;lt;&amp;lt; {json_line}    |  loop  |&lt;br /&gt;
               +--------+                                +--------+&lt;br /&gt;
                    ^                                         |&lt;br /&gt;
                    |        BUS.read_inbox(&amp;quot;alice&amp;quot;)          |&lt;br /&gt;
                    +---- alice.jsonl -&amp;gt; read + drain ---------+&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 二、核心组件 ==&lt;br /&gt;
&lt;br /&gt;
=== 1. TeammateManager ===&lt;br /&gt;
通过 &amp;lt;code&amp;gt;config.json&amp;lt;/code&amp;gt; 维护团队名册：&lt;br /&gt;
 &amp;lt;code&amp;gt;class TeammateManager:&lt;br /&gt;
     def __init__(self, team_dir: Path):&lt;br /&gt;
         self.dir = team_dir&lt;br /&gt;
         self.dir.mkdir(exist_ok=True)&lt;br /&gt;
         self.config_path = self.dir / &amp;quot;config.json&amp;quot;&lt;br /&gt;
         self.config = self._load_config()&lt;br /&gt;
         self.threads = {}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. 生成队友 ===&lt;br /&gt;
&amp;lt;code&amp;gt;spawn()&amp;lt;/code&amp;gt; 创建队友并在线程中启动 Agent 循环：&lt;br /&gt;
 &amp;lt;code&amp;gt;def spawn(self, name: str, role: str, prompt: str) -&amp;gt; str:&lt;br /&gt;
     member = {&lt;br /&gt;
         &amp;quot;name&amp;quot;: name,&lt;br /&gt;
         &amp;quot;role&amp;quot;: role,&lt;br /&gt;
         &amp;quot;status&amp;quot;: &amp;quot;working&amp;quot;&lt;br /&gt;
     }&lt;br /&gt;
     self.config[&amp;quot;members&amp;quot;].append(member)&lt;br /&gt;
     self._save_config()&lt;br /&gt;
     &lt;br /&gt;
     thread = threading.Thread(&lt;br /&gt;
         target=self._teammate_loop,&lt;br /&gt;
         args=(name, role, prompt),&lt;br /&gt;
         daemon=True&lt;br /&gt;
     )&lt;br /&gt;
     thread.start()&lt;br /&gt;
     return f&amp;quot;Spawned teammate &amp;#039;{name}&amp;#039; (role: {role})&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. MessageBus ===&lt;br /&gt;
追加式 JSONL 收件箱：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;send()&amp;lt;/code&amp;gt; 追加一行&lt;br /&gt;
* &amp;lt;code&amp;gt;read_inbox()&amp;lt;/code&amp;gt; 读取全部并清空&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;code&amp;gt;class MessageBus:&lt;br /&gt;
     def send(self, sender, to, content, &lt;br /&gt;
              msg_type=&amp;quot;message&amp;quot;, extra=None):&lt;br /&gt;
         msg = {&lt;br /&gt;
             &amp;quot;type&amp;quot;: msg_type,&lt;br /&gt;
             &amp;quot;from&amp;quot;: sender,&lt;br /&gt;
             &amp;quot;content&amp;quot;: content,&lt;br /&gt;
             &amp;quot;timestamp&amp;quot;: time.time()&lt;br /&gt;
         }&lt;br /&gt;
         if extra:&lt;br /&gt;
             msg.update(extra)&lt;br /&gt;
         with open(self.dir / f&amp;quot;{to}.jsonl&amp;quot;, &amp;quot;a&amp;quot;) as f:&lt;br /&gt;
             f.write(json.dumps(msg) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
 &lt;br /&gt;
     def read_inbox(self, name):&lt;br /&gt;
         path = self.dir / f&amp;quot;{name}.jsonl&amp;quot;&lt;br /&gt;
         if not path.exists():&lt;br /&gt;
             return &amp;quot;[]&amp;quot;&lt;br /&gt;
         msgs = [json.loads(l) for l in &lt;br /&gt;
                 path.read_text().strip().splitlines() if l]&lt;br /&gt;
         path.write_text(&amp;quot;&amp;quot;)  &amp;#039;&amp;#039;# drain&amp;#039;&amp;#039;&lt;br /&gt;
         return json.dumps(msgs, indent=2)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. 队友循环 ===&lt;br /&gt;
每个队友在每次 LLM 调用前检查收件箱：&lt;br /&gt;
 &amp;lt;code&amp;gt;def _teammate_loop(self, name, role, prompt):&lt;br /&gt;
     messages = [{&amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;, &amp;quot;content&amp;quot;: prompt}]&lt;br /&gt;
     for _ in range(50):&lt;br /&gt;
         &amp;#039;&amp;#039;# 检查收件箱&amp;#039;&amp;#039;&lt;br /&gt;
         inbox = BUS.read_inbox(name)&lt;br /&gt;
         if inbox != &amp;quot;[]&amp;quot;:&lt;br /&gt;
             messages.append({&lt;br /&gt;
                 &amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
                 &amp;quot;content&amp;quot;: f&amp;quot;&amp;lt;inbox&amp;gt;{inbox}&amp;lt;/inbox&amp;gt;&amp;quot;&lt;br /&gt;
             })&lt;br /&gt;
             messages.append({&lt;br /&gt;
                 &amp;quot;role&amp;quot;: &amp;quot;assistant&amp;quot;,&lt;br /&gt;
                 &amp;quot;content&amp;quot;: &amp;quot;Noted inbox messages.&amp;quot;&lt;br /&gt;
             })&lt;br /&gt;
         &lt;br /&gt;
         &amp;#039;&amp;#039;# 调用 LLM&amp;#039;&amp;#039;&lt;br /&gt;
         response = client.messages.create(...)&lt;br /&gt;
         &lt;br /&gt;
         if response.stop_reason != &amp;quot;tool_use&amp;quot;:&lt;br /&gt;
             break&lt;br /&gt;
         &amp;#039;&amp;#039;# 执行工具，追加结果...&amp;#039;&amp;#039;&lt;br /&gt;
     &lt;br /&gt;
     self._find_member(name)[&amp;quot;status&amp;quot;] = &amp;quot;idle&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 三、试一试 ==&lt;br /&gt;
 &amp;lt;code&amp;gt;cd learn-claude-code&lt;br /&gt;
 python agents/s09_agent_teams.py&amp;lt;/code&amp;gt;&lt;br /&gt;
试试这些 prompt：&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Spawn alice (coder) and bob (tester). Have alice send bob a message.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Broadcast &amp;quot;status update: phase 1 complete&amp;quot; to all teammates&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Check the lead inbox for any messages&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也可以使用快捷命令：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/team&amp;lt;/code&amp;gt; 查看团队名册和状态&lt;br /&gt;
* &amp;lt;code&amp;gt;/inbox&amp;lt;/code&amp;gt; 手动检查领导的收件箱&lt;br /&gt;
&lt;br /&gt;
== 四、团队协作模式 ==&lt;br /&gt;
&lt;br /&gt;
=== 模式 1：领导指派 ===&lt;br /&gt;
 &amp;lt;code&amp;gt;Leader: Spawn alice (coder) and bob (reviewer)&lt;br /&gt;
 Leader: Send alice &amp;quot;Implement user authentication&amp;quot;&lt;br /&gt;
 Alice:  (works on task)&lt;br /&gt;
 Alice:  Send leader &amp;quot;Task complete, needs review&amp;quot;&lt;br /&gt;
 Leader: Send bob &amp;quot;Review alice&amp;#039;s auth implementation&amp;quot;&lt;br /&gt;
 Bob:    (reviews code)&lt;br /&gt;
 Bob:    Send leader &amp;quot;Review complete, 2 issues found&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 模式 2：广播通知 ===&lt;br /&gt;
 &amp;lt;code&amp;gt;Leader: Broadcast &amp;quot;Phase 1 complete, starting Phase 2&amp;quot;&lt;br /&gt;
 Alice:  (receives broadcast)&lt;br /&gt;
 Bob:    (receives broadcast)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 模式 3：点对点协作 ===&lt;br /&gt;
 &amp;lt;code&amp;gt;Alice: Send bob &amp;quot;Can you check the API spec?&amp;quot;&lt;br /&gt;
 Bob:   (checks spec)&lt;br /&gt;
 Bob:   Send alice &amp;quot;Spec says POST /api/v1/users&amp;quot;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 五、进阶：自治智能体 ==&lt;br /&gt;
s09 的队友只在被明确指派时才动。领导得给每个队友写 prompt。&lt;br /&gt;
&lt;br /&gt;
在 s11 中，我们将升级到&amp;#039;&amp;#039;&amp;#039;自治智能体&amp;#039;&amp;#039;&amp;#039;：&amp;lt;blockquote&amp;gt;&amp;quot;队友自己看看板，有活就认领&amp;quot;&amp;lt;/blockquote&amp;gt;队友自己扫描任务看板，认领没人做的任务，做完再找下一个。&lt;br /&gt;
&lt;br /&gt;
=== 空闲阶段轮询 ===&lt;br /&gt;
 &amp;lt;code&amp;gt;def _idle_poll(self, name, messages):&lt;br /&gt;
     for _ in range(IDLE_TIMEOUT // POLL_INTERVAL):&lt;br /&gt;
         time.sleep(POLL_INTERVAL)&lt;br /&gt;
         &lt;br /&gt;
         &amp;#039;&amp;#039;# 检查收件箱&amp;#039;&amp;#039;&lt;br /&gt;
         inbox = BUS.read_inbox(name)&lt;br /&gt;
         if inbox:&lt;br /&gt;
             messages.append({&lt;br /&gt;
                 &amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
                 &amp;quot;content&amp;quot;: f&amp;quot;&amp;lt;inbox&amp;gt;{inbox}&amp;lt;/inbox&amp;gt;&amp;quot;&lt;br /&gt;
             })&lt;br /&gt;
             return True&lt;br /&gt;
         &lt;br /&gt;
         &amp;#039;&amp;#039;# 扫描未认领任务&amp;#039;&amp;#039;&lt;br /&gt;
         unclaimed = scan_unclaimed_tasks()&lt;br /&gt;
         if unclaimed:&lt;br /&gt;
             claim_task(unclaimed[0][&amp;quot;id&amp;quot;], name)&lt;br /&gt;
             messages.append({&lt;br /&gt;
                 &amp;quot;role&amp;quot;: &amp;quot;user&amp;quot;,&lt;br /&gt;
                 &amp;quot;content&amp;quot;: f&amp;quot;&amp;lt;auto-claimed&amp;gt;Task #{unclaimed[0][&amp;#039;id&amp;#039;]}&amp;lt;/auto-claimed&amp;gt;&amp;quot;&lt;br /&gt;
             })&lt;br /&gt;
             return True&lt;br /&gt;
     &lt;br /&gt;
     return False  &amp;#039;&amp;#039;# timeout -&amp;gt; shutdown&amp;#039;&amp;#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 自组织工作流 ===&lt;br /&gt;
 &amp;lt;code&amp;gt;1. 创建任务看板&lt;br /&gt;
 2. 生成多个队友&lt;br /&gt;
 3. 队友自动扫描看板&lt;br /&gt;
 4. 认领可执行任务&lt;br /&gt;
 5. 完成后继续扫描&lt;br /&gt;
 6. 60秒空闲后自动关闭&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;不需要领导逐个分配，真正的自组织。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== 六、试一试（自治版） ==&lt;br /&gt;
 &amp;lt;code&amp;gt;cd learn-claude-code&lt;br /&gt;
 python agents/s11_autonomous_agents.py&amp;lt;/code&amp;gt;&lt;br /&gt;
试试这些 prompt：&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;Create 3 tasks on the board, then spawn alice and bob. Watch them auto-claim.&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Spawn a coder teammate and let it find work from the task board itself&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;Create tasks with dependencies. Watch teammates respect the blocked order.&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
快捷命令：&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;/tasks&amp;lt;/code&amp;gt; 查看带 owner 的任务看板&lt;br /&gt;
* &amp;lt;code&amp;gt;/team&amp;lt;/code&amp;gt; 监控谁在工作、谁在空闲&lt;br /&gt;
&lt;br /&gt;
== 七、设计哲学 ==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;多模型，通过文件协调。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
这是 Harness 工程的精髓：&lt;br /&gt;
&lt;br /&gt;
* 不共享内存，避免竞态条件&lt;br /&gt;
* 通过文件系统通信，天然持久化&lt;br /&gt;
* JSONL 格式简单、可扩展&lt;br /&gt;
* 每个 Agent 独立运行，松耦合&lt;br /&gt;
&lt;br /&gt;
这种模式不仅适用于编程，也适用于：&lt;br /&gt;
&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;客服团队&amp;#039;&amp;#039;&amp;#039;：不同专长的 Agent 处理不同类型的工单&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;研究团队&amp;#039;&amp;#039;&amp;#039;：文献检索、实验设计、数据分析分工协作&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;创意团队&amp;#039;&amp;#039;&amp;#039;：头脑风暴、方案评估、细节执行分层处理&lt;br /&gt;
&lt;br /&gt;
== 八、总结 ==&lt;br /&gt;
从单 Agent → 子 Agent → 多 Agent 团队 → 自治 Agent，Harness 的复杂度逐步提升，但核心原则不变：&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Harness 提供机制，模型决定策略。&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
* Harness 提供 spawn、send、inbox 工具&lt;br /&gt;
* 模型决定什么时候生成队友、给谁发消息&lt;br /&gt;
* 模型决定认领哪个任务、如何协作&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;优秀的 Harness 工程师是环境设计师&amp;#039;&amp;#039;&amp;#039;——创造能让智能高效协作的基础设施。&lt;br /&gt;
----&amp;#039;&amp;#039;Bash 就够了。真正的 Agent 是宇宙所需要的全部。&amp;#039;&amp;#039;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>