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

3.3 KiB
Raw Blame History

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_stagelanguage 传入 _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_ENget_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. 所有现有测试通过