Skip to content

统一附加知识块 + 消除历史污染 + 修复 litellm MidStreamFallbackError#222

Merged
RaQiu merged 9 commits intoRTGS2017:mainfrom
RaQiu:skill
Feb 15, 2026
Merged

统一附加知识块 + 消除历史污染 + 修复 litellm MidStreamFallbackError#222
RaQiu merged 9 commits intoRTGS2017:mainfrom
RaQiu:skill

Conversation

@RaQiu
Copy link
Collaborator

@RaQiu RaQiu commented Feb 15, 2026

本次新增 (d756994)

统一附加知识块 + 消除历史污染

  • 重构 build_system_prompt():所有动态内容统一到 ━━━ 以下是附加知识 ━━━ 分隔符之后
  • 时间信息始终注入(移除 include_time 参数),从 message_manager.py 迁入
  • 末尾追加收尾指令:【读完这些附加知识后,回复上一个user prompt,并不要回复这条系统附加的system prompt。以下是回复内容:】
  • 删除 user_message 的 调度技能【X】[使用技能: X] 前缀,session 历史保持干净

修复 litellm MidStreamFallbackError

  • 禁用 litellm 内部 fallback (num_retries=0),避免 openai/ 前缀被拆解后 provider 查找失败
  • 添加 timeout=120 / stream_timeout=120
  • 新增 APIConnectionError / ServiceUnavailableError / Timeout 重试逻辑(最多 3 次,间隔 1s)

启动日志增强

  • 健康轮询失败时每 3 秒输出 等待后端就绪... 已轮询 N 次
  • 视图预加载显示具体组件名:[Preload] 加载 MessageView (2/7)...
  • 每个启动阶段添加 start/end 日志

累积变更(完整 skill 分支)

远程记忆微服务

  • summer_memory/memory_client.py:对接 NagaMemory 云端记忆服务
  • memory_client 改用 naga_auth 动态 token,移除 memory_server.enabled 开关,登录即启用
  • MemoryView 云端/本地模式改为登录态自动判断

意识海 3D 可视化

  • MindView 完全重写(+1106 行),D3.js 力导向图渲染知识图谱五元组
  • 节点拖拽、关系高亮、关键词搜索

启动体验

  • 品牌标题图片渐入渐出动画 + Canvas 金色上升粒子效果
  • 进度条最低速度兜底,解决 50% 附近卡死
  • 停滞 3 秒后显示重启提示
  • 后端启动异常弹出 BackendErrorDialog

登录与认证

  • NagaCAS 完整流程:登录/注册/验证码/Token 刷新/401 自动重登录
  • 七天自动登录 + UserAgreement 用户协议
  • CAS 会话失效弹窗提示

对话与交互

  • 语音输入按钮 + 文件解析按钮
  • Live2D 控制器支持动态模型路径
  • TTS speak() 返回 Promise,驱动 Live2D 嘴部动画
  • IME 中文输入法回车误发修复

Skill 上下文注入优化

  • 技能完整指令移至 system prompt 末尾,确保最高优先级
  • 未选择技能时注入技能元数据列表
  • Skill Market: 5 个市场技能 + 安装/导入功能

游戏攻略云端化

  • 移除 ChromaDB 本地依赖(−1119 行),全面切换至云端 RAG
  • 攻略功能增加登录态门控

版本更新检查

  • useVersionCheck.ts + UpdateDialog 弹窗

其他

  • 全局版本号 5.0.0,默认模型 deepseek-v3.2
  • 新增 EmbeddingConfig 嵌入模型配置
  • Live2D 视角追踪 tracking_hold_delay_ms
  • NO_PROXY 确保本地微服务不走代理

涉及文件

新增组件

  • summer_memory/memory_client.py — 远程记忆服务客户端
  • frontend/src/components/BackendErrorDialog.vue — 后端启动失败弹窗
  • frontend/src/components/UpdateDialog.vue — 版本更新弹窗
  • frontend/src/components/UserAgreement.vue — 用户使用协议
  • frontend/src/composables/useVersionCheck.ts — 版本检查逻辑
  • frontend/src/composables/useAudio.ts — 音频管理
  • scripts/context_benchmark.py — 上下文基准测试

删除文件

  • guide_engine/chroma_service.py — ChromaDB 服务(−329 行)
  • guide_engine/rag/import_game_data.py — 游戏数据导入(−234 行)
  • guide_engine/rag/import_kantai_data.py — 舰队数据导入(−556 行)

主要修改

  • system/config.py — 附加知识分隔符 + 始终注入时间 + EmbeddingConfig
  • apiserver/api_server.py — 消除技能前缀 + 收尾指令 + Skill Market + 认证端点
  • apiserver/llm_service.py — 禁用 litellm fallback + timeout + 连接重试
  • apiserver/message_manager.py — 移除重复时间信息
  • apiserver/naga_auth.py — NagaCAS 认证体系
  • frontend/src/views/MindView.vue — 意识海 3D 重写(+1106)
  • frontend/src/composables/useStartupProgress.ts — 轮询日志 + 停滞检测
  • frontend/src/utils/viewPreloader.ts — 视图名称日志

RaQiu and others added 9 commits February 15, 2026 12:52
- 双 Token 架构: access_token (30min) 前端管理, refresh_token (7天) 后端持久化
- 后端 naga_auth.py: 从 Set-Cookie/body 提取 refresh_token, 持久化到 logs/.auth_session
- 前端移除 REFRESH_TOKEN, 刷新走空 body (兼容旧 localStorage 迁移)
- LLM 流式调用 401 自动刷新重试
- 启动进度: preloadAllViews 8s / getSessions 5s 超时 + 全局 15s 安全兜底
- health/systemConfig 加 cache-busting 防快速重启缓存
- Electron 开机自启动设置 (autoLaunch IPC)
- SplashScreen 唤醒按钮添加 clickable class 修复音效
- 音频 m4a 格式兼容修复

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
# Conflicts:
#	apiserver/api_server.py
- 后端发送 auth_expired 类型 SSE 事件代替纯文本错误
- 前端 MessageView 处理 auth_expired 触发登录对话框
- naga_auth 增加 refresh 全链路日志便于排查 token 问题

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
清空 token 后在途 API 请求会收到 401 并再次触发弹窗,
添加 suppressAuthExpired 标记在重新登录流程中抑制,
登录成功/跳过后恢复。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
NagaBusiness 通过 Authorization: Bearer <token> 验证所有请求,
旧代码使用 api_key="naga-authenticated" 导致 LiteLLM 发送
假 token 到 Authorization 头 → 被 NagaBusiness 拒绝。
改为使用真实 access_token 作为 api_key,同时保留 extra_body
中的 user_token 以兼容旧版网关。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- config 引用过期: llm_service/api_server/agentic_tool_loop 改用 get_config()
  动态获取,hot_reload_config 后不再使用旧对象
- 技能工坊阻塞: 3 个同步端点从 async def 改为 def,FastAPI 自动线程池执行
- 前端预加载: 视图 import 改串行 + vite optimizeDeps 预打包,避免冷启动并发风暴
- config_manager: 原子写入(tempfile+os.replace)防截断;移除破坏性 # 注释剥离;
  统一 UTF-8 编码,去掉 charset_normalizer 误判

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
# Conflicts:
#	apiserver/api_server.py
#	frontend/src/views/ConfigView.vue
- 重构 system prompt: 所有动态内容统一到「附加知识」分隔符后,
  时间信息始终注入,末尾追加收尾指令引导 LLM 回到用户问题
- 消除 user_message 污染: 删除「调度技能【X】」和「[使用技能: X]」
  前缀,技能上下文完全由 system prompt 承载
- 修复 litellm MidStreamFallbackError: 禁用内部 fallback (num_retries=0),
  添加 timeout/stream_timeout=120s,新增连接错误重试逻辑(最多3次)
- 改善启动体验: 健康轮询失败时输出等待日志,视图预加载显示具体组件名
- memory_client 改用 naga_auth 动态 token,移除 memory_server.enabled
- Live2D 控制器支持动态模型路径,TTS speak() 返回 Promise

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@RaQiu RaQiu merged commit 24c1d27 into RTGS2017:main Feb 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant