Skip to content

[性能/CRITICAL] 遥测每轮 JSON.stringify 完整响应 / 全部 chunk #31

@appergb

Description

@appergb

问题

遥测日志每轮都把完整响应 / 全部 chunk 序列化成 JSON,仅仅是为了传给 _logApiResponse / _logApiRequest

  • 非流式:packages/core/src/core/geminiChat.ts:370
    await this._logApiResponse(durationMs, prompt_id, response.usageMetadata, JSON.stringify(response), ...);
  • 流式:packages/core/src/core/geminiChat.ts:981
    await this._logApiResponse(durationMs, prompt_id, this.getFinalUsageMetadata(chunks), JSON.stringify(chunks), ...);
  • 请求侧 _getRequestTextFromContents 也对整段 contents(完整 curated 历史 + 本轮输入)做 JSON.stringifygeminiChat.ts:~174)。

流式响应里 chunks 可能累积上百个 chunk 对象,JSON.stringify(chunks) 的体量是整个响应大小级别,且同步发生在「chunk 结束 → 记录历史」之间。

影响

响应越大、流式 chunk 越多,序列化开销越高(O(响应大小)),卡在热路径上。

建议

遥测只记录轻量摘要(模型名、token 数、首/尾 part 文本),而不是序列化完整对象;必要时采样或截断。


本 issue 来自对 opensource 分支的一次代码审计(共 8 条,按严重程度拆分),结论均含 文件:行号 出处,欢迎指正。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    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