跳转到内容
OmniRoute source

Compression Engines (中文 (简体))

压缩组合是可分配给路由组合的命名压缩配置文件:

  • compression_combos:存储模式、流水线、RTK 配置、语言配置和默认标记
  • compression_combo_assignments:将压缩组合映射到路由组合
  • 运行时集成会先解析已分配的压缩组合,再处理通用组合覆盖配置
  • 分析数据包括 compression_combo_id 和 engine

控制面板入口:控制面板 -> 上下文与缓存 -> 压缩组合。

路由 用途
/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 工具:

工具 作用域 用途
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 读取组合/引擎分析数据

嵌入向量永远不会被压缩。 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.ts
node --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.ts
node --import tsx/esm --test tests/unit/compression/mcpAccessibility*.test.ts
npm run typecheck:core

OmniRoute 源码 (a58000c7685f)

HagiCode

HagiCode 是一套智能体编码工作台:结构化工作流、多 Agent 并行执行与 Hero Dungeon 视图,把想法变成真正交付的软件。

让想法更快变成好用的软件,让智能编码更聪明、更高效,也更有趣。

HagiCode 浅色主题主界面截图
  • Smart结构化工作流将意图转化为从想法到交付的可执行路径。
  • Efficient多 Agent 工作流让调研、实现与审阅并行推进。
  • FunHero Dungeon 让长时间编码协作更直观、更有参与感。
访问 HagiCode