用 Jev 给商品问答打分:规模化质检
TL;DR: 你不可能逐条读完商家在商品问答下写的每条回答,但可以每天给一个样本打分。每个维度一次 Jev
scoring调用——相关性、与商品页一致性、语气——得到带置信度和 rationale 的结构化分数。阈值把分数变成动作:整改、保留或下架。流水线与参数配置见下文。
打分维度
维度要少,每个维度就是一道独立的题:
- 回答相关性——是否回答了用户实际问的问题。示例数据(example fixture):
{"answer":8,"scale":[1,10],"confidence":0.86,"rationale":"直接回答了保修时长问题,并给出了具体数字。"}
- 商品页一致性——是否与页面列出的参数矛盾。这个维度的低分是最强的下架信号。
- 语气——是否得体,无垃圾信息、无推广链接。
每个维度单独一次 scoring 调用,题目不产生歧义,而且可以按维度分别处理:相关性不达标说明回答不行,一致性不达标可能意味着商品页本身要修。
质检流水线
商品问答下的商家/客服回答
|
v
每日抽样(如每个类目每 N 条抽 1 条)
|
v
逐维度调用 Jev scoring(1-10 分制)
|
v
按回答汇总各维度分数
|
+--> 任一维度 < 4 --> 标记整改或下架
|
+--> 全部维度 >= 4 且 < 7 --> 正常发布,纳入趋势跟踪
|
+--> 全部维度 >= 7 --> 计入商家质量指标
|
v
周报:按商家 / 类目汇总分数趋势
抽样控制成本,整改对象从趋势报告里来。
最小实现
import os, json, requests
URL = "https://openrouter.ai/api/v1/chat/completions"
# Confirm the exact model slug on the OpenRouter model page.
MODEL = "typesafe/jev-1.13"
DIMENSIONS = {
"relevance": "Does this answer the customer's question?",
"consistency": "Is it consistent with the product page specs below?",
"tone": "Is it respectful and free of spam or promotion?",
}
def score(dimension: str, question: str, answer: str, page: str) -> dict:
resp = requests.post(
URL,
headers={"Authorization": f"Bearer {os.environ['OPENROUTER_API_KEY']}"},
json={"model": MODEL, "temperature": 0, "messages": [
{"role": "system", "content": f"{DIMENSIONS[dimension]} Score 1-10."},
{"role": "user", "content":
f"Question: {question}\nAnswer: {answer}\nPage: {page[:2500]}"}]},
timeout=30,
)
resp.raise_for_status()
# 示例数据(example fixture):
# {"answer":8,"scale":[1,10],"confidence":0.86,"rationale":"..."}
return json.loads(resp.json()["choices"][0]["message"]["content"])
def qa_answer(item: dict, low=4, high=7):
dims = [score(d, item["q"], item["a"], item["page"]) for d in DIMENSIONS]
worst = min(d["answer"] for d in dims)
if worst < low:
return "flag-rework", dims
if worst < high:
return "publish-track", dims
return "quality-credit", dims
官方 API 的端点与字段以 typesafe.ai 官方文档为准。
阈值建议
| 配置项 | 建议 | 理由 |
|---|---|---|
| 维度数 | 每条回答 3 个 | 够少才能题目清晰、成本可控 |
| 分制 | 每个维度 [1, 10] | 足以区分”及格”和”优秀” |
| 整改触发 | 任一维度 < 4 | 一个维度崩了,整条回答就不合格 |
| 优质档 | 全部 >= 7 | 作为商家质量指标的输入 |
| 抽样比例 | 每类目每 N 条抽 1 条,按量调 N | 控制每日成本;看趋势不需要全覆盖 |
| 低置信度 | 保留回答,分数标记待人工抽查 | 没把握的分数是数据,不是判决 |
打分(scoring)是 Jev 三原语(three primitives)之一;成本与延迟指南解释了为什么”抽样 + 廉价调用”优于全量人工阅读。商品问答打分案例里有跨类目的分数趋势实测。
本文适用版本:Jev 1.13。
人工抽检流程
自动化打分给出的是统计信号,不是最终判决。每周需要有人工抽检环节,将机器分数与人工判断做对照,以便发现系统性偏差。
抽检对象的选取
抽检不是随机抓一批,而是有重点地覆盖以下区域:
- 边界区域回答:机器打分落在 3.5–4.5、6.5–7.5 之间的,判断摇摆,最值得人工确认。
- 低置信度回答:
confidence < 0.7的分数本身不稳定,人工可以提供补充判断。 - 新商家或新类目:训练数据覆盖不足时,模型打分可能有系统性偏移。
- 投诉或举报回答:被平台或买家标记过的,应优先纳入抽检。
示例数据(example fixture)——一条抽检记录的结构:
{
"answer_id": "a-00123",
"auto_scores": {"relevance": 4, "consistency": 3, "tone": 8},
"human_review": {"relevance": 5, "consistency": 4, "tone": 8},
"reviewer": "ops-team",
"note": "一致性分偏低,因为商品页参数本身表述模糊,不完全是回答问题。"
}
记录与反馈
每次人工抽检结果必须存档,并至少标注以下两项:
- 人工分与机器分差异超过 2 分的维度
- 差异的原因(商品页问题、题目歧义、还是回答本身质量)
积累 50–100 条抽检记录后,可以用来重新校准阈值,或更新 scoring 调用的题目措辞。参考三原语指南了解如何在调用层面改写题目表述。
阈值校准
流水线里的触发分数(整改 < 4,优质 >= 7)不是固定值,需要根据业务场景调整。校准的目的是让阈值既不误杀合格回答,也不放过真正低质的内容。
校准步骤
收集历史抽检数据(建议 ≥ 80 条)
|
v
统计各分段的人工判断分布
|
+----+----+
| |
误杀率高 漏判率高
(整改触发 (优质阈值
分数调低) 分数调低)
|
v
按新阈值跑历史数据,
验证整改率 / 优质率变化是否合理
|
v
在小流量类目先上线,
观察 1–2 周再全量切换
各维度独立校准
不同维度对业务的影响不同,阈值可以拆开设定:
| 维度 | 较严格的场景 | 较宽松的场景 |
|---|---|---|
| 回答相关性 | 技术类、医疗类问题,问题若没答好危害明显 | 一般消费品问答 |
| 商品页一致性 | 带参数规格的商品(电子产品、配件) | 描述性商品(服装、装饰) |
| 语气 | 公开展示的高流量回答 | 内部客服笔记 |
阈值调整后,务必同步更新周报的分段定义,避免历史数据与新数据对比失真。置信度的处理方式参见置信度与回退指南。
常见误判及规避
机器打分在以下几类场景中容易出现系统性偏差,提前了解可以减少不必要的整改工单。
商品页描述本身不完整
现象:一致性维度给出低分,但回答实际上没有错,只是商品页写得模糊或缺项。
规避:在 scoring 调用的 page 字段里只传结构化参数块,去掉营销文案部分;同时在人工抽检环节单独记录”商品页质量问题”,与回答质量分开处理。
问题本身有歧义
现象:买家问”这个支持吗”,回答说”支持”,相关性得低分——因为没有明确的”这个”指代什么。
规避:抽检时发现此类问题,在 scoring 题目里加入上下文窗口要求,或在流水线里先做问题清洗,过滤掉歧义题再打分。
语气维度对行业术语过度惩罚
现象:技术类回答里出现”仅限""不支持""无法”等表述,语气维度打分偏低,认为语气生硬。
规避:语气维度的题目措辞加入豁免条件,例如”如果是技术说明类内容,以准确为优先,不以措辞亲切度为标准”。改题目措辞是调整 scoring 行为成本最低的方式,无需改阈值。
分数一致性问题
同一条回答多次调用,得分偶尔差 1–2 分(通常因为 temperature 未设为 0,或模型版本更新)。建议:
- 生产流水线固定
temperature: 0 - 分制使用整数档,不追求小数精度
- 对同一批次回答,使用同一个模型版本标签
FAQ
- 按哪些维度打分? 三四个业务相关的维度——是否回答问题、与商品页是否一致、语气是否得体——每个维度独立一次 scoring 调用,固定分制。
- 要全覆盖吗? 不用:每天抽样,自动标记最差回答进入整改或下架并跟踪趋势;只有合规敏感类目才需要全覆盖。
- 分数如何变成动作? 分数段执行:低分触发商家整改或下架,中分段保持发布并跟踪,高分段计入商家质量指标——每个分数都带 rationale 存档。