若高德 API 要求输入经纬度坐标,但大模型产生幻觉输出错误公司坐标,导致门店查询错误,该怎么干预模型?如果模型坚持认为自己的坐标是对的,该怎么处理?定位到问题原因后,又该怎么解决
1️⃣ 考察意图
面试官想考察你在 Agent 系统中处理模型幻觉的工程化能力,而非单纯背概念。核心是:当模型输出与外部 API 硬约束冲突时,如何设计防御性架构。刁钻点在于“模型坚持错误”——这测试你是否理解 LLM 的固执本质(自回归生成无回溯机制),以及能否跳出“训模型”思维,用系统设计兜底。答好了能展示:① 对 Agent 工具调用生命周期的掌控(pre/post-validation);② 区分“模型层”与“系统层”的修复策略;③ 落地时对延迟、成本、用户体验的 trade-off 取舍。
2️⃣ 标准答
问题定位:幻觉的根因在哪?
- 模型层:LLM 在生成坐标时,本质是“概率采样”而非“查表”。公司坐标在训练数据中可能稀疏或过时(如旧地址),导致模型凭语义关联(如“北京望京”→ 随机经纬度)编造。
- 系统层:Agent 架构中,模型直接输出坐标给高德 API,缺少校验环节。这是典型“信任但验证”缺失——模型输出未经约束就进入下游。
干预策略:分三层防御
- 工具调用前:约束解码 + 系统提示
- 在 prompt 中硬编码:“坐标必须来自公司知识库或高德地理编码 API,禁止直接生成”。配合 约束解码(如 Guidance 或 Outlines 库),强制模型输出格式为
[经度, 纬度]且数值在合理范围(如中国境内经度 73-135,纬度 3-53)。这从生成源头砍掉离谱值。 - 坑:约束解码增加首 token 延迟约 50-100ms,对实时场景需评估。若模型坚持错误,说明 prompt 约束被忽略——需升级为“系统级拦截”。
- 工具调用时:坐标验证模块(Validation Gate)
- 在模型输出后、调用高德 API 前,插入一个 轻量验证器:
- 规则校验:检查坐标是否在公司已知地址的 5km 半径内(用 Haversine 公式计算距离)。若超出,拒绝并触发重试。
- 反向地理编码:用高德逆地理编码 API 将坐标转回地址,与公司名称做语义相似度(如用 MiniLM 嵌入 + cosine 相似度 > 0.7)。若匹配失败,返回错误信息给模型。
- Trade-off:验证器增加 1-2 次 API 调用(约 200ms),但能拦截 90%+ 幻觉。若模型坚持错误(如输出“天安门”坐标),验证器返回“坐标与公司地址不符”,模型需重新生成——这依赖 Agent 的 重试循环(max_retries=3,每次注入验证错误信息)。
- 根本解决:重构 Agent 工具调用逻辑
- 将坐标生成权从模型剥离:模型不再直接输出坐标,而是调用一个“公司定位工具”(Tool)。该工具内部执行:
- 从 RAG 知识库(如公司地址表)检索坐标,或调用高德地理编码 API 将公司名称转坐标。
- 模型只输出公司名称(如“字节跳动总部”),工具负责查表或 API 调用。
- 为什么这么做:LLM 擅长语义理解(公司名),不擅长精确数值(经纬度)。通过 功能解耦,将模型擅长的部分保留,不擅长的交给确定性系统。这类似 ReAct 模式 中“思考-行动”分离——模型只“思考”要查什么,工具“行动”查坐标。
- 落地坑:公司名称可能有歧义(如“字节跳动”有多个办公区)。解法:在工具中加参数(如
office: "总部"),或让模型先输出模糊地址,工具再返回候选列表让用户选择。
模型坚持错误时的处理
- 若模型在重试循环中仍输出错误坐标(如认为“百度大厦”坐标是 40.7128,-74.0060),说明其内部知识冲突严重。此时:
- 降级策略:直接返回“无法定位,请手动输入地址”给用户,避免错误传播。记录该 case 到错误日志,用于后续 fine-tune。
- 监控与回滚:用 LangSmith 或 Weights & Biases 追踪每次工具调用的验证结果。若某模型版本幻觉率 > 5%,自动回滚到上一版本。
3️⃣ 答题模板(30 秒电梯版)
“这个问题我从三个层面回答:第一,模型层用约束解码和系统提示限制输出范围;第二,系统层插入坐标验证模块,用 Haversine 距离和逆地理编码拦截错误,并设计重试循环;第三,架构层将坐标生成权从模型剥离,封装为独立工具,模型只负责输出公司名。总结一句:不要试图让模型变精确,而是用系统设计把幻觉关在笼子里。”
4️⃣ 高频追问 & 应对
追问 1:验证模块增加了延迟,用户等不了怎么办?
采用 异步验证 + 缓存 策略。对高频公司坐标(如 Top 100 企业),预计算并缓存到 Redis,验证时直接查缓存(< 5ms)。对低频坐标,用轻量规则校验(如经纬度范围 + 城市匹配)替代逆地理编码,将延迟控制在 50ms 内。若仍超时,降级为“信任模型输出但标记可疑”,事后异步修正。
追问 2:如果模型在重试循环中一直输出相同错误坐标,怎么打破死循环?
引入 随机扰动 或 上下文注入。在重试时,将验证错误信息(如“坐标不在公司附近,请检查”)注入到 prompt 中,并随机化采样温度(从 0.1 提到 0.5)。若 3 次后仍失败,切换为 确定性 fallback:直接调用高德地理编码 API 将公司名转坐标,绕过模型。这本质是“模型不行,系统补位”。
追问 3:RAG 知识库中的公司坐标也可能过时,怎么保证新鲜度?
设计 双源校验:RAG 坐标 + 高德实时 API 结果做交叉验证。若两者距离 > 1km,触发告警并更新知识库。同时,对知识库设置 TTL(如 7 天),过期后强制调用实时 API。这借鉴了 CRDT 思想——不依赖单一数据源,用冗余保证可靠性。
5️⃣ 避坑 · 常见错误答法
- ❌ “用更精确的 prompt 让模型不犯错” → ✅ “prompt 只能降低概率,不能消除幻觉。必须用系统级验证兜底,比如坐标验证模块。”
- ❌ “模型坚持错误就 fine-tune 它” → ✅ “fine-tune 成本高且周期长,线上应先用重试和 fallback 机制。fine-tune 只作为离线修复手段。”
- ❌ “让模型调用高德 API 自己查坐标” → ✅ “模型调用 API 时仍可能输出错误参数(如公司名拼错)。需要工具层做参数校验和重试,不能完全信任模型。”
6️⃣ 简历呼应
- 如果你有 RAG 项目:从“知识库坐标过时导致幻觉”切入,讲你如何用双源校验(RAG + 实时 API)和 TTL 机制保证数据新鲜度,并给出幻觉率从 12% 降到 2% 的指标。
- 如果你只做过传统 NLP:用“规则引擎 vs 模型输出”类比,讲你如何将坐标验证模块设计为可插拔组件,类似传统系统中的输入校验层,强调工程化思维。
- 如果你是校招无项目:聚焦“约束解码”论文复现,讲你如何用 Outlines 库实现坐标格式约束,并对比有无约束时的幻觉率(如从 30% 降到 5%),展示对 LLM 生成机制的深入理解。
- 《Toolformer: Language Models Can Teach Themselves to Use Tools》—— 模型工具调用的基础范式
- 《ReAct: Synergizing Reasoning and Acting in Language Models》—— 思考-行动分离的 Agent 设计
- 《Constrained Decoding for LLMs: A Survey》—— 约束解码的工程实现方法
- LangSmith 官方文档:Agent 监控与回滚最佳实践
- 《Haversine Formula for Distance Calculation》—— 坐标验证的数学基础