Compression Engines
压缩组合是可分配给路由组合的命名压缩配置文件:
compression_combos:存储模式、流水线、RTK 配置、语言配置和默认标记compression_combo_assignments:将压缩组合映射到路由组合- 运行时集成会先解析已分配的压缩组合,再处理通用组合覆盖配置
- 分析数据包括
compression_combo_id和engine
控制面板入口:控制面板 -> 上下文与缓存 -> 压缩组合。
API 接口
Section titled “API 接口”| 路由 | 用途 |
|---|---|
/api/settings/compression |
全局压缩设置(包括 mcpAccessibility 配置) |
/api/compression/preview |
预览任意压缩模式 |
/api/compression/language-packs |
列出可用的 Caveman 语言包 |
/api/context/caveman/config |
Caveman 设置别名 |
/api/context/rtk/config |
RTK 默认配置和设置 |
/api/context/rtk/filters |
RTK 过滤器目录 |
/api/context/rtk/test |
RTK 预览/测试端点 |
/api/context/rtk/raw-output/[id] |
经过身份验证的脱敏原始输出恢复 |
/api/context/combos |
压缩组合 CRUD |
/api/context/combos/[id]/assignments |
路由组合分配 CRUD |
/api/context/analytics |
压缩分析别名 |
管理路由需要通过管理身份验证或 API 密钥策略检查。
MCP 工具
Section titled “MCP 工具”压缩功能提供五种 MCP 工具:
| 工具 | 作用域 | 用途 |
|---|---|---|
omniroute_compression_status |
read:compression |
设置、分析数据、缓存统计信息 |
omniroute_compression_configure |
write:compression |
更新全局设置 |
omniroute_set_compression_engine |
write:compression |
设置模式和可选流水线 |
omniroute_list_compression_combos |
read:compression |
列出压缩组合 |
omniroute_compression_combo_stats |
read:compression |
读取组合/引擎分析数据 |
范围与排除项
Section titled “范围与排除项”嵌入向量永远不会被压缩。 open-sse/handlers/embeddings.ts 从不调用任何
压缩引擎——请求/响应正文会原样直接传递给执行器。
目前这是由结构决定的(嵌入向量和聊天补全由不同的处理程序处理),而不是
运行时检查,但这意味着 #8034 中的向量失真问题在嵌入向量路径中不存在暴露面。
按模型/端点排除过滤器(#8034)。 对于聊天补全,运维人员可以指定
绝不能压缩的模型 ID / provider/model 目标——如果以后压缩功能被接入到更靠近嵌入向量的路径,
这可作为一项有用的防护措施;此外,对于任何要求提示词逐字节精确一致的模型
(确定性评估、对缓存敏感的前缀等),这通常也很有用。
- 设置字段:全局压缩配置中的
exclusions?: string[](GET/PUT /api/settings/compression),通过现有的key_value压缩 命名空间(src/lib/db/compression.ts)持久化——无需新建表。 - 控制面板标签页:控制面板 → 压缩 → 排除项
(
/dashboard/compression/exclusions)。 - 模式语法:
*是唯一的通配符。模式中的其他所有正则表达式元字符都会在 匹配前进行转义,因此gpt-5.6只匹配字面字符串,绝不会匹配gpt-5x6(可防范 ReDoS、有界且无嵌套量词)。模式会以不区分大小写的方式同时匹配 裸模型 ID 和provider/model组合——gpt-5-6、openai/gpt-5-6和openai/*均有效,而单独使用*会排除所有模型。 - 匹配:
open-sse/services/compression/exclusions.ts中的isCompressionExcluded()/normalizeCompressionExclusions()。chatCore.ts在 解析压缩设置之后、任何引擎运行之前检查被排除的目标,并将匹配情况 完全视同全局禁用压缩——可证明请求正文在逐字节层面完全相同。该跳过操作通过writeCompressionSkip(..., "excluded")记录,以便在分析数据中查看。 - 默认值(列表为空/不存在):与 #8034 之前的行为相同——不排除任何内容。
- LLMLingua-2 (SLM) 要求可选依赖位于同一位置。 仅当
@atjsh/llmlingua-2及其对等依赖被放置到dist/node_modules中时,工作线程才能在生产构建中运行(参见scripts/build/colocateOptionals.mjs、#4286)。如果缺少这些依赖, 引擎将采用故障开放策略(返回原始文本)。工作线程的解析不再依赖import.meta.url(它在独立捆绑包中会失效),而是以运行时的 cwd /argv[1]为基准。 - Caveman 语言包
de/fr/ja并不完整。 它们包含context+filler+structural规则,但不包含dedup/ultra规则包,因此对于这些语言,ultra强度 并不高于full(它们仅使用各自的规则,不会静默回退到英语的dedup/ultra规则,因为这会破坏外语文本)。en/es/id/pt-BR是完整的。欢迎为不完整的语言包贡献dedup.json+ultra.json。 - 堆叠遥测仅列出实际执行了压缩的引擎。 如果堆叠流水线中的某个步骤运行了引擎但节省率为 0 %,
则会返回
stats:null,因此不会出现在engineBreakdown中——这与该步骤被跳过的情况无法区分。若要区分 “已运行,0 %”与“已跳过”,需要更改明细模型,因此暂缓处理。
此区域的重点关卡是:
node --import tsx/esm --test tests/unit/compression/rtk-*.test.ts tests/unit/compression/pipeline-integration.test.ts tests/unit/compression/context-compression-api.test.tsnode --import tsx/esm --test tests/unit/compression/*.test.ts tests/golden-set/*.test.ts tests/integration/compression-pipeline.test.ts tests/unit/api/compression/compression-api.test.tsnode --import tsx/esm --test tests/unit/compression/mcpAccessibility*.test.tsnpm run typecheck:coreHagiCode
HagiCode 是面向项目开发的 AI 编码工作台:丰富、便捷的界面交互让规划、Agent 执行与项目工作更容易上手和跟进,带来更投入的开发体验。
丰富、便捷的界面交互,让规划、Agent 执行与项目工作更容易上手和跟进。
- 智能OpenSpec 工作流把意图转化为从提案、设计、任务到交付的可执行路径。
- 高效多 Agent 并行推进调研、实现与审阅,并支持多仓库变更和你熟悉的 Agent CLI。
- 有趣丰富、便捷的界面交互让规划、Agent 执行与项目工作更容易上手和跟进,带来更投入的开发体验。
下载 Windows 版
分享 HagiCode
让想法变成真正交付的软件。
HagiCode 是面向项目开发的 AI 编码工作台:用 OpenSpec 工作流规划变更,多 Agent 并行执行,再由 Hero Scenario 让进度一目了然,把想法变成真正交付的软件。
- 智能
- OpenSpec 工作流把意图变成从提案到交付的可执行路径。
- 高效
- 多 Agent 并行推进调研、实现与审阅。
- 有趣
- 丰富、便捷的界面交互,让规划、Agent 执行和项目工作更容易跟进。
© 2026 HagiCode | Powered By hagilight-starlight@0.21.0 | Branch: main | Commit: de60bcd | Built:

