Skip to content

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

Closed

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 显示为 0,input_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)

Activity

  1. github-actions commented on Jun 3, 2026

    @github-actions

    🤖 Triage: do — scope: openai-chat fallback token parsing

    Add fallback to Anthropic usage field names in openai-chat response parser when OpenAI fields absent. Contained to h-llm/src/wire_apis/openai/chat.rs.

    Auto-labeled agent:try. wiwi will pick this up shortly.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent:assessTrigger AI triageagent:trywiwi auto-implement queue

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions