3.3 KiB
3.3 KiB
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. 目标
- 当
language为英文时,AI 的角色扮演提示词也应为英文 - 英文模式的 safety section 应包含英文版规则
- 英文模式的 user prompt 字段应包含英文标签
- 最小化影响范围——不改变任何业务逻辑或数据流
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. 验收标准
language="en-US"时,完整 system prompt 的语境以英文为主(role playing + safety 均为英文)language="en-US"时,user prompt 中排盘数据的字段标签为英文language="zh-CN"时,所有表现与修复前完全一致(回归)- 所有现有测试通过