fix(agent): reuse collected vehicle counts and avoid repeated questions

This commit is contained in:
Eric Wang
2026-10-28 11:30:56 +08:00
parent a277d4c7e6
commit 20c5e39e9d
15 changed files with 7073 additions and 47 deletions
@@ -14,19 +14,18 @@ steps:
expect:
stageCode: "browser_addon.1002"
# 先确认完整时间,再询问缺失的机动车数量;不能从撞护栏推断只有一辆车。
# 用户已确认:倒车撞固定物按单方机动车事故记1;时间确认后不再问数量。
# 文件名保留历史名称,预期按最新业务边界更新。
- input: 十分钟前我倒车撞到了护栏,没有人受伤,没有撞到非机动车或行人,我还在现场。
expect:
stageCode: "browser_addon.1002"
replyMatches: "我记录的时间是.*年.*月.*日.*点.*分.*这个时间对吗"
form: {vehicle_count: 1}
replyNotMatches: "(几辆|多少辆|什么.*车型|是否.*一辆|只有.*一辆.*吗)"
- input: 对
expect:
stageCode: "browser_addon.1002"
# 明确数量后直接单车拍照,不再要求数量确认。
- input: 只有一辆汽车。
expect:
stageCode: "browser_addon.2000"
form: {vehicle_count: 1}
replyNotMatches: "(几辆|多少辆|什么.*车型|是否.*一辆|只有.*一辆.*吗|这个时间对吗)"
@@ -14,19 +14,18 @@ steps:
expect:
stageCode: "1002"
# 先确认完整时间,再询问缺失的机动车数量;不能从撞护栏推断只有一辆车。
# 用户已确认:倒车撞固定物按单方机动车事故记1;时间确认后不再问数量。
# 文件名保留历史名称,预期按最新业务边界更新。
- input: 十分钟前我倒车撞到了护栏,没有人受伤,没有撞到非机动车或行人,我还在现场。
expect:
stageCode: "1002"
replyMatches: "我记录的时间是.*年.*月.*日.*点.*分.*这个时间对吗"
form: {vehicle_count: 1}
replyNotMatches: "(几辆|多少辆|什么.*车型|是否.*一辆|只有.*一辆.*吗)"
- input: 对
expect:
stageCode: "1002"
# 明确数量后直接单车拍照,不再要求数量确认。
- input: 只有一辆汽车。
expect:
stageCode: "2000"
form: {vehicle_count: 1}
replyNotMatches: "(几辆|多少辆|什么.*车型|是否.*一辆|只有.*一辆.*吗|这个时间对吗)"
@@ -0,0 +1,20 @@
name: browser_addon_customer_feedback_known_fields
clientMode: browser_addon
# 泛化:描述对象不同、所有字段提前提供,抱怨中有效的时间肯定仍须生效。
steps:
- input: 新对话
expect: {stageCode: "browser_addon.1001"}
- input: 继续办理
expect: {stageCode: "browser_addon.1002"}
- input: 2026年10月27日14点,我这一辆汽车倒车撞到了路灯,没有其他汽车参与,所有人都没事,也没有非机动车或行人,我还在现场。
expect:
stageCode: "browser_addon.1002"
form: {vehicle_count: 1, has_injury: false, has_non_motor_vehicle_hit: false, is_on_scene: true}
replyMatches: "我记录的时间是2026年10月27日14点00分.*这个时间对吗"
replyNotMatches: "(几辆|多少辆|有没有人员受伤|是否涉及非机动车)"
- input: 对,时间没错。我这个问题上次已经回答过了,你能看到吗?
expect:
stageCode: "browser_addon.2000"
form: {vehicle_count: 1, has_injury: false, has_non_motor_vehicle_hit: false, is_on_scene: true}
replyNotMatches: "(几辆|多少辆|这个时间对吗|没.*看到)"
@@ -0,0 +1,59 @@
name: browser_addon_customer_feedback_repeated_question
clientMode: browser_addon
# 客户原始反馈:连续呼叫、单车碰撞描述、时间确认后质疑重复询问。
# 完整的自身机动车撞固定物描述应提取1,后续不再问数量。
# 呼叫时整段模板重复另由语义probe检查,本例重点验证完整采集与数量分流。
steps:
- input: 新对话
expect: {stageCode: "browser_addon.1001"}
- input: 【继续办理】
expect: {stageCode: "browser_addon.1002"}
- input: 喂喂喂,有人吗?
expect:
stageCode: "browser_addon.1002"
replyMatches: "(我在|在的|收到)"
replyNotMatches: "(能听到|听得.*清)"
formAbsent: [vehicle_count, has_injury]
- input: 喂喂喂,有没有人,而且。
expect:
stageCode: "browser_addon.1002"
replyMatches: "(我在|在的|收到)"
replyNotMatches: "(能听到|听得.*清)"
formAbsent: [vehicle_count, has_injury]
- input: 喂喂喂,有人吗?
expect:
stageCode: "browser_addon.1002"
replyNotMatches: "(能听到|听得.*清)"
- input: 我的车子是自己的小轿车,撞到了路边围栏。
expect:
stageCode: "browser_addon.1002"
replyMatches: "(受伤|人伤|伤亡)"
formMatches: {accident_cause: "(围栏|护栏)"}
form: {vehicle_count: 1}
formAbsent: [has_injury]
- input: 没有人员伤伤就车子撞了。
expect:
stageCode: "browser_addon.1002"
form: {has_injury: false}
replyMatches: "(非机动车|行人)"
- input: 没有涉及非机动车,也没有行人。
expect:
stageCode: "browser_addon.1002"
form: {has_injury: false, has_non_motor_vehicle_hit: false}
replyMatches: "(什么时候|几点|事故.*时间)"
- input: 时间是2026年10月27日十四点左右。
expect:
stageCode: "browser_addon.1002"
replyMatches: "我记录的时间是2026年10月27日14点00分.*这个时间对吗"
form: {accident_time: "2026年10月27日14点0分"}
- input: 可以。
expect:
stageCode: "browser_addon.1002"
replyMatches: "(在.*现场|现场.*吗)"
replyNotMatches: "这个时间对吗"
- input: 我现在还在事故现场。
expect:
stageCode: "browser_addon.2000"
form: {vehicle_count: 1, has_injury: false, has_non_motor_vehicle_hit: false, is_on_scene: true}
replyNotMatches: "(几辆|多少辆|这个时间对吗|其他.*车.*吗|具体的数字)"
@@ -0,0 +1,20 @@
name: direct_customer_feedback_known_fields
clientMode: direct
# 泛化:描述对象不同、所有字段提前提供,抱怨中有效的时间肯定仍须生效。
steps:
- input: 新对话
expect: {stageCode: "1001"}
- input: 继续办理
expect: {stageCode: "1002"}
- input: 2026年10月27日14点,我这一辆汽车倒车撞到了路灯,没有其他汽车参与,所有人都没事,也没有非机动车或行人,我还在现场。
expect:
stageCode: "1002"
form: {vehicle_count: 1, has_injury: false, has_non_motor_vehicle_hit: false, is_on_scene: true}
replyMatches: "我记录的时间是2026年10月27日14点00分.*这个时间对吗"
replyNotMatches: "(几辆|多少辆|有没有人员受伤|是否涉及非机动车)"
- input: 对,时间没错。我这个问题上次已经回答过了,你能看到吗?
expect:
stageCode: "2000"
form: {vehicle_count: 1, has_injury: false, has_non_motor_vehicle_hit: false, is_on_scene: true}
replyNotMatches: "(几辆|多少辆|这个时间对吗|没.*看到)"
@@ -0,0 +1,59 @@
name: direct_customer_feedback_repeated_question
clientMode: direct
# 客户原始反馈:连续呼叫、单车碰撞描述、时间确认后质疑重复询问。
# 完整的自身机动车撞固定物描述应提取1,后续不再问数量。
# 呼叫时整段模板重复另由语义probe检查,本例重点验证完整采集与数量分流。
steps:
- input: 新对话
expect: {stageCode: "1001"}
- input: 【继续办理】
expect: {stageCode: "1002"}
- input: 喂喂喂,有人吗?
expect:
stageCode: "1002"
replyMatches: "(我在|在的|收到)"
replyNotMatches: "(能听到|听得.*清)"
formAbsent: [vehicle_count, has_injury]
- input: 喂喂喂,有没有人,而且。
expect:
stageCode: "1002"
replyMatches: "(我在|在的|收到)"
replyNotMatches: "(能听到|听得.*清)"
formAbsent: [vehicle_count, has_injury]
- input: 喂喂喂,有人吗?
expect:
stageCode: "1002"
replyNotMatches: "(能听到|听得.*清)"
- input: 我的车子是自己的小轿车,撞到了路边围栏。
expect:
stageCode: "1002"
replyMatches: "(受伤|人伤|伤亡)"
formMatches: {accident_cause: "(围栏|护栏)"}
form: {vehicle_count: 1}
formAbsent: [has_injury]
- input: 没有人员伤伤就车子撞了。
expect:
stageCode: "1002"
form: {has_injury: false}
replyMatches: "(非机动车|行人)"
- input: 没有涉及非机动车,也没有行人。
expect:
stageCode: "1002"
form: {has_injury: false, has_non_motor_vehicle_hit: false}
replyMatches: "(什么时候|几点|事故.*时间)"
- input: 时间是2026年10月27日十四点左右。
expect:
stageCode: "1002"
replyMatches: "我记录的时间是2026年10月27日14点00分.*这个时间对吗"
form: {accident_time: "2026年10月27日14点0分"}
- input: 可以。
expect:
stageCode: "1002"
replyMatches: "(在.*现场|现场.*吗)"
replyNotMatches: "这个时间对吗"
- input: 我现在还在事故现场。
expect:
stageCode: "2000"
form: {vehicle_count: 1, has_injury: false, has_non_motor_vehicle_hit: false, is_on_scene: true}
replyNotMatches: "(几辆|多少辆|这个时间对吗|其他.*车.*吗|具体的数字)"