当我们尝试将LLM融入到实际的应用程序或工作流程中时,却常常遇到一个棘手的问题——模型输出的信息格式并不总是我们所期望的。它们的回答往往是一段段自由形式的文本,这对于人类理解来说可能足够,但对于代码和自动化系统而言,处理起来却困难重重。这时候,结构化输出(Structured Output)的重要性就凸显出来了。本文将为初学者详细介绍结构化输出的概念、重要性,并深入讲解三个必备的提示技巧,帮助大家更好地从大语言模型中获取可用的结构化数据。

一、结构化输出的重要性
结构化输出,简单来说,就是让大语言模型以一种清晰、可预测、有组织的格式返回信息,例如整齐的列表、带有标签的数据字段(键值对形式:key: value),甚至是简单的表格,而不是一长段对话式的文本。这一概念在实际应用中具有举足轻重的意义。
以构建一个利用人工智能分析客户评论的应用程序为例。当我们向模型询问“总结这条评论,并告诉我提到的产品和客户的总体情绪”时,模型可能给出这样的回复:“嗯,看起来客户简·D购买了‘MegaWidget 3000’,并且非常不满意。她提到产品只用了两天就坏了,整个体验让她感到非常沮丧。” 这样的回答对于人类来说很容易理解,但对于应用程序的代码而言,却充满挑战。代码需要从这段文本中费力地找出产品名称(“MegaWidget 3000”),判断情绪(“不满意” 还是 “沮丧” 才是主要情绪呢?),甚至可能还需要提取客户名称(如果有需要的话)。而且,如果模型下次使用了不同的表述,比如用 “感到失望” 代替 “不满意”,那么用于解析情绪的代码可能就会出错。
相比之下,结构化的输出则能避免这些问题。例如:
review_analysis: product_name: MegaWidget 3000 sentiment: Negative summary: 客户报告产品在两天后损坏,导致沮丧情绪。
这种结构化的格式将混乱的对话式文本转化为干净、有序的数据,使得代码能够可靠地处理。
二、获取结构化输出的方法
通常,获取大语言模型结构化输出主要有两种途径:原生模型功能和提示工程。
随着人工智能模型的不断发展,一些模型增加了内置的请求结构化数据的方法。例如,谷歌的Gemini模型通常可以直接使用函数描述或特定的模式,有时还能与Pydantic等工具集成;OpenAI的模型(如GPT-4)提供了 “JSON模式” 或 “函数调用” 等功能,旨在将输出强制转换为特定的JSON结构。然而,这些原生功能虽然强大,但往往依赖于特定的模型。不同模型请求结构化数据的方式可能不同,这可能会使开发者锁定在特定的供应商,并且可能需要学习其特定的API或库,增加了使用的复杂性。
与依赖原生模型功能不同,提示工程是一种更为通用的方法。它的核心思想非常简单,就是在向模型发出的指令(即提示)中,直接明确地告诉模型你期望的输出格式。这种方法不依赖于特定的模型,几乎适用于大多数大语言模型。它充分利用了模型理解和遵循指令的核心能力,让开发者能够灵活地定义所需的结构,例如请求YAML或特定的JSON格式。此外,通过提示工程获取结构化输出,不需要预先学习复杂的模型特定API,降低了使用门槛,对于初学者来说是

最低0.47元/天 解锁文章
11万+

被折叠的 条评论
为什么被折叠?



