生成报告提示词 — 评估报告

评估对象:prompt/生成报告提示词.md  ·  基于 19 条对话记录及对应报告 JSON 的交叉验证

评估日期:2026-05-20 分析样本:19 sessions × 2 users(派左 / 高飞) 关注维度:输出质量、结构设计、评估公正性
3
严重问题(直接影响评估准确性)
4
中等问题(增加噪声或结构冗余)
3
轻微问题(可读性 / 可维护性)

目录

  1. 严重问题(3 项)
  2. 中等问题(4 项)
  3. 轻微问题(3 项)
  4. 问题汇总表
  5. 修改建议清单
严重问题
严重
C1 · thinking 字段的 100 字限制反向压缩了评估深度

提示词要求 LLM 在最终 JSON 中输出 "thinking": "<这里输出你的思路,不要超过100字>"。这个设计的本意是让 LLM 先"思考"再打分,但 100 字(约 50 个中文字)远不足以完成多维度、多轮次的分析推理。

由于 thinking 被强制限制在 JSON 内且字数极短,LLM 实际上是在几乎没有推理链的情况下直接给出分数,容易产生"印象分"而非证据驱动的评分。

交叉验证发现
实际存储的 19 份报告 JSON 中均无 thinking 字段,说明后端在存储时已将其去除。这意味着 thinking 字段的唯一价值是作为"中间推理",但 100 字的限制使其几乎失效。对比:GPT/Claude 在多维评分时通常需要 300-800 字的分析才能支撑稳定打分。
当前(问题)
{
  "thinking": "<这里输出你的思路,
不要超过100字>",
  "overall_score": { ... }
}
建议(修改)
<!-- 在 JSON 之前,先输出分析 -->

【评分分析】(此部分不入 JSON)
维度1: [引用对话轮次,分析正负行为]
...
综合得分计算:...

```json
{
  "overall_score": { ... }
}
```

将 thinking 移出 JSON、移到输出前,取消字数限制,允许 LLM 在结构化推理后再生成 JSON,评分一致性和准确性将显著提升。

严重
C2 · 未考虑语音输入(ASR)带来的误识别噪声

所有学员消息均来自语音录音(session JSON 中 audio_file_url 字段存在,asr_original_textmessage 相同),即对话记录是 ASR 自动转写结果,必然含有识别错误

具体 ASR 错误示例(thread_1265_paizuo)
  • 用户实际说"只免门票" → ASR 转写为 "黑免门票"
  • 用户实际说"机械密室" → ASR 转写为 "机械米实"

当前提示词对此完全没有说明。评估 LLM 可能将 "语言表达不流畅" "用词混乱" 归为学员能力问题而扣分,但实际上是 ASR 产生的噪声。
影响
评估原则章节需要补充一条:学员输入为语音识别结果,存在转写误差。评估时应聚焦意图与关键行为,不因个别字词识别错误或表达不流畅扣分。特别是"情绪先承后行""行为精准命名"等语言表达敏感维度,误判风险最高。
当前(缺失)
<!-- 评估原则中无任何
关于输入来源的说明 -->
建议(新增)
### 语音输入说明
学员的对话消息来自语音录音
的自动识别结果(ASR),可能
存在字词误识别、停顿词、重
复词等噪声。评估时:
- 以意图和核心行为为准
- 不因表达不流畅或个别
  字词错误扣分
- 若某句话因噪声导致语义
  模糊,应作有利于学员的
  解释
严重
C3 · 综合得分权重不透明,无法审计计算过程

提示词要求使用加权平均公式 综合得分 = Σ(维度得分 × 维度权重),权重来自外部 {scoring_criteria}。但输出 JSON 中只有最终分数,不记录各维度权重,导致分数完全无法事后验证。

验证尝试(report_1265_paizuo)
维度得分:50, 35, 85, 20, 70 → 等权重均值 = 52
实际报告分数 = 51(相差 1 分)
∴ 权重不等,但使用了什么权重完全不可见。无法区分"权重计算正确但结果略有浮动"还是"LLM 估算了一个大概数字"。
当前输出(不透明)
"overall_score": {
  "score": 51,
  "grade": "B",
  "summary": "..."
}
建议输出(可审计)
"overall_score": {
  "score": 51,
  "grade": "B",
  "score_breakdown": [
    {"dimension":"价值锚定吸引",
     "score":50,"weight":0.25,
     "weighted":12.5},
    ...
  ],
  "summary": "..."
}

如果不想增加 JSON 体积,至少应该在 thinking/分析段中记录加权计算过程,便于校验。

中等问题
中等
M1 · ability_scores 与 detailed_evaluation 双写分数,存在不一致风险

提示词要求同一维度的分数在 ability_scores[i].scoredetailed_evaluation[i].score各写一次,并明确要求"两处数值必须一致"。这是一个冗余设计,不仅浪费输出 token,还增加了不一致的风险。

当前样本一致性检查
检查 4 份报告(1265/1277/1270/1283):所有样本两处分数一致。但这是因为 LLM 在短对话中较容易保持一致,在维度数量多(5个)、对话复杂的情况下,不一致率会上升。
当前(冗余)
"ability_scores": [
  {"dimension":"X","score":50,
   "max_score":100}
],
"detailed_evaluation": [
  {"dimension":"X","score":50,  ←重复
   "strengths":[...],...}
]
建议(去除冗余)
"ability_scores": [
  {"dimension":"X","score":50,
   "weight":0.2}
],
"detailed_evaluation": [
  {"dimension":"X",
   /* 不重复 score */
   "strengths":[...],...}
]
中等
M2 · max_score 字段对所有维度均为 100,完全冗余

19 份报告中,所有维度的 max_score 字段值均为 100,没有任何例外。该字段在 prompt 的评分规则中也从未出现过 "非100" 的上限,说明这是一个固化常量被当作变量设计进了 schema。

直接后果:增加约 10-15% 的 JSON 输出 token,不传递任何有效信息,且在 prompt 示例中反复出现,增加了阅读负担。

当前(冗余字段)
{
  "dimension": "价值锚定吸引",
  "score": 50,
  "max_score": 100  ← 始终为100
}
建议(删除)
{
  "dimension": "价值锚定吸引",
  "score": 50
}
中等
M3 · detailed_evaluation 与 objective_completion 的建议缺乏分工,导致重复

两个评估模块都要求输出 suggestions,但提示词没有定义它们的职责边界。实际报告中,同一个问题(例如"应该守住权限边界")常在两处出现几乎相同的建议,对用户的阅读体验造成冗余。

示例(report_1265_paizuo,"利益边界守护"相关建议)
detailed_evaluation.suggestions:
"一开始就明确合作框架:'咱们常规合作是给您和1位助理提供免费体验…'"

objective_completion.suggestions(守住底线目标):
"开场先明确合作基线:'咱们的基础合作模式是给您和1位助理提供免费体验…'"

≈ 同一建议的两种表述,对用户无增量价值。
当前(无边界)
两个 suggestions 都泛指
"下次怎么做更好",没有
区分层次。
建议(区分职责)
detailed_evaluation.suggestions
→ 聚焦技能微动作:
  "用什么话术、什么顺序"
  (操作层)

objective_completion.suggestions
→ 聚焦目标级策略:
  "整体该用什么思路应对"
  (策略层)
中等
M4 · "未展现"维度的评分规则与 score=0 的语义模糊

提示词说"当某维度在对话中完全未展现相关行为时,优点/不足/建议可以为空数组",但同时评分规则说"完全未产生相关行为则记 0 分"。这导致两种情况被混同处理:

  1. 行为完全缺失(例如:从未引导员工去私密空间)→ 应得 0 分,但 weaknesses 应该说明"缺失了什么"而非空数组
  2. 场景中无触发机会(例如:某场景根本不需要公开控场)→ 应豁免此维度评分
report_1286_gaofei 中的矛盾处理
"公开场合控场"维度得分 = 0,weaknesses: [](空),但有 suggestions。
→ 0 分 + 空 weaknesses 逻辑不一致:如果"完全未展现"到需要 0 分,就一定有可描述的不足;如果 weaknesses 可以空,则说明这个维度不该得 0 分(应豁免)。

建议在提示词中区分"缺失行为(应扣分+有 weakness)"与"场景无关(豁免此维度)",并在输出 schema 中增加 "skipped": true/false 字段用于豁免情况。

轻微问题
轻微
N1 · 输出前自查清单是仪式性指令,LLM 无法执行

提示词末尾的"输出前自查清单"(4 个 checkbox)只是文本 prompt,LLM 无法真正"运行检查"。这几行占据 5 行提示词空间,但实际上不产生任何 JSON 验证效果。

真正减少 JSON 格式错误的做法是:在 Few-shot 示例中提供一个完整正确的输出样例,而不是用 checklist。

当前(无效)
输出前自查清单:
- [ ] 所有 { 都有对应的 }
- [ ] 所有字符串中的引号
      已处理
- [ ] 数组中对象的逗号
      位置正确
- [ ] JSON可以通过在线验
      证工具验证
建议(简化)
直接输出合法 JSON,
不要有任何前言或后语。
确保所有括号闭合、
逗号位置正确。
轻微
N2 · 执行步骤(8 步)与评估任务(4 项)高度重复

提示词包含两个几乎等价的内容块:"## 评估任务"(4 个子任务)和"## 执行步骤"(8 步流程)。两者覆盖的内容基本相同(解析评分→分析对话→逐维度打分→计算综合→生成建议→输出JSON),但重复写了约 30 行。

这种重复不会提升输出质量,反而增加了 prompt token 消耗(约 200 token),并可能在措辞细微不同时造成 LLM 困惑。建议保留"评估任务"(更详细),删除"执行步骤"。

轻微
N3 · objective 标签名与 schema 中 object 拼写不一致

输入信息中陪练目标的包裹标签是 <object>(与陪练系统提示词中的 <objective> 不同),而提示词内部文本又写"从'陪练目标'中解析"。这是一个轻微的命名不一致,在维护时容易引发混乱。

当前(不一致)
<!-- 生成报告提示词.md -->
<object>
{training_objective}
</object>

<!-- 陪练提示词.md -->
<objective>
{training_objective}
</objective>
建议(统一)
<!-- 两个文件统一使用 -->
<objective>
{training_objective}
</objective>
问题汇总表
编号 问题描述 严重程度 影响维度 是否在实际报告中已出现问题
C1 thinking 字段 100 字限制压缩推理深度 严重 所有维度评分准确性 无法直接验证(thinking 已被后端剥离)
C2 未说明学员输入为 ASR 语音转写 严重 语言表达类维度(情绪先承后行、行为精准命名等) 有风险,已发现 "黑免门票""机械米实" 等明显误识别
C3 综合得分权重不透明,无法核对计算 严重 overall_score 可信度 是:report_1265 等权均值为 52,实际报告为 51,差异无法解释
M1 分数在 ability_scores 和 detailed_evaluation 中双写 中等 数据一致性 当前 4 份样本未出现不一致,但属于隐患
M2 max_score 字段始终为 100,冗余 中等 token 效率 是:所有报告 max_score 均为 100
M3 两处 suggestions 职责重叠,内容重复 中等 报告阅读价值 是:report_1265 中"合作框架"建议在两处几乎相同
M4 "未展现"维度与 score=0 语义模糊 中等 评分公平性 是:report_1286 公开场合控场 score=0 但 weaknesses=[]
N1 输出前自查清单是无效仪式指令 轻微 prompt token 效率
N2 执行步骤与评估任务内容重复(约 200 token) 轻微 prompt 可维护性
N3 陪练目标标签 <object> vs <objective> 不一致 轻微 跨提示词维护
修改建议清单(按优先级排序)
1
将 thinking 移出 JSON,放在输出前,取消字数限制 高优先级
在提示词末尾的"执行步骤"之后,增加一段指引:"在生成 JSON 前,先在代码块外输出你的逐维度分析思路(引用具体对话轮次),再输出最终 JSON。"这样 LLM 的推理链完整展开后,JSON 输出会更准确,且分析段可被前端展示为"详情"或在内部审计时使用。
2
在"评估原则"中新增"语音输入说明"章节 高优先级
内容要点:学员消息为语音转写(ASR),可能含有字词误识别。评估应聚焦意图和关键行为,不因表达不流畅或个别字词错误扣分;对语义模糊的内容作有利于学员的解释。建议放在"客观性"原则之后,单独成节。
3
在 ability_scores 中增加 weight 字段,并在 overall_score 中输出加权明细 高优先级
修改 ability_scores schema:每个维度增加 "weight": 0.xx 字段(从 scoring_criteria 中解析),并在 overall_score 中增加 "score_breakdown" 数组,记录每维度的 weighted_score。这样分数可被独立验证,也有助于发现评分偏差。
4
删除 max_score 字段,删除 detailed_evaluation 中的 score 字段 中优先级
max_score 始终为 100,应从 schema 中删除。detailed_evaluation 中的 score 与 ability_scores 中的 score 完全重复,保留一处即可(建议保留 ability_scores 中的),在 detailed_evaluation 中不再重复。这两处修改可减少约 15% 的输出 token 消耗,并消除不一致隐患。
5
在提示词中明确区分"缺失行为"与"场景无需触发"两种 score=0 情形 中优先级
增加规则:"若某维度行为在本次对话中根本无触发机会(场景不涉及),在 ability_scores 中标记 "skipped": true,score 记 null,不纳入加权计算;若该维度应触发但学员完全未执行,则 score=0 且 weaknesses 必须有内容描述缺失行为。"
6
为 detailed_evaluation.suggestions 和 objective_completion.suggestions 添加职责定义 中优先级
在各自章节增加一句说明:
detailed_evaluation.suggestions:针对该技能维度的微操作改进,给出具体话术句式(操作层)。
objective_completion.suggestions:针对该目标的整体策略调整,给出思路框架而非单句话术(策略层)。
这样两处建议形成互补而不是重复。
7
删除"执行步骤"章节,将自查清单简化为一行说明 低优先级
"执行步骤"(8 步)与"评估任务"(4 项)高度重叠,可直接删除约 30 行。末尾自查清单(4 checkbox)无实际效果,替换为一行:"直接输出合法 JSON,不要有任何前言或后语,确保括号闭合、逗号正确。"同时将 <object> 标签统一为 <objective>,与陪练系统提示词保持一致。