当前位置: 首页 > article >正文

大模型推理后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:验证完美快乐数据
[{"活动名称": "旋转木马","游玩体验": "孩子们玩得非常开心!","是否推荐": "超级推荐"},{"活动名称": "彩虹滑梯","游玩体验": "像在云朵上飞翔一样!","是否推荐": "推荐"}
]

相关文章:

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

大模型推理后JSON数据后处理 flyfish LLM 通常指的是 Large Language Model,也就是大语言模型,针对 JSON格式的输出,可以在大模型推理前、推理中、推理后进行处理,这里是在推理后进行处理。 针对模型输出结果,可采用结…...

【干货】Docker 在自动化测试和性能测试中的应用

引言 在现代软件测试领域,Docker 已经成为提升自动化测试和性能测试效率的重要工具。它不仅能提供一致的测试环境,还能大幅减少配置和维护成本。本文将深入探讨 Docker 在自动化测试和性能测试中的应用场景、优势及实践方案。 1. 为什么选择 Docker&am…...

【Linux内核系列】:文件系统收尾以及软硬链接详解

🔥 本文专栏:Linux 🌸作者主页:努力努力再努力wz 💪 今日博客励志语录: 世界上只有一种个人英雄主义,那么就是面对生活的种种失败却依然热爱着生活 内容回顾 那么在之前的学习中,我们…...

视频理解之Actionclip(论文宏观解读)

配合解读代码解读 1.研究背景 1. 视频行为识别的重要性 视频行为识别是视频理解领域的核心任务之一,旨在通过分析视频内容来识别和分类其中的人物行为或活动。这一任务在多个领域具有重要的应用价值,例如智能监控、人机交互、自动驾驶、医疗健康等。随…...

java手机号、邮箱、日期正则表达式

Java正则核心API Java中用 java.util.regex 包的两个类: Pattern:编译正则表达式Matcher:执行匹配操作 1. 验证手机号 String regex "1[3-9]\\d{9}"; boolean isValid "18812345678".matches(regex); // true2. 提取…...

navicat16 升级到 navicat17 之后原来的连接找不到了 mac用户

版本16的路径 注意把对应的路径改成自己的用户名 /Users/自己的用户名/Library/Application Support/PremiumSoft CyberTech/Navicat CC/Common/Settings 版本17的路径 /Users/自己的用户名/Library/Containers/com.navicat.NavicatPremium/Data/Library/Application Suppor…...

Altium Designer——CHIP类元器件PCB封装绘制

文章目录 PCB封装组成元素:焊盘的属性 SS34肖特基二极管SMA(DO-214AC)封装绘制资料:步骤:1.绘制焊盘:用到的快捷键:资料: 2.绘制丝印:用到的快捷键:资料: PCB封装组成元素…...

[C++Qt] 槽函数收不到信号问题(信号的注册)

📢博客主页:https://loewen.blog.csdn.net📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!📢本文由 丶布布原创,首发于 CSDN,转载注明出处🙉📢现…...

【一起来学kubernetes】12、k8s中的Endpoint详解

一、Endpoint的定义与作用二、Endpoint的创建与管理三、Endpoint的查看与组成四、EndpointSlice五、Endpoint的使用场景六、Endpoint与Service的关系1、定义与功能2、创建与管理3、关系与交互4、使用场景与特点 七、Endpoint的kubectl命令1. 查看Endpoint2. 创建Endpoint3. 编辑…...

SpringBoot的并行SQL任务并完成所有任务之后返回操作

一、核心实现方案 1. 线程池配置与异步支持 通过 EnableAsync 启用异步支持,并自定义线程池避免默认线程池的性能问题: Configuration EnableAsync public class AsyncConfig {Beanpublic Executor taskExecutor() {ThreadPoolTaskExecutor executor …...

《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成

《AI浪潮中的璀璨新星:Meta Llama、Ollama与DeepSeek的深度剖析》:此文为AI自动生成 引言:AI 大模型的群雄逐鹿时代 在科技飞速发展的当下,AI 大模型领域已成为全球瞩目的焦点,竞争激烈程度堪称白热化。从 OpenAI 推出…...

LVGL移植到6818开发板

一、移植步骤 1.lv_config.h 配置文件启动 framebuffer 2、lv_config.h 配置文件关闭SDL 2.修改main.c 去掉SDL输入设备 3.修改Makefile 文件启动交叉编译 去掉警告参数 去掉SDL库 4.交叉编译代码 make clean #清空 ⭐ 必须要清空一次再编译! 因为修改了 lv_con…...

Spring Boot应用首次请求性能优化实战:从数据库连接池到JVM调优

目录 问题现象与背景分析性能瓶颈定位方法论数据库连接池深度优化Spring Bean生命周期调优JVM层性能预热策略全链路监控体系建设生产环境验证方案总结与扩展思考1. 问题现象与背景分析 1.1 典型问题场景 在某互联网金融项目的Spring Boot应用上线后,运维团队发现一个关键现象…...

UE4-UE5虚幻引擎,前置学习一--Console日志输出经常崩溃,有什么好的解决办法

有些差异 这么牛逼的引擎,居然有这种入门级别的问题,一触发清理,大概率(80%)会崩溃 无论虚幻5还是UE4都有这个问题,挺烦人的 实在忍不了了,这次,今天 就想问问有什么好的处理方法么?&#x…...

(全)2024下半年真题 系统架构设计师 综合知识 答案解析01

系统架构设计师第二版教程VIP课程https://edu.csdn.net/course/detail/40283 操作系统 下列选项中不能作为预防死锁措施的是 。 A. 破坏“循环等待"条件 B. 破坏“不可抢占”条件 C. 破坏“互斥”条件 D. 破坏“请求和保持”条件 答案:C 解析&…...

程序化广告行业(18/89):交易模式与关键概念解析

程序化广告行业(18/89):交易模式与关键概念解析 大家好呀!一直以来,我都在深入研究程序化广告这个充满挑战与机遇的领域,在学习过程中收获了很多,也迫不及待想和大家分享。写这篇博客&#xff…...

Linux系统之less命令的基本使用

Linux系统之less命令的基本使用 一、less命令介绍二、less命令的使用帮助2.1 less命令的帮助信息2.2 less命令主要选项解释 三、less命令的基本使用3.1 查看文件内容3.2 结合管道使用 四、注意事项 一、less命令介绍 在Linux和Unix类操作系统中,文件浏览是一项常见的…...

【微知】plantuml在泳道图中如何将多个泳道框起来分组并且设置颜色?(box “浏览器“ #LightGreen endbox)

泳道分组并且着色 分组用 box和endbox ,颜色用#xxx,标注用"xxx" box "浏览器" #LightGreen participant "浏览器1" as Browser participant "浏览器2" as Browser2 endboxparticipant "服务端" as …...

C#生产型企业ERP系统管理软件PCB行业ERP进销存MRP管理系统BOM管理

背景 本软件为为苏州某生产型电子科技企业开发的ERP管理软件。 功能说明 希哲管理系统v1.0是一款在流览器上使用的企业管理软件,使用上与客户端版的优势是: 1.安装更新部署方便,只需服务器部署了软件,其它客户端的用户无需安装&am…...

文件系统 linux ─── 第19课

前面博客讲解的是内存级文件管理,接下来介绍磁盘级文件管理 文件系统分为两部分 内存级文件系统 : OS加载进程 ,进程打开文件, OS为文件创建struct file 和文件描述符表 ,将进程与打开的文件相连, struct file 内还函数有指针表, 屏蔽了底层操作的差异,struct file中还有内核级…...

基于大模型预测的难治性青光眼诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、大模型预测难治性青光眼的原理与方法 2.1 大模型介绍 2.2 数据收集与预处理 2.3 模型训练与优化 三、术前风险预测与准备 3.1 术前眼压及视神经损伤风险预测 3.2 患者全身状况评估 3.3 术前准备工作 四…...

射频前端模块(FEM)的基本原理与架构:从组成到WiFi路由器的应用

射频前端模块(FEM)的基本原理与架构:从组成到WiFi路由器的应用 一、FEM是什么? 射频前端模块(Front-End Module, FEM)是无线通信系统中负责处理射频信号的核心组件。它将多个关键电路集成在一个模块中,包括功率放大器(PA)、低噪声放大器(LNA)、射频开关(Switch)、…...

qemu分析之 KVM_EXIT_MMIO

基于qemu-2.8.1 address_space_rw 函数作用 这是QEMU内存子系统的核心函数,负责分块处理跨MemoryRegion的内存读取操作。主要场景包括: 处理跨越多个MemoryRegion的连续内存读取区分RAM直接访问与MMIO设备模拟处理不同位宽(1/2/4/8字节&am…...

k8s系统学习路径

学习 Kubernetes(K8s)需要循序渐进,结合理论知识和实践操作。以下是学习 Kubernetes 的推荐步骤: 1. 先决条件 • 掌握容器基础:先学习 Docker,理解容器化概念(镜像、容器、仓库)、…...

OSI 七层网络模型

文章目录 OSI 七层模型应用层表示层会话层传输层网络层数据链路层物理层 TCP/IP 四层模型应用层传输层网络层数据链路层 TCP/IP 特点OSI 和 TCP/IP 两者关系通信过程及相关协议常用协议及端口号常用协议分类参考链接 OSI 七层模型 七层模型,亦称OSI(Ope…...

虚拟电商-数据库分库分表(二)

本文章介绍:使用Sharding-JDBC实现数据库分库分表,数据库分片策略,实现数据库按月分表 一、Sharding-JDBC使用 1.1.准备环境 步骤一:分库分表sql脚本导入 创建了两个数据库:chongba_schedule0 和chongba_schedule1…...

进程间通信--匿名管道

进程间通信介绍 进程间通信目的 数据传输:一个进程需要将它的数据发送给另一个进程资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件&…...

人工智能治理的两会声音:技术规范与伦理风险探讨

摘要 在最近的两会期间,科技界代表聚焦人工智能(AI)治理问题,提出多项建议。这些建议涵盖AI技术规范、伦理风险预防与控制等方面。代表们强调建立健全法律法规和技术标准体系,确保AI健康发展。同时,重视公众…...

C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色

C#opencv 遍历图像中所有点 不在圆范围内的点变为黑色,在圆范围内的保持原色 安装 Install-Package OpenCvSharp4 Install-Package OpenCvSharp4.Windows 普通实现 using System; using System.Collections.Generic; using System.Linq; using OpenCvSharp; // 添加OpenCV引用…...

基于SSM + JSP 的图书商城系统

基于SSM的图书商城 网上书城、图书销售系统、图书销售平台 |Java|SSM|HTML|JSP| 项目采用技术: ①:开发环境:IDEA、JDK1.8、Maven、Tomcat ②:技术栈:Java、…...