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

Cjson格式解析与接入AI大模型

JSON格式的解析与构造

  • 基本概念

JSON是JavaScript Object Notation的简称,中文含义为“JavaScript 对象表示法”,它是一种数据交换的文本格式,而不是一种编程语言。

JSON 是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。

当今互联网时代,JSON 已经成为了各种应用程序之间数据交换和通信的主流格式。它易于阅读和编写,并且易于机器解析和生成,常在Web开发中用于数据的格式化和传输。

  • 数据格式
  1. 对象

JSON 由两种数据结构组成:对象和数组。对象(object)是由键值对组成的无序集合,键是字符串,值可以是任何类型,包括对象和数组。对象由一对花括号{ }包围,键和值之间用冒号:分隔。键值对之间用逗号,分隔。

假设想要以JSON格式记录天气现象文字、天气现象代码、温度(单位为c摄氏度或f华氏度)。

{

"text" : "多云", //天气现象文字

"code": "4", //天气现象代码

"temperature": "14", //温度,单位为c摄氏度或f华氏度

}

  1. 数组

JSON 由两种数据结构组成:对象和数组。数组(array)是值(value)的有序集合,每个值可以是任何类型,包括对象和数组。数组由一对方括号[ ]包围,值之间用逗号,分隔。

[ "apple", "banana", "orange"]

在上面的例子中,可以看到数组包含三个字符串元素,分别是:"apple"、"banana"和"orange"。

注意:键的值有多种类型,值(value)可以是花括号{ }括起来的字符串(string)、数值(number)、布尔值(true/false)、 null、对象(object)或者数组(array),并且这些结构可以嵌套。

{

“name” : ”lmx”,

“age” : 30,

“score” : {

“C” : 65.0,

“linux”: 80.5

},

“sex” : “man”

}

提示:JSON格式本质也是字符串,只不过字符串中存储的数据需要按照JSON格式进行构造。

  • 解析方法

一般嵌入式开发中可以使用cJSON库对JSON格式进行解析,cJSON库是基于C语言的一个开源项目,github下载地址:https://github.com/DaveGamble/cJSON

cJSON库主要的文件有两个:一个是cJSON.c 一个是cJSON.h。使用时在工程中包含头文件即可,在cJSON.h头文件中有一个用于解析JSON格式的结构体,如下:

  1. 解析JSON流程
  1. 想要解析JSON格式,前提是得到存储了JSON数据的字符串,一般就是HTTP的请求或者响应的时候,绝大多数的情况都是服务器响应的数据为JSON格式。

  1. 需要把存储了JSON数据的字符串进行转换,转换JSON格式,此时可以通过cJSON库中README.md来分析,可以知道调用 cJSON_Parse() 进行解析,该函数的返回值就是cJSON格式的数据。

  1. 如果得到了转换成功的JSON格式的字符串,可以对该字符串进行调试输出,可以选择调用cJSON_Print(),该函数的返回值就是存储了JSON格式的字符串,如下:

  1. 如果输出结果没有问题,则可以开始对JSON数据进行解析,其中可以先从JSON对象中获得某个键的值,相当于对某个键值对进行解析,注意:如果键值对的值的类型不是字符串、整型、浮点型,则需要继续对键值对进行解析。否则,可以直接输出键值对的内容,利用JSON对象的结构体指针cJSON *的成员valuestring、valueint、valuedouble。

  1. 如果键值对的类型不是基本类型,而是对象或者数组,则需要继续解析,此时分为两种情况,第一种是情况:键值对的值的类型是对象,此时可以选择继续调用cJSON_GetObjectItem()函数。
  1. 如果键值对的类型不是基本类型,而是对象或者数组,则需要继续解析,此时分为两种情况,第一种是情况:键值对的值的类型是数组,此时可以选择调用cJSON_GetArraySize()函数,该函数的作用是获取数组中的元素的数量。另外,可以选择调用cJSON_GetArrayItem()函数,可以获取数组中的元素,如果数组的元素类型是对象,则可以选择调用cJSON_GetObjectItem()函数对对象进行解析。

  • 代码案例

  1. 构造JSON流程
  1. 如果打算构造JSON格式,则需要首先创建一个JSON顶层对象,需要调用cJSON_CreateObject(),也就是该函数可以创建对象,其实就是构造一对{ }。

  1. 可以选择继续调用cJSON_CreateObject()来创建新的小对象,此时可以选择向小对象中添加键值对,添加键值对的前提是构造键值对,需要先把键值对的值添加到创建的对象中,再把小对象添加到其他对象中,具有嵌套关系。根据键值对的值的类型,可以选择调用。

  1. AI大模型的接入与应用

目前的AI大模型的种类较多,一般可以选择接入目前比较主流的大模型,本次就以字节跳动旗下的火山引擎发布的豆包大模型为例,学习如何通过HTTP协议在线接入AI大模型。

  1. 注册账号

  1. 账号认证

  1. 选择产品

  1. 选择模型

  1. 分析模型

  1. 开通服务

作业:首先需要注册一个账号,然后申请开通某个模型的服务,然后阅读模型的API调用文档。

  1. 获取密钥

注意:API_KEY是很重要的,是作为HTTP的请求的鉴权信息使用,需要作为HTTP的Authorization请求字段使用。

请求头部字段结构: Authorization: Bearer 6d4d987a-d792-43ae-8571-806b02792838\r\n

  1. 请求参数

可以知道,如果想要接入AI大模型,需要使用HTTP服务,并且需要构造HTTP的请求,请求需要包含以上2个参数。

  1. model

是必填项,需要填入接入点的ID,格式一般可以参考官方提供的接入案例,具体的流程如下:

  1. messages

是必填项,需要填写消息的对话列表,是固定的格式,其中需要包含role和content,如下

role指的是角色,分为system和user,system指的是豆包大模型,user指的是用户,大模型和用户需要分别输入对应的对话内容。

对于system的content指的是提供给大模型的提示词,对于user的content指的是提供给大模型的对话内容。

注意:豆包大模型的HTTP的请求参数是以JSON格式进行构造的,所以可以参考接入示例:

{

"model": "doubao-1-5-lite-32k-250115",

"messages": [

{

"role": "system",

"content": "你是人工智能助手."

},

{

"role": "user",

"content": "常见的十字花科植物有哪些?"

}

]

}

  1. 接入方式

可以知道豆包大模型可以采用HTTP的POST请求来进行对话,由于使用的是主流的HTTP/1.1的协议版本,支持长连接,但是如果打算在请求中包含请求body的话,一般是需要在构造HTTP请求的时候使用头部字段Content-Length : xxx xxx是一个整数,用于记录数据长度

一般HTTP/1.1的协议版本中,客户端和服务器都需要指定请求体/响应体的长度,方便双方读取指定长度的数据。

  1. 程序设计

  1. 响应格式

  1. 运行效果

练习:自己选择豆包大模型,利用HTTP协议进行接入,要求可以通过键盘实现对话,并且要求利用cJSON库对服务器的响应体进行解析,把服务器响应的内容输出到终端。

相关文章:

  • RAIL-KD: 随机中间层映射知识蒸馏
  • UE5骨骼插槽蓝图
  • 软件系统中功能模型 vs 数据模型 对比解析
  • TextRNN 模型实现微博文本情感分类
  • AD原理图复制较多元器件时报错:“InvalidParameter Exception Occurred In Copy”
  • 推送到Gerrit时报错,缺少Change-Id
  • djinn: 3靶场渗透
  • java的输入输出模板(ACM模式)
  • 古方焕新潮!李良济盒马联名养生水,以创新赋能中式养生新潮流
  • 出现在‘{‘的段错误
  • Qt读写XML文档
  • linux动态占用内存脚本、根据阈值增加占用或取消占用内存的脚本、自动检测占用脚本状态,多脚本套用
  • 力扣-24.两两交换链表中的结点
  • 可视化图解算法36: 序列化二叉树-I(二叉树序列化与反序列化)
  • Rust 中的 `PartialEq` 和 `Eq`:深入解析与应用
  • R1-Omni
  • SAP note 3565626 : Baltimore CyberTrust 根证书即将过期
  • 数据结构与算法分析实验10 实现最短路径算法
  • “Cobalt Strike Aggressor脚本提权全解析:从监听器到SYSTEM/root的渗透实战指南“
  • HarmonyOS开发-组件市场
  • 深圳市政协原副主席王幼鹏被“双开”
  • 要更加冷静地看待“东升西降”的判断
  • 上海证监局规范辖区私募经营运作,6月15日前完成自评自纠
  • 中国一重集团有限公司副总经理陆文俊被查
  • 盖茨:20年内将捐出几乎全部财富,盖茨基金会2045年关闭
  • 2024年上市公司合计实现营业收入71.98万亿元