Prune obsolete docs and update navigation

This commit is contained in:
2026-04-25 15:10:24 +08:00
parent 1c5f9303a2
commit 2ebfd1cf55
341 changed files with 1352 additions and 90709 deletions

View File

@@ -0,0 +1,56 @@
# Runtime NPC 聊天 LLM 迁移设计2026-04-25
## 背景
当前 `server-rs/crates/api-server/src/runtime_chat.rs` 已承接 `POST /api/runtime/chat/npc/turn/stream`但只返回确定性兜底文本。实际游戏聊天里NPC 回复、下一轮建议、好感变化和限轮收束都应该沿用旧 Node 服务器的 LLM 编排。
## 迁移源
本轮只参考旧 Node 已冻结实现,不恢复 `server-node` 服务,也不把前端切回 Express
1. `server-node/src/prompts/chatPromptBuilders.ts`
2. `server-node/src/modules/ai/chatOrchestrator.ts`
3. `server-node/src/services/chatService.ts`
4. `packages/shared/src/contracts/rpgRuntimeChat.ts`
提示词常量必须原样迁移,禁止改写:
1. `NPC_CHAT_TURN_REPLY_SYSTEM_PROMPT`
2. `NPC_CHAT_TURN_SUGGESTION_SYSTEM_PROMPT`
## 本轮落地边界
1. Rust `api-server` 在同一路由内优先调用 `platform-llm`
2. LLM 回复使用旧 Node 的 `buildNpcChatTurnReplyPrompt(...)` 等价构造逻辑,保持输入字段和中文上下文组织一致。
3. LLM 建议使用旧 Node 的 `buildNpcChatTurnSuggestionPrompt(...)` 等价构造逻辑,解析规则保持“最多 3 行、去掉编号/项目符号”。
4. 好感变化沿用旧 Node 的关键词打分规则:
- 正向与负向关键词计分。
- 首聊无明显关键词时给 `+1`
- 单轮变化限制在 `[-3, 3]`
5. `chatDirective.forceExitAfterTurn / closingMode=foreshadow_close` 时不生成建议,返回空数组,并在 `complete.chatDirective.forceExit` 中显式告知前端退出。
6. LLM 未配置或失败时继续返回后端兜底 SSE保证相遇和点击聊天链路不断。
## 暂不落地
1. 暂不迁移 `maybeBuildPendingNpcQuestOffer(...)` 的完整 quest 生成链。
2. 暂不新增 SpacetimeDB reducer本路由属于 Axum 侧 LLM 编排SpacetimeDB reducer 仍保持确定性。
3. 暂不扩展前端 UI 文案。
## 工程落点
1. 新增 `server-rs/crates/api-server/src/runtime_chat_prompt.rs`
- 承载旧 Node 提示词常量。
- 承载 NPC 聊天 prompt builder 与轻量 JSON 读取 helper。
2. 修改 `server-rs/crates/api-server/src/runtime_chat.rs`
- 注入 `State<AppState>`
- 优先 `LlmClient.stream_text(...)` 生成 `reply_delta`
- 再调用 `request_text(...)` 生成建议。
- 计算 `affinityDelta / affinityText / chatDirective` 后输出 `complete`
3. 修改 `server-rs/crates/api-server/src/main.rs`
- 注册 `runtime_chat_prompt` 模块。
## 验收
1. `cargo fmt -p api-server`
2. `cargo check -p api-server`
3. `node scripts/check-encoding.mjs docs/technical/RUNTIME_NPC_CHAT_LLM_MIGRATION_2026-04-25.md server-rs/crates/api-server/src/runtime_chat.rs server-rs/crates/api-server/src/runtime_chat_prompt.rs server-rs/crates/api-server/src/main.rs`