Fix/AGC上下文丢失问题 #247
2 Participants
Due Date
2026-09-03
Notifications
Total Time Spent: 2 seconds
k88936
2 seconds
Dependencies
No dependencies set.
Reference: GenarrativeAI/Genarrative#247
Reference in New Issue
Block a user
Delete Branch "fix/codex-session-management"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
权衡之后选择附加历史消息构造一个巨大的prompt
before:
after:
重启之后发送新消息abab
codex看到:
移除了原来的"会话最后只有用户消息就自动重新发送用户消息"功能, 因为存在冲突: 现在的实现是每次用户手动发送新消息才做以上的步骤
before and after:

Close #249
79de326ddctob136a7c346审查 head sha
b136a7c3464598f4658f37ee2ac05a4507f956f1:明确问题——apps/ai-game-creator-shell/src/services/clientHttp.ts 移除了所有默认请求超时和 AbortController。服务器不可达或响应不返回时,认证初始化会无限停留在检查状态,原有超时错误、重试和降级到登录页路径无法触发。建议恢复默认超时,并为长请求提供显式 opt-out。[head sha:
300ea76780]明确问题:首次建立(或 app-server 进程重启后重新建立)DirectProject 连接时,
build_direct_codex_history_prompt会读取项目主对话的全部messages,逐条拼成一个没有任何长度/条数/token 上限的单一 user prompt。该对话文件是持久增长的;因此长时间使用或包含大段工具输出的项目,在重启后第一次发送消息可能超过 Codex/model context window,导致请求失败(或截断/高额 token 消耗),用户仍然丢失上下文,且失败会在每次新连接时重复发生。建议:在构造恢复 prompt 前按 token/字节预算有界地选择最近消息(必要时保留最近 user/assistant 边界),或使用受支持的历史/compaction 机制;对超预算情况增加可观测的摘要/降级路径,并补充一个超大 conversation 的回归测试,验证恢复请求不会超过配置的 context budget。
[head sha:
300ea76780]明确问题:首次建立(或 app-server 进程重启后重新建立)DirectProject 连接时,
build_direct_codex_history_prompt会读取项目主对话的全部messages,逐条拼成一个没有任何长度/条数/token 上限的单一 user prompt。该对话文件是持久增长的;因此长时间使用或包含大段工具输出的项目,在重启后第一次发送消息可能超过 Codex/model context window,导致请求失败(或截断/高额 token 消耗),用户仍然丢失上下文,且失败会在每次新连接时重复发生。建议:在构造恢复 prompt 前按 token/字节预算有界地选择最近消息(必要时保留最近 user/assistant 边界),或使用受支持的历史/compaction 机制;对超预算情况增加可观测的摘要/降级路径,并补充一个超大 conversation 的回归测试,验证恢复请求不会超过配置的 context budget。
使用滑动窗口, 上下文大小复用高级设置中的配置
[head sha:
e73d04db00]明确问题:本次新增的 DirectProject 重建逻辑依赖项目对话 JSONL 来恢复上下文,但当前调用链只在回复成功后持久化 assistant(direct_runtime.rs:4241),没有持久化本轮 user 消息。因而
read_local_conversation_for_session_at读不到此前的用户请求;一旦 app-server 进程重启/线程被淘汰,重建 prompt 只会带上 assistant/tool 记录,用户提出的原始需求和连续意图会丢失,正是本 PR 要修复的上下文丢失问题。建议在发起 turn 前以direct-codex:{clientTurnId}:user幂等写入规范化后的 user prompt,并在失败/重试路径明确其状态,补充重启后恢复多轮 user/assistant 的回归测试。@@ -3152,0 +3231,4 @@base_request: &LlmRunRequest,llm: &GameCreatorLlmConfig,) -> Result<String, String> {let conversation = read_local_conversation_for_session_at(root, None, None)?;[P1] 重建历史缺少 user 消息:此处读取的 project.jsonl 只会包含成功回复后持久化的 assistant(当前调用链未写入本轮 user),所以重启/线程淘汰后恢复 prompt 丢失用户原始需求。请在 turn 开始前幂等持久化
direct-codex:{clientTurnId}:user,并补充重启恢复多轮 user/assistant 测试。