AI面试题二:如何确保大语言模型(LLM)调用工具是可靠的
AI面试题二:如何确保大语言模型(LLM)调用工具是可靠的
如何确保大语言模型(LLM)在工具调用时能可靠、可控地工作,而不仅仅是依赖提示词来“说服”模型。需要系统性地给出了一个多层级的约束框架。
如查询天气的例子,模型在工具调用中常见的三种“瞎编”行为:
1. 不调用工具,直接虚构答案。
2. 调用工具时传递格式错误的参数(如工具不支持“后天”,却传参date="后天")。
3. 自作主张转换参数格式(如擅自将“后天”转为具体日期),即使工具没有此要求。
问题的根源在于模型输出本质上是概率性的,提示词只是在概率分布上施加“软约束”,而非确保模型严格遵守的强制机制。在复杂场景下,这种“软约束”很容易失效。
为了解决这个问题,需要有一个多层级的工程化解决方案:
-
第一层:优化提示词(软约束)
- 定位是约束体系的起点,但绝非终点。
- 应将提示词视为“操作合同”,清晰说明工具用途、每个参数的类型、边界,并列举非法值示例。
- 应加入 Few-shot示例,通过展示“正确输入→正确调用”的范例,利用上下文学习锚定模型的行为模式。
-
第二层:引入JSON Schema(硬约束)
- 这是从“讲道理”到“设栏杆”的关键一步。
- 用机器可读、可验证的结构化定义(JSON Schema)替代自然语言描述参数。可以严格定义字段类型、是否必填、枚举值范围,并可通过设置
additionalProperties: false来禁止模型输出任何未定义的字段。 - 主流API平台支持在模型解码阶段就进行这种结构化输出约束,从生成源头避免格式违规。
-
第三层:建立校验-修复-重试闭环(执行兜底)
- 即使有Schema,仍需在拿到模型输出后,进行语法和Schema验证。
- 验证失败时,应设计自动清洗和重试机制(有上限),将错误信息反馈给模型以修正输出。超过重试次数后,需有降级或人工处理方案。
-
架构层面:职责分离
- 应将决策与执行分离,形成三层架构:
- 模型层:仅负责决策(判断调用哪个工具、生成哪些参数)。
- 框架层:负责执行框架,包括Schema校验、调用工具、处理重试和整合结果。这确保了模型错误不会直接影响工具安全性,工具变更也无需频繁调整提示词。
- 工具层:具体的业务能力实现。
- LangChain、LlamaIndex等框架正是在做这样的工作。
- 应将决策与执行分离,形成三层架构:
当前方案的局限性:能很好地处理参数格式问题,但对参数语义(如“上海”与“沪”的等价性)的验证覆盖仍不足。这将是未来需要面对的工程挑战。
核心结论:让LLM可靠地调用工具,本质上是一个软件工程问题,需要建立一个从软约束、硬约束、执行兜底到架构设计的系统性工程方案,而非仅仅依赖优化提示词。
评论
暂无已展示的评论。
发表评论(匿名)