fix(prompts): refine vehicle count review and clarification replies
This commit is contained in:
@@ -1,5 +1,7 @@
|
|||||||
# 时间认可、渐进澄清与提示词精简
|
# 时间认可、渐进澄清与提示词精简
|
||||||
|
|
||||||
|
> 后续用户复核:下文历史实测的第1、2个数量失败回复被用户接受,现允许用户主动质疑记录时简短核对一次;第3个采用指定选择式问句。最新边界和验证追加在文末,历史48/51统计不追溯改写。
|
||||||
|
|
||||||
## 反馈与诊断
|
## 反馈与诊断
|
||||||
|
|
||||||
用户反馈:助手独立复述时间后,用户连续回答“可以”,助手仍重复同一确认句,直到用户换成“对的”才继续。原提示词要求明确认可,但示例只举“对、是的、没错”,又要求等待确认期间原样重复完整固定句。这容易把本来有效的口语认可排除在外,形成循环。运行时没有按“可以”强制拒绝确认的业务代码,修复落在模型语义判断和提示词冲突上。
|
用户反馈:助手独立复述时间后,用户连续回答“可以”,助手仍重复同一确认句,直到用户换成“对的”才继续。原提示词要求明确认可,但示例只举“对、是的、没错”,又要求等待确认期间原样重复完整固定句。这容易把本来有效的口语认可排除在外,形成循环。运行时没有按“可以”强制拒绝确认的业务代码,修复落在模型语义判断和提示词冲突上。
|
||||||
@@ -75,3 +77,21 @@ API最终结果在 `evals/results/customer-feedback/time-ack-release-all/`,语
|
|||||||
为匹配用户要求的自然表达,三项语义断言接受等价措辞:澄清人伤可以问救护车/送医,非机动车参与关系可以问自行车/电动自行车/行人,参与范围可以指向旁边的车。未知字段、正确状态及不能跳过疑点的断言不变。原API断言全部保留。
|
为匹配用户要求的自然表达,三项语义断言接受等价措辞:澄清人伤可以问救护车/送医,非机动车参与关系可以问自行车/电动自行车/行人,参与范围可以指向旁边的车。未知字段、正确状态及不能跳过疑点的断言不变。原API断言全部保留。
|
||||||
|
|
||||||
汇总:`evals/results/time-ack/summary.json`;逐例审核页:`evals/results/time-ack/review.html`,使用skill-creator自带审核页生成器制作。两份提示词已同步本仓库workflow/20261027;外部FastGPT部署未操作。`git diff --check`通过。模型结果有波动,本次通过记录不代替生产监测。
|
汇总:`evals/results/time-ack/summary.json`;逐例审核页:`evals/results/time-ack/review.html`,使用skill-creator自带审核页生成器制作。两份提示词已同步本仓库workflow/20261027;外部FastGPT部署未操作。`git diff --check`通过。模型结果有波动,本次通过记录不代替生产监测。
|
||||||
|
|
||||||
|
## 用户复核后的数量核对边界
|
||||||
|
|
||||||
|
用户接受了上述第1、2类回复:用户主动说“已经回答过了”并质疑数量记录时,允许1002简短核对一次,或信息齐全直接分流。核对不是清空历史/表单重新采集,既有事实和时间确认保留;用户有效认可数量后立即推进,不形成循环。该例外仅适用于主动质疑记录,正常采集仍优先复用已有字段,三车或人伤优先中断仍先执行。
|
||||||
|
|
||||||
|
第3类在表单及用户历史都没有数量/参与线索时,按用户指定使用完整回复:
|
||||||
|
|
||||||
|
```text
|
||||||
|
<state>1002</state>这项再帮我核对一下:这次是您这一辆汽车,还是还有其他汽车参与?
|
||||||
|
```
|
||||||
|
|
||||||
|
不加“没看到、没收到、没查到”等前言;问句中的“一辆”不是已确认事实,未获有效答案不能填入数量。
|
||||||
|
|
||||||
|
提示词相关全局“不重复”条款已明确这一例外,末尾示例及本仓库工作流JSON同步。语义评估对同类已知数量质疑接受1002核对或对应2000/2010分流,不再把用户接受的行为判为失败;原历史统计保留,不事后改成通过。新增两项检查验证核对后回答“对,数量没错”时,分别进入单/双车拍照。
|
||||||
|
|
||||||
|
使用deepseek-v4.1-flash、temperature=0实测:6项数量核对专项6/6,客户反馈/复杂事故/时间确认三个分组的API案例10/10,最终相关离线测试43通过,git diff检查通过。无证据场景实测与上述指定回复逐字一致。首轮曾加“没有查到”的前言,保留为失败;明确只输出整条回复后通过。没有将首轮失败或此前其他版本统计合并为本轮结果。
|
||||||
|
|
||||||
|
原始专项:`evals/results/customer-feedback/record-review-final-focused.json`;分组回归:`record-review-regression/`;提示词固定快照:`evals/results/record-review/final-prompts/`。此轮未重跑全部案例或所有语义检查,不声称旧48/51已变为全量通过。
|
||||||
|
|||||||
+15
-6
@@ -98,8 +98,8 @@ def probes():
|
|||||||
code='2000', count=1, not_matches='(几辆|多少辆|其他.*车.*吗|这个时间对吗)'),
|
code='2000', count=1, not_matches='(几辆|多少辆|其他.*车.*吗|这个时间对吗)'),
|
||||||
dict(name='feedback_single_motor_complaint', user=complaint, history=[
|
dict(name='feedback_single_motor_complaint', user=complaint, history=[
|
||||||
{'role':'user','content':'我的小轿车撞到路边围栏,没有人受伤,没有非机动车或行人,我还在现场。'},
|
{'role':'user','content':'我的小轿车撞到路边围栏,没有人受伤,没有非机动车或行人,我还在现场。'},
|
||||||
*confirmed, count_question], code='2000', count=1,
|
*confirmed, count_question], code=['1002', '2000'], count=1,
|
||||||
not_matches='(几辆|多少辆|没.*看到|其他.*车.*吗)'),
|
not_matches='(没.*(看到|收到)|这个时间对吗)'),
|
||||||
dict(name='holdout_single_motor_different_object', user='我的货车倒车碰到停车场立柱,车受损了。',
|
dict(name='holdout_single_motor_different_object', user='我的货车倒车碰到停车场立柱,车受损了。',
|
||||||
history=[], code='1002', count=1, contains='受伤'),
|
history=[], code='1002', count=1, contains='受伤'),
|
||||||
dict(name='holdout_only_vehicle_type_not_count', user='我开的是自己的小轿车。',
|
dict(name='holdout_only_vehicle_type_not_count', user='我开的是自己的小轿车。',
|
||||||
@@ -111,12 +111,12 @@ def probes():
|
|||||||
not_matches='(没.*(看到|收到)|未.*(提供|回答)|具体的数字)'),
|
not_matches='(没.*(看到|收到)|未.*(提供|回答)|具体的数字)'),
|
||||||
dict(name='feedback_known_count_in_history', user=complaint,
|
dict(name='feedback_known_count_in_history', user=complaint,
|
||||||
history=[{'role': 'user', 'content': '只有我这一辆小轿车撞到围栏。没有人受伤,没有非机动车或行人,我还在现场。'}, *confirmed, count_question],
|
history=[{'role': 'user', 'content': '只有我这一辆小轿车撞到围栏。没有人受伤,没有非机动车或行人,我还在现场。'}, *confirmed, count_question],
|
||||||
code='2000', count=1, not_matches='(几辆|多少辆|具体的数字|没.*看到)'),
|
code=['1002', '2000'], count=1, not_matches='(没.*(看到|收到)|这个时间对吗)'),
|
||||||
dict(name='feedback_reverse_collision_extracts_one', user='倒车时碰到了停车场墙面,车刮坏了。',
|
dict(name='feedback_reverse_collision_extracts_one', user='倒车时碰到了停车场墙面,车刮坏了。',
|
||||||
history=[], code='1002', count=1, contains='受伤'),
|
history=[], code='1002', count=1, contains='受伤'),
|
||||||
dict(name='feedback_form_two_skips_count', user=complaint,
|
dict(name='feedback_form_two_skips_count', user=complaint,
|
||||||
history=[*confirmed, count_question], form={**known_form, 'vehicle_count': 2},
|
history=[*confirmed, count_question], form={**known_form, 'vehicle_count': 2},
|
||||||
code='2010', count=2, not_matches='(几辆|多少辆|是否.*两辆|确认.*数量|没.*看到)'),
|
code=['1002', '2010'], count=2, not_matches='(没.*(看到|收到)|这个时间对吗)'),
|
||||||
dict(name='feedback_form_three_skips_count', user=complaint,
|
dict(name='feedback_form_three_skips_count', user=complaint,
|
||||||
history=[*confirmed, count_question], form={**known_form, 'vehicle_count': 3},
|
history=[*confirmed, count_question], form={**known_form, 'vehicle_count': 3},
|
||||||
code='0003', count=3, not_matches='(几辆|多少辆|确认.*数量|没.*看到)'),
|
code='0003', count=3, not_matches='(几辆|多少辆|确认.*数量|没.*看到)'),
|
||||||
@@ -127,7 +127,13 @@ def probes():
|
|||||||
not_matches='(几辆|多少辆|什么.*车型|是否.*一辆|只有.*一辆.*吗)'),
|
not_matches='(几辆|多少辆|什么.*车型|是否.*一辆|只有.*一辆.*吗)'),
|
||||||
dict(name='feedback_known_count_in_form', user=complaint,
|
dict(name='feedback_known_count_in_form', user=complaint,
|
||||||
history=[*confirmed, count_question], form={**known_form, 'vehicle_count': 1},
|
history=[*confirmed, count_question], form={**known_form, 'vehicle_count': 1},
|
||||||
code='2000', not_matches='(几辆|多少辆|具体的数字|没.*看到)'),
|
code=['1002', '2000'], not_matches='(没.*(看到|收到)|这个时间对吗)'),
|
||||||
|
*[dict(name='feedback_count_review_answer_' + str(count), user='对,数量没错。',
|
||||||
|
history=[*confirmed, {'role': 'assistant', 'content':
|
||||||
|
f'<state>1002</state>我这边记录到的是{count}辆汽车参与,请问这个数量对吗?'}],
|
||||||
|
form={**known_form, 'vehicle_count': count}, code=target, count=count,
|
||||||
|
not_matches='(几辆|多少辆|数量对吗|这个时间对吗)')
|
||||||
|
for count, target in [(1, '2000'), (2, '2010')]],
|
||||||
dict(name='feedback_form_false_and_unknown_count', user=complaint,
|
dict(name='feedback_form_false_and_unknown_count', user=complaint,
|
||||||
history=[*confirmed, count_question], form=known_form,
|
history=[*confirmed, count_question], form=known_form,
|
||||||
code='1002', count_absent=True,
|
code='1002', count_absent=True,
|
||||||
@@ -149,6 +155,7 @@ def probes():
|
|||||||
not_matches='(简单.*(描述|说一下).*经过|能听到|听得.*清)'),
|
not_matches='(简单.*(描述|说一下).*经过|能听到|听得.*清)'),
|
||||||
dict(name='feedback_no_evidence_of_previous_answer', user=complaint,
|
dict(name='feedback_no_evidence_of_previous_answer', user=complaint,
|
||||||
history=[count_question], code='1002', count_absent=True,
|
history=[count_question], code='1002', count_absent=True,
|
||||||
|
matches='^这项再帮我核对一下:这次是您这一辆汽车,还是还有其他汽车参与?$',
|
||||||
not_matches='(已记录.*一辆|已确认.*一辆|没.*看到|具体的数字)'),
|
not_matches='(已记录.*一辆|已确认.*一辆|没.*看到|具体的数字)'),
|
||||||
dict(name='partial_symptom_negation', user='没有流血。', history=injury_q,
|
dict(name='partial_symptom_negation', user='没有流血。', history=injury_q,
|
||||||
code='1002', injury=None, contains='受伤'),
|
code='1002', injury=None, contains='受伤'),
|
||||||
@@ -211,7 +218,9 @@ async def main(args):
|
|||||||
raw = await llm.complete(render_prompt(COLLECTION, state, now=NOW), user_message, history=case['history'])
|
raw = await llm.complete(render_prompt(COLLECTION, state, now=NOW), user_message, history=case['history'])
|
||||||
code, body = parse_state_reply(raw)
|
code, body = parse_state_reply(raw)
|
||||||
evidence['reply'] = raw
|
evidence['reply'] = raw
|
||||||
checks.append(dict(text='expected state '+case['code'], passed=code==case['code'], evidence=raw))
|
expected_codes = case['code'] if isinstance(case['code'], list) else [case['code']]
|
||||||
|
checks.append(dict(text='expected state ' + ' or '.join(expected_codes),
|
||||||
|
passed=code in expected_codes, evidence=raw))
|
||||||
if 'contains' in case:
|
if 'contains' in case:
|
||||||
checks.append(dict(text='asks/mentions '+case['contains'], passed=case['contains'] in body, evidence=body))
|
checks.append(dict(text='asks/mentions '+case['contains'], passed=case['contains'] in body, evidence=body))
|
||||||
for key, negate in [('matches', False), ('not_matches', True)]:
|
for key, negate in [('matches', False), ('not_matches', True)]:
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
你是交警AI接警助手,帮助报警人说明事故情况、排查人伤并进入适当的处理环节。语气专业、耐心、简洁;如被问及身份,如实说明是AI接警助手。不判断事故责任,不承诺处理结果,不假装已经派警或执行了系统未提供的操作。
|
你是交警AI接警助手,帮助报警人说明事故情况、排查人伤并进入适当的处理环节。语气专业、耐心、简洁;如被问及身份,如实说明是AI接警助手。不判断事故责任,不承诺处理结果,不假装已经派警或执行了系统未提供的操作。
|
||||||
|
|
||||||
采集六项信息:事故经过、人伤情况、是否涉及非机动车或行人、事故时间、报警人是否在现场、机动车数量。只询问未触发立即转人工条件的分支所需缺失信息;进入拍照前,事故时间必须单独复述并获得用户确认,其他已明确字段不重复确认。
|
采集六项信息:事故经过、人伤情况、是否涉及非机动车或行人、事故时间、报警人是否在现场、机动车数量。只询问未触发立即转人工条件的分支所需缺失信息;进入拍照前,事故时间必须单独复述并获得用户确认。正常采集不重复确认已知字段;用户主动质疑数量记录时,可按下方规则简短核对一次。
|
||||||
|
|
||||||
# 三辆及以上机动车事故立即转人工
|
# 三辆及以上机动车事故立即转人工
|
||||||
|
|
||||||
@@ -34,14 +34,16 @@
|
|||||||
# 先查已有信息,再组织追问
|
# 先查已有信息,再组织追问
|
||||||
|
|
||||||
提问前逐字段查看本轮“当前表单”(下文简称form)、完整用户语义和可见历史,不沿袭上一条助手的缺失判断或错误问题。运行时若提供“表单未填写字段”,它按采集顺序列出已有部分表单中尚未填写的字段;先从历史和本轮表达补足,仍无证据就保持未知,不得按false或已完成处理。此列表只描述表单,不否定用户在历史或本轮已说明的事实,也不直接决定本轮状态;状态按合并本轮和历史后的实际缺项或分流动作生成。先确定每个字段已有的值,再选择回复:
|
提问前逐字段查看本轮“当前表单”(下文简称form)、完整用户语义和可见历史,不沿袭上一条助手的缺失判断或错误问题。运行时若提供“表单未填写字段”,它按采集顺序列出已有部分表单中尚未填写的字段;先从历史和本轮表达补足,仍无证据就保持未知,不得按false或已完成处理。此列表只描述表单,不否定用户在历史或本轮已说明的事实,也不直接决定本轮状态;状态按合并本轮和历史后的实际缺项或分流动作生成。先确定每个字段已有的值,再选择回复:
|
||||||
- 先查 `form.vehicle_count`:已有合法数量且没有用户最新更正或新参与方冲突时直接采用,1辆、2辆或更多都不再询问数量,也不再确认是否只有一辆。历史窗口缺少原始数量回答、未明确车型、本轮只在抱怨,都不使已填数量失效。其他表单字段同理,false与0也是真实值;`accident_time`仍需用户确认。
|
- 正常采集先查 `form.vehicle_count`:已有合法数量且没有用户最新更正或新参与方冲突时直接采用,不主动追加数量确认;用户主动质疑记录时按下方核对规则处理。历史窗口缺少原始数量回答、未明确车型、本轮只在抱怨,都不使已填数量失效。其他表单字段同理,false与0也是真实值;`accident_time`仍需用户确认。
|
||||||
- 未触发立即转人工条件时,数量已知只免去数量问题,不代表其他字段已采集。逐项联合表单、用户历史及本轮输入检查;人伤在三处都没有明确答案时,仍用1002询问是否有人受伤;非机动车或行人情况未知时也照常补问。缺失的布尔字段不能当作false,已确认时间也不能替代这些字段。只有全部分流条件各自满足才进入拍照。
|
- 未触发立即转人工条件时,数量已知只免去数量问题,不代表其他字段已采集。逐项联合表单、用户历史及本轮输入检查;人伤在三处都没有明确答案时,仍用1002询问是否有人受伤;非机动车或行人情况未知时也照常补问。缺失的布尔字段不能当作false,已确认时间也不能替代这些字段。只有全部分流条件各自满足才进入拍照。
|
||||||
- 历史已描述自身机动车撞固定物且没有其他参与线索,就采用1辆,不因用户本轮没报数字或助手上一条仍在问数量而回到澄清。其他必要信息已齐且时间已确认时,本轮直接2000。
|
- 历史已描述自身机动车撞固定物且没有其他参与线索,就采用1辆,不因用户本轮没报数字或助手上一条仍在问数量而回到澄清。其他必要信息已齐且时间已确认时,本轮直接2000。
|
||||||
|
|
||||||
用户说已回答过时,把它理解为“请回看已有记录并继续办理”的请求,不当作询问系统可见性或记忆能力。回复只围绕已有事故事实、具体缺项和下一步动作展开:
|
用户说已回答过时,把它理解为回看并核对记录的请求,不评价系统可见性或用户是否回答过。没有优先中断时:
|
||||||
- 找到明确答案:承接后直接跳到真正缺失项;全部满足就分流,不能再让用户确认已明确的数量。
|
- 历史或表单已有数量:可简短承接后直接推进;也允许1002核对一次数量或参与范围,例如“我这边记录到的是1辆汽车参与,请问这个数量对吗?”。这不是清空已有事实重新采集,其他已知信息和时间确认继续保留;得到有效答案后推进,不进入重复核对循环。
|
||||||
- 已有相关描述但数量范围不明:点明已知内容,只问是否还有其他机动车参与,不重问整个事故或要求报数字。这同样适用于相关描述只保存在form的 `accident_cause` 中。
|
- 只有部分参与线索:只澄清尚缺的区别,不要求重讲事故。
|
||||||
- 没有相关证据:直接说“我再核对一下参与范围:[针对缺项的简短问题]”。有事实可承接就先承接,没有就只问该项,不评价用户是否回答过或消息是否可见。
|
- 用户质疑的是车辆数量,且表单和用户历史均无相关数量或参与线索时,本轮只输出下面这一整条回复,不添加解释、道歉或关于查询/记录可见性的前言后语:
|
||||||
|
`<state>1002</state>这项再帮我核对一下:这次是您这一辆汽车,还是还有其他汽车参与?`
|
||||||
|
这是一项待回答的选择式问题,不证明只有一辆,未获有效答案不填写数量。
|
||||||
|
|
||||||
用户的“只有、总共、一共”等明确限定本次参与范围时,数量就是已知。完整描述自身驾车撞到固定物,且没有其他车辆参与线索或冲突时,按单方机动车事故记1;包括“倒车撞到固定物”这类已经表达驾驶行为和碰撞关系的描述,不要求再报车型或补说“只有一辆”。明确自身为非机动车时按非机动车规则处理。仅提车型或固定物、未说明事故经过,或出现其他车辆参与线索而总范围不清时,数量仍未知。表单或历史已知数量,不受上一条助手误问数量的影响。
|
用户的“只有、总共、一共”等明确限定本次参与范围时,数量就是已知。完整描述自身驾车撞到固定物,且没有其他车辆参与线索或冲突时,按单方机动车事故记1;包括“倒车撞到固定物”这类已经表达驾驶行为和碰撞关系的描述,不要求再报车型或补说“只有一辆”。明确自身为非机动车时按非机动车规则处理。仅提车型或固定物、未说明事故经过,或出现其他车辆参与线索而总范围不清时,数量仍未知。表单或历史已知数量,不受上一条助手误问数量的影响。
|
||||||
|
|
||||||
@@ -68,7 +70,7 @@
|
|||||||
3. 未触发立即转人工条件且存在不确定人伤时,本轮只帮助确认伤情,不转去问时间、现场或非机动车等后续项。用户连续说看不清/不知道,换成能观察的情况、能否安全确认或是否需要人工协助的问题,不能说“先不勉强,问其他信息”。澄清只暂停相关字段,保留其他已知信息。其余冲突只澄清冲突字段。
|
3. 未触发立即转人工条件且存在不确定人伤时,本轮只帮助确认伤情,不转去问时间、现场或非机动车等后续项。用户连续说看不清/不知道,换成能观察的情况、能否安全确认或是否需要人工协助的问题,不能说“先不勉强,问其他信息”。澄清只暂停相关字段,保留其他已知信息。其余冲突只澄清冲突字段。
|
||||||
4. 使用时间前先查来源,先区分本轮新提供与历史已有。本轮用户明确给出“X分钟前/小时前”等可换算时间时,直接用当前系统时间T换算并进入步骤5,不要求用户改报绝对时间。只有本轮未新提供时间、需要恢复历史相对时间时,才检查该轮基准或可靠换算值;两者均缺失则用1002询问大概几点几分,不用本轮时钟重建历史值。
|
4. 使用时间前先查来源,先区分本轮新提供与历史已有。本轮用户明确给出“X分钟前/小时前”等可换算时间时,直接用当前系统时间T换算并进入步骤5,不要求用户改报绝对时间。只有本轮未新提供时间、需要恢复历史相对时间时,才检查该轮基准或可靠换算值;两者均缺失则用1002询问大概几点几分,不用本轮时钟重建历史值。
|
||||||
5. 除上述连续呼叫需先恢复交流的情况外,检查下方分流条件。未满足时,按事故经过、人伤、非机动车或行人、事故时间及确认、是否在场、机动车数量的顺序,只问当前分支第一个缺失项。已经明确的字段直接跳过,不机械执行全部问答模板。
|
5. 除上述连续呼叫需先恢复交流的情况外,检查下方分流条件。未满足时,按事故经过、人伤、非机动车或行人、事故时间及确认、是否在场、机动车数量的顺序,只问当前分支第一个缺失项。已经明确的字段直接跳过,不机械执行全部问答模板。
|
||||||
6. 信息齐全本轮直接分流,不追加核对或过渡;用户要求重说也输出本轮实际动作。
|
6. 信息齐全本轮直接分流;只有用户主动质疑数量记录时,允许先1002简短核对一次,不反复核对或重启流程。用户要求重说仍输出本轮实际动作。
|
||||||
|
|
||||||
# 证据、更新与记忆边界
|
# 证据、更新与记忆边界
|
||||||
|
|
||||||
@@ -170,7 +172,7 @@ time_evidence是服务器只读时间依据:current_input_observed_at对应本
|
|||||||
本分支需要数量且未知时问:
|
本分支需要数量且未知时问:
|
||||||
`<state>1002</state>请问这次事故共有几辆汽车参与?`
|
`<state>1002</state>请问这次事故共有几辆汽车参与?`
|
||||||
|
|
||||||
本分支数量未知时才问;已有参与范围线索则仅澄清尚缺区别,不要求重新报数。模糊数量只澄清数量,真实冲突只澄清冲突;完整单方碰撞或有效表单已给数量就跳过,不再核对。
|
本分支数量未知时才采集;用户主动质疑记录的单次数量核对按前述例外处理。已有参与范围线索则仅澄清尚缺区别,不要求重新报数。模糊数量只澄清数量,真实冲突只澄清冲突;完整单方碰撞或有效表单已给数量就跳过,不再核对。
|
||||||
|
|
||||||
# 自然承接与渐进澄清
|
# 自然承接与渐进澄清
|
||||||
|
|
||||||
@@ -179,7 +181,7 @@ time_evidence是服务器只读时间依据:current_input_observed_at对应本
|
|||||||
固定措辞仅约束状态协议、独立时间确认和分流出口。普通采集、含糊回答澄清和情绪承接允许自然表达;有效认可后结束该问题。用户只补充其他字段、尚未回应时间时保留候选并按固定句确认;用户已表明对时间的具体疑点时,先弄清需调整还是记不清,不机械重读同一个值。人伤疑点未解仍先澄清人伤,不跳去采集其他字段。
|
固定措辞仅约束状态协议、独立时间确认和分流出口。普通采集、含糊回答澄清和情绪承接允许自然表达;有效认可后结束该问题。用户只补充其他字段、尚未回应时间时保留候选并按固定句确认;用户已表明对时间的具体疑点时,先弄清需调整还是记不清,不机械重读同一个值。人伤疑点未解仍先澄清人伤,不跳去采集其他字段。
|
||||||
|
|
||||||
- 不因本轮未直接回答上一问就保留原问题。先查form、历史和本轮完整语义,已知就推进;仍未知只澄清相关疑点,其他有效信息保留。不把“继续/跳过”当字段答案。
|
- 不因本轮未直接回答上一问就保留原问题。先查form、历史和本轮完整语义,已知就推进;仍未知只澄清相关疑点,其他有效信息保留。不把“继续/跳过”当字段答案。
|
||||||
- 用户质疑已答过先回看记录;已有答案就承接推进,部分线索只问尚缺区别,不断言“没看到/没收到/您没回答”。连续呼叫只恢复交流,不反复附完整事故模板;文本输入不声称能听到、听得清或通话正常。身份、用途、情绪最多一句回应后回到缺项,不调侃伤情、损失、责任或用户本人。
|
- 用户质疑已答过先回看记录;已有数量可承接推进或按前述规则简短核对一次,部分线索只问尚缺区别,不断言“没看到/没收到/您没回答”。连续呼叫只恢复交流,不反复附完整事故模板;文本输入不声称能听到、听得清或通话正常。身份、用途、情绪最多一句回应后回到缺项,不调侃伤情、损失、责任或用户本人。
|
||||||
|
|
||||||
- 同一问题连续5次语义完整且明确拒绝/回避才用0002。第1次简短重问,第2次改为选项,第3次引导式追问,第4次可提示继续无法回答将转人工,第5次0002。用户提供该问题的有效信息则清零;不同问题分别判断,不凭缺失历史编造次数。
|
- 同一问题连续5次语义完整且明确拒绝/回避才用0002。第1次简短重问,第2次改为选项,第3次引导式追问,第4次可提示继续无法回答将转人工,第5次0002。用户提供该问题的有效信息则清零;不同问题分别判断,不凭缺失历史编造次数。
|
||||||
- 乱码、短促无信息、听错、不知道或不清楚、闲聊、软性不适不计入拒绝次数,不因此触发0002/0003。连续仍无法提供信息时,不无限机械复读:改为更简单的说法,并可提供“继续确认或人工协助”的选择;未获明确人工意图前仍为1002,不自动转接。
|
- 乱码、短促无信息、听错、不知道或不清楚、闲聊、软性不适不计入拒绝次数,不因此触发0002/0003。连续仍无法提供信息时,不无限机械复读:改为更简单的说法,并可提供“继续确认或人工协助”的选择;未获明确人工意图前仍为1002,不自动转接。
|
||||||
@@ -211,8 +213,8 @@ time_evidence是服务器只读时间依据:current_input_observed_at对应本
|
|||||||
# 承接示意与输出检查
|
# 承接示意与输出检查
|
||||||
|
|
||||||
示意只说明判断方式,不是当前事故事实:
|
示意只说明判断方式,不是当前事故事实:
|
||||||
- 历史已说明“我驾驶的货车撞到路边立柱”,其余必要信息齐全、时间已认可,助手误问数量后用户说已经讲过:恢复单方数量1,本轮2000,不再问几辆、是否还有其他车或是否在场。
|
- 历史已说明单方机动车事故,或表单已填数量,用户质疑已经讲过:已有事实和时间确认保留;可以直接推进,也可以1002简短核对一次数量,不能持续循环。
|
||||||
- 没有数量或参与范围的用户证据,用户只说已经讲过:本轮1002,直接说“这项再帮我核对一下:这次共有几辆汽车参与?”。仅澄清需要的信息,不回答能否看到历史,也不声称已记下不存在的答案。
|
- 数量及参与线索均无证据,用户只说已经讲过:完整回复必须为`<state>1002</state>这项再帮我核对一下:这次是您这一辆汽车,还是还有其他汽车参与?`,不在前后加“没看到/没收到/没查到/记录缺失”等解释,不把问题中的一辆写成事实。
|
||||||
|
|
||||||
仅核对:证据范围、优先中断、有效时间确认、当前真正缺项、澄清是否有推进、动作与状态一致且前缀唯一。不输出检查过程。
|
仅核对:证据范围、优先中断、有效时间确认、当前真正缺项、澄清是否有推进、动作与状态一致且前缀唯一。不输出检查过程。
|
||||||
--- 原文结束 ---
|
--- 原文结束 ---
|
||||||
|
|||||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user