---
title: "单一会话 agent 简史 · Comma 博客"
description: "一个常驻主会话、独立的 Worker，以及团队级对话背后的工程。"
url: https://comma.surf/zh/blog/a-brief-history-of-single-session-agents
language: zh-CN
---

[返回博客](https://comma.surf/zh/blog)

Comma Team · 2026 年 11 月 1 日 · 阅读约 7 分钟

# 单一会话 agent 简史

一个常驻主会话、独立的 Worker，以及团队级对话背后的工程。

[开始使用](https://app.comma.surf/)

想象一个团队同时开着四十个对话。在一个对话里，有人让智能体准备客户方案。在另一个对话里，同事正在问交付时间。第三个人则在确认，同一个功能能不能在这个月上线。

每段对话都从交代背景开始。这是客户。这是我们作出的承诺。这是昨天定下来的事。智能体各自开工，却只看到不同的片段。直到有人发现，方案里承诺的日期，早已在工程讨论中被排除了。

然后，一个 Task 结束了。它的对话安静下来。一周后，另一个人开始做相关工作，又把背景讲了一遍。

在构建智能体时，我们反复想到这个场景。我们希望下一项工作能从团队已经学到的东西出发。于是，我们走向了单一会话的设计：一个持续存在的主对话，配合独立执行各项 Task 的 Worker。

子智能体帮助分工。单一会话回答另一个问题：随着工作推进，对这些工作的理解放在哪里？我们同时使用这两种做法。主对话让团队的工作接续下去，Worker 给每项工作独立展开的空间。

## 从个人到频道，再到团队

[Poke](https://www.webwire.com/ViewPressRel.asp?aId=343533) 给个人智能体安排了一个简单的归处：一个人，一个对话（2025 年 9 月）。它把一个人的邮件、日历和文件接到文字对话里。起草回复或调整会议时间，都可以从上一次请求所在的地方开始。随着一天的事情不断推进，这个对话成了可以持续回来的地方。整个体验围绕个人与智能体的关系展开，也让我们看到了不同工作之间如何保持连续。

[Claude Tag](https://www.anthropic.com/news/introducing-claude-tag) 把一个 Claude 带进了频道（2026 年 6 月 23 日）。频道里的任何人都能提及同一个智能体、看到它在做什么，并接着同事的讨论往下走。Claude 会逐渐记住相关信息，使用管理员开放的工具。发布介绍也提到，在获得许可时，它能从其他频道和信息源中学习。我们关注的是这种共享对话：人们可以在原本讨论工作的地方，把工作交出去。我们的设计则把团队的主对话作为归处，接住不同讨论和 Task 带回来的信息。

我们选择探索一个团队、一个对话。上下文跟着团队的工作跨越不同讨论。关于交付的决定，可以影响客户方案，即使这两项工作最初发生在不同地方。

从个人对话、共享频道，到团队的主对话。

2026 年 4 月 28 日，我们发布了前一个产品 Bridge 的第一篇相关[文章](https://bridge.surf/blog/introducing-bridge)。这段探索晚于 Poke，早于 Claude Tag。随后，我们在当前产品 Comma（2026 年 10 月 1 日）中继续这项工作，这套设计今天就运行在 Comma 上。

2026 年 10 月 31 日，DeepSeek Harness 也介绍了 [Super-agent](https://www.straitstimes.com/asia/east-asia/deepseek-drops-enhanced-coding-agent-with-aim-to-rival-anthropic) 的探索。它会在群聊中主动跟进代码工作，呼应了同一个方向：把协调工作从人手里接回系统。这是沿着自身设计展开的研究原型。

DeepSeek 的[设计文章第 8.4 节](https://mp.weixin.qq.com/s/zoS7GlReWPhfCjENGxXCdg)把两个问题列为待探索：云端入侵或提示词注入可能危及连接的设备，凭据进入模型上下文也可能在正常执行时泄露。我们已经在运行的内容流向关卡是 IFC：每次发送声明来源，按目的地读者范围检查，过不了就拒绝，必要时申请特定范围的人工授权。

凭据走另一层。模型只指定凭据引用，执行层解析并注入凭据值，不把值交给模型。

## 团队留下了什么

设想一位新同事加入了客户方案的工作。他进入的是团队一直使用的同一个主对话。他可以看到其中的决定，问清楚日期为什么变了，然后接着做，而不用找三个人要三份总结。工作区成员身份让他能进入这个共享对话；某项决定背后的资料，仍按资料本身的权限开放。

Task 完成后，结果和历史仍然保留。比如，团队发现某位客户需要一种特别的导出格式。报告回到 Router，后续方案就能引用这个发现及其来源。Task 结束了，团队仍有地方可以回头找到这次工作的收获。

并行工作让这条返回路径更重要。一个 Worker 可能在读客户需求，另一个则在调查技术限制。如果发现经过层层转述才到达团队，重要的前提可能会丢失。每个 Task 都把发现连同来源一起报告回来。Router 在同一个主上下文里接收这些信息。

这让我们有理由把智能体框架拆成两种角色。一个持续跟进团队的对话，其他角色执行具体的工作。

## Router 和 Worker 怎样配合

我们给一个工作区配置一个常驻 Router。它持有团队的主上下文，随着新请求进入、决定变化和结果返回，持续跟进对话。关于客户方案的请求，与已经展开的交付讨论，进入同一个上下文。每条输入消息都带着来源对话和消息的身份。Router 跨讨论共享上下文，同时保留每条输入来自哪里的线索。

Router 把明确的工作交给 Worker。每个 Task 都开启一个新的 Worker 会话，带上这项工作的指令与交接内容。其他 Worker 的历史留在各自的会话里。多个 Worker 可以同时调查不同问题。

我们为每个 Task 定义目标、完成目标所需的上下文，以及预期交付物。“调查这个客户”留下了太多空白。“检查客户的导出要求，给出格式建议，并附上来源和待确认问题”，就让 Worker 有明确可完成的工作，也让 Router 拿到可用的结果。

假设客户方案既需要检查导出要求，也需要估算交付时间。我们可以把它们交给不同 Worker。一个返回客户需求，另一个返回估算及其前提。Router 把结果带回主对话，让团队作出决定。完成的工作有路可回。

每个 Task 都有一个全新的 Worker 会话。结果带着来源回到主对话。

每一条可见回复都是一次显式发送，主对话里的回复也一样。Router 指定目的地，并通过该目的地的检查。模型输出和结束一轮执行，都不会自动发布回复。Worker 汇报结果或向其他参与者发言时，也遵循同一条规则。读取 Task 资料为 Worker 提供工作的上下文，发送则是单独的动作。

### 信息流控制

并行的 Task 会把读者范围不同的资料带到一起。每次发送都要声明所用的来源。信息流控制，也就是 IFC，会检查目的地的读者是否有权阅读这些来源。

开启强制执行后，发送被拒会返回原因。智能体可以去掉受限内容后重试，或者申请所需范围的人类授权。重试时，正文和来源声明都要随之调整。

IFC 在准备回复与分享出去之间，给团队加了一道可检查的步骤。

每条可见回复都要显式发送，主对话里的回复也一样。

回到客户方案，Router 可以把估算呈给团队，问清仍待决定的事，再通过合适的渠道发出商定的答复。Worker 的工作有明确范围，团队的对话则穿过这次交接继续下去。

新的 Task 会打开新的 Worker 会话。切换会话时，我们把未完成的事和相关引用交接过去。团队仍然需要能回头找到以前的决定。

## 团队怎样一起学习

可以复用的做法会成为组内共享的 skill，里面有可编辑的指令和资源。智能体侧的修改由创建者负责。其他智能体可以使用它，不用重写原件；只读的内置 skill 则可以复制后定制。会话拿到自己范围内的目录，再打开相关指令。

Router 维护持久记忆，分别记录人、环境、一般事实，以及按日期记下的经历。它按需读取或搜索这些记忆。普通 Worker 从 Task 交接内容出发，不写 memory。产品分配的 Triage Worker 只有与来源绑定的只读访问权。记忆写入由 Router 负责。

启用精简工作区（Condensed Workspace）后，组内每个内部 Router 和 Worker 会话都会看到同一份简短的当前事实清单。工作区所有者可以直接编辑它。

智能体更新清单时，会得到一次建议性检查：这些内容是不是其他智能体需要知道的当前事实。系统记录修订号和最后写入者。所有者可以更正或删除条目，让共同依赖的认识能被看见、能被修改。更新被拒后，可以带上这次拒绝的标识重试，显式覆盖检查。

## 维持一个对话的代价

这种安排给主会话带来压力。Worker 可以并行运行，Router 仍要把结果汇总起来。前一个请求还没处理完，新请求就可能到了。不管背后有多少 Worker，人们感受到的仍是一条队列。

串行排队仍是我们在解决的问题。把耗时调查交出去，能让 Router 腾出更多空间回应，但团队仍需要为互相影响的决定排好顺序。在客户方案里，总得有人先定下交付日期，再对外作出最后承诺。共享对话让这层依赖更容易看清，也让 Router 承担更多推动工作前进的责任。

历史也有自己的成本。每个完成的 Task 都会留下值得以后参考的内容，也会留下很多再用不上的东西。随着历史增长，找到所需的决定和背后的理由，也需要花更多功夫。

我们希望旧决定容易找，不用请同事把整段讨论重新讲一遍。决定背后的理由，能帮助团队识别什么时候该调整决定。

我们的探索就走到这里。我们选择共享主对话，是因为团队会通过不同的人、不同的 Task，一次次回到同一项工作。下一次有人打开相关讨论时，我们希望团队先前的努力仍在那里，接得上。

工程

[返回博客](https://comma.surf/zh/blog)

分享

## 相关文章

2026 年 10 月 19 日

### [Comma 智能体原生支持 SSH](https://comma.surf/zh/blog/native-ssh)

2026 年 10 月 1 日

### [为分布式智能体框架打造可编程事件循环](https://comma.surf/zh/blog/agent-programmable-event-loops)

2026 年 10 月 31 日

### [托管还是自托管私人智能体：谁来运行什么？](https://comma.surf/zh/blog/hosted-vs-self-hosted-personal-agent)

## Try Comma, Now.

[开始使用](https://app.comma.surf/)
