大模型推理后JSON数据后处理

大模型推理后JSON数据后处理

flyfish
LLM 通常指的是 Large Language Model,也就是大语言模型,针对 JSON格式的输出,可以在大模型推理前、推理中、推理后进行处理,这里是在推理后进行处理。
针对模型输出结果,可采用结构化后处理流程对 JSON 进行格式校验与修复,确保生成结果符合数据交互规范。

json_repair 是一个用于修复格式错误的 JSON 字符串的 Python 库

1. 安装 json_repair

在使用之前,你需要先安装这个库,可以使用 pip 进行安装:

pip install json-repair

2. 基本用法:修复简单的格式错误

from json_repair import json_repair# 包含简单格式错误的 JSON 字符串(缺少引号)
broken_json = "{name: 'John', age: 30}"
try:repaired_json = json_repair(broken_json)print("修复后的 JSON 字符串:", repaired_json)
except Exception as e:print(f"修复出错: {e}")

在这个例子中,输入的 JSON 字符串缺少引号,json_repair 会尝试修复这些错误并返回一个格式正确的 JSON 字符串。

3. 处理包含注释的 JSON

from json_repair import json_repair# 包含 JavaScript 风格注释的 JSON 字符串
broken_json = '{/* 这是一个注释 */ "name": "John", "age": 30}'
try:repaired_json = json_repair(broken_json)print("修复后的 JSON 字符串:", repaired_json)
except Exception as e:print(f"修复出错: {e}")

json_repair 可以处理包含注释的 JSON 字符串,会自动移除注释并修复格式。

4. 修复多余逗号的问题

from json_repair import json_repair# 包含多余逗号的 JSON 字符串
broken_json = '{"name": "John", "age": 30,}'
try:repaired_json = json_repair(broken_json)print("修复后的 JSON 字符串:", repaired_json)
except Exception as e:print(f"修复出错: {e}")

JSON 标准中对象或数组末尾的多余逗号是不允许的,json_repair 会自动移除这些多余的逗号。

5. 修复嵌套结构的 JSON 错误

from json_repair import json_repair# 嵌套结构中存在格式错误的 JSON 字符串
broken_json = '{"person": {name: "John", age: 30}}'
try:repaired_json = json_repair(broken_json)print("修复后的 JSON 字符串:", repaired_json)
except Exception as e:print(f"修复出错: {e}")

即使是嵌套结构的 JSON 字符串,json_repair 也能尝试修复其中的格式错误。

6. 直接解析修复后的 JSON 为 Python 对象

import json
from json_repair import json_repair# 格式错误的 JSON 字符串
broken_json = "{name: 'John', age: 30}"
try:repaired_json = json_repair(broken_json)# 将修复后的 JSON 字符串解析为 Python 对象data = json.loads(repaired_json)print("解析后的 Python 对象:", data)
except Exception as e:print(f"出错: {e}")

在修复 JSON 字符串后,可以使用 json.loads 将其解析为 Python 对象进行后续处理。

7. 使用 json_repair.loads 直接解析并修复

from json_repair import loads# 格式错误的 JSON 字符串
broken_json = "{name: 'John', age: 30}"
try:# 直接解析并修复data = loads(broken_json)print("解析后的 Python 对象:", data)
except Exception as e:print(f"出错: {e}")

json_repair.loads 结合了修复和解析的功能,直接将格式错误的 JSON 字符串解析为 Python 对象。

8. 从文件中读取并修复 JSON

import json_repair# 假设文件 example.json 中包含格式错误的 JSON
file_path = "example.json"
try:with open(file_path, 'r', encoding='utf-8') as file:broken_json = file.read()# 修复并解析文件中的 JSONdata = json_repair.loads(broken_json)print("解析后的 Python 对象:", data)
except Exception as e:print(f"出错: {e}")

借助 jsonjson_repair 库实现了对 JSON 数据的修复、转换和验证功能

正确的JSON格式

[{"活动名称": "旋转木马","游玩体验": "孩子们玩得非常开心!","是否推荐": "超级推荐"},{"活动名称": "彩虹滑梯","游玩体验": "像在云朵上飞翔一样!","是否推荐": "推荐"}
]
  • 功能概述:该函数接收一个 JSON 字符串作为输入,尝试将其转换为特定的快乐游乐园数据格式。

  • 具体步骤

    1. 使用 json.loads 将输入的 JSON 字符串解析为 Python 对象。
    2. 定义内部递归函数 find_fun_entries 来遍历 Python 对象:
      • 若当前对象是字典,检查是否包含 "活动名称""游玩体验""是否推荐" 这三个键,如果包含则将该字典添加到 happy_list 中。
      • 若当前对象是列表,则递归调用 find_fun_entries 处理列表中的每个元素。
    3. 使用 json.dumpshappy_list 转换为格式化的 JSON 字符串并返回。
    4. 若解析过程中出现 JSONDecodeError,则返回错误提示信息。
  • 定义了三个测试用例:

    • amusement_park_json:有效但结构较复杂的 JSON 数据,需要提取特定条目。
    • broken_happy_json:包含格式错误的 JSON 数据,需要先修复再处理。
    • perfect_happy_json:已经符合目标格式的 JSON 数据,用于验证转换函数的正确性。

执行测试

  • 测试 1:使用 json_repair.loads 直接修复破损的 JSON 数据,并打印修复后的结果。
  • 测试 2:调用 convert_to_happy_format 函数处理有效但需要优化的 JSON 数据,打印转换后的结果。
  • 测试 3:先使用 json_repair.repair_json 修复破损的 JSON 数据并返回 Python 对象,再将其转换为 JSON 字符串后调用 convert_to_happy_format 函数进行处理,打印最终结果。
  • 测试 4:对已经符合目标格式的 JSON 数据调用 convert_to_happy_format 函数进行验证,打印结果。
import json
import json_repairdef convert_to_happy_format(json_str):"""转换JSON到快乐游乐园数据格式:1. 提取包含"活动名称"、"游玩体验"、"是否推荐"的条目2. 自动优化游玩体验描述的感叹号"""try:data = json.loads(json_str)happy_list = []def find_fun_entries(obj):if isinstance(obj, dict):# 检测快乐活动条目if all(key in obj for key in ["活动名称", "游玩体验", "是否推荐"]):happy_list.append(obj)# 快乐地探索数据for value in obj.values():find_fun_entries(value)elif isinstance(obj, list):for ride in obj:find_fun_entries(ride)find_fun_entries(data)return json.dumps(happy_list, ensure_ascii=False, indent=4)except json.JSONDecodeError:return "这个JSON好像被棉花糖粘住啦!需要先清理一下~"# 测试用例(游乐园场景)
# 有效但需要优化的JSON
amusement_park_json = '''
{"今日快乐日志": [{"活动名称": "旋转木马","游玩体验": "孩子们玩得非常开心。。。","是否推荐": "超级推荐"},{"活动名称": "彩虹滑梯","游玩体验": "像在云朵上飞翔一样","是否推荐": "推荐"},{"后勤记录": {"活动名称": "冰淇淋车","游玩体验": "香草口味卖光了","是否推荐": "不推荐"}}]
}
'''# 需要修复的破损JSON
broken_happy_json = '''
{"今日快乐日志": [{"活动名称": "旋转木马","游玩体验": "音乐声有点小,"是否推荐": "一般推荐"},{"活动名称": "摩天轮","游玩体验": "夜景美得就像星空","是否推荐": "强烈推荐"'''# 理想中的快乐数据
perfect_happy_json = '''
[{"活动名称": "旋转木马","游玩体验": "孩子们玩得非常开心!","是否推荐": "超级推荐"},{"活动名称": "彩虹滑梯","游玩体验": "像在云朵上飞翔一样!","是否推荐": "推荐"}
]
'''# 欢乐测试流程
print("🎪"*20 + " 开始快乐测试 " + "🎢"*20)print("\n🌈 测试1:直接处理破损的快乐JSON()")
try:fixed_data = json_repair.loads(broken_happy_json)print("修复后的快乐数据:\n", json.dumps(fixed_data, indent=4, ensure_ascii=False))
except Exception as e:print(f"😅 遇到小故障:{str(e)}")print("\n🎠 测试2:转换游乐园原始数据")
print("原始数据转换结果:")
print(convert_to_happy_format(amusement_park_json))print("\n🎡 测试3:修复并转换破损数据(按照指定格式)")
try:repaired = json_repair.repair_json(broken_happy_json, return_objects=True)print("最终快乐数据:\n", convert_to_happy_format(json.dumps(repaired)))
except Exception as e:print(f"🎪 游乐设施暂时关闭:{str(e)}")print("\n🍭 测试4:验证完美快乐数据")
print(convert_to_happy_format(perfect_happy_json))

输出

🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪🎪 开始快乐测试 🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🎢🌈 测试1:直接处理破损的快乐JSON()
修复后的快乐数据:{"今日快乐日志": [{"活动名称": "旋转木马","游玩体验": "音乐声有点小","是否推荐": "一般推荐"},{"活动名称": "摩天轮","游玩体验": "夜景美得就像星空","是否推荐": "强烈推荐"}]
}🎠 测试2:转换游乐园原始数据
原始数据转换结果:
[{"活动名称": "旋转木马","游玩体验": "孩子们玩得非常开心。。。","是否推荐": "超级推荐"},{"活动名称": "彩虹滑梯","游玩体验": "像在云朵上飞翔一样","是否推荐": "推荐"},{"活动名称": "冰淇淋车","游玩体验": "香草口味卖光了","是否推荐": "不推荐"}
]🎡 测试3:修复并转换破损数据(按照指定格式)
最终快乐数据:[{"活动名称": "旋转木马","游玩体验": "音乐声有点小","是否推荐": "一般推荐"},{"活动名称": "摩天轮","游玩体验": "夜景美得就像星空","是否推荐": "强烈推荐"}
]🍭 测试4:验证完美快乐数据
[{"活动名称": "旋转木马","游玩体验": "孩子们玩得非常开心!","是否推荐": "超级推荐"},{"活动名称": "彩虹滑梯","游玩体验": "像在云朵上飞翔一样!","是否推荐": "推荐"}
]

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

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

相关文章

MySQL的一些八股文

1.什么是BufferPool? Buffer Pool基本概念 Buffer Pool:缓冲池,简称BP。其作用是用来缓存表数据与索引数据,减少磁盘IO操作,提升效率。 Buffer Pool由缓存数据页(Page) 和 对缓存数据页进行描述的控制块 组成, 控制…

卷积神经网络(笔记02)

一、简述在卷积神经网络中池化层的作用,并解释其为何能帮助提高模型性能 。 池化层的作用 1. 降低数据维度 池化操作通过对输入特征图进行下采样,减少特征图的空间尺寸。常见的池化方式有最大池化(Max Pooling)和平均池化&…

面试系列|蚂蚁金服技术面【1】

哈喽,大家好!今天分享一下蚂蚁金服的 Java 后端开发岗位真实社招面经,复盘面试过程中踩过的坑,整理面试过程中提到的知识点,希望能给正在准备面试的你一些参考和启发,希望对你有帮助,愿你能够获…

带环链表的相关知识点

带环链表的相关知识点 1.判断是否有环2.寻找入环节点补充:相交链表 如果链表中有某个节点,可以通过连续跟踪next指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开…

初探 Threejs 物理引擎CANNON,解锁 3D 动态魅力

简介 Cannon.js 是一个基于 JavaScript 的物理引擎,它可以在浏览器中模拟物理效果。它支持碰撞检测、刚体动力学、约束等物理效果,可以用于创建逼真的物理场景和交互。 参考文档 官方示例 原理 Cannon.js 使用了欧拉角来表示物体的旋转,…

【小沐学Web3D】three.js 加载三维模型(React)

文章目录 1、简介1.1 three.js1.2 react.js 2、three.js React结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了高级的…

简述计算机网络中的七层模型和四层模型

在计算机网络中,网络协议栈的设计通常采用分层结构来处理不同的通信任务。常见的分层结构有OSI七层模型和TCP/IP四层模型。虽然它们的层次数量不同,但本质上都在解决如何有效地进行计算机间通信。本文将分别介绍这两种结构的功能和各层的协议。 一、OSI七…

在 CentOS 上安装 Oracle 数据库

文章目录 **1. 系统准备****1.1 检查系统要求****1.2 更新系统****1.3 安装必要的依赖包****1.4 创建 Oracle 用户和组****1.5 配置内核参数****1.6 配置用户限制****1.7 配置 PAM 模块****1.8 创建 Oracle 安装目录** **2. 下载 Oracle 数据库安装包****2.1 访问 Oracle 官方网…

掌握这些 UI 交互设计原则,提升产品易用性

在当今数字化时代,用户对于产品的体验要求越来越高,UI 交互设计成为决定产品成败的关键因素之一。一个易用的产品能够让用户轻松、高效地完成各种操作,而实现这一目标的核心在于遵循一系列科学合理的 UI 交互设计原则。本文将详细阐述简洁性、…

创新实践分享:基于边缘智能+扣子的智能取物机器人解决方案

在 2024 年全国大学生物联网设计竞赛中,火山引擎作为支持企业,不仅参与了赛道的命题设计,还为参赛队伍提供了相关的硬件和软件支持。以边缘智能和扣子的联合应用为核心,参赛者们在这场竞赛中展现出了卓越的创新性和实用性&#xf…

Python----数据可视化(Pyecharts一:介绍安装,全局配置,系列配置)

一、PyEcharts介绍 1.1、概况 Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可。而 Python 是一门富有表达力的语言,很适合用于数据处理。当数据分析遇上数据可视化时&#xff…

Cursor初体验:excel转成CANoe的vsysvar文件

今天公司大佬先锋们给培训了cursor的使用,还给注册了官方账号!跃跃欲试,但是测试任务好重,结合第三方工具开发也是没有头绪。 但巧的是,刚好下午有同事有个需求,想要把一个几千行的excel转成canoe的系统变…

【3DGS】SuperSplat本地运行+修改监听端口+导入ply模型+修剪模型+在线渲染3DGS网站推荐

SuperSplat官网代码:https://github.com/playcanvas/supersplat 本地安装和运行 Clone the repository: git clone https://github.com/playcanvas/supersplat.git cd supersplat Install dependencies: npm install Build SuperSplat and start a local web ser…

MySQL中的B+树索引经验总结

一、什么是B树 B树是一种二叉树,由二叉查找树,平衡二叉树,B树演化而来。 请看上图 B树的特点: 1)非叶子节点不存放数据,只存放键值,数据都存放在叶子节点中。 2)叶子节点都在同一…

C# NX二次开发:在多个体的模型中如何实现拉伸操作布尔减

大家好,今天接着上一篇拉伸文章去讲。 UF_MODL_create_extruded1 (view source) uf_list_p_tobjectsInputList of objects to be extruded.char *taper_angleInputTaper angle (in degrees).char *limit [ 2 ]InputLimit of extrusion. This is declared as: char …

【深度学习】多源物料融合算法(一):量纲对齐常见方法

目录 一、引言 二、量纲对齐常见方法 2.1 Z-score标准化Sigmoid归一化 2.2 Min-Max 归一化 2.3 Rank Transformation 2.4 Log Transformation 2.5 Robust Scaling 3、总结 一、引言 类似抖音、快手、小红书等产品的信息流推荐业务,主要通过信息流广告、信…

前端高级CSS用法

前端高级CSS用法 在前端开发中,CSS(层叠样式表)不仅是用来控制网页的外观和布局,更是实现复杂交互和动态效果的关键技术之一。随着前端技术的不断发展,CSS的用法也日益丰富和高级。本文将深入探讨前端高级CSS的用法&a…

How to install a package in offline scenario in Ubuntu 24.04

概述 做过信创项目的兄弟们在工作上每天可能面对很多需要解决的问题,不过,有一类问题可能是大家经常遇的,比方说,有时候我们不得不硬着头皮在离线生产环境中安装某些软件包,相信很多兄弟被这种细碎的小事搞得焦头烂额…

C++类与对象——拷贝构造与运算符重载

拷贝构造函数和赋值运算符重载就是C类默认六个函数之二。 拷贝构造函数: 如果⼀个构造函数的第⼀个参数是自身类类型的引用,且任何额外的参数都有默认值,则此构造函数 也叫做拷贝构造函数,也就是说拷贝构造是⼀个特殊的构造函数…

数学建模 第一节

目录​​​​​​ 前言 一 优化模型的类型 二 线性规划1 线性规划2 三 0-1规划 总结 前言 数学建模主要是将问题转化为模型,然后再以编程的形式输出出来 算法都知道,数学建模也需要用到算法,但是不是主要以编程形式展示,而是…