Source:
03-echo-three-layer-architecture.md1. 设计目标
《回声》的目标不是把 LLM 当作世界状态的控制中心,而是让它在互动叙事游戏里承担“有限、可验证、可回退”的职责。
核心问题有三个:
- 玩家可以自由输入,但系统不能失控。
- AI 可以自然回应,但不能篡改世界事实。
- AI 可以提出行动请求,但不能跳过游戏规则直接执行。
因此,项目把能力拆成三层。
2. 三层职责
L1:提示词与叙事约束层
职责:
- 固定 ECHO-7 的身份与语气
- 约束它的拒答边界
- 限制它对剧情真相的暴露时机
- 约束输出格式
这层解决的是“怎么说”的问题。
L2:可验证记忆层
职责:
- 保存门禁、线索、任务阶段、电力状态等世界事实
- 在多轮对话中为模型提供状态锚点
- 让玩家已知信息和模型读取信息尽量来自同一套系统记录
这层解决的是“依据什么说”的问题。
L3:工具调用执行层
职责:
- 把模型的行为请求转成结构化命令
- 通过白名单、目标 ID、剧情门槛和 Receiver 路由做执行裁决
- 最终把合法请求映射到 Unity 系统
这层解决的是“能不能真的做”的问题。
3. 三层之间的关系
这三层不是并列拼接,而是严格串联:
- 玩家输入先进入 LLM 对话主链。
- 提示词和状态上下文共同约束模型输出。
- 模型输出被拆成可见文本与命令请求。
- 命令请求必须经过执行层裁决。
- 执行结果再回写状态层。
这样形成一个闭环:表达、状态、执行互相校验。
4. 主数据流
根据文章中的时序图和代码节选,核心链路可以抽象成:
- 玩家发送消息
LLMChatManager将消息写入完整聊天记录- 立即触发一次存档
ContextMemory更新状态感知- LLM 服务携带上下文向模型请求回复
- 模型返回文本,必要时附带命令信封
- 管理器写入 AI 回复并再次存档
- 若命令满足门槛,则进入命令路由
- 若需要摘要,则异步更新总结并重组 prompt
这条链说明:存档、记忆、模型请求和系统执行都处于同一条可追踪流程中。
5. 为什么不能只靠提示词
只靠提示词会出现三类问题:
- 角色漂移:长对话后身份与口吻不稳定
- 状态漂移:模型口头陈述与系统事实脱节
- 执行越权:模型说“门开了”,但系统并没有真正开门
Facts 解决第二类问题,执行层解决第三类问题。只有三层完整,系统才真正具备可控性。
6. 架构边界原则
项目的关键边界可以整理成以下原则:
- 模型可以解释线索,但不能单方面宣布状态已经改变。
- 世界事实以系统记录为准,不以角色台词为准。
- 玩家可见文本和可执行命令必须分离。
- 关键命令必须绑定白名单、目标对象和剧情门槛。
- 命令被拒绝时,系统仍然需要有兜底推进能力。
这些原则实际上定义了“模型是叙事参与者,不是世界裁判”。
7. 系统价值
这套三层结构带来的价值有四个:
- 让开放式对话进入可控范围
- 让关键状态具有可追溯性
- 让副作用执行具备安全边界
- 让原型更容易拆解成答辩、论文和博客中的可展示模块
从毕业设计视角看,这套架构最强的地方不是“智能感”本身,而是它能解释清楚每一层到底在解决什么问题。
8. 对网站内容的意义
这篇技术内容在整个网站中的地位相当于总纲。它决定了另外几篇文章的阅读方式:
- Facts/Function Calling 是三层中的状态层与执行层细化
- Unity 系统文章是执行层落地
- 论文验证文章是三层效果的证据组织方式
因此,三层架构文档应被视为整个《回声》技术体系的总设计说明。