Files
eryao/.trellis/tasks/archive/2026-04/04-28-fix-ai-english-output/prd.md
T

77 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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. 所有现有测试通过