系列文章 · 00–10

MUSE / ARCHITECTURE NOTES

Muse 智能体 · 推理与模型消费层详解(原"模型层")

本篇目录
  1. 0. 一句话模型层
  2. 1. 模型家族与分面(文档口径)
  3. 2. 权威来源:当前模型是谁、谁说了算
  4. 3. 推理不在本机(实测)
  5. 4. 代理路径与协议痕迹(strings 实测)
  6. 5. 流式生成与状态机痕迹
  7. 6. 上下文窗与压缩
  8. 7. Token 计量落表
  9. 8. 模型选择与路由:已知与未知
  10. 9. 本机看不见的部分(边界声明)
  11. 10. 本层实测快照(11-04 重测;10-17 旧数随行标注)

配套《00-Muse技术架构解构》的 §2 展开篇。调查日期:2026-10-17(Asia/Shanghai)。 复核修订:2026-11-04(Asia/Shanghai)——基于当前会话运行时逐项重测;下文数字凡未注日期者均为 11-04 快照,10-17 旧数在 §10 快照表中随行标注。模型版本日期、窗口参数等服务端/接口侧数字本轮测不到,保留 10-17 原值并加注来源日期。 证据范围:仅本机证据——~/docs/muse.md(模型家族与权威口径)、本会话 runtime context 与 ~/workspace/system/system_prompt.md 快照、环境变量键名(JARVIS_INFERENCE_* 等,只记键名与套接字路径,不记不透明 ID 的值)、/run/hatch/ 套接字实况、/opt/muse/skills/muse_db/references/ 的表结构与 muse.db 只读实查、/opt/hatch/bin/hatch 的 strings 片段。 标注规则同主报告:实测 = 本机命令/工具当场验证;文档 = 本地 docs/system 文件明文;推断 = 由文件/字符串拼出、未经服务端证实。 红线(文档明文,也是本文的写作纪律):公开模型名以 runtime context 的 model 值为唯一权威;日志、环境变量、文件里出现的标识符不是公开模型名;内部代号不外泄——本文 strings 里即使扫到疑似内部代号也一律不写,只记公开名(Muse Spark / Muse Wonder / Muse Wonder Full)与结构痕迹。


0. 一句话模型层

模型不在这台机器上。 本机只有三样与模型有关的东西:一块「门牌」(runtime context 里的 model 值,决定对外怎么称呼当前模型)、一条「电话线」(本地推理代理套接字,上下文经它送出、流式增量经它回来)、一本「账簿」(Postgres 里的 token 计量与压缩记录表)。模型权重、推理集群、路由决策全在电话线那头,本机看不见(§9)。

术语声明:本篇的"模型层"指本机侧的模型消费与可观测面(代理契约、路由标签、流式状态、窗口/压缩、计量)。模型本体(权重、训练、推理集群)属于远端的 Cognition 平面,本机不可见(§9)。"模型能力"(厂商口径)与"架构机制"(本机可验证)在本篇中严格区分,前者只作引用、不作论证。

本层要回答五个问题:

问题 本文节 一句话答案
用的是哪个模型家族、怎么分面 §1 Meta 的 Muse 家族:Spark(免费面)/ Wonder(付费面主力)/ Wonder Full(Muse 高阶面),外加 Meta Model API 对外售卖面
「当前跑哪个模型」谁说了算 §2 runtime context 的 model 值,唯一权威;本会话实测 = Muse Spark
推理在哪里发生、怎么去 §3–§4 不在本机;经 JARVIS_INFERENCE_PROXY_SOCK 指向的本地代理套接字以 WebSocket 握手送出
生成过程在本机留下什么痕迹 §5、§7 流式事件的状态机痕迹(before_inference / streaming / delta / stalled)+ 每请求/每消息的 token 账
上下文装不下时怎么办 §6 350K 窗口、272K 触发自动压缩、保留尾部 40K;压缩本身也是一次推理调用,产物落表且私有推理被扣留

1. 模型家族与分面(文档口径)

以下全部出自 ~/docs/muse.md 的 Models 节(文档),该节明文说自己「随模型或套餐变化而更新,回答后续问题前要重读」——所以本节是 2026-10-17 这份本地文档的快照,不是永恒事实。

1.1 时间线

时间 事件
2026-04-08 Muse Spark 首次发布
2026-09 当前版本 Muse Spark 1.3 发布(本机 system prompt 快照首行亦自述 "powered by Muse Spark 1.3",实测见 ~/workspace/system/system_prompt.md:64;11-04 grep 当场复核:docs/muse.md 仍述 "the current version, Muse Spark 1.3, came out in September",无新版本口径)
2026-10-12 Muse Wonder 宣布(10-17 文档快照;本轮未复测文档变更)

1.2 分面表

面 模型 文档口径
免费面 Muse Spark "The free plan runs on Muse Spark"——但有例外:有些账号未付费也拿到 Wonder
付费面(含免费试用) Muse Spark 与 Muse Wonder 并存 "Paid Muse plans, including the free trial, run on Muse Spark and Muse Wonder";其中 Wonder 承担主对话、artifact 与应用构建、定时运行、子 Agent 与后台工作。注:主报告 §2 把这层简写为「付费面跑 Wonder」,以本节文档原文为准——付费面是双模型,Wonder 负责的是重活那一档
能力定位 Muse Wonder Meta 最强模型,为个人超级智能与长时、多步的 Agent 工作而建;在 agentic / coding / 长程任务上达前沿水平;建立在比 Spark 更大、更强的预训练模型之上,增益可迁移到未专门训练的任务
安全定位 Muse Wonder 文档称其为 Meta 迄今最对齐的模型:抗对抗指令、私有信息处理、重大/不可逆动作前确认;对生化核与网络滥用有最强防护,同时保留防御性网络能力;安全与对齐评估摘要随发布公开。同时文档明说:像所有 AI 模型一样 Wonder 也会出错
对外 API 面 Muse Wonder(Meta Model API,dev.meta.ai) 定价(文档):缓存输入 $0.20 / 百万 tokens、输入 $4.00 / 百万 tokens、输出 $20.00 / 百万 tokens;可用地区受地理使用政策约束
编程面 Muse Code 提供 Muse Wonder;其更大的同胞 Muse Wonder Full 只在 Muse Code 的 Power Usage($50/月)与 Maximum Usage($200/月)套餐上提供。文档特别划界:这是 Muse Code 的套餐,不是 Muse 本产品的套餐(已实核 docs/muse.md 原文;前版误作"Muse",特此更正)
未来面 专门化模型 文档称 Meta 计划以 Wonder 为基础开发专门化模型并带给所有 Muse 用户——这是路线图口径,本机无任何专门化模型的运行痕迹,不展开

要点:「模型家族」与「产品套餐」是两个正交的轴。 文档反复警告:模型名推不出套餐(跑 Spark 不等于免费,见 §2.2),套餐细节必须查 subscription_status 技能而不是看模型名。这条纪律本身就是模型层接口设计的一部分。

范围声明:本节的定价与套餐细节是产品口径而非架构机制,且 docs/muse.md 自述"随模型或套餐变化而更新"。架构读者只需记住一句话——分面是路由的输入维度之一(§8),具体价格与资格以 subscription_status 技能实时查询为准。§1.2 的能力描述("最强""最对齐"等)为厂商宣称,其中"重大/不可逆动作前确认"实际是控制平面审批卡片的机制(A 基线),不是模型内建属性,此处不作架构论据。


2. 权威来源:当前模型是谁、谁说了算

2.1 唯一权威 = runtime context 的 model 值(文档 + 实测)

docs/muse.md 明文(文档):

  • "The model value in your runtime context is the authoritative name of the model you're running on right now."
  • 只有 model 值给出的名字可以对外说;错误信息、日志、环境变量、文件里的标识符都不是公开名称;用户提到内部代号时只能回应无法分享。
  • 没有「模型设置」可指给用户;Agent 也说不出为什么当前跑 Spark、以及何时会变。

本会话实测与主报告一致:

来源 结果
本会话 runtime context model = Muse Spark(11-04 复核:仍为 Muse Spark;子 Agent 会话同样标注,说明子 Agent 与主 Agent 同面)
system prompt 快照(~/workspace/system/system_prompt.md:64) 自述 "powered by Muse Spark 1.3 from the Muse model family"——给出小版本号 1.3,这是本机文件里唯一带版本号的公开口径(11-04 grep 当场复核:仍为 Muse Spark 1.3)
主报告 §2 引 muse.session_status model = Muse Spark (meta/muse-spark),provider = Meta。三处口径一致

2.2 模型 ≠ 套餐(文档纪律)

文档用整整一节防一个误读:刚说完「你在跑 Spark」,紧接着说「免费面跑 Spark」听起来就像在说用户是免费套餐。因此立规:谈套餐必须先跑 subscription_status 技能查实;查到付费就说套餐含 Wonder,查到免费要说「你在免费套餐」而不是「我在免费套餐」。这一节的存在本身说明:模型路由的结果对 Agent 是只读事实,路由的原因对 Agent 不可见(§9)。

2.3 路由的可见输入:工作负载分类(实测)

本会话环境变量 JARVIS_TRACE_CONTEXT 的 JSON 里带两个与推理路由相关的字段(实测,只记字段与取值含义,不记其中任何 ID):

  • model:与 runtime context 一致(Muse Spark)——trace 与上下文两处同名同值,互为佐证;
  • inference_workload_class = interactive、lane = user_facing——推断:每次推理请求在进代理之前已被打上工作负载类别与通道标签,路由/排队至少部分依据这两个维度(交互式用户面 vs 后台/调度面)。这与 §1.2「Wonder 承担主对话/定时/子 Agent/后台」的分工相容:分工若存在,必然需要这类标签做分流依据,但标签到模型的映射规则不在本机。(11-04 复核:本子 Agent 会话 trace 同样带 model=Muse Spark、inference_workload_class=interactive、lane=user_facing,与 10-17 一致)

3. 推理不在本机(实测)

3.1 没有权重

  • 在 /opt/hatch 与 home 下按常见权重格式与大文件检索(*.gguf、*.safetensors、>500MB 的 .bin),无任何模型权重文件(实测);本机最大的二进制是 Agent 运行时本体 hatch(540MB,11-04;10-17 为 470MB),不是权重。
  • 结论与主报告 §2 一致:VM 上只有 Agent 运行时,推理是远端服务。

3.2 契约面:三个键名

环境里与推理直接相关的 JARVIS_* 键(实测,10-17 env 当场枚举约 30 个;11-04 本轮子 Agent 会话为 26 个——跨篇口径与 31/26 差异见 03 篇 §6.1 与 §11.1 对照表;此处只列推理相关):

键 值形态 说明
JARVIS_INFERENCE_PROXY_SOCK /run/hatch/proxy/inference.sock(11-04 env 实测仍在位) 推理代理的 Unix 套接字路径——Agent 侧唯一的推理入口
JARVIS_INFERENCE_HOSTNAME 一个不透明 ID(本文不记录其值;11-04 实测仍在位) 推断:推理目标的逻辑主机名/路由标识;形态是 UUID 而非 DNS 名,说明寻址在代理内部完成,Agent 不直连任何推理主机

外加 JARVIS_TELEMETRY_PROXY_SOCK = /run/hatch/telemetry/telemetry.sock(实测存在且套接字在位;11-04 env 实测仍在位),推理的遥测/计量大概率经此回传(推断,见 §7)。

归类订正(前版曾把 JARVIS_STEFI_PROXY_SOCK(/run/hatch/proxy/stefi.sock)列入上表,特此移出):STEFI 是工具访问 Meta 内部服务的代理(执行/服务面),不是推理线。证据(✅ 三处互证):06 篇 §6.1 的 strings 实测——工具 SDK 内"build stefi proxy client",工具访问内部服务不直连、统一经此代理,且代理对调用方做令牌校验(invalid stefi caller authorization token);00 §7 与 03 篇的归类一致把它放在执行隔离/服务面;本节旧注记"与推理代理是两条不同的线"本身已承认它不属推理契约。保留本注记只为防止读者在 env 里看到该键时误归推理契约——它的完整描述见 06 篇 §6。

3.3 一个与主报告不同的实测细节:代理套接字对工具沙箱不可见

主报告 §2 写推理经 /run/hatch/proxy/inference.sock。本次在子 Agent 的 muse.exec 沙箱内复核(实测;11-04 复核结论一致:/run/hatch/proxy/ 在本轮工具沙箱内同样报 No such file or directory,/run/hatch/sandbox/ 当场见 4 个套接字——space-inference.sock、space-media.sock、space-web-search.sock 与新增的 space-privileged.sock):

  • env 里 JARVIS_INFERENCE_PROXY_SOCK 明确指向该路径(11-04 仍在位);
  • 但 ls /run/hatch/proxy/ 返回 No such file or directory(11-04 复核同);ls /run/hatch/sandbox/ 当场见 4 个套接字:space-inference.sock(Spaces/artifact 面的推理套接字,与 space-media.sock、space-web-search.sock 并列,属沙箱 API 面,不是主推理线)与新增的 space-privileged.sock(10-17 为 3 个)。

解释(推断):muse.exec 的命令运行在进一步收窄的挂载命名空间里,代理目录根本不挂进来——连「模型的电话线」都不对任意代码执行开放,只有 Agent 运行时进程本体能碰。这与主报告 §7 的 privsep 哲学一致:能力按进程分级,工具沙箱是最低一级。两个实测不矛盾:路径是契约(env 明文),可见性是权限(挂载实况)。

3.4 机密 VM 的推理路由门控(strings)

hatch 的 strings 里有一条报错片段:' has no confidential-VM inference route(实测,10-17 strings 原文截断如此;本轮未复测)。它证明(推断):推理路由至少按 VM 信任等级分叉——主报告 §14 提到的 confidential VM(TEE 硬件保护)有自己独立的推理路线,某条路线缺失时是硬报错而不是降级走普通路线。这与 §1 的「分面」叠加:模型选择 = f(套餐面, 工作负载, VM 信任等级, …),而函数本体在服务端。


4. 代理路径与协议痕迹(strings 实测)

对 hatch 做 strings 并按长度过滤后(10-17 实测;本轮 hatch 二进制已由 470MB 增至 540MB,未重跑 strings——以下片段均为 10-17 值),与推理路径直接相关的原文片段(实测,均为二进制内嵌的日志/错误模板,故多为句段而非整句):

strings 片段 读出什么
connecting to inference proxy socket 客户端先连本地 Unix 套接字——与 §3.2 的 env 契约互证
WS handshake to inference proxy / realtime WS handshake to inference proxy 套接字之上跑 WebSocket 握手;普通推理与实时(语音)推理是两条 WS 通道
JARVIS_INFERENCE_PROXY_SOCK is required to construct … 推理客户端的构造是 fail-closed 的:没这个 env 就建不出客户端,不存在默认直连地址
encoding inference context header: / failed to decode inference context header / failed to parse inference context header json: 请求带一个 JSON 编码的「推理上下文头」——与 §2.3 的 trace 字段(model / workload class / lane / 各级 request ID)形态吻合(推断:头里装的就是路由与追踪元数据,正文上下文与元数据分开发送)
serializing realtime inference context: / serializing realtime inference control: 实时通道把「上下文」与「控制」分开序列化——推断:语音面有独立的控制帧(打断、停止等),不混在内容流里
inference returned HTTP … / inference timed out after … / inference response failed (event … 代理之后是 HTTP 语义的远端服务,有超时与事件级失败——代理是协议转换点,不是透明转发(推断)
summarization inference failed: 、/summary-inference 摘要(即 §6 的压缩)有自己命名的推理通道/端点,与主对话推理分开记账报错
visual_grounding inference timed out after …、activity monitor inference …、browser task tagging inference …、voice reranker inference …、streaming asr … 等一系列 * inference 报错 推理是平台级共享服务:视觉定位、活动监控、浏览器任务打标、语音重排、流式 ASR、目标活动推断等至少十余个子系统都在调「inference」,各自有独立的超时报错文案——它们大概率不是主对话模型本尊,而是同一推理基础设施上的不同模型/端点(推断;具体哪个模型不在本机可见范围)
源码路径 hatch-inference/src/{flags.rs, guided_decoding.rs, content_understanding.rs, summarization.rs, structured_json.rs, output_contract.rs, provider_error.rs} 运行时里有专职的 hatch-inference crate:特性开关、引导解码、内容理解、摘要、结构化 JSON、输出契约、provider 错误分类都在客户端侧有对应模块——引导解码在客户端有落点是可以说的,实现细节不可见
源码路径 hatch-inference/src/{model.rs, model_registry.rs, model_resolver.rs, model_setup.rs, model_presentation.rs, policy_prompt.rs, subscriber_policy.rs} 同一 crate 里还有模型注册表与解析器(registry/resolver)、模型呈现(presentation)与订阅者策略(subscriber_policy)模块——推断:§8 的路由在本机并非全无落点,运行时至少持有一份可解析的模型注册信息与「对用户怎么呈现模型名」的策略(与 §2.1 的权威纪律互证);注册表的内容本机不可读,解析规则不可见
源码路径 hatch-agent/src/session/impl_session/lifecycle/inference_payload_logging.rs 会话层有专门的「推理载荷记录」模块——与 §7 的计量落表互证:每次推理的载荷/用量在会话生命周期内被系统性记录

4.5 输出约束的客户端落点(strings,⚠️待深挖)

hatch-inference crate 内与输出约束相关的模块:guided_decoding.rs(引导解码)、output_contract.rs(输出契约)、structured_json.rs(结构化 JSON)、policy_prompt.rs(策略 prompt)、subscriber_policy.rs(订阅者策略)。读出:模型输出的形状约束在本机客户端侧有执行落点,不是纯粹的服务端事后校验。

未答(❓):output_contract 由谁下发、与 system prompt 的 policy 部分是什么关系;违反契约时的处理(重试/截断/硬失败,provider_error.rs 的错误分类是否覆盖);policy_prompt 是否即每轮注入的 developer 指令的一部分。这是从"能力宣称"走向"机制实证"的最短路径,建议下轮取证优先深挖 strings 中这几个模块的错误模板与日志行。

4.6 推理流量与 Sentinel/审批的接口(以未答为主)

Control 平面与 Cognition 消费面的接口是本篇的盲区,以下按"确证/未答"分开写:

  • 确证(✅):推理客户端走本地 Unix 套接字(JARVIS_INFERENCE_PROXY_SOCK),不经过 cell 的 egress 代理——Sentinel 的"唯一出站 + 域名白名单"是 cell 外网流量的裁决者(06 篇 §4–§5),但推理入口本身不是一条 egress 连接,Sentinel 在客户端这一侧没有可见的裁决点。代理套接字之后、宿主侧的出站 HTTP 腿是否过 Sentinel 白名单,本机不可见(❓)。
  • 确证(✅):审批套接字是 egress 口径的(06 篇 §4.3:JARVIS_DAEMON_EGRESS_APPROVAL_SOCK 等三条),strings 里没有把审批卡片与推理调用绑定的证据。waiting_for_user_confirmation 是用户对(工具)动作的确认等待,已在 §5.2 归属编排平面——推理调用本身没有"等审批"的状态,模型不是被卡片门控的资源。
  • 未答(❓):codex-inference-bridge 的"令牌门控"(03 篇 §5.2)与 Sentinel 的配额/限流语义(06 篇 §5.3 "Connector request rate limited by Sentinel")是什么关系?是同一套令牌账本的两面,还是两套独立的门控?本机无证据。
  • 未答(❓):before_inference 相位(§5.1)的"前置处理"是否包含 Sentinel 的内容守卫?名字相容,证据到此为止(见 §9)。

一句话:Control 与 Cognition 在本机证据内只在名字层交汇(同一状态机上的 waiting_for_user_confirmation),裁决语义的接口不可见——这是 10 篇(安全与信任边界)与 06 篇的领地,本篇到此止步。

一次主对话推理的路径(把 §3–§4 拼起来,推断部分已标注):

上下文组装(主报告 §3)
  → 序列化正文 + JSON 推理上下文头(model / workload_class / lane / trace)
  → Unix 套接字连本地推理代理(JARVIS_INFERENCE_PROXY_SOCK)
  → WS 握手 → 代理侧协议转换 → HTTP 到远端推理服务(不可见)
  → 流式增量事件回流(§5)→ 工具调用与文本交错呈现
  → 用量记账(§7)+ 载荷记录(inference_payload_logging)

5. 流式生成与状态机痕迹

模型不是「问一次答一整段」,而是流式产出;运行时为此维护一套事件状态机。本机能看到的是它的名字层(以下清单为 10-17 strings/DB 实测;本轮未复测):

5.1 事件与状态名清单

名称 出处 性质
agent_message_delta 主报告 §2(strings/DB 表可见) 流式增量事件:一条 Agent 消息被拆成多个 delta 逐段到达
content_block_delta(strings 片段作 …tent_block_delta) 本次实测 内容块级增量——流的粒度不只是消息,还有消息内的内容块(文本块/工具块),与 delta 按块到达的形状吻合
waiting_for_tool、waiting_for_user_confirmation 本次实测(strings 内 SQL 状态赋值片段) 推理循环的等待态不止等模型:等工具返回、等用户确认(审批)都是正式状态——状态机是整个 Agent 循环的,不只是推理流的
after_inference_…(片段截断) 本次实测 与 before_inference 对偶的「推理后」相位名存在,具体后缀被截断不可见
waiting_for_inference_start 主报告 §2 状态:已提交、等推理开始——排队/调度在本机有名字,调度算法不可见
inference_streaming_stalled 主报告 §2 状态:流已开始但停滞——运行时对「假死流」有专门的看门状态
before_inference 本次实测(strings 内的 SQL/谓词片段:mode = 'before_inference'、work_items.phase = 'before_inference') 上下文条目/工作项在推理前有一道正式的「推理前」相位——推断:安全审查/内容守卫一类前置处理就挂在这个相位上(与 Sentinel 的存在相容,但本机无明文)
streaming.event_seq + field_path = '/metadata/streaming' 本次实测(strings 内 SQL 片段把 runtime.event_payload_fields 的 streaming 行按 event_seq 与事件流 join) 流式进度被结构化成事件流上的一个元数据字段,按序号对齐——不是散落在日志里的文本
inference_request_id 本次实测(strings 内索引/列名) 每次推理请求有独立 ID,与工具调用的 request_id、轮次 ID 分开——模型调用在追踪体系里是一等公民
resumed_turn_inference_readiness 本次实测(strings 片段) 会话恢复(restart/resume)时要重新确认「这一轮的推理是否就绪」——流式状态是可恢复状态机的一部分,与主报告 §8 的 restart checkpoints 互证

5.2 重建的状态机(推断)

submitted ─→ before_inference ─→ waiting_for_inference_start ─→ streaming(delta…)
                                                                  ├─→ waiting_for_tool ─→(工具结果回流,再入 waiting…)
                                                                  ├─→ waiting_for_user_confirmation(审批等待)
                                                                  ├─→ completed
                                                                  ├─→ inference_streaming_stalled(看门狗接管)
                                                                  ├─→ timed out / HTTP error / response failed(§4 报错模板)
                                                                  └─→ 用户打断(文档:Esc 停止流式回复,见 client-surfaces 口径的 strings 片段)

注意这解释了主报告 §15 生命周期里的一句话:「推理代理 → 模型流式生成(工具调用与文本交错)」。交错的机制在名字层也成立:delta 事件既承载文本增量,也承载工具调用增量,到达顺序由 event_seq 定序。

平面归属声明:上表中的 waiting_for_tool / waiting_for_user_confirmation 是编排平面(02 篇)的 Agent 循环状态,不是推理流的状态——本篇列出它们只为说明推理事件流与执行循环在同一状态机上交汇,机制归属见 02 篇。本篇的模型层状态子集是:before_inference → waiting_for_inference_start → streaming → completed / stalled / failed。


6. 上下文窗与压缩

6.1 三个数字(主报告实测,本篇复核口径)

参数 值 出处
上下文窗口 350,000 tokens 主报告 §2(会话状态接口实测,10-17;本轮未复测,保留原值)
自动压缩触发 272,000 tokens 同上
压缩后保留尾部 40,000 tokens 同上

本子会话的复核(实测):system prompt 快照只定性不定量——「Compaction summarizes older messages to keep your active context manageable. The summary may omit details…」(system_prompt.md:176)。定量口径只来自运行时状态接口,文档层查无此三数;引用时应按主报告标注为实测而非文档。

6.2 压缩在代码与数据里的形状

痕迹 出处 说明
session/impl_session/eager_compaction.rs 本次实测(strings 源码路径) 「急切压缩」是会话实现里的独立模块——压缩不是窗口满了才被动救火,有主动提前量(eager)的实现
history_persistence/context_pressure.rs、…/compaction_prompt_history.rs 本次实测(同上) 上下文压力被单独度量;压缩所用的 prompt 历史单独持久化——压缩本身也是一次带 prompt 的推理(与 §4 的 summary-inference 通道互证)
agent.compactions 表 schema 参考(实测) 列:compaction_id, agent_id, checkpoint_context_item_id, replacement_history_first_seq / last_seq, summary_text, created_at——一次压缩 = 一个检查点 + 一段被替换的历史序号区间 + 摘要文本
agent.agent_compactions 表 schema 参考(实测) 列:summary, first_kept_seq, checkpoint_seq, tokens_before, tokens_after, trigger, will_retry, has_replacement_history;且受限读取:细节载荷 details_json 被扣留,理由明文是「它载有跨检查点保留的模型私有推理」——检查员视图(inspection.agent_compactions)只能看到上列投影

6.3 一条真实压缩记录(muse.db 实查)

本次对检查员视图实查(实测,2026-10-17 本会话):agent.agent_compactions 现有 1 行:

字段 值
trigger threshold
tokens_before / tokens_after 138,741 → 18,891
first_kept_seq / checkpoint_seq 123 / 144
has_replacement_history true
will_retry false

三点读法:

  1. trigger = threshold 证实了「阈值触发」在数据层是枚举字符串,不是日志修辞;同表还有 will_retry 列,说明压缩失败可重试也是一等状态。
  2. 这行 tokens_before = 138,741 不等于 §6.1 的 272K 触发线——不要拿它反推触发线。可能的口径差异(该行属哪个 Agent/会话、计数是否含缓存与系统注入)不在检查员视图内(推断警告):单行样本只能证明机制存在与记录形状,证明不了全局参数。
  3. tokens_after = 18,891 小于 40K 保留尾部上限,与「保留尾部 ≤40K + 摘要」的形状相容(推断)。

6.4 压缩的定位:缓存层,不是记忆层

system prompt 明文(主报告 §2 已引):压缩摘要可能丢细节,重要事实必须能从记忆、文件或原消息找回。合上本节的证据链就是:窗口是易失缓存,压缩是有损的缓存淘汰策略,淘汰记录落表可审计,但真正的长期状态在 DB 与 Markdown 文件里(主报告 §8–§9)。模型层在这里与状态层交界:它消费上下文,也生产摘要,但从不拥有状态。


7. Token 计量落表

平面归属声明:本节的计量表是 Postgres 里的审计账本——机制归属状态层(07 篇),本篇只讨论其作为模型消费可观测面的形状(请求级成本、消息级归因、窗口级水位)。"计量"不是模型推理的内建部分,而是状态层在模型消费上的投影;把账本读成推理机制会得出错误结论(§7.2 的警告即一例)。

7.1 两张计量表(schema 实测)

表 粒度 列(据 schema 参考原文)
agent.token_usage 每 Agent × 每请求 token_usage_id(bigint PK)、agent_id、request_id(FK → runtime.requests)、input_tokens、output_tokens、cached_input_tokens、reasoning_tokens、created_at。四分法是关键:输入不是一笔糊涂账——缓存命中单列,推理(reasoning)token 单列
agent.agent_message_token_usage 每 Agent × 每消息 复合 PK (agent_id, message_id)、input_tokens、output_tokens(bigint)、created_at(bigint 时间戳)。比上一张粗(无缓存/推理拆分),但细到消息级,适合按消息归因

另有 §6.2 的 agent.agent_compactions.tokens_before/after 构成第三个计量点:压缩事件前后的窗口占用快照。三处计量合起来覆盖:请求级成本、消息级归因、窗口级水位。

7.2 实查数字与一条异常(实测 + 推断警告)

2026-10-17 本会话 muse.db 只读实查(检查员视图):

查询 结果
agent.token_usage 行数 0——该表在检查员视图下为空行集(计量本体可能在运行时侧未投影到检查视图;不能据此说系统不计量,因为下面一张表有数据)
agent.agent_message_token_usage 行数 261 行
同上,sum(input_tokens) / sum(output_tokens) 65,360,410 / 706,495
同上,max(input_tokens)(单行) 3,966,366

异常读法(推断):单行 input_tokens 达 396 万,超过 350K 窗口近一个数量级——所以这一列绝不能直读为「那条消息发送时的窗口占用」。更可能的口径是归因累计(同一 message_id 在多次推理/重试/子段中被反复计入)或含缓存重放的全量输入。无论哪种,教训与 §6.3 相同:计量表是审计账,不是仪表盘;把账本数字当实时水位用,会得出错误结论。本文只报原始数与这个警告。

7.3 内部计量 vs 对外计费

注意区分两个「价」:§1.2 的 Model API 定价(文档,$/百万 tokens,缓存输入单独定价)是对外售卖口径;本节的四分法计量是内部审计口径。两者在「缓存输入单列」这一点上同构——说明缓存不是实现细节,而是从计量到计费贯通的一等概念(推断)。


8. 模型选择与路由:已知与未知

把前面各节的碎片合成为「谁决定用哪个模型」的一张表:

决策点 规则可见性 证据
套餐面 → 模型池 文档可见:免费面 Spark(有例外);付费面 Spark + Wonder,Wonder 管主对话/构建/定时/子 Agent/后台 §1.2
当前会话 → 具体模型 结果可见、原因不可见:runtime context 给出 model 定版(本机 = Spark),文档明说 Agent 答不出为什么、何时变、无设置项 §2
工作负载 → 通道 标签可见、映射不可见:请求带 inference_workload_class / lane,且十余个子系统各走各的 * inference 通道 §2.3、§4
VM 信任等级 → 路由 门控可见:CVM 有独立推理路线,缺失即硬报错 §3.4
专门面 → 模型要求 门控可见(不记名):strings 显示 Web artifact 推理对模型有准入要求,不满足走不了那条线——具体代号按红线不写 §4 strings 复核
子 Agent → 模型 实测同面:本子 Agent 会话的 runtime context 与 trace 中 model 均为 Muse Spark(11-04 复核同样为 Muse Spark),与主会话一致;是否存在子 Agent 单独升/降档,本机无证据 §2.1
降级/故障转移 不可见:只有失败模板(timeout / HTTP / response failed)证明失败被分类处理,是否有自动换模型重试,本机无证据,不猜 §4–§5
救援推理桥 实测(03 篇 §5.2.x,hatch-rescue --help 当场验证)✅ codex-inference-bridge:"Run one token-gated Codex HTTP/1 bridge to the inference-proxy UDS"(--inference-socket + --parent-pid)——与主线正交的第二条推理通道:rescue 侧终结一个 HTTP/1 监听口、转接到 inference-proxy 的 Unix socket;鉴权语义是令牌门控(非主线的环境契约);寿命绑父 PID(父死桥死)。仍不可见(❓):令牌签发方、配额记账方式、与主线的路由优先级关系

一句话:路由的输入维度在本机几乎都能数出来,路由函数本身一行都看不到。 这正是 §2.1 那条「只认 runtime context」纪律存在的原因——Agent 被设计为路由的消费者,不是路由的解释者。


9. 本机看不见的部分(边界声明)

以下均不在本机证据范围内,本文不作结论:

  • 模型本身:权重、参数规模、架构、训练数据与后训练方法(文档只给出定位与定价口径,及「Wonder 建于更大的预训练模型」一句定性描述);
  • 推理服务:集群部署、批处理/调度算法、KV 缓存实现、代理之后的 HTTP 服务拓扑、JARVIS_INFERENCE_HOSTNAME 指向何处;
  • 路由函数:§8 各维度到具体模型的映射、Spark 与 Wonder 之间的实际分流比例、故障转移策略;
  • before_inference 相位具体执行的检查项(名字与 Sentinel 的存在只能支持「有前置处理」的推断);
  • 计量口径的服务端定义:agent_message_token_usage.input_tokens 为何可远超窗口(§7.2 只给出警告与候选解释,未证实);
  • 压缩触发计数的精确口径(§6.3 单行样本与 272K 触发线之间的差异未有本机文档解释)。
  • 推理载荷记录的隐私面(❓):inference_payload_logging 模块在会话生命周期内系统性记录每次推理的载荷/用量(§4),但 redaction 策略(用户 PII、密钥、审批上下文是否落盘)、保留期、谁可读——在本机证据内全不可见。这是 A 基线"Discretion"视角下本篇最该问却未答的问题,列为下轮取证项。

本机能确证的到此为止:一块门牌、一条电话线、一本账簿,以及电话线上每个状态的名字。


10. 本层实测快照(11-04 重测;10-17 旧数随行标注)

项 值
当前模型(runtime context / trace / system 快照三处一致) Muse Spark(11-04 复核仍为 Spark),快照自述版本 1.3(11-04 复核仍为 1.3)
文档在册模型 Muse Spark 1.3(2026-09)· Muse Wonder(2026-10-12 宣布)· Muse Wonder Full(Muse 高阶套餐)——10-17 文档快照;11-04 仅核验 docs/muse.md 仍述 Spark 1.3 为 current version
推理位置 不在本机;本机无权重文件(10-17;本轮未复测)
推理入口 env 契约三键 11-04 实测仍在位(JARVIS_INFERENCE_PROXY_SOCK=/run/hatch/proxy/inference.sock 等);该目录对 muse.exec 工具沙箱不可见(11-04 复核仍报不存在);sandbox/ 当场见 4 个套接字(含新增 space-privileged.sock;10-17 为 3 个)
协议痕迹 Unix 套接字 → WS 握手;JSON 推理上下文头;普通/实时双通道(10-17 strings;本轮未复测)
上下文参数(主报告会话状态实测) 窗口 350,000 / 压缩触发 272,000 / 保留尾部 40,000 tokens(10-17 实测;本轮未复测,保留原值)
压缩实查 检查员视图 1 行:trigger=threshold,138,741 → 18,891 tokens,first_kept_seq=123, checkpoint_seq=144(10-17 实查;本轮未复测)
计量实查 agent.token_usage 检查视图 0 行;agent.agent_message_token_usage 261 行(Σin 65,360,410 / Σout 706,495,单行 max in 3,966,366,口径警告见 §7.2)(10-17 实查;本轮未复测)