搜索工具返回的结果里带了内网文档地址,模型在下一轮把这串 URL 当成可访问链接写进回答,用户点开是 500,安全扫描还报了信息泄露。
把日志和配置对完,能解释这个现象的基本就这几处。工具返回值没有做字段裁剪,原始 URL 直接透传;模型把可见链接当成可执行资源;没有对内网地址做替换或脱敏;回答渲染层会自动把链接变成可点击。
先统计工具返回里内网域名的出现次数
python -c "import re;print(len(re.findall(r'http://10\\.',open('tool_out.json').read())))"
随后在工具出口统一替换内网前缀
python -c "import re;print(re.sub(r'http://10\.[0-9.]+','[内部链接]','http://10.2.3.4/a'))"
给回答加链接白名单渲染
python -c "print({'allow_hosts':['docs.example.com']})"
回归抽检确认回答里不再有内网地址
python eval_link.py --set ans_200.jsonl --deny 10.
别只看报错消失,验证要多做一步。回答里内网地址出现次数归零,允许的外部链接仍可点击,安全扫描不再报该规则。
工具输出是模型能看到的全部世界,返回什么它就会用什么;脱敏要做在工具出口,不是做在最终回答上。拖得越久,排查成本越高,因为现场状态会被后续操作覆盖。
