--- name: eval-consistency description: 测试 use-persona 的角色扮演一致性。给定 persona + 10 个对话场景,生成回复并按 5 个维度评分,输出一致性报告。 trigger: 当用户说"/eval-consistency"、"测试角色扮演一致性"、"一致性评测"时触发 tools: - Read - Write - Glob --- # /eval-consistency — 角色扮演一致性评测 你的任务是对 use-persona 的角色扮演质量做一次系统性评测,**全程在当前对话中完成,不需要调用任何外部 API**。 --- ## Step 0:加载测试资源 1. 读取测试用例文件:`evals/test_cases/persona_consistency_cases.yaml` 2. 根据 `persona_name` 字段,读取对应 persona: `personas/others/{persona_name}/persona.json` 3. 从 persona.json 中提取 chat-card 关键内容: - L0 硬性特征 - L2 表达风格(语言特征 + 沟通模式,重点是 signature_phrases 和消息长度偏好) - L4 互动模式(关键场景下的表现) ``` 正在加载 {persona_name} 的 persona 和测试用例... 共 {N} 个场景待测试。 ``` --- ## Step 1:逐场景测试 对每个测试用例,执行两步: ### 1a. 生成角色扮演回复 以 persona 的身份回复用户消息。**只输出回复本身**,不加任何解释。 内部模板(不展示给用户): ``` 你是 {persona_name}。 [chat-card 关键内容] 用户发来消息:"{user_message}" 以你的身份回复,只输出回复本身。 ``` ### 1b. 评分(内部执行,立即给出) 生成回复后,立刻按以下 5 个维度给自己打分(每项 0-20 分): | 维度 | 评分标准 | |------|----------| | **消息长度** | 回复长度是否符合 L2 的消息长度偏好?短消息风格但回了长段落扣分 | | **口头禅命中** | 是否自然用到了 L2 的 signature_phrases?完全没有扣分 | | **标点风格** | 标点和语气是否符合 persona 的风格描述? | | **互动模式** | 在这个具体场景下,互动方式是否符合 L4 的 scene_responses? | | **边界遵守** | 有没有违反 L0 的硬性特征?违反则此项得 0 分 | 给出每项分数 + 一句话说明。 --- ## Step 2:输出完整报告 所有场景跑完后,输出评测报告: ``` =================================== 角色扮演一致性评测报告 — {persona_name} =================================== ## 逐场景结果 [c01] {场景简述} 回复:"{生成的回复}" 得分:{total}/100 ✅/⚠️ 消息长度:{score}/20 — {说明} ✅/⚠️ 口头禅命中:{score}/20 — {说明} ✅/⚠️ 标点风格:{score}/20 — {说明} ✅/⚠️ 互动模式:{score}/20 — {说明} ✅/⚠️ 边界遵守:{score}/20 — {说明} [c02] ... --- ## 汇总 平均分:{avg}/100 {✅ 通过 / ❌ 未达标(目标 70+)} 各维度平均: 消息长度 {avg}/20 口头禅命中 {avg}/20 标点风格 {avg}/20 互动模式 {avg}/20 边界遵守 {avg}/20 ## 主要问题 {如果平均分 < 70,列出最常见的失分点} ## 建议 {如果某维度平均分 < 12,给出 1-2 条具体改进建议,指向 persona 的哪一层需要补充} ``` --- ## Step 3:保存结果(可选) 询问用户是否保存: ``` 要把这次结果存入 evals/results/ 吗? 以后优化后可以对比。(y/n) ``` 如果确认,写入 `evals/results/consistency_{YYYYMMDD}.md`。 --- ## 注意 - **全程不需要 API Key**:评分是你自己执行的,不是另起一个 LLM - **评分要诚实**:对自己生成的回复该扣分就扣分,不要因为是自己生成的就打高分 - **用例是基于小美的**,如果用户指定了其他 persona,根据那个 persona 的 L2/L4 调整评分标准