前段时间,我在做大量的产品调研,几个 agent 轮流着用,调研和讨论过程,它们疯狂回我一堆文字和 Markdown。

因为调研过程需要很多人为的判断和介入,还没法让它全自动,毕竟资料人还是要去读,要去理解。可惜,真的累,AI 提升了效率,但算力瓶颈竟是我自己。

第一个 Agent 的输出我认真读完,画了重点。第二个的输出我扫了扫,跟第一个对照了几处差异。到第三个 Agent 的窗口打开时,我盯着那个滚动条,发现脑子已经不转了。

Agent 可以通过 subagent 去消化信息,避免上下文被污染和撑爆,但人就不一样,信息太多,我的「上下文」被严重污染,我开始忘了前面看过什么,忘了哪些判断是自己做的、哪些是 Agent 提的、哪个结论对应哪组输入。上下文一污染,判断和决策水平直接下降。

关键信息淹没在文字里。我变得容易遗漏风险,也容易直接接受结论。

深感人机交互方式变成对我的一种限制,我在思考是否有办法和 Agent 的交互方式变得可视化。

于是尝试开发了 AgentBoard,一套人与 Agent 的协作机制,现在也开源出来。

An image to describe post

飞书画板的启发

在使用飞书 CLI 之后,发现它能很好地将我们讨论的,清晰画在画板上。而且效果非常好。

就那么一瞬。原本三屏长的文字,变成十几张带连线的卡片。我能「看见」结构了。不用从左到右顺着读,我可以俯瞰全貌。哪一块跟哪一块的关系是什么,哪里缺了,哪里重复,一眼就清楚。

文字在污染人的上下文,可视化在解开人的上下文。 那能不能让 Agent 直接往画布上输出,让我读图而不是读字?更关键的,能不能我改完画布,Agent 再读回去,继续往下挖?

这就是 AgentBoard 的起点。

不是每次简单问答都需要 AgentBoard。查个资料、问个术语、让 Agent 帮你写段代码,聊天框完全够用。

聊天框也有不够用的时候:前面的结论和约束不能丢、多个方案需要比较对照、结果会影响产品或其他决策。你需要的不只是一个回答,是一个能在你跟 Agent 之间持续同步的「工作界面」。

可视化背后的 DSL

要实现人与 Agent 之间的协作,就需要一套双方都能精确理解的载体。

文本聊天记录不行,太长、太碎、太容易被污染。

Markdown 是现有最常见的,标题、列表、加粗,可读性比纯文本要好,但每次修改 Agent 都要全文重读一遍,靠它自己理解哪些被修改过。而对于人,越来越长的 Markdown,也一样会加剧阅读理解的难度。

HTML 可视化,确实很好,但是 HTML 里面有大量的语法指令是渲染用的,本身变没有意义,不仅加大了 token 的浪费,而且每次渲染修改都是大工程。并且人一般不会直接去编辑 HTML。

研究飞书画板之后,它里面使用了领域专用语言 DSL。DSL 不为「显示」服务,不为「排版」服务。它只服务「这个领域里有什么、是什么、怎么关联」。

AgentBoard 的 DSL 只有三种东西:

  • 节点(卡片或便签),带类型和标签——Agent 看到 tags: ["risk"],就知道这是风险项
  • 连线(箭头或直线),带方向和标签——Agent 看到 from: "product_a", to: "pricing_strategy",就知道依赖关系
  • 分组,带包含关系——Agent 看到某一组卡片属于「Phase 2」,就知道时间边界

举例,Agent 用三种方式输出同一个结论:

Markdown:

## 竞品 A
- 定价:免费增值
- 风险:可能无法支撑企业客户

HTML:

<div class="card">
  <h3>竞品 A</h3>
  <p>定价:免费增值</p>
</div>

DSL(AgentBoard):

{
  "id": "comp_a",
  "type": "card",
  "title": "竞品 A",
  "body": "定价:免费增值 + 企业版 $99/月",
  "tags": ["competitor"]
}

三者本质区别:

Markdown HTML DSL
为谁设计 人类读写 浏览器渲染 人机共同理解
描述什么 排版格式 显示结构 内容含义(类型、标签、关系)
Agent 能理解什么 需要推断(容易错) 几乎无法理解(只是标签) 精确理解(类型、标签、关系)
人改了之后 Agent 重读全文自己猜 人不会直接改 HTML Agent 精确知道哪变了

DSL 正好能在人和 Agent 协作的场景下,提供给双方一份共识:当前到底在讨论什么。

Markdown 负责叙述,DSL 负责状态、结构和关系,HTML/CSS 交给前端渲染层。 各司其职,不要让 Agent 跨界。

DSL 解决的,是双向的上下文污染。

  • Agent 不被噪音污染:它读到的是带类型的结构化节点
  • 人也不被噪音污染:你看到的是画布上的卡片和连线

我们目标也不是获得这张白板,而是将它作为上下文的数据库。这样 Agent 能读到的是一组结构化节点:类型、有标签、有关系(因果、依赖、冲突、支持)。

An image to describe post

无需每次全部重读

通过 DSL 实现 Agent 不需要每次都读整张画布:

比如:你在调研三个竞品,白板上已经搭了 40 张卡片。每个竞品拆成定位、定价、功能、风险、证据。你改了其中一张「定价策略」卡片的正文,然后跟 Agent 说「基于我改过的定价,帮我推一下对市场的可能影响」。

如果全部重新读一遍,token 烧得心疼。

AgentBoard 的做法是「增量上下文包」。你编辑完画布、再次调用 Agent 时,发过去的不是整张图,而是:

  • 你刚才改了哪些节点(完整对象:标题、正文、标签全在)
  • 与被改节点相关的连线
  • 邻居节点的轻量摘要(只有标题和标签,没有正文——Agent 只需要知道「旁边有什么」,不需要知道邻居卡片的完整内容)
  • 整张画布的紧凑概览(所有节点标题索引 + 所有连线端点,Agent 扫一眼就知道全局结构)

同时告诉 Agent:「如果你需要某个不在增量包里的节点正文,在 questions 里告诉我,我给你补。」

只有当你明确说了「整张图重新整理」「全部重排」这种全局指令,才发完整画布。这不是省 token 的技巧,是对 Agent 注意力的管理。

An image to describe post

图示隐含的思考方式

调研型工作不是一次性问答。你问,Agent 答,你看完改几个判断,再问——这是「问→看→改→再问」的循环。

AgentBoard 特别适合这种应用场景。如果你发现 Agent 方向偏了,你一看白板上的不是你想要的,你可以随时停止,手动改掉几张不对的卡片,再问一遍。Agent 读到的是你改过的版本,不是它之前跑偏的那版。

每次 Agent 调用和交互请求都持久化在 session 里。刷新回来,Agent 还在上一个上下文里等着你回复,不需要把刚才的需求再说一遍。我把白板当成一个 session,可持久化共享上下文。

为了防止 Agent 自己不懂装懂。我也设计了,当你给到模糊的需求时,它不知道你的意图,它会给你选项,先问你,等它拿到答案后继续。它是你的伙伴,不明白,先问明白再执行。

从飞书画板学到的,还有「图示的形式本身就隐含了思考方式 你看鱼骨图和看 2×2 矩阵,启动的是完全不同的认知模式。

想象你在比较两个产品方案。如果 Agent 把所有卡片纵向排成一列,你可能要上下翻好几次才能在脑子里对齐「方案 A 的定价」和「方案 B 的定价」。但如果 Agent 用 matrix 布局把两个方案左右排开,维度标注在旁边——你一眼就看到了对比。

目前我让它内置了 8 种思考布局:

布局 什么时候用 你看到的效果
horizontal / vertical 线性序列、步骤、优先级 卡片沿一条线排列
dagre 架构图、依赖关系、数据流 自动分层,箭头方向统一
mindmap 中心主题 + 发散分支 枢纽节点居中,分支环绕
matrix 2×2 对比、权衡、维度交叉 卡片按网格对齐,维度标注清晰
cluster 主题分类、亲和图、访谈归纳 同组卡片聚在一起,未分组自动下落
timeline 路线图、里程碑、用户旅程 卡片沿时间轴排列
swimlane 角色分工、并行阶段、多团队 不同泳道并列,每道内横向推进

前期也遇到坑,就是它老是回复我流程图,但我们知道并不是所有信息,都具有流程关系。于是给它加了一条判断 Prompt :不是所有关系都应该画箭头。

Agent 被要求先用 tags 表达语义(比如 ["risk"]["assumption"]["decision"]),再选布局。箭头只用在实际有方向性的地方——顺序、依赖、因果。分类、对比、证据,用分组和空间聚类,不乱画多余的箭头。

本地运行,更安全

AgentBoard 是纯浏览器应用。所有数据存在 localStorage,API key 也存 localStorage——不离开你的机器。没有注册,没有登录,没有服务端数据库。

渲染层:节点用 HTML div(方便编辑和拖拽),连线用 SVG line(沿着卡片边缘出发,z-index 低于节点,永不遮挡)。画布平移走 GPU 加速,Figma 那种跟手的手感。

三种 Agent 接入方式,设置面板里选:

  • 本地 CLI(Claude Code / OpenCode / Codex CLI):Vite 插件自动检测你有没有装这些 CLI,装了就能直接用。日常我最尝试用这个,很方便无需配置 API KEY。
  • Claude API:填 Anthropic API key
  • OpenAI 兼容 API:填 key 和 base URL,兼容大多数第三方

Session 管理,可通过创建白板来实现。比如「竞品分析」一个白板、「产品方案」一个白板,你可以自己重命名,顶栏下拉就能切换。

An image to describe post

可视化,新尝试

AgentBoard 在原型阶段,但我每次依然享受它提供的可视化,真的当问题复杂需要思考时,它对梳理思路真的帮了大忙。不像过往我总在多个窗口里面,扫描一行行的文字。

没想到,有一条居然是为了减少 Agent 对我「上下文」的污染,才做了这个 AgentBoard。人不需要在文字堆里打捞关键信息。人看到结构、动手改,Agent 读回变化继续往下走。循环。

AI 在飞速进化的今天,我们确实也需要一个全新的人机协作模式,来真正帮助我们保护注意力,保持思考的效率。

我一直觉得,当 AI 能直接操作你的思考对象时,人和 AI 之间的界面应该长什么样——聊天框肯定不是答案。特别是多 Agent 协作的巨量信息,人自己反而成为瓶颈。

AgentBoard,新尝试,可能是一个方向。

全部开源出来,到 github 获取:https://github.com/AyingAI/agentboard。你也一样可以交给 Agent 去帮你安装。

欢迎你来提 issue、提 PR,都行。

感兴趣,不妨去试试。