如何让LLM准确地输出一个json

这一直是一个难题,因为LLM具有很大的不确定性,而且如果你用过,你一定会看到类似于以下的输出情况:

  1. 啰嗦的输出
AI:好的,以下是对问题的json输出:
```json
{"score":"yes"
}
```<eos>
  1. 形式错误
AI:{'score':'yes'
}显然,一个dict应该用双引号而不是单引号。
有时甚至直接不输出jsonAI:yes

————————————————————————

怎么解决

没什么好办法。说几个弥补的办法。

  1. 换个prompt
    这就纯抽奖了,希望prompt小做改变能输出规范化。

  2. 二次输出
    直接让一次输出兼顾信息抽取和格式规范化,在复杂任务上,7B模型都有点力不从心。所以可以先让LLM用自然语言输出一下分析,第二次再把分析中蕴含的答案变成结构化json。
    这不是个好办法。

  3. 预生成
    如果我们规定第一个输出的token是"{",然后prompt也要求json输出,是否能很好地引导出格式化json?
    这是一个很机智的办法,甚至靠这一招还能诱导LLM输出那些它被“教育“不能生成的那些东西。详情看这里。

  4. outlines框架
    json其实是有很严格的输出结构的,{后面必须是",第一个"肯定是key的,key之后肯定是 “:”,然后是value。这能写成一个有限状态机。outlines就是靠这个狠狠卡住了输出。不过我不知道如果没卡住要怎么办。我猜是直接在一开始强制生成{",然后强制不生成",直到生成一个合法的key,然后再遇到一个",然后继续强制。如果真是如此,这应该算预生成的进阶了。

  5. function call功能
    去年openai对此需求的解决办法是function call,智谱也是这样。在langchain里,如果你设定了一个json输出解析器,而且使用了api,你有权选择是用function call生成json还是LLM直接生成。选择不同,具体到openai或者智谱那边形成的prompt也就不同。
    function call本质也是一个LLM训练的结构化输出,而且训练得够好,够稳定,比起要求LLM输出json,由function call格式代替然后转变成json更好。本质是使用了LLM功能中完全不同的两个输出规范。
    LLM增加的function call功能是在prompt给一个json格式的tools描述,然后告诉llm该调用就调用。llm被训练为在需要call时,先生成一个特殊的function call的前置token,然后生成对应的描述tool调用的json。这个前置token等于一个预填充的引导,但是是由llm自己生成而不是你插手的。如果是你自己本地部署的带function call的模型,你甚至可以预填充一个前置token,两种方法结合,强强联合了属于是。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/50519.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JVM基础05】——组成-能不能解释一下方法区?

目录 1- 引言&#xff1a;方法区概述1-1 方法区是什么&#xff1f;(What)1-2 为什么用方法区&#xff1f;方法区的作用 (Why) 2- ⭐核心&#xff1a;详解方法区(How)2-1 能不能解释一下方法区&#xff1f;2-2 元空间内存溢出问题2-3 什么是常量池&#xff1f;2-4 运行时常量池 …

SAP PP学习笔记31 - 计划运行的步骤2 - Scheduling(日程计算),BOM Explosion(BOM展开)

上一章讲了计划运行的5大步骤中的前两步&#xff0c;计算净需求和计算批量大小。 SAP PP学习笔记30 - 计划运行的步骤1 - Net requirements calculation 计算净需求(主要讲了安全库存要素)&#xff0c;Lot-size calculation 计算批量大小-CSDN博客 本章继续讲计划运行的后面几…

360:从安全卫士到智能生活——一个科技巨头的成长之路

自2005年成立以来&#xff0c;360公司&#xff0c;全称北京奇虎科技有限公司&#xff0c;已经成为中国乃至全球科技领域的一股不可忽视的力量。从最初的互联网安全服务提供商&#xff0c;到如今涉足智能硬件、云计算、大数据、人工智能等领域的多元化科技公司&#xff0c;360的…

**卷积神经网络典型CNN**

LeNet&#xff1a;最早用于数字识别的CNN AlexNet&#xff1a;2012年ILSVRC比赛冠军&#xff0c;远超第二名的CNN&#xff0c;比LeNet更深&#xff0c;用多层小卷积叠加来替换单个的大卷积 ZF Net&#xff1a;2013ILSVRC冠军 GoogleNet&#xff1a;2014ILSVRC冠军 VGGNet&a…

Unity UGUI 之 自动布局组件

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是自动布局组件…

【头歌】Hive表DDL操作(一)答案

本专栏已收集头歌大数据所有答案 以供参考 第1关&#xff1a;Create/Alter/Drop 数据库 答案 复制点击测评 代码块&#xff1a; #********* Begin *********# echo " CREATE DATABASE IF NOT EXISTS test1 LOCATION /hive/test1WITH DBPROPERTIES(creatorJohn,date2019-…

容器化部署革新:Mojo模型的自定义动态配置

容器化部署革新&#xff1a;Mojo模型的自定义动态配置 在当今快速发展的机器学习领域&#xff0c;Mojo模型代表了一种高效、灵活的模型部署方式。容器化部署作为一种流行的技术&#xff0c;能够为模型提供一个轻量级、可移植的运行环境。本文将探讨如何在Mojo模型中实现模型的…

【Node.js入门精要】从零开始的开发之旅

说明文档&#xff1a;Node.js 教程_w3cschool 概念 Node.js 是一个开源、跨平台的 JavaScript 运行时环境&#xff0c;基于 Chrome 的 V8 引擎构建&#xff0c;专为构建高性能和可扩展的网络应用程序而设计的服务端语言。它采用事件驱动、非阻塞 I/O 模型&#xff0c;能够处理大…

GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC]

文章目录 GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 GB28181摄像头管理平台WVP视频平台SQL注入漏洞复现 [附POC] 0x01 前言 免责声明&#xff1a;请勿利用文章内…

Unity UGUI 之 Mask

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 本文在发布时间选用unity 2022.3.8稳定版本&#xff0c;请注意分别 1.什么是遮罩 遮罩是一…

运算符 、、|、|| 、短路符【|| 、】<< 、>>

》》》&&是逻辑与运算符&#xff0c;|| 是逻辑或运算符 &#xff01;是逻辑非运算符 逻辑与运算符&#xff1a;全为真&#xff08;1&#xff09;即结果为真&#xff08;1&#xff09;&#xff0c;一个为假即全为假&#xff08;0&#xff09; 逻辑或运算符&#xff1a;…

shell循环语句

一&#xff0c; 循环语句 1.for循环语句 读取不同的变量值&#xff0c;用来逐个执行同一组命令 格式 for 变量名 in 取值列表 do 命令序列 done 1.1 列表循环 [rootlocalhost /home]# vim demo32.sh #!/bin/bash for i in {a..c} doecho $i done ~ [rootlocalhost /ho…

数据结构·AVL树

1. AVL树的概念 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果存数据时接近有序&#xff0c;二叉搜索将退化为单支树&#xff0c;此时查找元素效率相当于在顺序表中查找&#xff0c;效率低下。因此两位俄罗斯数学家 G.M.Adelson-Velskii 和E.M.Landis 在1962年发明了一种解…

Pytorch深度学习实践(5)逻辑回归

逻辑回归 逻辑回归主要是解决分类问题 回归任务&#xff1a;结果是一个连续的实数分类任务&#xff1a;结果是一个离散的值 分类任务不能直接使用回归去预测&#xff0c;比如在手写识别中&#xff08;识别手写 0 − − 9 0 -- 9 0−−9&#xff09;&#xff0c;因为各个类别…

了解Java虚拟机(JVM)

前言&#x1f440;~ 上一章我们介绍网络原理相关的知识点&#xff0c;今天我们浅浅来了解一下java虚拟机JVM JVM&#xff08; Java Virtual Machine &#xff09; JVM内存区域划分 方法区/元数据区&#xff08;线程共享&#xff09; 堆&#xff08;线程共享&#xff09; 虚…

iOS object-C 解答算法:找到所有数组中消失的数字(leetCode-448)

找到所有数组中消失的数字(leetCode-448) 题目如下图:(也可以到leetCode上看完整题目,题号448) 光看题看可能有点难以理解,我们结合示例1来理解一下这道题. 有8个整数的数组 nums [4,3,2,7,8,2,3,1], 求在闭区间[1,8]范围内(即1,2,3,4,5,6,7,8)的数字,哪几个没有出现在数组 …

Spring Boot的Web开发

目录 Spring Boot的Web开发 1.静态资源映射规则 第一种静态资源映射规则 2.enjoy模板引擎 3.springMVC 3.1请求处理 RequestMapping DeleteMapping 删除 PutMapping 修改 GetMapping 查询 PostMapping 新增 3.2参数绑定 一.支持数据类型: 3.3常用注解 一.Request…

网闸(Network Gatekeeper或Security Gateway)

本心、输入输出、结果 文章目录 网闸(Network Gatekeeper或Security Gateway)前言网闸主要功能网闸工作原理网闸使用场景网闸网闸(Network Gatekeeper或Security Gateway) 编辑 | 简简单单 Online zuozuo 地址 | https://blog.csdn.net/qq_15071263 如果觉得本文对你有帮助…

c++如何理解多态与虚函数

目录 **前言****1. 何为多态**1.1 **编译时多态**1.1.1 函数重载1.1.2 模板 **1.2 运行时多态****1.2.1 虚函数****1.2.2 为什么要用父类指针去调用子类函数** **2. 注意****2.1 基类的析构函数应写为虚函数****2.2 构造函数不能设为虚函数** **本文参考** 前言 在学习 c 的虚…

CentOS7停止维护,更换国内镜像源

众所周知&#xff0c;截至6月30号&#xff0c;CentOS7就停止维护了&#xff0c;由此带来了一系列影响&#xff0c;最直接的影响就是通过yum安装软件时&#xff0c;链接404了&#xff0c;这就很不友好了。。。 不过好在咱们国内的各大厂很早就做了国内的镜像源&#xff0c;比如阿…