跳转到内容

内联推理代理(针对 /v1/messages 的 PEP)

内联推理代理是针对 Claude Code 推理流量的执行点——即直接命中 Claude /v1/messages 契约的原始 SDK 和 curl 调用方。决策在组合根(cmd/olivares/inferenceproxy.go)作出; modules/inferenceproxy 拥有作出该决策时所读取的按租户治理配置和推理出口 DLP 策略,本身不对实时请求作任何决策。 服务器托管的设置无法触及此类流量:自定义的 ANTHROPIC_BASE_URL 会将其完全绕过。该代理位于 api.anthropic.com 之前,并以带内方式运行一条 受治理的流水线——驻留地、模型访问、 DLP 与 content gate,然后进行上下文窗口 sizing 和预算检查——所有这些都在任何字节转发之前完成。录制默认在转发之前 执行:被授权的意图会在转发之前写入篡改可检测的账本,没有证据就不转发(默认拒绝)。 租户可以主动关闭它(record_mandatory: false),此时代理在转发之后锚定证据, 采取尽力而为(best-effort)且高声(loud)的姿态——锚定失败会被上报,绝不隐藏。

这个默认值过去是相反的,而这个差别并非纸上谈兵:从未打开过配置页面的租户,恰恰 就是没有人为其推敲过的那一个;以尽力而为的方式为其锚定证据,等于让证据保证对所有 “什么都没有选择”的人变成需要主动启用。有两条边界值得先读到,而不是事后撞见。 第一,该姿态管辖转发之前的那一刻:转发之后调用已经发生,任何姿态都无法撤销, 因此那条路径在构造上就是一个”高声的缺口”。第二,把审计 spool 设为 degrade 的运维方,已经说明了它耗尽时应当如何处理:对于从未选择过证据姿态的租户,这个 已声明的 degrade 胜出,调用会在留下已记录缺口的情况下被转发;而显式设置了 record_mandatory: true 的租户则会被拒绝——租户自己的选择高于 spool 的设置。 用于 sizing 的 count_tokens pre-flight 本身就是 provider egress,因此只有在所有本地 content gate 都通过后才会运行:被 DLP 或 firewall 拒绝的 prompt 绝不会传输,连计数也不会。 它是平台内置的四个默认拒绝(deny-closed)PEP 之一。

部分实现(PARTIAL)。 这种拆分是诚实且经过深思熟虑的:

  • 已上线(LIVE)——按租户的治理配置以及推理出口 DLP 策略:编写、持久化与审计。 位于 /v1/m/inferenceproxy/ 之下的两个存储:一个单例 config(各闸门的开关、 代理宕机时的失败姿态、响应 DLP 模式、录制强制项),以及一个 dlp/rules 集合 (每个敏感度类别对应一条规则 → allow|deny)。
  • 需主动启用、默认未挂载(OPT-IN, unmounted by default)——实际的 /v1/messages 监听器。它默认绑定回环地址127.0.0.1:8448),但运维方可以显式 配置其他监听地址;它默认失败即关闭(fail-CLOSED)(无法做出决策的代理绝不能 转发),且只有在运维方主动开通后才会挂载。

本模块对实时请求不做任何决策。它是组合根(composition root)通过 Policy() 读取的、持久且可在控制台编写的策略;决策由现有的接缝(seam)在边缘处组合而成 (EvaluateModelAccessCheckBudget、驻留地、ClassifySensitivity、上下文窗口检查)。

每个闸门默认启用,且在配置之前各自依其原生的主动启用条件保持惰性——DLP 在第一条 规则之前、模型访问在第一项授权之前、驻留地仅在固定某区域时、预算在存在强制性预算之前。 租户须显式放松某个特定闸门,且审计会记录是谁打开了边界。编写 DLP 出口策略属于 管理员层级:授权何种内容可以离开,是一项特权治理变更。

  • 设计上即为最小数据。 它持久化的任何记录——配置、DLP 规则、审计——都绝不携带 提示、响应、密钥或匹配到的 PII 值。代理在传输途中检查的字节会被指纹化(SHA-256), 并由组合根锚定到审计账本,绝不在此处存储。
  • 它是代理的第三条腿:协议外壳(解析、转发、对消息体做旁路复制)是身份无关的 Apache 连接器;受治理的决策器是引擎。本模块仅拥有二者都会查询的那份策略——从而将 决策保持在开放核心(open-core)连接器边界之外。