评估对象:prompt/生成报告提示词.md · 基于 19 条对话记录及对应报告 JSON 的交叉验证
提示词要求 LLM 在最终 JSON 中输出 "thinking": "<这里输出你的思路,不要超过100字>"。这个设计的本意是让 LLM 先"思考"再打分,但 100 字(约 50 个中文字)远不足以完成多维度、多轮次的分析推理。
由于 thinking 被强制限制在 JSON 内且字数极短,LLM 实际上是在几乎没有推理链的情况下直接给出分数,容易产生"印象分"而非证据驱动的评分。
{
"thinking": "<这里输出你的思路,
不要超过100字>",
"overall_score": { ... }
}
<!-- 在 JSON 之前,先输出分析 -->
【评分分析】(此部分不入 JSON)
维度1: [引用对话轮次,分析正负行为]
...
综合得分计算:...
```json
{
"overall_score": { ... }
}
```
将 thinking 移出 JSON、移到输出前,取消字数限制,允许 LLM 在结构化推理后再生成 JSON,评分一致性和准确性将显著提升。
所有学员消息均来自语音录音(session JSON 中 audio_file_url 字段存在,asr_original_text 与 message 相同),即对话记录是 ASR 自动转写结果,必然含有识别错误。
<!-- 评估原则中无任何 关于输入来源的说明 -->
### 语音输入说明 学员的对话消息来自语音录音 的自动识别结果(ASR),可能 存在字词误识别、停顿词、重 复词等噪声。评估时: - 以意图和核心行为为准 - 不因表达不流畅或个别 字词错误扣分 - 若某句话因噪声导致语义 模糊,应作有利于学员的 解释
提示词要求使用加权平均公式 综合得分 = Σ(维度得分 × 维度权重),权重来自外部 {scoring_criteria}。但输出 JSON 中只有最终分数,不记录各维度权重,导致分数完全无法事后验证。
"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/分析段中记录加权计算过程,便于校验。
提示词要求同一维度的分数在 ability_scores[i].score 和 detailed_evaluation[i].score 中各写一次,并明确要求"两处数值必须一致"。这是一个冗余设计,不仅浪费输出 token,还增加了不一致的风险。
"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":[...],...}
]
19 份报告中,所有维度的 max_score 字段值均为 100,没有任何例外。该字段在 prompt 的评分规则中也从未出现过 "非100" 的上限,说明这是一个固化常量被当作变量设计进了 schema。
直接后果:增加约 10-15% 的 JSON 输出 token,不传递任何有效信息,且在 prompt 示例中反复出现,增加了阅读负担。
{
"dimension": "价值锚定吸引",
"score": 50,
"max_score": 100 ← 始终为100
}
{
"dimension": "价值锚定吸引",
"score": 50
}
两个评估模块都要求输出 suggestions,但提示词没有定义它们的职责边界。实际报告中,同一个问题(例如"应该守住权限边界")常在两处出现几乎相同的建议,对用户的阅读体验造成冗余。
两个 suggestions 都泛指 "下次怎么做更好",没有 区分层次。
detailed_evaluation.suggestions → 聚焦技能微动作: "用什么话术、什么顺序" (操作层) objective_completion.suggestions → 聚焦目标级策略: "整体该用什么思路应对" (策略层)
提示词说"当某维度在对话中完全未展现相关行为时,优点/不足/建议可以为空数组",但同时评分规则说"完全未产生相关行为则记 0 分"。这导致两种情况被混同处理:
weaknesses: [](空),但有 suggestions。建议在提示词中区分"缺失行为(应扣分+有 weakness)"与"场景无关(豁免此维度)",并在输出 schema 中增加 "skipped": true/false 字段用于豁免情况。
提示词末尾的"输出前自查清单"(4 个 checkbox)只是文本 prompt,LLM 无法真正"运行检查"。这几行占据 5 行提示词空间,但实际上不产生任何 JSON 验证效果。
真正减少 JSON 格式错误的做法是:在 Few-shot 示例中提供一个完整正确的输出样例,而不是用 checklist。
输出前自查清单:
- [ ] 所有 { 都有对应的 }
- [ ] 所有字符串中的引号
已处理
- [ ] 数组中对象的逗号
位置正确
- [ ] JSON可以通过在线验
证工具验证
直接输出合法 JSON, 不要有任何前言或后语。 确保所有括号闭合、 逗号位置正确。
提示词包含两个几乎等价的内容块:"## 评估任务"(4 个子任务)和"## 执行步骤"(8 步流程)。两者覆盖的内容基本相同(解析评分→分析对话→逐维度打分→计算综合→生成建议→输出JSON),但重复写了约 30 行。
这种重复不会提升输出质量,反而增加了 prompt token 消耗(约 200 token),并可能在措辞细微不同时造成 LLM 困惑。建议保留"评估任务"(更详细),删除"执行步骤"。
输入信息中陪练目标的包裹标签是 <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> 不一致 | 轻微 | 跨提示词维护 | — |
"weight": 0.xx 字段(从 scoring_criteria 中解析),并在 overall_score 中增加 "score_breakdown" 数组,记录每维度的 weighted_score。这样分数可被独立验证,也有助于发现评分偏差。
"skipped": true,score 记 null,不纳入加权计算;若该维度应触发但学员完全未执行,则 score=0 且 weaknesses 必须有内容描述缺失行为。"
detailed_evaluation.suggestions:针对该技能维度的微操作改进,给出具体话术句式(操作层)。objective_completion.suggestions:针对该目标的整体策略调整,给出思路框架而非单句话术(策略层)。<object> 标签统一为 <objective>,与陪练系统提示词保持一致。