fix(ai): prevent customer iccid disclosure
This commit is contained in:
@@ -29,6 +29,7 @@ func TestAgentTurnAddsBoundDeviceAfterSalesPolicy(t *testing.T) {
|
||||
"逐项完整展示全部返回记录", "生效中、待生效、已用完、已过期、失效", "工具未返回的字段明确写“暂未查询到”",
|
||||
"待生效”或“未生效”只表示套餐已经存在但尚未到生效时间", "不代表后台异常、系统延迟、订购失败或运营商限制",
|
||||
"必须先成功查询当前绑定卡板或设备的实时状态、套餐和流量", "普通问题、通用原理和可逆的排障建议可以结合常识与客户图片自主回答",
|
||||
"ICCID 是系统内部标识", "都不得返回、确认、推断、局部展示、打码展示或复述 ICCID",
|
||||
"required_package_type=addon", "当前周期只能补充加油包", "仅凭诊断、旧对话或自动续费列表不得生成购买建议",
|
||||
"严格区分网络复机、运营商网络切换、设备重启、关机和恢复出厂", "切网时必须先列出当前设备可用的运营商",
|
||||
"区分“面板印刷图标”与“真正发光的指示灯”", "bound_device_no_for_verification 精确比较",
|
||||
@@ -51,6 +52,29 @@ func TestAgentTurnAddsBoundDeviceAfterSalesPolicy(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestAgentTurnRemovesICCIDValuesFromModelContext(t *testing.T) {
|
||||
engine := NewAgentLoopEngine()
|
||||
engine.history = func(int64, int) []models.Message {
|
||||
return []models.Message{{
|
||||
ID: 2, SenderType: enums.IMSenderTypeAI,
|
||||
Content: "上次查到 ICCID:8986042302268012345",
|
||||
}}
|
||||
}
|
||||
prompt, _ := engine.buildUserPrompt(RunInput{
|
||||
Conversation: models.Conversation{
|
||||
ID: 1, CustomerType: "card", CustomerID: 9,
|
||||
CustomerName: "卡号 8986042302268012345",
|
||||
},
|
||||
UserMessage: models.Message{ID: 3, Content: "帮我查 ICCID 8986042302268012345"},
|
||||
})
|
||||
if strings.Contains(prompt, "8986042302268012345") {
|
||||
t.Fatalf("ICCID leaked into model context: %s", prompt)
|
||||
}
|
||||
if !strings.Contains(prompt, "ICCID 属于系统内部标识") {
|
||||
t.Fatalf("ICCID privacy replacement missing from model context: %s", prompt)
|
||||
}
|
||||
}
|
||||
|
||||
func TestNoInternetTurnPrefetchesCompletePackageTimeline(t *testing.T) {
|
||||
t.Cleanup(func() { _ = svc.SetBusinessReadTools(nil) })
|
||||
executions := 0
|
||||
|
||||
Reference in New Issue
Block a user