
大模型格式化输出问题——基于Langchain的格式化输出 原创
“ 大模型只能输出文本数据,需要通过转换才能变成我们需要的数据对象。”
在大模型的应用场景中,格式化输出是一个非常重要的环节;特别是对Agent智能体来说,没有格式化输出,智能体就是空中楼阁。
但从技术的角度来说,文本类模型的输出只有一种格式,那就是文本数据,json也是文本数据的一种格式;模型本身无法生成类似于json对象,python对象等格式的数据;因此,虽然我们可以约束模型按照json格式进行输出,但它本质上输出的只是json字符串,而不是json对象。
大模型的格式化输出
基于大模型只能输出字符串的前提,那么我们怎么约束大模型的输出呢?
在当今的程序开发领域,json格式是主流的数据传输格式;因此,一般情况下,我们和大模型的交互也是通过json串的形式来实现;但大模型本身又没有格式化输出。
在之前的文章中有提到过,在大模型应用中,唯一能和大模型直接打交道的角色只有一个——那就是提示词。
因此,一般情况下我们都会在提示词中约束大模型的输出格式,也就是告诉大模型要按照什么样的格式进行输出;这样的好处是有助于我们的程序处理;当然,现在的模型为了方便进行开发,部分模型也专门针对json格式进行训练或微调。
所以,我们现在知道可以通过提示词的方式告诉模型,可以使用json格式进行通讯;但怎么把大模型输出的json字符串转换成我们可以直接使用的对象,以及由于大模型本身的不稳定性,导致偶尔模型的输出不完全符合我们要求的json格式。这个时候我们应该怎么处理?
所以,这里就涉及到另一个问题——怎么解析大模型的输出,也就是输出解析器的问题。输出解析器的几个核心目标如下:
核心目标
- 格式化输出:指导 LLM 按照特定格式(如 JSON、XML)生成文本。
- 解析结果:将 LLM 的文本输出解析为结构化对象(如 Python 对象)。
- 错误处理:提供容错机制(如重试、自动修复)。
输出解析器不但扮演着把文本数据解析成结构化对象的桥梁,同时还需要提供怎么格式化模型输出的问题,也就是指导大模型按照特定的格式进行文本输出;同时,为了解决模型本身的不确定性,同时还需要提供容错机制。
所以,怎么实现一个输出解析器——OutputParse?
1. 通过提示词约束模型的输出——格式化输出
2. 解析输出——把大模型输出的文本数据转换成json或其它结构化对象
3. 容错机制,当输出解析失败时,则尝试其它解析方式或重新生成
而Langchain中的输出解析器——OutputParse就是基于这个原理来实现的;如StructuredOutputParser就是通过responseSchema来约束模型的输出格式,并通过parse方法来把模型输出的文本数据转换成json格式的数据。
当然,Langchain还提供了自定义解析的方式,用户可以根据自己的需求,自定义解析器。
本文转载自AI探索时代 作者:DFires
