77 lines
3.3 KiB
Markdown
77 lines
3.3 KiB
Markdown
|
|
# 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. 所有现有测试通过
|