工作区与时间线
Agent 模式的中心抽象是工作区。
在普通生成中,模型通常直接返回一段文本。Agent 模式则不同:它会先在一个受约束的工作区中处理文件,最后再把指定输出提交到聊天。
这种设计让 TauriTavern 可以把“生成”拆成更透明的过程:读了什么、写了什么、改了什么、什么时候提交,都有清楚记录。
为什么要有工作区
工作区解决四个问题:
| 问题 | 工作区带来的变化 |
|---|---|
| 中间草稿无处保存 | Agent 可以先写草稿,再修改成最终回复 |
| 工具结果污染聊天 | 工具结果保留在运行过程里,不变成聊天楼层 |
| 难以理解模型行为 | 时间线能展示关键读取、搜索、修改和提交 |
| 输出不止正文 | 可以为状态栏、摘要、笔记等留下稳定位置 |
这也是 TauriTavern Agent 与传统工具调用最重要的差别之一:工具调用是运行事件,不是聊天消息。
工作区里有什么
当前配置档案可以控制 Agent 看到和写入哪些工作区根目录。常见根目录如下:
| 根目录 | 用途 |
|---|---|
output/ | 最终输出。默认消息正文是 output/main.md |
scratch/ | 临时笔记、草稿、整理过程 |
plan/ | 规划文件。当前 Plan Mode 尚未作为完整运行时开放,但目录已保留 |
summaries/ | 摘要、阶段总结、可复用概括 |
persist/ | 同一聊天后续运行可继续使用的持久信息 |
这些路径是 Agent 工作区中的逻辑路径,不是系统文件路径。Agent 不能通过 ../、绝对路径或系统盘符访问工作区之外的内容。
WARNING
persist/ 适合保存简短、稳定、后续仍有意义的信息,例如尚未解决的剧情线、关系状态、用户偏好。它不适合塞入完整聊天记录、模型思考过程或大段临时工具结果。
输出如何进入聊天
当前默认输出文件是:
output/main.mdAgent 完成写作后,需要调用提交工具,把这个文件提交为聊天消息。提交后,聊天里看到的是最终内容;工作区和时间线仍然保留本次运行的过程信息。
这条路径有两个好处:
- 聊天记录保持干净,只保存用户真正要阅读的回复。
- Agent 过程仍可查看,方便理解和调试。
追加提交与短对话
除了替换式提交,Agent 也可以使用追加提交。第一次追加会创建本次运行对应的 Agent 消息,后续追加会继续向这条消息补充内容。
这种方式可以让 Agent 把回复拆成几段短内容,形成更像真人聊天的节奏。例如先回应一句,再补一个动作或解释,再以一句更轻的收尾结束。
第一次 append:嗯,我在。
第二次 append:刚才那句话我想了一下,其实你说得有道理。
第三次 append:不过如果是我的话,可能会先把这件事放一放。当前追加提交的重点是“同一次运行中的连续提交”。它不会把每一次 append 变成完全独立的聊天楼层,因此仍能保留同一个 run 的工作区、时间线和提交记录。
时间线展示什么
时间线是运行日志的用户界面投影。它不会显示所有内部细节,但会显示对用户有意义的关键步骤。
常见时间线条目包括:
| 条目 | 说明 |
|---|---|
| 读取 | 查看聊天、世界书、SKILLS 或工作区文件 |
| 搜索 | 在聊天或文件中查找相关片段 |
| 写入 | 新建或重写工作区文件 |
| 修改 | 对已有文件进行精确替换 |
| 提交 | 把输出文件提交到聊天 |
| 保存 | 将持久工作区变更保存到同一聊天的后续运行中 |
| 完成 | 本次 Agent 运行正常结束 |
| 失败 | 配置、模型、工具或保存过程出现错误 |
时间线的存在不是为了让用户阅读每一行细节,而是为了让 Agent 行为不再像一个黑箱。
什么会进入详情
部分事件可以展开详情。例如:
- 搜索命中的片段。
- 被读取的工作区文件。
- 工具调用结果。
- 写入后的输出文件内容。
- 模型响应或错误摘要。
详情读取的是工作区中与本次运行相关的文件。它仍然遵循工作区路径限制,不会暴露系统文件。
取消、失败与完成
当前时间线会区分几种状态:
| 状态 | 含义 |
|---|---|
| 正在运行 | Agent 仍在模型调用或工具循环中 |
| 已完成 | Agent 成功提交并结束 |
| 已取消 | 用户或系统请求取消运行 |
| 失败 | 出现无法继续的错误 |
取消不是失败。失败通常意味着某个必要条件没有满足,例如模型没有按工具调用格式返回、配置档案无效、路径非法,或聊天提交失败。
TauriTavern 会尽量把这类问题明确显示出来,避免把失败悄悄转成一段看似正常的回复。
