Skip to content

无限对话

标签栏很适合拿住一个对话,很不适合拿住十二个。无限对话给出的是另一个答案:一块没有边界的画布,你的工作区在上面按空间铺开 —— 一个文件夹一个区域、一个智能体一个区域、卡片可以钉在任何地方 —— 而且一张卡片能展开成一个真正可以打字进去的对话。多个智能体在同一块画布上并排跑,而不是一次只看一个标签页。

它随 0.30.0 到来。这个路由和「待办」「仓库面板」一样是整页的;也和它们一样,如果这不是你的工作方式,可以关掉。

它大体上是工作区的一个视图,而不是一份副本

一张对话卡片就是你的某个对话,一个文件夹区域就是你的某个文件夹 —— 删掉对话,它的卡片跟着消失;重命名对话,卡片也跟着改。对这些东西而言,画布额外给出的是位置,以及让同一个对话同时出现在三个地方的自由。

有两样东西确实属于画布自己:一个合集的成员名单,以及一张便签的文字。它们不存在于别处,这也正是下文里删除它们要另作处理的原因。

画布上只承载根对话。子智能体会话 —— 任何由委派或循环派生出来的东西 —— 是拥有它的那个对话的下层结构,而不是一个可供铺排的同级对象,因此它永远不会成为一张独立的卡片。不过卡片上会有一个徽标,数出它下面挂着多少个子智能体。→ 多智能体协作

打开它

无限对话是左侧边栏导航块里的最后一行,位于仓库面板下方,同时也在状态栏快捷操作导航分组里。如果你不想要这一行,在侧边栏的导航项里关掉它 —— 快捷操作仍然能进去。

把它填起来

一块新画布是空的,并且直接给出一键的出路:从当前工作区生成会用你已经打开的东西把整块画布搭出来 —— 一个文件夹一个区域,里面装着它的对话,位置都替你排好。这是最快看清画布用来做什么的方式,之后你可以随意重排。

更从容的方式是添加到画布,一次放一样东西。它的第一项是新建对话 —— 在工作区当前文件夹里放一张空白卡片,你发出第一条消息时它就成为一个真正的对话。它下面是你可以铺开的六样东西:

你添加的它做什么
文件夹区域映射一个已打开的文件夹,显示其中的每个对话,worktree 子项一并并入
文件夹分组区域映射一个侧边栏文件夹分组 —— 分组里的每个文件夹,收在一条带子里
智能体区域跑在同一个智能体上的所有对话,跨文件夹
自定义区域一个合集:没有任何自动规则,只装你拖进去的东西
对话卡片一个对话,钉在你放下它的地方。选择器可搜索
便签卡片文字。写那些不属于任何人对话记录的推敲

前三种是绑定的 —— 它们跟着自己的文件夹、分组或智能体走,新对话会自己出现在里面。合集则是你的:它只装你放进去的,不会有东西不请自来。

用拖拽来编排

画布的整套编辑方式就是拖放,而两个方向的含义并不相同:

  • 把卡片从区域里拖到空白画布上,它就成为一张钉住的卡片。从合集里拖出是移动;从绑定区域里拖出是复制 —— 因为文件夹区域对「有哪些对话」并没有发言权,移走卡片并不会把对话从文件夹里移走。
  • 把卡片拖进合集,就把它收了进去。

同一个对话可以同时待在任意多个区域里,这正是「复制」规则的意义所在。选中一张卡片,它在别处的分身也会一起亮起,于是你能看见它还住在哪里。

除此之外:给区域重命名折叠调整大小,给任何东西上色(区域、卡片和便签都可以;区域里的卡片穿区域的颜色),把区域的成员网格设成固定的列数行数,或者留给自动。成员多到放不下的区域会显示 +N 更多,配上显示全部对话 / 显示更少自动排列在画布铺散之后把它重新收拢,导出为 PNG 则给它拍一张照 —— 上限是 4096×4096,所以摊得足够开的画布会被裁掉边缘,而不是无止境地缩下去。

框选多个东西,工具条会给出归入一个区域 —— 这是做合集最快的方式,因为你先聚起来,再给它起名字。

删除选中项时,会先问你写过字的便签

对话卡片是一个视图:删掉它,对话本身分毫未动。便签不是 —— 它的文字不存在于别处。所以包含写了内容的便签的删除会先确认,并告诉你有几张;而纯卡片的选择、或者你从没往里打过字的便签,都会直接删掉。

一张卡片就是一个真正的对话

这正是画布与「地图」的区别。展开一张钉住的卡片,你得到的是一个能干活的对话:对话记录、输入框、模型选择器,以及权限、提问和方案对话框 —— 在画布上真正跑一轮所需要的一切。新建对话的卡片还会额外提供智能体选择器,因为那是这个选择尚未落定的唯一时刻;已经存在的对话保持它开场时的那个智能体,和在标签页里完全一样。

有几样东西留在标签页视图里,刻意没有一起过来:消息队列中途发送导出。画布是为了让多个对话并排跑,而不是取代那个属于单个对话的界面。

卡片里的文件链接会在它旁边打开。 画布占满整页时,工作区的文件栏并不在屏幕上,所以在卡片的对话记录里点文件徽章、Markdown 链接或查看差异,会在对话旁边的侧面板里打开一个只读预览,在工作区中打开也只有一步之遥。对于普通文件,底下仍是同一个工作区文件标签页 —— 面板只是它的一个视图 —— 所以在那儿读它不会损失什么。在 0.30.3 之前,这些点击会在你看不见的那一栏里打开标签页,看上去就像什么都没发生。待办看板出于同样的理由也是这么做的。

区域里的卡片必须先移出到画布才能展开 —— 一个完整的对话界面远大于区域成员网格里的一格,所以它得先被钉住,才能长大。

打开画布并不会把上面每个智能体都叫起来

这条规则针对的是不去拉起智能体,而不是拒绝一个本来就在那里的。对话处于休眠的卡片会立刻画出对话记录,但直到你第一次点它才会去连接 —— 否则走进一块有十几张卡片的画布,就会一次拉起十几个智能体 CLI。而智能体已经在跑的卡片会以活着的状态回来,因为让它继续睡着,只会让你看着一张显示为已断连的卡片,而它的回复正往里面流。

而一旦某张卡片已经活着,它就攥住自己的连接:把它平移出屏幕不会悄悄把它卸载成一次断连。至于你已经在标签页里打开的对话,它在画布上的卡片会以观察者身份接入 —— 连接归标签页,卡片只是看着。

在画布上找路

画布按设计就比窗口大,所以底部角落里放着导航:放大 / 缩小重置为 100%适应视图,以及它们上方那张整块画布的地图。地图可以收起,收没收起按设备记住。

画布保留自己的缩放,在多次访问之间记住,并且与应用的界面缩放相互独立。这个分离是刻意的:把画布放大是角落那个控件的职责,于是你缩放界面时,卡片的尺寸不会在脚下变形。而工具坞、地图和各种菜单属于窗口装饰,仍然跟随应用的缩放。

正在运行的对话会呼吸般闪动,区域则会数出它的成员里有多少个在跑 —— 于是瞟一眼折叠着的区域,就知道它里面有没有东西在干活。带着子智能体的卡片会用徽标标出有几个。

值得了解

  • 画布存在你的数据里,不在浏览器里。 桌面端和共享同一数据目录的服务器看到的是同一块画布,一边的改动另一边也会出现。
  • 关掉文件夹并不会弄坏它的区域。 画布是对着 Codeg 知道的每一个文件夹来解析的,而不只是此刻在侧边栏里打开的那些,所以你关掉文件夹之后区域照常工作。文件夹不可用留给真正没了的文件夹 —— 被删除或找不到 —— 被删除的文件夹分组会留下同类的墓碑。
  • 已经不存在的对话读作对话已删除 看到时把卡片移掉即可,别的不需要收拾。
  • 这一行可以隐藏。 如果画布不适合你,在侧边栏导航项里把无限对话关掉。

下一步

  • 工作区 —— 画布所替代的那个基于标签页的界面,也是设置文件夹分组的地方。
  • 多智能体协作 —— 让多个智能体同时开工的另一条路,在那里它们彼此对话,而不是对你说话。
  • 待办 —— 适合那些你希望无人值守地跑完、之后再审阅的工作,而不是并排盯着看。

基于 Apache-2.0 许可证发布。