探索 ChatGPT 结构化数据支持的极限 [译]

探索 ChatGPT 结构化数据支持的极限 [译]

💡 原文中文,约22500字,阅读约需54分钟。
📝

内容提要

文章介绍如何利用ChatGPT付费API、系统提示工程和函数调用(结构化数据)提升输出质量,通过Pydantic定义JSON Schema强制模型输出结构化数据,简化代码并支持嵌套、联合类型和思维链推理;作者还测试了开源模型Mistral 7B,并展望结构化数据与JSON原生支持的发展。

🔎

延伸解读

系统提示与激励:提升输出质量的实用技巧

文章通过对比实验表明,在系统提示中赋予模型特定角色或加入激励(如“小费”),能显著改变输出质量。例如,要求模型以“Stack Overflow 排行榜第一”的身份并承诺奖金,它便给出了更高效的双指针回文算法。这提示开发者,系统提示不仅是设定角色,更是引导模型走向更优解的有效手段,且规则可叠加,需反复调试。

结构化数据:从函数调用到模式约束

OpenAI 的函数调用功能本质是让模型输出符合 JSON Schema 的结构化数据。文章指出,通过 Pydantic 定义模式并利用 simpleaichat 等工具,可以大幅简化代码,强制模型返回可编程解析的 JSON。这不仅减少了冗余文本和 Token 消耗,还能通过字段描述、顺序和类型约束(如 Literal、Union)精细控制输出,甚至防范提示注入。

思维链与联合类型:复杂推理的结构化实现

文章展示了如何利用 Union 类型和嵌套模式,让模型在输出最终答案前生成背景、思考(标记是否有帮助或缺陷)和评分,形成结构化的思维链。在“衬衫晾干”和“姐妹谜题”测试中,GPT-4 能按序推理并给出正确答案。这表明结构化数据不仅能约束格式,还能引导模型进行多步推理,但需精心设计系统提示以确保流程顺序。

开源模型与未来展望:局限与可能

作者测试了 Mistral 7B,发现其在简单模式(如回答整数问题)上表现接近 ChatGPT,但在复杂模式(如优化代码)上会忽略约束,说明开源模型对 JSON Schema 的理解仍有限。文章展望了 JSON 原生支持、生成语法(generative grammars)等方向,认为结构化数据能提高输出的确定性,是当前提升 LLM 实用性的重要手段。

❓

Q&A

如何让 ChatGPT 输出结构化的 JSON 数据?

可以通过 ChatGPT 的函数调用(结构化数据)功能实现。具体步骤:1) 使用 Pydantic 定义数据模型(BaseModel),并利用 Field 添加描述和约束;2) 将 Pydantic 模型转换为 JSON Schema;3) 在 ChatGPT API 请求中,通过 tools 参数传入该 schema,并设置 tool_choice 强制模型使用该函数;4) 模型将返回符合 schema 的 JSON 对象。此外,可以结合系统提示工程来提升输出质量。

Pydantic 在 ChatGPT 结构化数据中起什么作用?

Pydantic 用于简化 JSON Schema 的生成和验证。通过定义 Pydantic 模型(BaseModel),可以自动生成符合 OpenAI 要求的 JSON Schema,避免手动编写复杂的 schema。Pydantic 支持字段描述、类型约束(如 min_length、max_value)、嵌套模型、联合类型等,使得定义结构化输出更加简洁和可维护。

系统提示工程如何提升 ChatGPT 的输出质量?

系统提示可以设定 ChatGPT 的角色、任务规则和输出限制。通过精心设计的系统提示,可以显著提高输出的准确性和相关性。例如,为模型赋予专家角色、添加激励机制(如小费)、明确输出格式要求等。文章示例中,通过系统提示让 ChatGPT 扮演专业复制编辑,并强制输出遵循 JSON 架构,从而获得更精准的摘要。

ChatGPT 的结构化数据支持哪些高级特性?

支持嵌套数据模式(如列表中的对象)、联合类型(Union)、字面值类型(Literal)、可选字段(Optional)以及思维链推理。通过组合这些特性,可以构建复杂的推理流程,例如让模型在给出最终答案前生成背景、思考(评估帮助性和缺陷)和答案(带评分),从而实现更可靠的推理。

开源模型如 Mistral 7B 能处理结构化数据吗?

文章测试了 Mistral 7B 官方指导模型(量化版),在简单模式(如 answer_question)下表现接近 ChatGPT,能返回基本正确的 JSON。但对于更复杂的模式(如优化的回文代码模式),模型完全忽略了模式要求。因此,开源模型可能仅适用于简单模式,除非专门进行微调。

结构化数据如何帮助防止提示注入攻击?

通过将输出限定在特定的 JSON Schema 内,可以防止 ChatGPT 因用户暗示性提示而偏离既定模式,从而避免泄露系统提示或执行非预期操作。结构化输出强制模型只生成符合 schema 的字段,减少了被恶意诱导的风险。

🏷️

标签

➡️

继续阅读