返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

糟糕!LLM输出半截Json的答案,还有救吗!

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 11:52 |阅读模式 打印 上一主题 下一主题

本公众号主要关注NLP、CV、LLM、RAG、Agent等AI前沿技术,免费分享业界实战案例与课程,助力您全面拥抱AIGC。



一、前言

虽然现在大部分LLM都已经可以支持输出上万个Token了。但是,我们在实际业务落地的时候,还是会经常遇到LLM不按照我们规定的格式输出的情况。

特别是我们需要输出的结果具备结构化,方便我们继续执行下游任务的情况。

由于json格式天生亲近纯文本,所以想让LLM结构化输出的时候,一般都是输出为json,然后将json抽取出来,转化为字典,继续做下游任务。

但是有很多原因,会导致我们无法得到完整的json输出。

二、输出半截Json的几种情况

2.1 输出超过了LLM支持Token的上线

  1. 输入的上下文过长,导致留给输出的位置太少,LLM无法给出完整的答案,从而json只输出了一半就结束了。

  2. 任务太过复杂,使用CoT技术,让LLM输出的中间思考过程太多,导致LLM没有太多的空间输出最终的结果。要么没有得到最终的结果,要么结果只输出了一半就停止了

2.2 敏感词拦截LLM的输出

为了防止LLM被滥用,输出不恰当的内容。不同的地区,对敏感的内容不一样,因此在对外输出结果时,一般都会根据所在地的不同情况,进行敏感词过滤或者拦截。就如同前几年,Meta搞出了一个有犯罪倾向的AI一样,在全世界都是不被允许的。

所以,当你的llm不受控制的输出敏感内容时被截胡,输出半截子结果也是会存在这种情况。

2.3 不能严格遵守指令

这种情况更为普遍。再牛的LLM也有打盹的时候,不能保证一定按照你的格式要求输出。

我们经常遇到,在输出json的时候,经常会遇到一下情况:

  1. 丢失关键的标点符号;例如:{"question":你好吗!} 没有双引号,是无法完整的解析这个输出的。

  2. 标点符号,没有出现在正确的位置;例如:{"question":"你好吗!" ,"answer":"我很好"} 中间的标点符号是全角,不是半角,也会导致json输出失败。

  3. 还有很多种情况,就不一一列举,下面介绍一下如何解决这类问题。

三、一个开源的解决方案

遇到上述三个问题,通常有三种方法解决:

  1. 补全json:主要针对json答案输出一半的情况,也就是将半截json不全成完整的json格式,使其具备json解析的条件。

  2. 修正json:主要针对json答案中标点缺失或者标点不正确的情况

  3. 丢弃部分json内容:主要针对json中一些无法顾虑到的特殊情况,保留正常的内容,丢弃不规范的内容。

3.1 streaming-json-py的解决方案

这是一个开源的解决方案,并且提供了

  • streaming-json-go`
  • streaming-json-py
  • streaming-json-js

三种编程语言,可以满足不同环境下的需求。

下面看一下实战效果

pip install streamingjson

lexer=streamingjson.Lexer()

#appendyourJSONsegment
lexer.append_string('{"a":')

#completetheJSON
print(lexer.complete_json())#willprint`{"a":null}`

#appendmoreJSONsegment
lexer.append_string('[tr')

#completetheJSONagain
print(lexer.complete_json())#willprint`{"a":[true]}`

这个开源的方案重点是在不全json

四、改进的一个方案

我们自己改进的方案,主要通过检测json中标点符号的缺失和错误性,来纠正json格式,然后,辅助补全json来实现的,最后通过提取json部分的内容,来获得结构化的结果

举两个例子:

output = '''你需要的答案是```json\n{"question":"2024年奥运会在哪里举办?"\n,\n"answer":“巴黎\n'''

这里有三个错误:

  • 是中文,无法正确解析

  • 巴黎 有个引号错误,有个引号缺失

  • 缺少三引号和}

最终完美纠正了上述的错误,并且正确的输出

{'question':'2024年奥运会在哪里举办?','answer':'巴黎'}


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ