Skip to content

Agent 系统架构

TauriTavern 的 Agent 系统不是把普通生成加上一层更复杂的提示词,也不是把工具调用结果继续塞回聊天记录。它是一条新的创作路径:一次生成先进入一个受约束的工作区,Agent 在其中阅读、搜索、写入和修改文件,最后再把指定输出提交为聊天消息。

这页面向希望了解全局机制的用户、创作者和适配者。它不会要求你理解 TauriTavern 本体的 Rust 模块划分,但会说明哪些行为是当前可以依赖的公开边界。

核心思想

传统 SillyTavern 生成大致是:

text
整理上下文 -> 调用模型 -> 返回一段文本 -> 写入聊天

Agent 模式把这件事拆成更接近写作和编辑的过程:

text
整理上下文
  -> 创建本次运行的工作区
  -> 模型根据配置档案看到工具、SKILLS 和工作区文件
  -> Agent 搜索、读取、写草稿、修改输出
  -> 提交输出文件到聊天
  -> 时间线保留过程记录

这个变化的重点在于“边界”。模型不是直接改聊天,也不能任意碰系统文件;它只能通过 TauriTavern 提供的工具在工作区内行动。所有关键步骤都会成为本次运行的事件。

三条生成路径

当前可以把 TauriTavern 的生成相关能力理解为三条路径:

路径用途边界
普通生成保持原有 SillyTavern 体验Agent Mode 关闭时走这条路径
Agent 生成多轮工具、工作区、时间线和提交工具结果不写入聊天楼层
显式工具能力后续给 MCP 或其它工具面板使用不自动拥有 Agent 运行时

Agent Mode 关闭时,普通生成、上游事件和旧扩展语义应保持不变。Agent Mode 开启后,普通发送、重新生成和右划生成新候选会进入 Agent 路径;切换已有 swipe 候选仍保持原行为。

当前运行流程

当前最小可用阶段仍会借用原有 SillyTavern 前端流程来整理本轮上下文,然后交给 Rust Agent runtime 执行。

text
用户发送消息

前端执行 Legacy Generate dryRun

捕获本轮 chat-completion payload 与最终激活的世界书快照

启动 Agent run

解析 Agent Profile

创建 run workspace 与时间线 journal

模型调用

工具调用、工作区写入、checkpoint

workspace.commit 请求提交聊天

前端宿主桥接 saveReply 保存消息

workspace.finish 结束运行

这里的 dryRun 只是兼容桥,不是长期架构的终点。它会触发原有 prompt 组织和世界书扫描,但不会执行最终模型请求。后续 TauriTavern 会逐步把更多上下文组装能力移动到结构化的 Agent 上下文中。

当前兼容桥的含义

当前 Agent 需要 chat-completion 路径。它会拒绝已经带有外部 toolstool_choicerole: "tool" 或 assistant tool_calls 的 prompt snapshot,因为 Agent 工具注册由 TauriTavern runtime 统一负责。

身份与工作区

Agent 运行中有几个容易混淆的身份:

名称含义
chatRef当前可定位的聊天引用,例如角色聊天或群聊
stableChatId聊天的长期稳定身份,用来跨重命名和导入保持一致
workspaceId同一个稳定聊天对应的 Agent 工作区身份
runId一次 Agent 运行的身份,每次发送、重新生成或新候选都会不同

同一段聊天可以有多次 Agent 运行。它们共享对话级的持久工作区,但每次运行都有独立的 run workspace、事件日志和输出文件。

工作区根目录

模型看到的是逻辑路径,不是系统文件路径。当前常用根目录如下:

根目录用途
output/最终输出。默认消息正文是 output/main.md
scratch/临时草稿、分析和整理
plan/计划文件。完整 Plan Mode 尚未开放,但目录已保留
summaries/摘要和阶段总结
persist/同一聊天后续运行可以继续使用的持久信息

工作区路径必须是相对路径,不能包含 ..、绝对路径、Windows 盘符或空字符。Agent 不能通过路径写法逃出工作区。

一些运行时文件不会暴露给模型直接读取,例如:

text
input/
tool-args/
tool-results/
model-responses/
checkpoints/
events.jsonl

这些文件用于记录和恢复运行过程,而不是作为普通工作素材开放给模型。

上下文来源

当前 Agent 能接触的上下文主要来自这些位置:

来源当前进入方式
当前生成 promptLegacy dryRun 捕获的 promptSnapshot.chatCompletionPayload
聊天历史chat.searchchat.read_messages 工具按需读取
世界书本次 dryRun 最终激活的世界书快照
SKILLS配置档案允许后,通过 skill.listskill.searchskill.read 按需读取
工作区文件通过 workspace 工具读取、搜索、写入和修改
工具结果作为 Agent 模型上下文的一部分回填下一轮,不写入聊天楼层

这保持了 SillyTavern 灵活 prompt 传统,同时避免把所有历史、所有 Skill 或所有工具结果一次性塞入模型上下文。

Agent Profile

Agent Profile 是一次运行的策略。它不只是“选择哪个模型”。

当前 Profile 可以控制:

范围当前能力
运行方式前台或后台、模型瞬时错误重试、最大轮数
系统提示词替换 Agent 默认运行说明
工具允许、禁止、工具说明覆盖、总调用预算
SKILLS可见 Skill、禁用 Skill、读取预算
工作区可见根目录、可写根目录
输出当前必须包含一个消息正文产物
Plan当前只开放 none,其它模式会明确失败

当前模型和 API 仍跟随本轮 prompt snapshot;Profile 还不会自动切换 provider 或模型。preset.ref 目前主要用于校验和记录,不会重写本轮 prompt snapshot。

工具系统

Agent 工具有两个名称:

名称用途
Canonical nameTauriTavern 内部和配置档案使用,例如 workspace.apply_patch
Model-facing alias暴露给模型和 provider 的安全名称,例如 workspace_apply_patch

工具调用不是聊天消息。一次工具调用会进入运行时间线,并把工具结果作为下一轮模型上下文的一部分。

工具错误分为两类:

类型行为
模型可修正错误is_error = true 的工具结果回填模型,例如路径不可见、参数缺失、patch 没有唯一匹配
宿主级错误让运行失败,例如 journal 写入失败、checkpoint 失败、保存冲突、模型响应结构破坏

这种区分让 Agent 可以修正普通操作失误,同时不会在关键状态损坏时静默继续。

时间线与事件

每次 Agent run 都有按顺序追加的事件。用户界面里的时间线是这些事件的投影。

常见事件包括:

事件类别示例
生命周期run_createdrun_completedrun_failedrun_cancelled
状态变化status_changed
上下文context_assembled
模型model_request_createdmodel_completedmodel_response_stored
工具tool_call_requestedtool_call_completedtool_call_failed
工作区workspace_file_writtenworkspace_patch_applied
检查点checkpoint_created
提交chat_commit_requestedchat_commit_completed
持久信息persistent_changes_committed

Provider 的流式 chunk 当前不是 Agent run event。Agent timeline 关注的是运行步骤,而不是把 provider 流式文本逐字投影出来。

提交到聊天

Agent 最终把工作区文件提交到聊天,而不是让模型文本直接变成消息。

默认提交路径是:

text
output/main.md

提交由 workspace.commit 工具触发。当前支持两种模式:

模式含义
replace用指定文件替换本次运行的 Agent 消息内容
append把指定文件内容追加到同一条 Agent 消息;首次 append 会创建消息

提交仍通过前端宿主桥接调用上游 saveReply(),遵守原有聊天保存队列和 windowed payload 语义。Rust 后端不会绕过聊天保存契约直接改 JSONL。

提交后,消息 extra.tauritavern.agent 会记录本次 Agent run 的标识、checkpoint、commit 和 artifact 摘要。聊天里只显示最终文本,过程细节保留在时间线和工作区里。

兼容性原则

当前 Agent 系统坚持这些边界:

  • Agent Mode 关闭时,Legacy Generate 行为不变。
  • Agent 工具结果不写入聊天楼层。
  • Agent 事件不伪装成 SillyTavern 的 GENERATION_*TOOL_CALLS_* 事件。
  • 模型调用继续走 TauriTavern 现有 API 设置、密钥、日志和平台策略。
  • 聊天提交继续走现有保存路径。
  • 配置无效、路径越界、工具被拒绝时明确失败或返回可修正工具错误,不静默降级。

当前未开放能力

这些能力在设计上有位置,但当前不应作为公开可依赖能力使用:

能力当前状态
完整 Plan Mode runtime仅保留 schema,当前只支持 none
Profile 自动切换模型尚未开放
MCP 工具尚未接入 Agent 工具集
shell 工具当前不作为默认能力
extension tool bridge尚未作为稳定能力开放
readDiffAPI 名称预留,当前会显式失败
rollbackAPI 名称预留,当前会显式失败
approveToolCallAPI 名称预留,当前会显式失败
resume-run / listRuns尚未作为用户能力开放

继续阅读

Released under AGPL-3.0.