LLM学习笔记(2)会话补全Chat Completions、什么是JSON?

什么是会话补全Chat Completions?

功能目标:处理多轮对话。

  • 它模拟对话的逻辑,比如聊天机器人对用户消息的回应。
  • 使用的模型主要是针对对话型应用优化的模型,例如gpt-3.5-turbogpt-4

什么是JSON?

JSON 本质上是一种 数据格式,它的作用就是在 客户端服务器(比如大语言模型)之间传递和交换数据。

举个例子,在ChatGPT中,用户输入的内容被转化为JSON格式,传递给大语言模型;而大语言模型生成的回答,也被转化为JSON格式返回到客户端或者交流界面。

我们可以说,JSON 是大语言模型中核心的"桥梁"和"翻译官",它是整个大语言模型输入和输出的基础工具。

除了用户输入和模型输出,在大语言模型的开发中,JSON 还可以:

  1. 传递参数:如模型名称(gpt-3.5-turbo)、温度(temperature)等参数。
  2. 存储对话上下文:方便多轮对话的实现。
  3. 记录数据:比如日志系统,JSON 常用于存储对话记录。

以下内容的说明

使用 openai.ChatCompletion.create 函数,通过 API 向语言模型发送请求(内容包括①指定使用的模型;②定义发送消息内容)之后,请求内容被发送到 OpenAI 的服务器,服务器返回的结果是一个 JSON 对象,描述了模型生成的回复。以下内容就是模型生成的响应内容。

逐条解析响应 JSON 的每一项内容

1. 顶层结构

  • id: "chatcmpl-123"

    • 含义:这是该聊天补全请求的唯一标识符,用于跟踪或日志记录。
    • 作用:如果需要排查问题或查询特定请求的记录,可以通过此 ID 进行定位。
  • object: "chat.completion"

    • 含义:表示响应的类型。在这里,响应类型是聊天补全。
    • 作用:区分 API 的不同功能模块(例如文本补全、聊天补全等)。
  • created: 1677652288

    • 含义:响应生成的时间戳。它表示从 1970 年 1 月 1 日 00:00:00 UTC(协调世界时) 开始经过的秒数,这里的时间是 2023 年 3 月 1 日 12:18:08(UTC)
    • 作用:标记请求的生成时间,用于记录或分析调用历史。

2. choices字段

  • choices 是 API 返回的核心部分,存储了模型生成的回答。
  • 每个元素包含:
    1. 回答的索引(index)。
    2. 消息的角色和内容(message)。
    3. 生成结束的原因(finish_reason)。
  • 如果没有特殊需求,choices[0].message.content 就是模型的回答内容,也是用户主要关注的部分。
  1. 包含 API 生成的回答

    • choices 是 API 返回结果中用于封装生成回答的字段,模型的回答都存储在这个数组中。
    • 如果模型生成多个候选回答,则这些候选回答以数组形式存放在 choices 中。
  2. 支持多种用途

    • 单一回答:默认情况下,choices 只包含一个回答。
    • 多个候选:通过设置参数(如 n)可以请求模型生成多个回答,并从中选择最佳的一个。
  3. 对话上下文的传递

    • choices 中的 message 字段不仅包含模型的回答,还包含 role 信息,用于保持对话的上下文和参与者角色的区分。

1. index:0

  • 类型:整数
  • 作用:标识回答的序号,用于区分当生成多个回答时的不同候选项。
  • 说明:在当前请求中,只生成了一个回答,因此索引为 0

2. message:

  • 类型:对象
  • 作用:包含具体生成回答的信息。
  • 内部字段解析
    • content: "\n\nHello there, how may I assist you today?"
      • 类型:字符串
      • 含义:模型生成的具体回答内容。
      • 说明:这个字段是 choices 字段中最重要的部分,包含模型对用户输入的核心回复。
    • role: "assistant"
      • 类型:字符串
      • 含义:表示消息的角色,这里是由模型(助手)生成的回答。
      • 可能值
        • "user":用户发送的消息。
        • "assistant":模型生成的回答。
        • "system":系统设定的背景或约束信息。

3. finish_reason: "stop"

  • 类型:字符串
  • 作用:指示模型生成回答的结束原因。
  • 可能的值
    • "stop":生成正常结束,因为模型认为回答已完整。
    • "length":达到 max_tokens 限制,生成被截断。
    • "content_filter":生成的内容被内容过滤器截断。
    • "null":某些情况下可能为空,表示生成中止或其他特殊原因。

3. usage 字段

usage 字段主要记录了一次 API 请求的 token 使用情况,帮助用户了解模型在本次请求中消耗的资源量。

什么是token?

在自然语言处理(NLP)和大语言模型(LLM)中,token(标记) 是文本的基本处理单元。大语言模型(如 GPT-3.5 和 GPT-4)将输入的文本分解为若干个 token,然后以这些 token 为基础进行计算和生成内容。

Token 的作用

  1. 模型的基本输入单位

    • 大语言模型无法直接理解自然语言,而是将输入文本拆分成更小的单位(token),这些单位是模型理解和处理语言的基础。
  2. 节约计算资源

    • 通过将文本切分为 token,可以更高效地对其进行计算和处理。
  3. 计费单位

    • 大语言模型的 API 调用通常按 token 数量计费,理解 token 的意义有助于优化输入和降低成本。

Token 的特点

  1. Token 可以是以下单位之一

    • 单词:例如 "hello" 是一个 token。
    • 标点符号:例如 ",""?" 是独立的 token。
    • 子词:例如 "running" 可能被拆分为 "run""ning" 两个 token。
    • 数字或符号:例如 "2023""$"
  2. Token 是语言相关的

    • 在英文中,一个简单的单词可能是一个 token,而在中文中,每个汉字通常是一个独立的 token。

Token 和字符的区别

  • 字符(Character):文本中每一个单独的字母、数字或符号。例如 Hello! 有 6 个字符。
  • Token:字符的集合,通常是分词的结果。例如 Hello! 可能只被分为 2 个 token:Hello!

usage 字段的作用

  1. 监控消耗

                记录输入(prompt_tokens)和输出(completion_tokens)的 token 数量,以及总消耗量(total_tokens)。

                有助于用户管理和优化调用成本,因为 OpenAI 的 API 通常按 token 使用量收费。

  1. 优化性能

                用户可以通过分析 token 数量来优化提示(prompt)的设计,例如减少无用内容,控制输出长度,从而降低成本。

  1. 计费依据

                OpenAI 的计费机制基于 token 使用量,因此 usage 字段是计费的直接依据。

  1. 调试和分析

                在开发中,usage 字段帮助用户了解 API 调用是否符合预期。例如,输入是否过长?输出是否被截断?

1. prompt_tokens: 9

  • 含义:处理用户输入(prompt)时消耗的 token 数量,包括:

    • 用户发送的内容。
    • 对话上下文(如前几轮消息,若有)。
    • 系统消息(如设定的背景信息)。
  • 作用

    • 表示模型需要处理的输入长度。
    • 可以用来评估 prompt 的设计是否简洁。

2. completion_tokens: 12

  • 含义:模型生成的回答所用的 token 数量。

  • 作用

    • 表示模型输出的长度。
    • 提供优化线索:如果生成的回答过长,可能需要调整 max_tokens 参数或模型温度(temperature)来控制长度。

3. total_tokens: 21

  • 含义prompt_tokenscompletion_tokens 的总和。

    • 即:prompt_tokens + completion_tokens = total_tokens
  • 作用

    • 显示本次请求的整体资源消耗。
    • 便于用户估算成本,因为 API 的计费通常基于总 token 数量。

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

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

相关文章

C++和js对比

1. 变量定义 C&#xff1a; #include <iostream> int main() {// 定义整型变量int num 10;// 定义浮点型变量double pi 3.14159;// 定义字符型变量char ch A;std::cout << "num: " << num << ", pi: " << pi << &…

SpringBoot与MongoDB深度整合及应用案例

SpringBoot与MongoDB深度整合及应用案例 在当今快速发展的软件开发领域&#xff0c;NoSQL数据库因其灵活性和可扩展性而变得越来越流行。MongoDB&#xff0c;作为一款领先的NoSQL数据库&#xff0c;以其文档导向的存储模型和强大的查询能力脱颖而出。本文将为您提供一个全方位…

潜水打捞系统的功能概率和使用方法_深圳鼎跃

潜水打捞系统是用于帮助打捞沉物&#xff0c;提供足够的浮力支持&#xff0c;确保沉物从水底浮升到水面。它是一种高强度的袋状结构&#xff0c;能够在水下提供调节浮力的功能&#xff0c;广泛应用于水下打捞、海上救援、沉船打捞等领域。 一、功能概述 潜水打捞系统主要功能为…

网络互助在中国 共筑健康保障新生态

在数字化的浪潮中,网络互助行业以其独特的普惠价值和发展潜力,迅速在中国的健康保障领域崭露头角。网络互助行业以其低门槛、普惠性特点,有效缓解了中低收入人群大病医疗资金的压力,避免了因病致贫的风险。据艾媒咨询数据显示,2019年中国网络互助行业救助总人数超过3万人,救助总…

linux:python2.7.x升级至3.13.0详细记录(含踩坑内容)

部署linux系统默认2.7.x环境&#xff0c;但是有些项目部署需3.x以上&#xff0c;由于低版本也存在高风险漏洞&#xff0c; 查看openSSL版本信息 高于1.1.1 直接安装即可 [rootlocalhost ~]# openssl version OpenSSL 1.1.1f 31 Mar 2020 [rootlocalhost ~]#直接安装python3…

SpringMVC接收请求参数

&#xff08;5&#xff09;请求参数》五种普通参数 1.普通参数 代码块 RequestMapping("/commonParam") ResponseBody public String commonParam(String name,int age){System.out.println("普通参数传递 name > "name);System.out.println("普通…

洛谷P1597

语句解析 - 洛谷 语句解析 题目背景 木有背景…… 题目描述 一串长度不超过255的 PASCAL 语言代码&#xff0c;只有 a,b,c 三个变量&#xff0c;而且只有赋值语句&#xff0c;赋值只能是一个一位的数字或一个变量&#xff0c;每条赋值语句的格式是 [变量]:[变量或一位整数…

CPU 内存加压工具 stress-ng 介绍

01 文章背景介绍 在实车测试时&#xff0c;除了感知算法外&#xff0c;往往还会有别的 APP 在同时运行&#xff0c;从而挤压算法的资源占用&#xff0c;影响模型性能&#xff0c;降低部署效果。因此在项目早期做板端验证的时候&#xff0c;我们就可以使用一些工具对 CPU 和内存…

(C语言)文件操作

目录 文件 程序文件 数据文件 文件名 ​编辑数据文件的分类 文件的打开和关闭 流 标准流 1&#xff09;stdin 2&#xff09;stdout 3&#xff09;stderr 文件指针 文件的打开和关闭 对文件内容操作的函数 1&#xff09;fgetc&#xff0c;fputc 2&#xff09;fp…

低代码开发平台搭建思考与实战

什么是低代码开发平台&#xff1f; 低代码开发平台是一种平台软件&#xff0c;人们能通过它提供的图形化配置功能&#xff0c;快速配置出满足各种特定业务需求的功能软件。 具有以下特点&#xff1a; 提供可视化界面进行程序开发0代码或少量代码快速生成应用 什么是低代码产…

Axure设计之日期时间范围选择器

在产品设计和原型制作过程中&#xff0c;日期时间范围选择器是一个常见的需求。Axure作为一个强大的原型设计工具&#xff0c;能够帮助我们快速实现这一功能。通过利用Axure的动态面板、中继器、文本框、按钮以及时间函数&#xff0c;我们可以轻松制作一个功能完备的日期时间范…

汽车资讯新趋势:Spring Boot技术解读

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 汽车资讯网站的系统管理员可以管理用户&#xff0c;可以对用户信息修改删除审核以及查询操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 汽车品牌管理 系统管理员可以汽车品牌信息进行添加&#xf…

代码随想录第三十七天

52.携带研究材料 题目描述 小明是一位科学家&#xff0c;他需要参加一场重要的国际科学大会&#xff0c;以展示自己的最新研究成果。他需要带一些研究材料&#xff0c;但是他的行李箱空间有限。这些研究材料包括实验设备、文献资料和实验样本等等&#xff0c;它们各自占据不同…

[开源] 告别黑苹果!用docker安装MacOS体验苹果系统

没用过苹果电脑的朋友可能会对苹果系统好奇&#xff0c;有人甚至会为了尝鲜MacOS去折腾黑苹果。如果你只是想体验一下MacOS&#xff0c;这里有个更简单更优雅的解决方案&#xff0c;用docker安装MacOS来体验苹果系统。 一、项目简介 项目描述 Docker 容器内的 OSX&#xff08…

redis延时队列

引入 <redisson.version>3.15.5</redisson.version><dependency><groupId>org.redisson</groupId><artifactId>redisson-spring-boot-starter</artifactId><version>${redisson.version}</version></dependency>…

「四」体验HarmonyOS端云一体化开发模板——工程目录结构与云侧工程一键部署AGC云端

关于作者 白晓明 宁夏图尔科技有限公司董事长兼CEO、坚果派联合创始人 华为HDE、润和软件HiHope社区专家、鸿蒙KOL、仓颉KOL 华为开发者学堂/51CTO学堂/CSDN学堂认证讲师 开放原子开源基金会2023开源贡献之星 「目录」 「一」HarmonyOS端云一体化概要 「二」体验HarmonyOS端云一…

241121学习日志——[CSDIY] [InternStudio] 大模型训练营 [11]

CSDIY&#xff1a;这是一个非科班学生的努力之路&#xff0c;从今天开始这个系列会长期更新&#xff0c;&#xff08;最好做到日更&#xff09;&#xff0c;我会慢慢把自己目前对CS的努力逐一上传&#xff0c;帮助那些和我一样有着梦想的玩家取得胜利&#xff01;&#xff01;&…

STM32完全学习——使用SysTick精确延时(阻塞式)

一、SysTick相关寄存器 首先关于SysTick寄存器的数据在下面这个文件里面可以找到&#xff0c;平时那个数据手册是没有的。其次我这边使用的开发板是F407的开发板&#xff0c;关于这个寄存器的数据都是来自下面这个文件的截图&#xff0c;一般只会用到这3个寄存器。 二、使用标…

理解加密:常见算法及其应用

在信息安全领域&#xff0c;加密技术被广泛用于保护数据的机密性。加密的核心目的是将明文信息转化为密文&#xff0c;以防止未经授权的访问和数据泄露。本文将介绍几种常见的加密算法&#xff0c;包括对称加密、非对称加密和哈希算法&#xff0c;并提供 C# 代码示例&#xff0…

【机器学习】- 模型复杂度vs模型误差

目录 0.引言1.模型复杂度vs模型误差1.1. 模型误差的分类1.2 模型复杂度与误差的关系1.3 偏差-方差权衡&#xff08;Bias-Variance Tradeoff&#xff09;1.4 可视化&#xff1a;误差与复杂度1.5 如何选择模型复杂度&#xff1f;1.6 总结 2.方差描述含义&#xff1a;2.1 方差的定…