Skip to content

CLIproxy 混合格式问题:OpenAI 请求 → Anthropic 响应,usage token 解析不到 #96

Description

@ShootingStarHalo

问题描述

Heron 在监控通过本地 CLIproxy 转发的 LLM 流量时,请求是 OpenAI Chat Completions 格式model + messages),但响应是 Anthropic Messages 格式type: "message"content: [{type:"text",...}]usage: {input_tokens, output_tokens}),导致 token 用量无法正确解析。

Heron 把这条调用归类为 openai-chat,然后在响应中查找 usage.prompt_tokens / usage.completion_tokens(OpenAI 标准字段名),但 CLIproxy 返回的是 usage.input_tokens / usage.output_tokens(Anthropic 字段名),字段对不上,结果 output_tokens 显示为 0input_tokens 也只是个粗略的估算值。

复现步骤

  1. 部署一个接受 OpenAI 格式请求、返回 Anthropic 格式响应的 CLIproxy
  2. Heron 监听 loopback 接口,捕获发往该代理的流量
  3. 用 OpenAI Chat Completions 格式发送请求:{"model":"gpt-5.5","messages":[...]}
  4. 在 Heron UI 的 LLM Calls 页面查看 token 统计

实际结果

{
  "model": "gpt-5.5",
  "wire_api": "openai-chat",
  "status_code": 200,
  "input_tokens": 13,
  "output_tokens": 0,
  "tokens_estimated": false
}

期望结果

实际响应体中包含 usage: {input_tokens: 309, output_tokens: 37},Heron 应该能正确提取这些 token 数值,或者提供针对混合格式代理的 fallback 解析器。

原始数据

请求(OpenAI 格式):

{"model":"gpt-5.5","max_tokens":30,"messages":[{"role":"user","content":"回复一句话:我是谁?"}]}

响应(Anthropic 格式):

{
  "id": "resp_0455a65d...",
  "type": "message",
  "role": "assistant",
  "model": "gpt-5.5",
  "content": [
    {"type":"thinking","thinking":"","signature":"..."},
    {"type":"text","text":"你是在与我对话的人。"}
  ],
  "stop_reason": "end_turn",
  "stop_sequence": null,
  "usage": {
    "input_tokens": 309,
    "output_tokens": 37
  }
}

环境信息

  • Heron 版本:v0.4.0
  • 代理:cli-proxy-api(本地代理,x-api-key 认证)
  • 抓包模式:live,loopback 接口
  • 操作系统:Linux (WSL2)

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:assessTrigger AI triageagent:trywiwi auto-implement queue

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions