📢 转载信息
原文链接:https://machinelearningmastery.com/mastering-json-prompting-for-llms/
原文作者:Nahla Davies
在本文中,您将学习如何设计、提示和验证大型语言模型(LLM)的输出,使其成为严格的JSON格式,以便在生产系统中能够可靠地解析和使用。
我们将涵盖的主题包括:
- 为什么JSON风格的提示词会约束输出空间并减少方差。
- 如何设计清晰的、模式优先的提示词和验证器。
- 用于生成、验证、修复和类型化解析的Python工作流程。
我们开始吧。
LLM的JSON提示词工程精通
图片来源:编辑
引言
LLM 现在有能力解决高度复杂的问题——从多步骤推理和代码生成到动态工具使用。然而,在实际部署中的主要挑战是控制这些模型。
它们是随机的、冗长的,并且容易偏离期望的格式。JSON提示词工程提供了一种结构化解决方案,用于将非结构化生成转化为机器可解释的数据。
本文从技术层面解释了JSON提示词工程,重点关注设计原则、基于模式的控制,以及用于将结构化输出集成到生产管道中的Python工作流程。
为什么JSON提示词有效
与自由文本不同,JSON强制执行一个模式驱动的输出空间。当模型被提示以JSON格式响应时,它必须符合明确的键值对,从而大大减少了不确定性(熵)。这对推理的可靠性和下游解析都有好处。
在推理时,JSON提示词有效地约束了Token空间——模型学会预测与请求结构匹配的Token。例如,考虑以下指令:
像GPT-4或Claude 3这样的训练有素的LLM现在将返回:
此输出可以立即被Python应用程序解析、存储或处理,无需额外的清理工作。
设计健壮的JSON模式
许多人不知道的是,JSON模式是确定性提示词的基础。模式定义了允许的结构、键和数据类型。它既是模型的指南,也是代码的验证器。
这是一个更高级的模式示例:
当在提示词中提供时,模型会理解预期输出的层次结构。结果是减少了歧义和提高了稳定性,特别是对于长上下文推理任务。
在Python中实现JSON提示词工程
下面是一个使用OpenAI API和Python确保有效JSON生成的最小工作示例:
此方法使用temperature=0进行确定性解码,并将响应包装在一个简单的验证器中以确保输出的完整性。对于生产环境,可以实现一个辅助传递来通过重新提示来自动更正无效的JSON:
将JSON提示词与函数调用结合
最近的API更新允许LLM直接输出结构化参数,使用函数调用。JSON提示词工程是此功能的概念性基础。这是一个示例:
这确保了严格的模式遵从性并自动化了解析过程,无需进行文本清理。模型的响应现在保证与您的函数签名匹配。
高级控制:验证器和修复循环
即使使用JSON提示词工程,模型在边缘情况下仍可能产生格式错误(例如,不完整的括号、额外的评论)。稳健的系统必须集成验证和修复循环。例如:
这种方法实现了容错能力,而无需人工干预,从而实现了用于数据提取、摘要或自主代理任务的连续JSON工作流程。
护栏:模式优先提示词、确定性解码和自动修复
大多数“格式漂移”源于模糊的规范,而不是模型随机性,即使您在专用服务器上运行模型。将输出视为API契约,并让模型来填充它。从提示中的显式模式开始,将温度设置为0,并在代码中验证所有内容。确定性解码减少了方差,而验证器即使在模型发挥创意时也能强制执行结构。这种优势并非表面文章。它允许您将LLM连接到下游步骤假定强类型而非散文的管道中。
一个可靠的模式是:提示 → 生成 → 验证 → 修复 → 解析。提示包含一个带有允许的枚举和类型的紧凑JSON骨架。模型被告知仅以JSON回答。验证器会拒绝任何评论、尾随逗号或缺失的键。修复使用模型本身作为修复器,但上下文更小,指令更窄,只返回修正后的JSON。解析在最后一步进行,只有在结构清晰之后。
您可以通过一个类型化层将此推得更远。定义一个与您的提示模式相匹配的Pydantic模型,并在不匹配时抛出错误。这为您提供了代码行级的信心,即字段存在,字符串值映射到枚举,并且嵌套数组的形状正确。模型不再是自由格式的作家,而是一个返回类型化对象的函数。
🚀 想要体验更好更全面的AI调用?
欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区