Skip to content

[性能/HIGH] fixRequestContents 每次发送前多趟全历史扫描 + 非门控日志 #32

@appergb

Description

@appergb

问题

发送前的历史修复 fixRequestContents() 对全历史做多趟扫描,且在正常路径上打印日志。

packages/core/src/core/geminiChat.ts:422(在 :325sendMessage/sendMessageStream 无条件调用)

函数内部依次进行:

  1. 全量扫描收集所有 function call;
  2. 全量扫描构建 bestResponses 映射;
  3. 逐 part 查表重建;
  4. 第二趟重建做孤儿检测;
  5. 第三趟 finalContents 收尾清理。

每一趟都遍历全部历史消息及其 parts,约 O(n×p),且每次发送都跑

此外正常路径上存在大量非门控 console.log,例如 :519:531:566:611:636:649:686:696 —— 即使没有需要修复的内容,这些字符串插值也会执行。

影响

200 条消息、含较多工具调用的历史,每次发送都重复多趟全量扫描;CLI 下这些 console.log 还会经 ConsolePatcher 进入 React 状态,加重渲染压力。

建议

  • recordHistory 追加历史时一次性维护 function-call 索引,避免每次发送重建;
  • 常见的「历史本就合法」场景用 dirty 标志位 O(1) 跳过整段修复;
  • 所有非错误日志放到 config.getDebugMode() 之后(仓库其他地方已有此模式)。

本 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