问题描述
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 也只是个粗略的估算值。
复现步骤
- 部署一个接受 OpenAI 格式请求、返回 Anthropic 格式响应的 CLIproxy
- Heron 监听 loopback 接口,捕获发往该代理的流量
- 用 OpenAI Chat Completions 格式发送请求:
{"model":"gpt-5.5","messages":[...]}
- 在 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)
问题描述
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也只是个粗略的估算值。复现步骤
{"model":"gpt-5.5","messages":[...]}实际结果
{ "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 } }环境信息