Files
Fay/genagents/modules
guo zebinandClaude Opus 4.6 2cc7b720eb fix: 修复记忆线程持锁阻塞导致的对话死锁
记录对话/观察记忆的后台线程在 agent_lock 内调用了 LLM 评分与
embedding 网络请求;一旦上游 OpenAI 客户端因 chunked/keep-alive
不发字节而永久挂起(无 timeout 配置),agent_lock 永远不会释放,
后续 question() 在 create_agent() 处获取同一把锁时即被锁死,整个
对话流程会卡死(曾观察到 release 机器 5 小时无响应)。

修复:
- memory_stream.append_prepared_node:新增纯内存写入入口,由调用方
  传入预先算好的 importance 与 embedding。
- remember_conversation_thread / remember_observation_thread:将
  generate_importance_score 与 get_text_embedding 移出 agent_lock,
  失败时回退默认值/空向量,仅在写 seq_nodes 时短暂持锁。
- simulation_engine.gpt_structure:openai.OpenAI() 显式配置
  httpx Timeout(60s, connect=10s) 与 max_retries=1,避免无限挂起。
- nlp_cognitive_stream.ChatOpenAI:补充 timeout=60、max_retries=1。
- save_agent_memory:节流判断与标记文件检查移出锁,先短暂持锁拿
  用户名快照,再逐用户独立持锁保存,避免长时间锁住整个 agents。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-12 10:13:01 +08:00
..
2025-04-02 23:31:46 +08:00