MUSE / ARCHITECTURE NOTES
Muse 智能体 · 推理与模型消费层详解(原"模型层")
本篇目录
配套《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
modelvalue 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 |
三点读法:
trigger = threshold证实了「阈值触发」在数据层是枚举字符串,不是日志修辞;同表还有will_retry列,说明压缩失败可重试也是一等状态。- 这行
tokens_before = 138,741不等于 §6.1 的 272K 触发线——不要拿它反推触发线。可能的口径差异(该行属哪个 Agent/会话、计数是否含缓存与系统注入)不在检查员视图内(推断警告):单行样本只能证明机制存在与记录形状,证明不了全局参数。 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 实查;本轮未复测) |