package config // DefaultContextMaxTokens 是 CONTEXT_MAX_TOKENS 的默认值(32Ki token),与 // loop.DefaultMaxContextTokens 取同一个数:项目早已把「上下文溢出压缩预算」 // 定为 32K,默认值直接复用它,而不是另起一个数。两处的一致性由 // cmd/cyrene/wire_context_test.go 锁定。 const DefaultContextMaxTokens = 32768 // ContextConfig 承载运行时循环的上下文预算(design/04 §1.3 上下文溢出压缩)。 // 它与 MCP / Capacity 一样是运行时调优量,由组合根消费。 type ContextConfig struct { // MaxTokens 是触发溢出压缩的上下文预算,单位是循环离线估算的 token 数 // (CONTEXT_MAX_TOKENS)。**0 或负值 = 关闭压缩**,行为与本条接线前完全 // 一致;未配置时用 DefaultContextMaxTokens(即默认启用)。 // // 取值依据:默认模型(.env.example 的 gpt-4o)上下文窗口为 128K token, // 32K 只有它的四分之一 —— 既给系统提示词 / 工具 schema / 本轮输出留出 // 充足余量(不会把窗口塞到上游静默截断或报错),又比日常对话的实际体量 // 大一个量级(正常聊天几乎不触发压缩,宁可不压也不频繁压)。真触发时 // compactor 仍保留 50% 预算的近期尾部(含尾部工具结果)并只把更早的轮次 // 摘要成一条前导消息,因此不会打断正在进行的对话(design/04 §1.3)。 MaxTokens int `env:"CONTEXT_MAX_TOKENS" default:"32768"` }