加入星计划,您可以享受以下权益:

  • 创作内容快速变现
  • 行业影响力扩散
  • 作品版权保护
  • 300W+ 专业用户
  • 1.5W+ 优质创作者
  • 5000+ 长期合作伙伴
立即加入
  • 正文
    • Part 01●  输出列表/集合 ●
    • Part 02●  输出标准化时间日期 ●
    • Part 03● 输出结构化字典 ●
    • Part 04● 输出结构化字典的列表 ●
    • Part 05● 输出结构化字典 ●
  • 推荐器件
  • 相关推荐
  • 电子产业图谱
申请入驻 产业图谱

五分钟技术趣谈 | 大语言模型格式化输出方法浅析

09/25 12:00
2.5万
阅读需 8 分钟
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

作者:丰阳露,单位:中国移动智慧家庭运营中心

随着大语言模型的日益成熟,基于模型生成内容的AI原生互联网应用也在蓬勃发展。然而,我们也需要意识到,大模型本身的输出往往难以直接应用于工程实践。为了让大模型的应用真正落地,我们需要在保证输出质量的同时,也要注意格式化结果,使其更易于被软件系统使用。

本文试图从输出格式化的角度,为大语言模型应用提供一些格式对齐方法。我们将讨论输出结果的可预测性、一致性等问题,以及可能的解决方案。此外,本文中的所有例子以智慧家庭运营中心安全大模型为例,同时参考了LangChain实现的部分常见的格式化输出提示的用法。

Part 01●  输出列表/集合 

列表和集合是程序中最常见也最重要的数据结构之一,会在许多场合被广泛应用,因此让大型语言模型能够稳定输出列表,将在多种情况下发挥重要作用。

例如,我们希望语言模型能输出中国省份的名称列表,以提供后续程序调用使用。要实现这一目标,我们需要如何具体操作呢?

如果我们直觉性地构造提示词,可能会这样提示:

或者这样:

上述格式都不易于后续程序处理使用。那么,我们应该如何构造提示,才能让大型语言模型稳定输出List格式呢?经过反复试验,我们发现正确的方法是:

请随机列出10个中国的省级行政区。你的回答应该是一个逗号分隔值的列表,不带任何其他描述信息,例如:[A, B, C] , 以'```json'开头,并以'```'结尾。

通过这种方式,我们就可以直接加载该JSON格式进行后续处理。

同理,输出集合的提示可以这样构造:

请随机列出10个中国的省级行政区。你的回答应该是一个逗号分隔值的无重复元素的集合,不带任何其他描述信息,例如:{'甲', '乙', '丙'} ,以'```json'开头,并以'```'结尾。

Part 02●  输出标准化时间日期 

当需要按时间或日期对数据进行筛选或查询时,让大型语言模型输出标准化的时间日期格式尤为重要。以想获取中国移动的成立时间为例,我们可能会直觉地这样操作:

但是,上述回复虽提供了正确信息,但日期格式不标准,不便机器读取处理。为获得标准化日期,我们应该这样提示:

请回答用户的问题:

中国移动的成立时间?

编写一个与以下模式匹配的日期时间字符串:'%Y-%m-%d',例如:1970-08-09,此外不要输出任何描述信息。

通过明确要求“标准日期格式”,模型便可生成可机器解析的结果。

在需要定量时间信息的场景下,提示语言模型输出标准化时间日期,可显著提升后续自动化处理效率。

Part 03● 输出结构化字典 

结构化字典是我们在传统应用中交换数据最常用的格式之一,key-value结构便于程序根据key获取相应的value,也是代码与语言模型交互的主流方式。而对于某些复杂结构,想让语言模型稳定输出对齐的结果较为困难,这凸显了提示工程的重要性。

仍以前面获取中国省份信息为例,如果我们想通过语言模型获得某省名称、省会、面积、人口、区号等结构化字典,需要如何操作呢?

借鉴前面的经验,我们可以这样提示:

虽然基本实现了按照要求的输出,但是该实现方式存在没有明确指定字段名称和类型的问题。在某些复杂场景下,字段之间可能未能正确对齐,从而导致程序执行错误。结合我们的经验,参考类似Langchain的实现,一个更具鲁棒性的方法是明确指定字段名称和值类型,以避免上述问题:

请随机输出中国一个省份的信息,包括

名称:该省的名称省会:该省的省会名称人口:该省的人工数面积:该省的面积,以平方公里为单位区号:该省的区号

输出应该是按以下模式格式化的标记代码片段,包括开头和结尾的" ```json"和"```",此外不要包含任何描述性信息。

```json{"名称":  string // 省份名称"省会": string // 省会名称"人口": int// 该省的人口"面积": float// 该省的面积,浮点数表示,不要带单位"区号": string // 该省的区号}```

Part 04● 输出结构化字典的列表 

显然,构建单个字典是相对容易的。然而,当需要构建多个字典时,应该如何实现呢?遗憾的是,在LangChain中并没有提供这种结构的实现方法,而在实际应用场景中,通常会频繁遇到这种需求。

我们继续以之前的例子为例,假设我们需要列出三个省份的信息,应该如何操作呢?

在开发威胁情报IOC提取工具过程中,我们总结出一套可靠的提示模板。只需按照以下方式输入即可:

请随机输出中国3个省份的信息,他们均包含

名称:该省的名称省会:该省的省会名称人口:该省的人工数面积:该省的面积,以平方公里为单位区号:该省的区号

输出应该是按以下模式格式化的标记代码片段,包括开头和结尾的"```json"和"```",此外不要包含任何描述性信息。

{"省份":  array // 包含各个身份信息的列表[{"名称":  string // 省份名称"省会": string // 省会名称"人口": int// 该省的人口"面积": float// 该省的面积,浮点数表示,不要带单位"区号": string // 该省的区号}]

Part 05● 输出结构化字典 

在大语言模型应用开发过程中,我们发现模型直接的自由生成输出,很难满足工程化的需求。为了发挥模型的最大价值,提示工程变得尤为关键。经过实践探索,我们归纳出了以下输出格式化的方法论:

1.使用列表、表格等结构化格式,组织模型输出,提高可读性。

2.在输出中添加必要的标题、标记,清晰表示内容结构。

3.支持多级别的内容格式,如嵌套列表等。

4.兼顾格式的一致性,美观度等全局因素。

5.输出支持直接转换为HTML、Markdown等结构化格式。

当前大模型能力仍有限,优化提示非常必要。以上格式化输出经验来自开发IOC提取工具的实践,基本满足了工程需求。希望这些简单的方法论,能对各位开发者有一定参考价值。

推荐器件

更多器件
器件型号 数量 器件厂商 器件描述 数据手册 ECAD模型 风险等级 参考价格 更多信息
MKL25Z128VLH4 1 Freescale Semiconductor RISC MICROCONTROLLER

ECAD模型

下载ECAD模型
$6.94 查看
MCF52258CAG66 1 Freescale Semiconductor MCF522XX 32-bit MCU, ColdFire V2 core, 512KB Flash, 66MHz, QFP 144
$12.68 查看
ATXMEGA128A1U-CUR 1 Microchip Technology Inc IC MCU 8BIT 128KB FLASH 100CBGA

ECAD模型

下载ECAD模型
$8.4 查看
中国移动

中国移动

中国移动有限公司(「本公司」,包括子公司合称为「本集团」)于1997年9月3日在香港成立,本集团在中国内地所有三十一个省、自治区、直辖市以及香港特别行政区提供通信和信息服务,业务主要涵盖个人、家庭、政企和新兴市场的语音、数据、宽带、专线、IDC、云计算、物联网等,是中国内地最大的通信和信息服务供应商,亦是全球网络和客户规模最大、盈利能力领先、市值排名位居前列的世界级通信和信息运营商。

中国移动有限公司(「本公司」,包括子公司合称为「本集团」)于1997年9月3日在香港成立,本集团在中国内地所有三十一个省、自治区、直辖市以及香港特别行政区提供通信和信息服务,业务主要涵盖个人、家庭、政企和新兴市场的语音、数据、宽带、专线、IDC、云计算、物联网等,是中国内地最大的通信和信息服务供应商,亦是全球网络和客户规模最大、盈利能力领先、市值排名位居前列的世界级通信和信息运营商。收起

查看更多

相关推荐

电子产业图谱

移动Labs是中国移动的社交化新媒体平台,是面向外部行业及产业链合作伙伴的信息发布、业务发展和产业推进门户。