# PRD:修复 AI 英文输出失效 ## 1. 背景 用户选择 English 作为语言设置后,AI 仍然输出中文。已在上一轮分析中确认根因: - `system_prompt.py:_build_output_rules` 正确注入了 `"You MUST respond in English"` 指令 - 但 **`worker_rules.py:get_worker_role_playing` 完全忽略 `language` 参数**,始终返回中文版 `_WORKER_ROLE_PLAYING` - 角色扮演提示词是系统提示词中体量最大的部分,其全部中文内容形成了压倒性的中文 priming 效应 - 此外 `user_prompt.py` 的排盘数据也硬编码为中文,`_build_safety_section` 同样硬编码中文 ## 2. 目标 1. 当 `language` 为英文时,AI 的角色扮演提示词也应为英文 2. 英文模式的 safety section 应包含英文版规则 3. 英文模式的 user prompt 字段应包含英文标签 4. 最小化影响范围——不改变任何业务逻辑或数据流 ## 3. 变更内容 ### 3.1 Worker Rules(核心修复) **`worker_rules.py`**: - 新增 `_WORKER_ROLE_PLAYING_EN` 英文版角色扮演提示词 - `get_worker_role_playing(language)` 根据 language 前缀分发中/英文版本(新增繁体分支以备后用) ### 3.2 System Prompt **`system_prompt.py`**: - `_build_safety_section` 接受 `language` 参数,提供英文版安全规则 - 保持现有中文版不变,在 `language.startswith("en")` 时返回英文版 ### 3.3 User Prompt **`user_prompt.py`**: - 新增 `_BUILD_FIELD_MAP_EN` 英文版字段标签 - `build_divination_user_prompt` 接受 `language` 参数 - 当 `language` 为英文时使用英文标签 ### 3.4 Runner 调用链 **`runner.py`**: - `_build_worker_input_messages` 接受 `language` 参数,传递给 `build_divination_user_prompt` - `_run_worker_stage` 将 `language` 传入 `_build_worker_input_messages` ### 3.5 测试 **`test_agentscope_prompts.py`**: - 新增测试:`language="en-US"` 时 system prompt 不含大量中文 - 新增测试:`language="en-US"` 时 worker role playing 为英文 - 新增测试:`language="zh-CN"` 时行为不变 ## 4. 文件变更清单 | 文件 | 变更 | |------|------| | `backend/src/core/agentscope/prompts/worker_rules.py` | 新增 `_WORKER_ROLE_PLAYING_EN`,`get_worker_role_playing` 分发 | | `backend/src/core/agentscope/prompts/system_prompt.py` | `_build_safety_section(language)`,`build_system_prompt` 传参 | | `backend/src/core/agentscope/prompts/user_prompt.py` | `build_divination_user_prompt(language=)`,新增英文字段标签 | | `backend/src/core/agentscope/runtime/runner.py` | `_build_worker_input_messages(language=)`,传递 language | | `backend/tests/unit/test_agentscope_prompts.py` | 新增语言切换相关测试 | ## 5. 不在此范围的变更 - **不修改** `get_worker_output_rules` — 已正确按 language 分发(EN/ZH-Hant/ZH-CN) - **不修改** `_build_output_rules` — 已正确工作 - **不涉及前端** — 前端之前的重构已完成 `language` 统一,无需改动 - **不涉及协议文档** — 协议已定义 language 字段 - **不涉及数据库迁移** — 数据结构已正确 ## 6. 验收标准 1. `language="en-US"` 时,完整 system prompt 的语境以英文为主(role playing + safety 均为英文) 2. `language="en-US"` 时,user prompt 中排盘数据的字段标签为英文 3. `language="zh-CN"` 时,所有表现与修复前完全一致(回归) 4. 所有现有测试通过