让大语言模型结构化输出JSON(结构化分析的输出)
在 AI 原生开发落地的实践中,让大语言模型通过提示来输出答案只是第一步。更大的挑战是,如何保证大语言模型在相同的场景输入下,能够稳定地重现相同的效果,并且符合结构化的标准,以便与其他系统无缝集成。下面我介绍两种通过提示让大语言模型按照指定格式输出的策略。
1.输出格式引导
为了方便大语言模型和应用系统的集成,可以通过一些提示来指定大语言模型输出格式,例如“直接输出CSV结果即可”“Output as CSV format”等。这样,大语言模型就可以根据提示输出JSON、CSV、TSV、KV等不同的格式。
生成CSV格式的例子如下:
# 任务描述
作为一个宠物商店的老板,请给客户推荐一只可爱小宠物。请按照【动物名称,所属科目,尺寸大小】字段生成一条CSV格式的宠物信息,无需额外解释。
# 输出结果
->
输出:
猫,哺乳纲,中等
生成KV格式的例子如下:
# 任务描述
作为一个宠物商店的老板,请给客户推荐一只可爱小宠物。请按照"KV"格式生成一条数据,其中K为【动物名称,所属科目,尺寸大小】字段,V为对应的值,无需额外解释。
# 输出结果
```json
输出:
动物名称: 狗
所属科目: 哺乳纲
尺寸大小: 小
2 字段和类型引导
除了输出的格式,输出字段的名称和数据类型也是影响大语言模型与应用系统集成的关键因素,我们分别来看看如何指定输出字段名称和数据类型。
指定字段名称:使用输出结构示例进行字段名称定义。在“任务描述”中提供一个JSON结构的示例,用{}标识要填充的内容:
# 任务描述
从给定的文本中提取信息,按照以下 JSON 结构输出,其中`{}`表示需要填充的内容:
```json
{ "gender": "{}", "age": "{}", "job": "{}"}
```
# 输入
大家好,我是一个羞涩的小男孩,今年十二岁,还是个学生,在北京 101 中学读书。
# 输出
```json
输出:
{ "gender": "男", "age": "12", "job": "学生" }
另外也可以使用括号进行字段名称定义。在需要提取的字段后面注明相应的英文名称,如下示例:
# 任务描述
从给定的文本中提取性别(gender)、年龄(age)和职业(job)信息,按照 JSON 结构输出。文本如下:
# 输入
大家好,我是一个羞涩的小男孩,今年十二岁,还是个学生,在北京 101 中学读书。
# 输出
```json
输出:
{ "gender": "男", "age": "十二岁", "job": "学生" }
指定字段类型:使用{%format}(格式化字符串)标识字段数据类型,如下示例:
# 任务描述
从给定的文本中提取信息,按照以下 JSON 结构输出,其中`{}`表示需要填充的内容:
```json
{ "gender": "{%s}", "age": {%d}, "job": "{%s}"}
```
# 输入
大家好,我是一个羞涩的小男孩,今年十二岁,还是个学生,在北京 101 中学读书。
# 输出
```json
输出:
{ "gender": "男", "age": 12, "job": "学生" }
也可以使用括号定义字段类型。这种方法是在需要提取的字段后面同时注明对应英文名称和字段数据类型,如下示例:
# 任务描述
从给定的文本中提取性别(gender:int)、年龄(age:string)和职业(job:string)信息,按照 JSON 结构输出。文本如下:
# 输入
大家好,我是一个羞涩的小男孩,今年十二岁,还是个学生,在北京 101 中学读书。
# 输出
```json
输出:
{ "gender": "男", "age": "十二岁", "job": "学生" }
请注意,这里我将年龄(age:int)修改为年龄(age:string),可以看到 age 的类型从 int 变为了 string,值也从“12”变成了“十二岁”。
3.更多输出优化策略
在前面的探讨中,我们已经阐述了如何通过巧妙的提示设计,让大语言模型能够生成符合特定格式的文本内容,这一方法极大地增强了AI原生应用与大语言模型的集成效能。
京东图书:https://item.jd.com/10136043938428.html
最新问世的《AI原生应用开发:提示工程原理与实战》一书,深入汲取了结构化思维的精髓,并将其应用于提示的设计之中。它使用明确的结构引导、内容引导和提示编排设计来提升提示的可读性,帮助大语言模型更准确地理解任务,并生成稳定的、可复现的、符合预期的内容。这些策略如下所示。