[PR #338] [MERGED] fix: 修复同会话跨模型缓存键不命中问题 #340

Closed
opened 2026-02-27 07:19:01 +03:00 by kerem · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/justlovemaki/AIClient-2-API/pull/338
Author: @lly835
Created: 2/25/2026
Status: Merged
Merged: 2/26/2026
Merged by: @justlovemaki

Base: mainHead: fix/codex-cache-key-cross-model


📝 Commits (1)

  • 022e345 fix: 修复同会话跨模型缓存键不命中问题

📊 Changes

1 file changed (+2 additions, -4 deletions)

View changed files

📝 src/providers/openai/codex-core.js (+2 -4)

📄 Description

问题描述

修复 #328 中报告的 Claude Code → Codex 会话缓存隔离与跨模型缓存命中问题。

根因分析

codex-core.jsprepareRequestBody() 中,缓存键生成逻辑存在矛盾:

  • 注释说:"弱化 model 依赖,以提升同会话跨模型的缓存命中率"
  • 实际代码:非 default 情况下仍然拼接了 model 前缀 ${model}-${sessionId}

这导致同一会话内切换模型(如 gpt-5-codex-mini → gpt-5-codex)时,缓存键不同,无法命中缓存。

修复方案

移除非 default sessionId 时的 model 前缀拼接:

// 修复前
if (sessionId === 'default') {
    cacheKey = \`${model}-default\`;
} else {
    cacheKey = \`${model}-${sessionId}\`;  // ❌ 违背弱化 model 依赖的设计意图
}

// 修复后
if (sessionId === 'default') {
    cacheKey = \`${model}-default\`;
}
// else: cacheKey 保持为 sessionId,不拼接 model

效果

  • 同会话跨模型缓存命中(sessionId 相同即可复用)
  • 不同会话稳定隔离(不同 sessionId 天然隔离)
  • 无 sessionId 时(default)仍按 model 隔离,保持基础安全性
  • metadata 不透传上游(已在 prepareRequestBody 中正确删除)

关联 Issue 评论

@ylqgithubylq 在 #328 评论中也指出了 else 分支不应该拼接 model 的问题。


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/justlovemaki/AIClient-2-API/pull/338 **Author:** [@lly835](https://github.com/lly835) **Created:** 2/25/2026 **Status:** ✅ Merged **Merged:** 2/26/2026 **Merged by:** [@justlovemaki](https://github.com/justlovemaki) **Base:** `main` ← **Head:** `fix/codex-cache-key-cross-model` --- ### 📝 Commits (1) - [`022e345`](https://github.com/justlovemaki/AIClient-2-API/commit/022e345d68a1fb67a40e5adf172ba418814ca0e7) fix: 修复同会话跨模型缓存键不命中问题 ### 📊 Changes **1 file changed** (+2 additions, -4 deletions) <details> <summary>View changed files</summary> 📝 `src/providers/openai/codex-core.js` (+2 -4) </details> ### 📄 Description ## 问题描述 修复 #328 中报告的 Claude Code → Codex 会话缓存隔离与跨模型缓存命中问题。 ## 根因分析 `codex-core.js` 的 `prepareRequestBody()` 中,缓存键生成逻辑存在矛盾: - **注释说**:"弱化 model 依赖,以提升同会话跨模型的缓存命中率" - **实际代码**:非 default 情况下仍然拼接了 model 前缀 `${model}-${sessionId}` 这导致同一会话内切换模型(如 gpt-5-codex-mini → gpt-5-codex)时,缓存键不同,无法命中缓存。 ## 修复方案 移除非 default sessionId 时的 model 前缀拼接: ```javascript // 修复前 if (sessionId === 'default') { cacheKey = \`${model}-default\`; } else { cacheKey = \`${model}-${sessionId}\`; // ❌ 违背弱化 model 依赖的设计意图 } // 修复后 if (sessionId === 'default') { cacheKey = \`${model}-default\`; } // else: cacheKey 保持为 sessionId,不拼接 model ``` ## 效果 - ✅ 同会话跨模型缓存命中(sessionId 相同即可复用) - ✅ 不同会话稳定隔离(不同 sessionId 天然隔离) - ✅ 无 sessionId 时(default)仍按 model 隔离,保持基础安全性 - ✅ metadata 不透传上游(已在 prepareRequestBody 中正确删除) ## 关联 Issue 评论 @ylqgithubylq 在 #328 评论中也指出了 else 分支不应该拼接 model 的问题。 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
kerem 2026-02-27 07:19:01 +03:00
Sign in to join this conversation.
No labels
pull-request
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
starred/AIClient-2-API-justlovemaki#340
No description provided.