【大模型应用开发极简入门】使用GPT-4和ChatGPT的编程起点:ChatCompletion详解

文章目录

    • 一. 多轮对话
    • 二. 使用起点: ChatCompletion
    • 三. 调用模型:create方法
      • 1. 主要的输入参数:model、message
      • 2. 对话长度和token数量管理
      • 3. 可选参数
    • 四. ChatCompletion端点的输出格式

本文讨论如何使用GPT-4和ChatGPT背后的模型,以及OpenAI Python库。

目前,GPT-3.5 Turbo是最便宜且功能最多的模型。因此,它也是大多数用例的最佳选择。

一. 多轮对话


import openai
# 对GPT-3.5 Turbo来说,端点是ChatCompletion
openai.ChatCompletion.create(# 对GPT-3.5 Turbo来说,模型是gpt-3.5-turbomodel="gpt-3.5-turbo",# 消息列表形式的对话messages=[{"role": "system", "content": "You are a helpful teacher."},{"role": "user","content": "Are there other measures than time \complexity for an algorithm?",},{"role": "assistant","content": "Yes, there are other measures besides time \complexity for an algorithm, such as space complexity.",},{"role": "user", "content": "What is it?"},],
)

在hello world的例子中,我们使用了最少数量的参数,来用于预测的LLM和输入消息。

现在我们关注,输入消息中的对话格式允许模型进行多轮对话。

请注意,API不会在其上下文中存储先前的消息。问题“What is it?”问的是先前的回答,这只有在模型知道答案的情况下才有意义。每次模拟聊天会话时,都必须发送整段对话。 ing

 

GPT-3.5 Turbo模型和GPT-4模型针对聊天会话进行了优化,但这并非强制要求。

这两个模型可用于多轮对话和单轮任务。如果你在提示词中请求模型补全文本,那么它们也可以很好地完成传统的文本补全任务。

 

二. 使用起点: ChatCompletion

GPT-4和ChatGPT都使用起点是:openai.ChatCompletion
开发人员可以通过更改模型ID来在GPT-3.5Turbo和GPT-4之间切换,而无须修改其他代码。

 

三. 调用模型:create方法

ChatCompletion的create方法让用户能够调用OpenAI的模型。

当然,还有其他方法可用,但它们对与模型的交互没有帮助。你可以在OpenAI Python库的GitHub代码仓库中查看代码。

 

1. 主要的输入参数:model、message

ChatCompletion端点及其create方法有多个输入参数,但只有两个是必需的,如下表

参数名类型描述
modelstring可以使用openai.Model.list()列出目前可以用模型
messagelist表示对话的消息对象数组。消息对象有两个属性:role(user、system、assistant)和content(包含对话消息的字符串)
  • 对话以可选的system content开始,然后是交替出现的user content和assistant content。
  • system content帮助设置assistant的行为。(prompt?)
  • user content相当于是用户在ChatGPT网页界面中键入的问题或句子。它既可以由应用程序的用户生成,也可以作为指令设置。
  • assistant content有两个作用:要么存储先前的回复以继续对话,要么设置为指令,以提供所需行为的示例。由于模型没有任何关于历史请求的“记忆”,因此存储先前的消息对于给出对话上下文和提供所有相关信息是必要的。

 

2. 对话长度和token数量管理

如前所述,对话的总长度与token的总数相关。这将影响以下方面。

  • 成本定价基于标记计算。
  • 时间
  • 标记越多,响应所需的时间就越长——最长可能需要几分钟。
  • 模型是否工作

管理token数量

  • 标记总数必须小于模型的上限。
  • 所以我们需要控制对话的长度。你可以通过管理消息的长度(prompt去引导)来控制输入标记的数量,并通过max_tokens参数来控制输出标记的数量。
  • OpenAI提供了一个名为tiktoken的库,让开发人员能够计算文本字符串中的标记数。我们强烈建议在调用端点之前使用此库来估算成本。

 

3. 可选参数

OpenAI提供了其他几个选项来微调用户与库的交互方式。如下几个常见参数

参数名类型描述
functionslist由可用函数组成的数组
function_callstring/object控制模型的响应方式
- none:模型必须以标准方式响应用户
- {“name”:“my_function”}表示模型必须给出使用指定函数的回答
- auto:表示模型可以在以标准方式响应用户和functions数据定义的函数之间进行选择
temperature数值(默认为1;可接受介于0和2之间的值)- 0:表示对于给定的输入,对模型的调用很可能返回相同的结果,尽管响应结果会高度一致,但OpenAI不做保证。
- 温度越高,结果的随机性就越强,LLM通过预测一系列token来生成回答。根据输入上下文,LLM为每个潜在的标记分配概率。
- 当温度=0时,LLM将始终选择概率最高的标记,较高的温度可以产生更多样化,更具有创造性的输出
nint(默认1)参数可以为给定消息生成多个回答。不过当温度=0时,虽然可以得到多个回答,但都相同或非常相似。
streamBoolean(默认false)回答以流的形式呈现。当回答内容较长时,可以提供更好的用户体验。
max_tokensint- 参数指定在聊天中生成的最大标记数。虽然为可选值,强烈建议设置为合适的值,以控制成本,但是当设置的过大时,那么可能会被OpenAI忽略。
- 输入和生成的标记总数不能超过模型的上限。

 

四. ChatCompletion端点的输出格式

你已经知道如何使用基于聊天模式的模型,让我们看看如何使用模型给出的结果。

以下是Hello World示例程序的完整响应:

{"choices": [{"finish_reason": "stop","index": 0,"message": {"content": "Hello there! How may I assist you today?","role": "assistant",},}],"created": 1681134595,"id": "chatcmpl-73mC3tbOlMNHGci3gyy9nAxIP2vsU","model": "gpt-3.5-turbo","object": "chat.completion","usage": {"completion_tokens": 10, "prompt_tokens": 11,"total_tokens": 21},
}

 

现在说明下各字段的含义

字段名称类型描述
choices对象数组包含模型实际响应的数组,默认情况如下,该数组只有一个元素,可以通过入参n进行修改。该元素包含以下内容:
1. finish_reson:回答结束的原因。在hello world的事例中,finish_reason是stop,也就是我们从模型中得到到完整的响应。如果在输出过程中出现错误,那么将体现在该字段中;
2. index:从choices中选择对象的索引
3. message:包含role、content或function_call,role的值始终是assistant,content包含模型生成的文本。一般这样调用:response[ ‘choices’ ][ 0 ][‘message’][‘content’]。
createdtimestamp生成的时间戳
idstringOpenAI内部使用的技术标识符
objectstring对于GPT-4模型和GPT-3.5模型,为chat.completion
usagestring提供有关在此查询中使用的标记数的信息,从而为你提供费用信息。
- prompt_tokens表示输入中的标记数
- completion_tokens表示输出中的标记数
这里有:total_tokens = prompt_tokens + completion_tokens

 

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

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

相关文章

怎么查看项目中antd的版本

使用antd时,有在线参考资料,但是需要根据项目需要,选择对应版本的参考资料。 antd在线参考资料: 组件总览 - Ant Design 如何查看当前项目中antd的版本呢? 在项目的终端中输入: npm list antd antd官网选择…

庆余年第2季,带你走进怎样的世界?

《庆余年》第二季 演员阵容与幕后团队的新组合为我们带来了别样的观影体验 他的演技真的是在线,其实这剧本很难搞 该搞笑的时候要搞笑,但也不能一直在无厘头胡闹 所以题主说节奏拿捏的好我也很赞同 反观有其他几位演员控制力就差很多 特别是某一集…

Spring:JWT

文章目录 一、介绍 一、介绍 JWT(JSON Web Token)是一种开放标准(RFC 7519)的方法,用于在双方之间安全地传输信息。这些信息可以是验证、授权、信息交换等。JWT 通常被用于在客户端和服务器之间传递用户信息&#xff…

STM32H743的FDCAN使用方法(1):STM32CubeMX初始化代码生成

0 工具准备 1.STM32CubeMX1 前言 本文介绍基于STM32CubeMX,使用stm32h743xi的对FDCAN2进行配置的方法。 2 初始化代码生成 2.1 选择FDCAN引脚 本例选择PB5、PB6作为FDCAN2的RX、TX引脚。 2.2 选择FDCAN时钟源 本例选择PLL2Q作为FDCAN时钟源,频率…

Expected Boolean, got String with value “true“.

在vue el-tree节点添加属性expand-on-click-node"false",浏览器控制台提示上面的错误, 将false的双引号去年依然提示,然后在expand-on-click-node"false"最前面添加冒号,即变成双向绑定,刷新页面…

UDP的报文结构和注意事项

UDP协议是在传输层的协议。 UDP无连接,不可靠传输,面向数据报,全双工。 UDP的报文结构 学习网络协议,最主要的就是报文格式。 对于UDP来说,应用层的数据到达,UDP之后,就会给应用层的数据报前面…

服务器端口开放,服务器端口开放命令与方法的专业阐述

在计算机网络中,服务器端口的开放是确保网络通信畅通无阻的关键步骤。服务器端口是服务器与外部网络通信的入口,通过正确配置和开放相应的端口,可以实现各种网络服务和应用的功能。 一、命令与工具 在Linux系统中,常用的命令和工…

Python中如何将字符串转换成可调用的方法

字符串转化成方法 import importlibdef find_method_by_str(method_path):"""通过字符串,寻找方法"""if not method_path:return Nonemethods method_path.split(".")_module importlib.import_module(".".jo…

4. C++网络编程-TCP客户端的实现

TCP Client网络编程基本步骤 创建socket&#xff0c;指定使用TCP协议使用connect连接服务器使用recv/send接收/发送数据关闭socket TCP-connect连接请求 !man 2 connect #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int connect(int sock…

邦芒简历:简历照片的艺术与真实

在美颜滤镜与P图技术盛行的今天&#xff0c;许多人似乎对“完美”形象有着不懈的追求。从社交平台的自拍&#xff0c;到简历上的证件照&#xff0c;无一不经过精心的修饰与处理。然而&#xff0c;这种对完美的追求在求职过程中&#xff0c;是否总是起到积极的作用呢&#xff1f…

内网渗透(不出网上线CS)

目录 CS的概述 实验&#xff1a;不出网上线CS实验 一&#xff1a;给PC1种马 二&#xff1a;使用Beacon SMB去控制PC2。 三&#xff1a;将CS权限传递给MSF 四&#xff1a;将msf权限传递给CS CS的概述 cs是一款强大的控制windows木马的工具。是目前渗透中常使用的一个工具…

一些Spring Boot直接的解释

RequestParam() 就是从问号之后的键值对获取值绑定值,这个方法用的是get方法 /fjg?namefjg http://example.com/find?productId1234GetMapping("/find") public String getProduct(RequestParam("productId") String productId) {return "Product …

fastapi中实现多个路由请求

大家伙&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂。 前言 最近在写机器人相关的接口&#xff0c;顺手学了学python&#xff0c;发现这是个好东西&#xff0c;写代码效率比java要高很多&#xff0c;比如写个词云呀&#xff0c;写个回调呀&am…

随手笔记4

1、https://www.pgyer.com/app/distribution 蒲公英 移动发布二维码

gRPC和ProtoBuf

gRPC介绍 gRPC是一个高性能、开源且通用的RPC框架&#xff0c;它基于HTTP/2标准协议和Protocol Buffers进行数据序列化&#xff0c;支持多种编程语言。 rpc和http区别 传输协议&#xff1a;RPC可以基于TCP或HTTP协议&#xff0c;而HTTP服务则工作在HTTP协议之上。效率和性能…

android 问题记录:gradle.kts文件引入本地jar包

在build.gradle文件中引入本地的jar文件&#xff0c;可以使用files方法来添加本地的jar文件到项目的依赖中。在build.gradle引入jar包我们都很熟悉了&#xff0c;具体代码如下 implementation files(libs/test.jar)// 或者 compile files(libs/test.jar) 但是这种写法目前在kt…

kafka 消费模式基础架构

kafka 消费模式 &基础架构 目录概述需求&#xff1a; 设计思路实现思路分析1.kafka 消费模式基础架构基础架构2&#xff1a; 参考资料和推荐阅读 Survive by day and develop by night. talk for import biz , show your perfect code,full busy&#xff0c;skip hardness,…

mainwindow.ui和mainwindow.h和ui_mainwindow.h这几个文件之间的联系是什么

在Qt应用程序开发中&#xff0c;mainwindow.ui, mainwindow.h, 和 ui_mainwindow.h 这三个文件之间有着紧密的联系&#xff0c;共同构成了使用Qt Designer设计的图形用户界面&#xff08;GUI&#xff09;应用程序的基础。下面是这三个文件各自的作用及它们之间的关联&#xff1…

HTML5 文件处理及应用

HTML5 文件处理及应用 目录 核心对象文件信息读取文件拖放FileReaderSyncFileWriter APIBlob URL与 revokeObjectURL()跨源资源共享 (CORS)HTML5文件File API为浏览器提供了与用户计算机上的文件进行交互的能力,使得Web应用程序能够在客户端直接处理文件数据,而无需依赖服务…

Golang:使用jszwec/csvutil读取csv文件

jszwec/csvutil 高性能、惯用的CSV记录编码和解码到本机Go结构 文档 https://github.com/jszwec/csvutil 安装 go get github.com/jszwec/csvutil要读取的文件 user.csv name,age,CreatedAt jacek,26,2012-04-01T15:00:00Z john,,2001-01-01T00:00:00Z读取示例 package m…