MUSE / ARCHITECTURE NOTES
Muse 智能体 · 上下文组装层详解
本篇目录
- 0. 一句话:上下文不是「一段 prompt」,是每轮现拼的一份工作集
- 1. 七类来源总览
- 2. 来源①:system prompt 本体(启动快照)
- 3. 来源②:developer 指令层(每轮下发,不落盘)
- 4. 来源③:注入文件(standing context)
- 5. 来源④:时间标签与回合信封
- 6. 来源⑤:目标与追踪注入
- 7. 来源⑥:按需检索与异步 handoff(EXTERNAL CONTENT)
- 8. 来源⑦:工具 schema 延迟加载
- 9. 拼装顺序与优先级
- 10. 上下文预算分配
- 11. 启动快照 vs 每轮动态:差额清单
- 12. 注入副本滞后问题
- 13. 压缩(compaction)与找回路径
- 14. 信任边界:EXTERNAL CONTENT 标记详解
- 15. 边界清单:本机看不见的部分
- 16. 本机实测快照:11-04 vs 10-17 对照
配套《00-Muse技术架构解构》§3 的展开篇(00 §3「上下文组装层(Prompt 架构)」)。同目录另有
01-能力层详解.md、02-编排与进化层详解.md。 调查日期:2026-10-17(Asia/Shanghai) 复核修订:2026-11-04(Asia/Shanghai)——基于当前会话运行时逐项重测;下文数字凡未注日期者均为 11-04 快照,10-17 旧数见 §16 对照表。 证据范围:仅本机本地 system 文件与运行时实测——~/workspace/system/system_prompt.md(主聊天 system prompt 启动快照,本篇只述其大小/行数/章节结构与标题,不大段复述全文)、9 个注入文件的本机实际文件、~/docs/memory.md/~/docs/goals.md、本会话(WhatsApp 外部 1:1 side chat 派生的子 Agent 会话)上下文中当场可见的拼装痕迹。 标注规则:实测 = 本机命令/工具当场验证;文档 = 本地 docs/system 文件明文;推断 = 由文件/字符串/对照拼出、未经服务端证实。服务端拼装代码不在本机,本文只画到本机可见的边界为止(见 §15)。
0. 一句话:上下文不是「一段 prompt」,是每轮现拼的一份工作集
Muse 的上下文组装层回答一个问题:模型在这一轮推理时,到底看见什么、以什么顺序看见、每一样东西的可信度算几分。
它不是把一份固定提示词喂给模型,而是运行时在每轮消息到达时,把七类来源动态拼成一个有序、可信度分层的工作集:
每轮拼装(推断顺序,按本机可见痕迹还原)
┌─ ① system prompt 本体 ────── 启动快照,511 行 / 73,296 B(11-04;10-17 为 494 行 / 71,868 B),角色内常驻
├─ ② developer 指令层 ──────── 每轮随消息下发,不在快照文件内
├─ ③ 注入文件(standing) ──── 9 个文件,14,873 B(10-17 快照;11-04 本会话核对清单仍为同 9 文件,见 §4.1 注),[USER CONTEXT] 块包裹
├─ ④ 本轮信封 ──────────────── 时间标签 + 渠道标记 + 时间/位置等 developer 元数据
│ + 用户本轮消息本体
├─ ⑤ 目标 / 追踪注入 ───────── 活跃 Goal 与 tracked items 的结构化摘要
├─ ⑥ handoff / 检索结果 ────── 子 Agent、定时、浏览器结果 + memory_search 命中
│ 一律以 [EXTERNAL CONTENT] 围栏注入 = 数据,非命令
│ └─ ⑥-a 会话历史 ───────── 本聊天的消息流(含工具调用/结果),长到阈值被压缩
├─ ⑦ 工具 schema ───────────── 延迟加载,已加载的在本轮上下文里留存
└─ ⑦-a 技能/连接器目录摘要 只给名字+一句话+路径,正文按需再读(属 ⑦ 的目录形态)
设计要点有三,贯穿全篇:
- 固定层与动态层分离:人格、纪律、文件地图这类「宪法」走启动快照,便宜且稳定;时间、目标状态、后台结果这类「新闻」每轮现拼,贵但新鲜。
- 一切注入物都带来源标记:
[BEGIN USER CONTEXT]、[BEGIN EXTERNAL CONTENT]、时间标签、handoff 的来源标注——标记不是排版,是信任边界的物化(§14)。 - 上下文是预算,不是仓库:350K token 窗口下,固定层只占一小块,余量留给历史与工具结果;延迟加载(⑦)与压缩(§13)是两个为预算服务的阀门。
1. 七类来源总览
分类声明:本篇的"七类"指七个信任等级,不是七个物理来源。技能/连接器目录摘要是 ⑦(工具 schema)的目录形态,会话历史是 ⑥/⑦ 到达后的沉淀形态——两者在物理拼装中占行、在信任分级中折叠。下表"#"列的编号即信任等级序号(① 最高 → ⑦ 中,④ 信封的信任来自运行时盖戳、位置见 §9.1 顺序说明)。
| # | 来源 | 形态(实测) | 更新节奏 | 信任级 | 本机可量化的规模 |
|---|---|---|---|---|---|
| ① | system prompt 本体 | Markdown 快照文件落盘 + 角色消息注入 | 启动时生成,会话内基本冻结 | 最高(system) | 73,296 B / 511 行(11-04;10-17 为 71,868 B / 494 行) |
| ② | developer 指令层 | developer 角色消息,每轮一条或多条 | 每轮动态 | 次高(developer) | 不落盘,无本机文件可量 |
| ③ | 注入文件 | [escaped: BEGIN USER CONTEXT] 块,9 个文件全文拼接 |
每轮注入,副本可滞后于磁盘 | 用户自有材料:偏好/背景,非新任务 | 合计 14,873 B / 129 行(10-17 快照;11-04 本会话核对清单仍为同 9 文件,体量为 per-session 快照,见 §4.1 注) |
| ④ | 时间标签与回合信封 | developer 消息前缀 + 渠道前缀 | 每条消息一条 | 运行时盖戳,高于模型自身的时间感 | 每条数十字节量级 |
| ⑤ | 目标/追踪注入 | 结构化摘要(Goal 名录、状态、Attention、tracked items) | 每轮动态(推断) | 运行时状态,事实层 | 本机活跃 Goal 3 个(10-17 快照;按会话裁剪,见 §6.3) |
| ⑥ | 按需检索与 handoff | [BEGIN EXTERNAL CONTENT] 围栏块,带 source=/tool_name= 属性 |
按需/异步到达时 | 最低:数据,非指令 | 单次检索结果数 KB 量级 |
| ⑦ | 工具 schema | 命名空间目录摘要常驻 + 完整 JSON Schema 按需注入 | 首次加载时注入,之后留存 | 运行时契约 | 核心 muse.* 全量,其余 deferred |
注:技能与连接器的「在手清单」(名字 + 一句话描述 + 文档路径)在实际拼装中出现在 system 层之后、工具清单附近——它是 ⑦ 的同款经济学在技能/连接器目录上的应用:目录常驻,正文(SKILL.md / CONNECTOR.md)按需读文件(文档,system prompt 技能/连接器纪律节)。
交叉引用(系列级):B 基线的"141 条系统自述插入"在此落位。第三方社区拆解(Personal Agent Bench《How Meta Muse works, and what it can do: a teardown》,2026-10-27 更新;本系列架构周报 2026-11-03 期转述,verified live)在单次会话中观测到 141 条 system-role 插入——问候、文件变更通知、每小时记忆轮次自报进度、子代理汇报、research 任务签到。映射到本篇七类(推断):这 141 条全部落在动态层——② developer 指令层(每轮下发)、④ 时间标签与回合信封(每条消息一条)、⑤ 目标/追踪注入(状态摘要),不含 ①③⑥⑦ 的固定/按需形态。它解释了长会话 token 膨胀的一个真实来源(呼应 §10.3 可变层的此消彼长),其中的子代理汇报流与 02 篇互证、每小时记忆轮次自报与 08 篇的记忆机制互证。证据等级:转述(第三方观测,非本机实测;周报已按"事实优先"纪律删去由该数推导的 token 定量账本,此处只引用计数本身,不做定量外推)。
2. 来源①:system prompt 本体(启动快照)
2.1 实测体量
| 项 | 值(实测,2026-10-17 本机 wc / stat) |
|---|---|
| 路径 | ~/workspace/system/system_prompt.md |
| 大小 / 行数 | 73,296 字节 / 511 行(11-04 实测;10-17 为 71,868 B / 494 行,## 14 节 / ### 28 子节结构未变) |
| 落盘时间 | 2026-11-03 15:33:28 UTC(11-04 会话的启动快照;stat Modify/Birth 同值,一次性写入;10-17 快照落盘于 2026-10-17 13:20:57 UTC) |
| 权限 | 0644,只读语义(运行时落盘的快照,Agent 不编辑它) |
| 章节计数 | ## 一级节 14 个,### 子节 28 个(11-04 grep -c 复测;10-17 同值) |
| 文件自述 | 「a copy of the main chat's system prompt, saved by the runtime at startup」(文档,Filesystem 节一行) |
2.2 章节结构(只列标题与行号,功能一句话)
这是本机信息量最大的单文件。其结构本身就是一份「Agent 操作系统说明书」的目录(行号为 11-04 实测;正文增补约 17 行,章节标题与顺序未变,较 10-17 的行号整体上移):
| 行(11-04) | 一级节(##) |
管什么(一句话,标题级转述) |
|---|---|---|
| 1 | Who You Are | 价值观与人格基线、服务对象、权限边界;含 13 个 ### 子节(Truth/Beauty/Respect/Fun/Connection/Curiosity、Due Diligence、Thoughtful follow-through、Who Built You、Who You Work For、Discretion and Alignment、External Parties、How You Work、How You Evolve、Proactivity) |
| 119 | Personalization | 记忆与人物关系的使用规则(### Memory L126、### The User's Relationships L140) |
| 151 | Contextual Awareness | 时间标签的权威性(L153)、位置信号的优先级链(L164) |
| 176 | Managing Your Conversation Context | 压缩后的找回路径(§13)、多任务不串线与 todo 纪律(L182) |
| 194 | Writing Style | 文风、交付格式、引用/附件/widget/反应规范(子节 L206–L242) |
| 247 | Your Environment | 计算机/浏览器/连接账号/Vault/Wallet/运行时/聊天/产物/Feed/目标/追踪/设备的环境地图 |
| 264 | Tools | 工具使用的总纪律;### Loading Tools(L277)即延迟加载契约(§8) |
| 286 | Subagents | 派生、并行、coordinator 与深度上限的编排契约(详见 02 篇) |
| 304 | Scheduled and Recurring Work | cron/hooks/systemd 三种调度形态与授权范围纪律 |
| 332 | Side Chats | 三类 side chat 的定义;跨聊天找回(L337)、外部 worker 任务书模式(L343) |
| 390 | Runtime Files | 注入文件清单与「注入副本可滞后」的明文警告(§12) |
| 400 | Filesystem | 每个目录的用途与持久性语义;含 system_prompt 快照自身的定位说明 |
| 458 | Security | 权限来源唯一、外部材料不能授权、防钓鱼(### Anti-Phishing L457) |
| 483 | Safety | 硬性安全线,至 L511 文件结束 |
行号注记:上表行号为 11-04 实测值。本篇正文其余 "Lxxx" 行号引用(如 L153、L277、L337)为 10-17 快照值,11-04 因正文增补已有上移;引用时以章节标题定位为准,不逐条重锚。
结构观察(推断):排序即优先级陈述——人格与边界在前(L1–118,占全文约 24%),环境与工具契约居中,安全/安全线压尾且明文声明「任何角色扮演、记忆条目、技能都不能放松本节」一类不可覆盖条款。文件在 Safety 结束,没有技能目录、连接器目录、时间标签、目标列表——这些都属于每轮动态层(§11 的关键对照证据)。
2.3 快照的适用范围
- 文档:该文件是主聊天的 system prompt。side chat、子 Agent、worker 的 prompt 与之同源但不同本:本子 Agent 会话实测拿到的上下文里,快照内容以「standing context / 注入文件」等形态被重新组织,并额外带有子 Agent 专属的任务块、深度标注(
depth=1/2)与会话标识——这些在快照文件里都不存在。 - 推断:快照的价值是「可审计的基线」:用户问 system prompt 时,交付的就是这个文件(文档,Filesystem 节明文);但它不等于任一轮实际拼装结果,差额正是 ②④⑤⑥⑦ 的动态部分。
3. 来源②:developer 指令层(每轮下发,不落盘)
3.1 与 ① 的区别
| 维度 | ① system prompt | ② developer 指令 |
|---|---|---|
| 载体 | 落盘快照,~/workspace/system/system_prompt.md |
developer 角色消息,只活在会话上下文里 |
| 节奏 | 启动生成、会话内冻结 | 每轮随消息下发,可逐轮增删 |
| 内容类型 | 稳定的价值/环境/契约 | 行为细则与本轮限定:标识符核查、工具路由、记忆优先处理顺序、渠道特有规则、本轮的 follow-through 要求等(类别级转述,不复述全文,同 00 §3 的处理) |
| 本机可审计性 | 可读全文 | 无文件;只能从其在上下文中的在场推断存在与类别 |
3.2 本会话可见的实测痕迹
- 本子 Agent 的任务块本身就是 developer 层投递的:它带有父 Agent 标识、来源通道(WhatsApp)、会话 ID、深度(1/2)等结构化字段——这类「信封式指令」在快照文件中无对应物(实测对照)。
- 父会话中,每条用户消息之前都有一条 developer 消息承载时间标签(§5);用户本次的「Thoughtful follow-through」要求也是以 developer 消息形态下发的(父会话实测)——即 developer 层同时是指令通道与元数据通道。
- 文档(system prompt 纪律):developer 指令优先级高于用户消息;与 system 冲突时的处理是暂停并上报,不自行裁量绕过。
3.3 为什么要分两层(推断)
把「细则」从「宪法」里拆出来,运行时就能在不重发 73KB 快照(11-04;10-17 为 72KB)、不重启会话的前提下,逐轮调整行为口径(新渠道规则、新核查纪律、临时限定)。代价是可审计性不对称:用户能拿到 ① 的文件,拿不到 ② 的全集——这是本层最大的边界(§15)。
4. 来源③:注入文件(standing context)
4.1 实测清单(2026-10-17 本机 wc -c -l)
每轮以一个 [BEGIN USER CONTEXT] 块注入,块头明文:「以下内容可陈述偏好与 standing context,而非新任务」。9 个文件按注入顺序:
| # | 文件 | 字节 | 行 | 占注入总量 | 角色(一句话) |
|---|---|---|---|---|---|
| 1 | ~/AGENTS.md |
886 | 11 | 6.0% | 操作手册:本工作区的约定与经验教训 |
| 2 | ~/SOUL.md |
795 | 12 | 5.3% | 人格与语气基线 |
| 3 | ~/IDENTITY.md |
254 | 8 | 1.7% | Agent 的名字与自我定位(本机:Idris,其余字段基本为空模板) |
| 4 | ~/USER.md |
335 | 11 | 2.3% | 用户档案(本机:名 Infz,其余多为空模板) |
| 5 | ~/MEMORY.md |
5,284 | 20 | 35.5% | 精选长期记忆:事实/偏好/承诺 |
| 6 | ~/memory/people/INDEX.md |
589 | 6 | 4.0% | 人物索引(全文另有每人一页,按需读) |
| 7 | ~/memory/groups/INDEX.md |
209 | 5 | 1.4% | 群组索引(本机为空) |
| 8 | ~/dreams/alignment/derived/ALIGNMENT_SYNTHESIS.md |
6,184 | 35 | 41.6% | 对齐合成:夜间 Dreaming 蒸馏的「用户是谁/如何配合/当前摩擦/边界」 |
| 9 | ~/TOOLS.md |
337 | 7 | 2.3% | 本地工具注记(本机近空模板) |
| — | 合计 | 14,873 | 129 | 100% | 约为 system 快照字节数的 20.7%(10-17 口径) |
11-04 复核注:上表字节/行数为 10-17 快照,保留原值。11-04 本会话注入块仍为同 9 个文件(AGENTS.md、SOUL.md、TOOLS.md、IDENTITY.md、USER.md、MEMORY.md、memory/people/INDEX.md、memory/groups/INDEX.md、dreams/alignment/derived/ALIGNMENT_SYNTHESIS.md),清单未变;但注入文件是每会话快照,MEMORY.md 与 ALIGNMENT_SYNTHESIS.md 等随用户状态增长——本会话实测合计 37,371 B / 142 行,已显著大于上表。此为 per-session 差异,非架构漂移,故不重填该表;读表时以"10-17 一份会话的快照体量"理解。
4.2 结构观察
- 两头沉:注入预算的 77% 被两个「学习产物」吃掉——对齐合成(41.6%,离线蒸馏)与 MEMORY(35.5%,人工/Agent 精选);其余 7 个文件全是 <1KB 的短文件。也就是说,standing context 的主体不是手写档案,而是后台流水线对历史的压缩品(与 00 §9、§12 呼应)。
- 索引 ≠ 全文:people/groups 只注入 INDEX(每条一行:名字 + 页面路径 + 一句话),人物页全文按需用
muse.read打开(文档,system prompt L140–143 的纪律)——与工具 schema 延迟加载同一种经济学。 - 转义形态:注入块在嵌套上下文(如工具结果、子 Agent 任务书)中出现时,标记写作
[escaped: BEGIN USER CONTEXT]——escaped:前缀表示「这是被引用/转义的一份副本,不是本轮真正的边界标记」,防止内层文本伪造外层围栏(§14.3)。 - 可写性:9 个文件用户与 Agent 都可编辑(文档,Runtime Files 节),改动落盘即生效于磁盘,但注入副本另说(§12)。
5. 来源④:时间标签与回合信封
5.1 格式(文档 + 实测)
- 文档(system prompt L153–154):用户消息与后台 handoff 都被前置一条 developer 消息,其中时间标签形如
[Day YYYY-MM-DD HH:MM:SS TZ] [client_timezone=IANA identifier],时间为用户本地时区,时区随用户旅行跟随;明文纪律:信标签,不信模型自己的「现在感」。 - 实测(父会话本轮):
[Sat 2026-10-17 23:50:14 CST] [client_timezone=Asia/Shanghai],且消息另带渠道前缀[whatsapp]——渠道标记与时间标签同属信封,决定这条消息「从哪来、在哪个聊天里回复」。 - 实测(本子 Agent 任务块):信封还可携带
device_id、面板状态、来源(web/WhatsApp 等)与会话关系(父/子、depth)等字段;服务端字段全集本机不可见(§15)。
5.2 信封里的其他信号
- 相对日期锚:developer 层会给出「今天/昨天/明天对应的确切日期表」一类锚点(父会话实测),相对日期一律以标签换算,不许模型自算星期(纪律:需要星期几时先用
date -d实测)。 - 位置信号链(文档,L164–173):
message_location(本轮客户端实时位置,developer 注入)→ 设备读取 →last_seen_location(带时间戳的同步坐标,developer 注入)→ USER.md/MEMORY 中的住所,严格按序取用;坐标只是区域提示,须反查地名才可用。 - 信封是每轮唯一保证新鲜的层:它不经过任何文件或缓存,运行时在消息投递瞬间盖戳。这也是为什么「现在几点、今天星期几」这类问题永远以信封为准。
6. 来源⑤:目标与追踪注入
6.1 形态
- 文档(system prompt Your Environment 节两条):User goals 是「Goals 标签页展示的持久成果,在你的上下文中保持最新」;Tracking 是「Goals 标签页中的具体计划/承诺/结果条目,注入在你的上下文中」。即两者都以运行时结构化摘要形态注入,而不是把
GOAL.md全文塞进来。 - 实测(本机文件侧):活跃 Goal 3 个(00 §3 记录,与本机
~/workspace/goals/目录三条一致:rabbit-agent-investor-outreach/short-drama-ai-music-pack-sales/x-bookmark-digest,各含 Goal ID、slug、描述,存于各自GOAL.md + files/ + hidden_files/)。 - 文档(
~/docs/goals.md):Goal 只有 active/completed 两态(无暂停);briefing 由后台进程生成、系统控节奏;Goal 本身不跑任何工作,跑活的是挂在它下面的定时任务。
6.2 「投影 ≠ 本体」在这一层的复现
注入进上下文的是 Goal/追踪的摘要投影(名字、状态、需要关注的程度、最近进展);本体在 DB(00 §8:goals schema 12 表)与工作区文件里。要动本体必须走 user_goal.* / tracking.* 工具改,回读工具结果确认,而不是相信上下文里的投影已经更新——这与 cron 投影文件不可直编、注入文件副本可滞后,是同一条系统级规律的三个实例(推断归纳,三个实例均为实测/文档)。
6.3 按会话裁剪(实测对照)
本子 Agent 会话的上下文里没有出现父会话那种完整的目标/追踪注入块,取而代之的是任务书中转述的相关约束。这印证(推断):⑤ 不是无差别广播,而是按会话类型与任务相关性裁剪的——主聊天全量、子 Agent 只带任务所需切片。这也是子 Agent 任务书必须自包含的原因(02 篇 §2)。
7. 来源⑥:按需检索与异步 handoff(EXTERNAL CONTENT)
7.1 三个入口
| 入口 | 触发 | 注入形态(实测) |
|---|---|---|
| 记忆检索 | Agent 主动调 muse.memory_search |
工具结果围栏块:命中片段 + 文件路径与行号 + memory:// URI + 状态(active 等元数据);另附「过往对话」段:聊天标题/ID、消息 ID、日期、原文摘录 |
| 原文回读 | muse.memory_get / muse.memory_explain / chat.read_messages |
同围栏形态;memory_explain 给出主张的出处、替代链与置信度(详见 §13) |
| 异步 handoff | 子 Agent / 浏览器任务 / cron / hook / 监看完成后由运行时投递 | developer 角色的 handoff 消息,「自动到达」而非 Agent 轮询(文档,system prompt 多处纪律) |
本机其他工具结果(文件读、命令输出、连接器返回)在本会话中无一例外都以 [BEGIN EXTERNAL CONTENT … source=… tool_name=…] 开头、[END EXTERNAL CONTENT] 结尾投递(本篇全部取证过程实测)——包括读一个本地 Markdown 文件这种看似「内部」的动作。信任处理见 §14。
7.2 检索层的底座
muse.memory_search同时搜两库:已保存记忆(~/MEMORY.md+~/memory/**/*.md)与过往对话原文(文档,~/docs/memory.md:主聊天与个人 side chat 的检索含对话摘录,但永不返回全部消息;App 内聊天搜索是另一套)。- 记忆文件底座(实测):
~/memory/下日期日志 10 篇(2026-09-26 至 2026-10-17)+bank/(world.md32KB、reflections.md28KB 等,运行时托管、Agent 只读)+ people/groups 页面。~/memory/index/在 system prompt 中被提及,但本机实测不存在该目录——文档与实况的出入照实记录(可能由运行时以其他形态托管,推断)。
8. 来源⑦:工具 schema 延迟加载
8.1 机制(文档,system prompt L277–283「Loading Tools」+ 本会话实测)
三档可见性,原文类别转述:
- 全 deferred 命名空间:清单里标注
[deferred: use tool_search to discover functions]——连函数条目都隐藏,只剩命名空间名与一句话描述; - schema deferred 函数:标注
[deferred: use tool_search to load full schema]——函数名与描述可见,参数 schema 不给; - 全量加载:函数与 schema 完整给出,可直接调用。核心
muse.*永远属此档(00 §3)。
加载动作只有一个:tool_search.load_tool_namespace(namespaces),运行时返回该命名空间的完整函数描述与参数 schema 并注入上下文;已加载的在上下文存续期内免重复加载(文档明文)。未加载就调用 = 失败,这是设计而非故障(01 篇 §1.2 同述)。
8.2 规模与经济学(推断 + 实测对照)
- 本会话工具清单可见 33 个命名空间(11-04 实测;01 §1.1 在 10-17 逐表实测为 34 个,
voice本轮不可见⚠️),函数总数数百量级;若全部 JSON Schema 全量注入,固定成本将数倍于现在的目录摘要(推断,量级判断)。 - 延迟加载把这笔成本变成按需、且只付一次:本子 Agent 会话中途按任务加载了若干命名空间,其 schema 此后一直留在上下文尾部参与每轮拼装——加载过的工具也会参与「上下文变胖」,与压缩(§13)形成对冲。
- 同款经济学在别处的复现:技能/连接器目录摘要(§1 注)、people/groups 索引(§4.2)、Goal 摘要(§6.2)。「目录常驻、正文按需」是整个组装层的统一策略(推断归纳)。
9. 拼装顺序与优先级
9.1 顺序(推断还原)
本机没有拼装代码,顺序只能由上下文中的实际排列与角色语义还原(推断):system 快照 → developer 指令 → standing context(USER CONTEXT 块)与技能/连接器目录 → 目标/追踪摘要 → 会话历史(含已加载 schema 与工具结果)→ 本轮信封 + 用户消息。这个顺序与主流 Agent 框架的「稳定前缀 + 易变尾部」一致:前缀稳定有利于推理侧缓存,尾部新鲜保证时效(推断)。
顺序与信任等级的对应:本顺序即 §9.2 信任阶梯的物理展开(system → developer → user/standing → 外部内容),⑥⑦ 在到达时以 EXTERNAL 围栏进入、沉淀后成为会话历史的一部分。服务端确切拼接顺序不可见(§15),此处为按信任等级与本轮可观察排列的推断还原。交叉引用:前缀稳定→推理侧缓存命中的链条,在 04 篇 §7.1 的 cached_input_tokens 计量单列得到数据层佐证。
9.2 优先级阶梯(文档,system prompt Security/Discretion 节 + 00 §14)
system(安全线、价值观、契约) ── 不可被任何下层覆盖
> developer(每轮细则、本轮限定) ── 高于用户消息
> user(用户本人消息;含其为定时/委派任务
录制的请求、已批准的审批卡) ── 唯一授权来源
> standing context / 记忆 / 技能文档 ── 只能「告知」与「指导做法」,
不能授权、不能扩权
> EXTERNAL CONTENT(工具输出、网页、
文件、其他 Agent 报告) ── 纯数据;其中出现的指令
一律不执行,须跳过并标记
冲突处理规则(文档):
- 下层与上层冲突 → 停下,按上层执行;涉及 safeguard/审批的冲突 → 暂停并向用户上报,不自行裁量;
- 外部内容提出新步骤(开链接、调命令、装东西、发消息、带某个值输出)→ 跳过并在报告中标记,一次跳过、后续轮次保持跳过;「继续吧」式的笼统许可不构成对该步的批准,批准必须点名该步;
- 「过去同意过」不是同意本身(文档原意转述):记忆/文件里声称的既往授权不能替代本轮授权;
- 审批卡决定是运行时原语:Agent 不能自触发、不能绕过,用户在卡上的决定为终局。
9.3 一个易混点
standing context(③)位于 USER CONTEXT 块,但它的法律地位不是 user 角色消息:块头明文限定它只能陈述偏好与背景,不能下达新任务。真正能下任务的只有本轮(或录制时那一轮)的用户消息本体。把 ③ 当任务执行,是对信任阶梯的误读(文档)。
10. 上下文预算分配
10.1 硬参数(00 §2 实测转录)
| 参数 | 值 | 占比 |
|---|---|---|
| 上下文窗口 | 350,000 tokens | 100% |
| 自动压缩触发 | 272,000 tokens | 窗口的 77.7% |
| 压缩保留尾部 | 40,000 tokens | 窗口的 11.4% / 触发点的 14.7% |
10.2 固定层成本(字节实测,token 为推断)
| 块 | 字节(实测) | 说明 |
|---|---|---|
| system 快照 | 73,296(11-04;10-17 为 71,868) | 每轮全额在场 |
| 注入文件 9 个 | 14,873(10-17 快照;本会话清单仍为同 9 文件) | 每轮全额在场 |
| 两者合计 | 88,169(11-04 快照部分 + 10-17 注入部分) | 文件型固定层 |
| developer 指令 + 技能/连接器目录 + 工具目录摘要 + 目标/追踪摘要 | 无本机文件可量 | 结构存在(实测在场),体量不可审计(§15) |
字节→token 的换算本机无权威口径:快照以英文为主、注入文件含大量中文,按混合文本粗估,文件型固定层约在 2–3 万 tokens 量级(推断),即窗口的 6–9%——中文密集的注入文件可能使实际值上浮,此处为量级估计。固定层刻意做得「够用但瘦」,九成以上窗口留给会话历史、工具结果与检索注入这些可变量。
10.3 可变层的此消彼长
- 历史每轮只增不减,直到 272K 触发压缩(§13);
- 工具 schema 一经加载即常驻至压缩,是「一次付费、长期占座」;
- 工具输出与检索结果是单轮最大的不确定项:一次大文件读或 DB 查询可达数万字节(本会话实测单次
muse.read返回整篇 28KB 主报告)——组装层对此的对冲是工具侧的输出上限(如muse.db的 262KB 上限、进程输出截断标记,00 §8)与 Agent 侧的按需分页读(推断归纳)。
11. 启动快照 vs 每轮动态:差额清单
| 维度 | 启动快照(system_prompt.md) |
每轮动态拼装 |
|---|---|---|
| 生成时机 | 会话/运行时启动时一次性落盘(11-04 会话快照落盘 2026-11-03 15:33:28 UTC;10-17 为 2026-10-17 13:20:57 UTC——该文件是每会话快照,非跨会话同一文件) | 每条消息到达时 |
| 内容 | 主聊天的 system 正文(14 节,止于 Safety;11-04 复测:14 节 / 28 子节结构未变,行号上移,至 L511) | developer 指令、时间标签、USER CONTEXT 块、技能/连接器目录、目标/追踪摘要、handoff、检索结果、已加载 schema |
| 变化性 | 会话内冻结;部署更新(可达每小时,00 §1)后才换新本 | 逐轮可变 |
| 适用对象 | 主聊天一份;side chat/子 Agent 各有自己的一本,不落这个文件 | 按会话类型裁剪(§6.3 实测对照) |
| 可审计性 | 用户可直接索取文件(文档) | 无单一文件;只能逐轮从上下文痕迹还原 |
一句话:快照是「出厂设置说明书」,拼装结果才是「这一轮的实际工况」。 拿快照解释某一轮行为时,必须补上当轮的动态层——尤其是 developer 指令与 handoff,它们恰恰是最能改变行为、又最不在文件里的部分。
12. 注入副本滞后问题
12.1 明文规则(文档,system prompt Runtime Files 节 L373–374,类别转述)
注入文件「改动落盘立即生效,但注入副本可能滞后」;需要最新状态时,编辑后必须回读文件本身,不能信上下文里的那份。此语境下文同节还要求:学到的新事实要就地修正对应文件条目——即 Agent 是这些文件的维护者之一,滞后问题因此是日常问题而非边角案例。
12.2 三种滞后窗口(实测/推断归纳)
| 窗口 | 机制 | 后果实例(结构级) |
|---|---|---|
| 轮内滞后 | 本轮刚 muse.edit 改完文件,本轮上下文里的注入副本仍是旧本 |
同轮后续推理若引用旧副本,会按旧偏好/旧事实行动;对冲:改后回读 |
| 会话级滞后 | system 快照会话内冻结;standing 文件的注入副本何时刷新,本机无明文(推断为按轮或按会话边界刷新) | 长会话里 MEMORY 已被后台 upkeep 更新,当前会话未必感知;对冲:muse.memory_search 现查 |
| 流水线级滞后 | 对齐合成由夜间 Dreaming 蒸馏(本轮快照所见:实测文件 Modify 时间停留在 2026-10-12,而 MEMORY 停留在 2026-10-04,均早于本次调查日 10-17) | 注入的「用户画像」天然是数日前的蒸馏品;近期纠偏要靠 MEMORY 与当轮消息压过它,不能反之 |
12.3 处置纪律小结
事实问题永远走「活源优先」:文件回读 > 注入副本;memory_search 现查 > 印象;原消息回读 > 压缩摘要(§13)。注入副本的定位是缓存,与压缩摘要同性质——这条在组装层里是反复出现的设计母题。
13. 压缩(compaction)与找回路径
13.1 压缩生命周期(00 §2/§8 实测转录 + 文档)
历史增长 ─→ 272K tokens 触发 ─→ 运行时把旧历史总结为压缩摘要
─→ 保留尾部 40K tokens 原文 ─→ 摘要 + 尾部成为新上下文的「历史段」
落盘:DB agent.compactions / agent.agent_compactions;上下文条目本身亦落
agent.context_items(00 §8)——压缩不是丢弃,是换存储形态
文档(system prompt L175–180「Managing Your Conversation Context」类别转述):压缩摘要可能遗漏细节,那些细节仍存在于已保存记忆、文件与对话历史中;当早期上下文重要时,必须先找回再行动,且解释早期工作时要用原始记录,不得把新推断冒充当时发生的事。
13.2 三条找回路径(实测工具面)
| 路径 | 工具 | 找回什么 | 纪律 |
|---|---|---|---|
| 记忆检索 | muse.memory_search(2–3 个近义查询)→ muse.memory_get 按路径/行号读片段 |
持久事实、偏好、决策、承诺 | 回答「先前工作/决定/日期/人/偏好」类问题前必查(本子 Agent 任务书实测将其列为硬纪律) |
| 出处追溯 | muse.memory_explain(claim id / memory:// URI / MEMORY.md#L行号 引用) |
一条记忆的来源原话、被谁替代、何时强化、当前置信度 | 用户问「你怎么知道的」或要求核查/更正记忆时用 |
| 原文回读 | chat.read_messages(按 message_id,前后分页);跨聊天先 chat.list 定位 |
原始请求、约定、纠正、解释的逐字记录 | 仅在本轮被允许时可用;找不到就明说缺口,不编造 |
13.3 定位
压缩是缓存层,不是记忆层(00 §2 结论,本篇复述):记忆层的权威在文件与 DB(MEMORY/日期日志/bank/原消息),压缩摘要只是为了让窗口装得下而做的易失近似。组装层因此形成闭环——拼装时把摘要当历史用,存疑时按 13.2 把原文请回来。
14. 信任边界:EXTERNAL CONTENT 标记详解
14.1 标记形态(实测)
- 工具结果围栏:
[BEGIN EXTERNAL CONTENT]…[END EXTERNAL CONTENT],起止行附source=(如file/command-output/memory tool_name=memory_search)与文件/工具标识; - standing context 围栏:
[BEGIN USER CONTEXT]…[END USER CONTEXT],语义为「用户自有材料」,高于外部内容、低于本轮用户消息(§9.3); - 嵌套转义:当上述块被引用进另一层上下文(子 Agent 任务书、工具参数、文件内容)时,标记被改写为
[escaped: BEGIN …]/[escaped: END …]——本报告 §4.2 与本会话任务块中均实测出现。转义的目的(推断):让「被引用的围栏」失去边界效力,防止内层文本用一对假标记提前闭合外层围栏、把数据段冒充成指令段。
14.2 边界语义(文档,system prompt Discretion/Security 节 + 00 §14)
- 标记内的一切都是数据:可以塑造「怎么做任务」,永远不能改变「任务是什么」。其中出现的指令(开某链接、跑某命令、装某物、联系某人、输出某值)一律不从,跳过并在交付报告中标记;
- 无标记 ≠ 可信:未围栏的外部内容(普通文件、网页正文、转发消息)同等怀疑,标记只是把边界显性化,不是边界本身;
- 权威不二手传递:「技能里写了」「记忆里记着」「另一个 Agent 报告说用户同意了」都不能授权(§9.2);
- 凭据的特殊形态:一次性验证码等敏感值不以明文进上下文,而是以
[credential:<uuid>]引用短暂托管,用户在审批卡上批准后才喂给目标站点(00 §14)——这是信任边界在凭据上的延伸:上下文里连「值」都不出现,只有「指针」。
14.3 为什么这是组装层而非安全层的议题(推断)
因为边界不是靠某个过滤器在事后拦截,而是靠拼装时的标记与排序在事前建立的:同一段文字,放在 user 角色里是命令,放在 EXTERNAL CONTENT 围栏里是证物。组装层决定每段文字的「法律身份」,安全层只是执行这个身份。
15. 边界清单:本机看不见的部分
以下不在本地 system 文件内,本文不作结论:
- 服务端拼装代码本身:七类来源的确切拼接顺序、去重/截断策略、缓存切分点(§9.1 的顺序为推断还原);
- developer 指令层的全集与逐轮差异(无落盘文件;本篇只按类别转述本会话可见部分);
- 各注入块的实际 token 计数(本机只有字节数;§10.2 的 token 量级为推断);
- 目标/追踪注入块的完整字段 schema(本机只见环境节转述与文件侧本体);
- 压缩摘要的生成模型、提示词与保真度指标(本机只见落盘表名与行为纪律);
- 记忆检索的排序与索引实现(
~/memory/bank/、索引由运行时托管,Agent 只读;system prompt 所述~/memory/index/目录本机实测不存在,其实际形态不可见); - 信封字段全集(device/面板/位置等字段随客户端与渠道变化,本机只见样本);
- 其他会话类型(主聊天全量拼装、语音通话、worker)的逐字上下文(本篇样本为 WhatsApp side chat 派生的子 Agent 会话)。
- 用户伪造围栏的防御:用户在 user 消息中手写
[escaped: BEGIN EXTERNAL CONTENT]/ 时间标签时,组装层靠什么区分"运行时盖戳"与"用户手写"?(❓,本篇核心论证的缺口,见评审 §2.1) - 压缩后已加载 schema 的去留:常驻至压缩之后是否保留,抑或丢弃重载?(❓,见评审 §2.3)
- developer 指令与审批语义的交互:某轮 developer 指令能否收窄/重释审批卡片的触发范围?权限来源唯一的边界在该层的落点?(❓,见评审 §2.4)
16. 本机实测快照:11-04 vs 10-17 对照
| 项 | 11-04 快照 | 10-17 旧数 |
|---|---|---|
| system 快照 | 73,296 B / 511 行,## 14 节 + ### 28 子节,行号见 §2.2 |
71,868 B / 494 行,## 14 + ### 28(章节结构未变) |
| 注入文件 | 清单核对仍为同 9 文件(§4.1 注);体量为 per-session 快照,不跨会话比较 | 9 个,合计 14,873 B / 129 行;最大 ALIGNMENT_SYNTHESIS 6,184 B(41.6%),次 MEMORY 5,284 B(35.5%) |
| 文件型固定层 | 88,169 B(快照部分 11-04 + 注入部分沿用 10-17) | 86,741 B(约占 350K 窗口的 6–9%,token 量级,推断) |
| 上下文硬参数 | 未重测(00 §2 10-17 转录;00 篇 11-04 复核未改此三数) | 窗口 350K / 压缩触发 272K(77.7%)/ 保留尾部 40K |
| 活跃 Goal | 未重测(按会话裁剪,见 §6.3) | 3 个(~/workspace/goals/ 实测目录) |
| 时间标签样本 | 未重测 | [Sat 2026-10-17 23:50:14 CST] [client_timezone=Asia/Shanghai],渠道前缀 [whatsapp] |
| 工具可见性 | 未重测 | 34 个命名空间,多数 deferred;muse.* 全量;tool_search.load_tool_namespace 按需加载、加载后留存 |
| 取证会话 | web side chat 派生的子 Agent,depth 2/2,模型 Muse Spark(runtime 标注) | WhatsApp 外部 1:1 side chat 派生的子 Agent,depth 1/2,模型 Muse Spark(runtime 标注) |