2024年 最新python调用ChatGPT实战教程

2024年 最新python调用ChatGPT实战教程

文章目录

  • 2024年 最新python调用ChatGPT实战教程
  • 一、前言
  • 二、具体分析
    • 1、简版程序
    • 2、多轮对话
    • 3、流式输出
    • 4、返回消耗的token

一、前言

这个之前经常用到,简单记录一下,注意目前chatgpt 更新了,这个是最新版的,如果不是最新版的,请自行升级。

二、具体分析

openai 安装

pip install openai 

1、简版程序

该版本只有一轮

from openai import OpenAI
api_key = 'your apikey'
def openai_reply(content):client = OpenAI(api_key=api_key)chat_completion = client.chat.completions.create(messages=[{"role": "user","content": content,}],model="gpt-4-1106-preview",)return chat_completion.choices[0].message.contentif __name__=="__main__":while True:content = input("人类:")text1 = openai_reply(content)print("AI:" + text1)

2、多轮对话

这个版本有多轮,核心是加入记忆

from openai import OpenAI
api_key = 'your apikey'
def openai_replys(memory):client = OpenAI(api_key=api_key)chat_completion = client.chat.completions.create(messages=memory, # 记忆model="gpt-4-1106-preview",)memory.append({'role': 'assistant', 'content': chat_completion.choices[0].message.content})return chat_completion.choices[0].message.contentif __name__=="__main__":memory=[] # 上下轮记忆while True:content = input("人类:")memory.append({'role':'user','content':content})text1 = openai_replys(memory)print("AI:" + text1)

程序输出:
在这里插入图片描述

3、流式输出

这个版本有了流式输出,让你看起来不是卡主了的样子

from openai import OpenAI
api_key = 'your apikey'
def openai_stream(memory):client = OpenAI(api_key=api_key)stream = client.chat.completions.create(messages=memory, # 记忆model="gpt-4-1106-preview",stream=True,)return streamif __name__=="__main__":memory=[]while True:content = input("人类:")memory.append({'role':'user','content':content})stream = openai_stream(memory)print("AI:",end='')aitext=''for chunk in stream:if chunk.choices[0].delta.content is not None:print(chunk.choices[0].delta.content, end="")aitext+=chunk.choices[0].delta.contentelse:print()memory.append({'role':'assistant','content':aitext})

4、返回消耗的token

返回消耗的token

token类型解释
completion_tokens输出token
prompt_tokens输入token
total_tokens全部token
from openai import OpenAI
import tiktokendef calToken(memory,aitext,model="gpt-3.5-turbo"):try:encoding = tiktoken.encoding_for_model(model)except KeyError:print("Warning: model not found. Using cl100k_base encoding.")encoding = tiktoken.get_encoding("cl100k_base")completion_tokens = len(encoding.encode(aitext))prompt_tokens = num_tokens_from_messages(memory, model=model)token_count = completion_tokens + prompt_tokensreturn {"completion_tokens":completion_tokens, "prompt_tokens":prompt_tokens, "total_tokens":token_count}
def num_tokens_from_messages(messages, model="gpt-3.5-turbo"):"""Returns the number of tokens used by a list of messages."""try:encoding = tiktoken.encoding_for_model(model)except KeyError:print("Warning: model not found. Using cl100k_base encoding.")encoding = tiktoken.get_encoding("cl100k_base")tokens_per_message = 8  # every message follows <|start|>{role/name}\n{content}<|end|>\ntokens_per_name = -1  # if there's a name, the role is omittednum_tokens = 0for message in messages:for key, value in message.items():if key=='content':num_tokens += len(encoding.encode(value))if key=='role' and value=='user':num_tokens += tokens_per_messagenum_tokens += tokens_per_name  # every reply is primed with <|start|>assistant<|message|>return num_tokensapi_key = 'your apikey'
def openai_chat(memory):client = OpenAI(api_key=api_key)stream = client.chat.completions.create(messages=memory, # 记忆model="gpt-4-1106-preview",)print('total Token:' + str(stream.usage))return stream.choices[0].message.contentif __name__=="__main__":memory=[] # 对话记忆while True:content = input("人类:")memory.append({'role':'user','content':content}) #记忆里面填充用户输入aitext = openai_chat(memory)print("AI:"+aitext)cocus=calToken(memory,aitext,model="gpt-4-1106-preview")print("消耗token:"+str(cocus))memory.append({'role': 'assistant', 'content': aitext})

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

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

相关文章

MIT-BEVFusion系列九--CUDA-BEVFusion部署4 c++解析pytorch导出的tensor数据

目录 创建流打印 engine 信息打印结果内部流程 启动计时功能加载变换矩阵并更新数据&#xff08;重要&#xff09;内部实现 该系列文章与qwe一同创作&#xff0c;喜欢的话不妨点个赞。 在create_core方法结束后&#xff0c;我们的视角回到了main.cpp中。继续来看接下来的流程。…

挑战杯 基于大数据的时间序列股价预测分析与可视化 - lstm

文章目录 1 前言2 时间序列的由来2.1 四种模型的名称&#xff1a; 3 数据预览4 理论公式4.1 协方差4.2 相关系数4.3 scikit-learn计算相关性 5 金融数据的时序分析5.1 数据概况5.2 序列变化情况计算 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &…

【操作系统】14.I/O设备怎么分配和回收?

5.2 I/O设备怎么分配和回收&#xff1f; 5.2.1 I/O核心子系统 I/O调度 设备保护 假脱机技术&#xff08;SPOOLing技术&#xff09; ​ 输入井和输出井 ​ 输入进程和输出进程 ​ 输入缓冲区和输出缓冲区 设备分配与回收 ​ 设备分配应考虑的因素 ​ 静态分配与动态分配 ​ 设备…

Runaway Queries 管理:提升 TiDB 稳定性的智能引擎

在数字化系统扮演重要角色的今天&#xff0c;数据库稳定性成为企业关注的核心问题。对于重要计算机系统而言&#xff0c;突发的性能下降可能对业务造成不可估量的损失。为了稳定数据库性能&#xff0c;用户可以从管理流程入手规范变更的测试&#xff0c;或者利用产品手段减少预…

3DIoUMatch: Leveraging IoU Prediction for Semi-Supervised 3D Object Detection

3DIoUMatch: Leveraging IoU Prediction for Semi-Supervised 3D Object Detection 论文链接&#xff1a;https://arxiv.org/pdf/2012.04355.pdf 代码链接&#xff1a;https://github.com/yezhen17/3DIoUMatch 作者单位&#xff1a;Stanford University等 发表平台&#xff1a;…

【JavaEE】_Servlet程序的编写方法

目录 1. 创建项目 2. 引入依赖 3. 创建目录结构 3.1 在main目录下创建一个webapp目录 3.2 在webapp目录下创建一个WEB-INF目录 3.3 在WEB-INF目录下创建一个web.xml文件 3.4 在web.xml中进行代码编写 4. 编写代码 4.1 在java目录下创建类 4.2 打印"hello world&…

无人机精准定位技术,GPS差分技术基础,RTK原理技术详解

差分GPS的基本原理 差分GPS&#xff08;Differential GPS&#xff0c;简称DGPS&#xff09;的基本原理是利用一个或多个已知精确坐标的基准站&#xff0c;与用户&#xff08;移动站&#xff09;同时接收相同的GPS卫星信号。由于GPS定位时会受到诸如卫星星历误差、卫星钟差、大…

uniapp离线打包(使用Android studio打包)

一、准备工作 安装HbuilderX&#xff0c;记住版本号下载对应HbuilderX版本的Android离线SDK&#xff0c;如我使用3.6.18版本打包&#xff0c;则对应应下载3.6.18版本的SDK&#xff08;官网不提供旧版本的SDK&#xff0c;有些需要自己找&#xff09;官网下载地址&#xff1a;ht…

2、Web攻防-SQL注入-联合查询注入

用途&#xff1a;个人学习笔记&#xff0c;有所借鉴&#xff0c;欢迎指正&#xff01; 声明&#xff1a;只用于学习交流&#xff0c;点到为止&#xff0c;请勿非法测试。 概念&#xff1a; 联合查询注入&#xff1a;联合注入是回显注入的一种&#xff0c;也就是说联合注入的前…

【Python如何求出水仙花数】

1、求水仙花数Python代码如下&#xff1a; # 求水仙花数&#xff1a;只需要个十百位的3次幂之和与原数相等 for i in range(100, 1000): # 循环100-999整数i1 i % 10 # 取个位 “%”表示除以后取余数i2 i // 10 % 10 # 取十位i3 i // 100 # 取百位 “//”表示除以后取整…

二十六、直方图均衡化

项目功能实现&#xff1a;对灰度图片进行直方图均衡化操作 按照之前的博文结构来&#xff0c;这里就不在赘述了 一、头文件 histogram_equal.h #pragma once#include<opencv2/opencv.hpp>using namespace cv;class HISTOGRAM_EQUAL { public:void histogram_equal(Mat…

Android 解决后台服务麦克风无法录音问题

Android 解决后台无法录音问题 问题分析问题来源解决方案1. 修改清单文件:`AndroidManifest.xml`2. 修改启动服务方式3. 服务启动时创建前台通知并且指定前台服务类型参考文档最后我还有一句话要说我用心为你考虑黄浦江的事情,你心里想的却只有苏州河的勾当 问题分析 安卓9.…

抖音数据挖掘软件|视频内容提取

针对用户获取抖音视频的需求&#xff0c;我们开发了一款功能强大的工具&#xff0c;旨在解决用户在获取抖音视频时需要逐个复制链接、下载的繁琐问题。我们希望用户能够通过简单的关键词搜索&#xff0c;实现自动批量抓取视频&#xff0c;并根据需要进行选择性批量下载。因此&a…

【Flink精讲】Flink任务调度机制

Graph 的概念 Flink 中的执行图可以分成四层&#xff1a; StreamGraph -> JobGraph -> ExecutionGraph -> 物理执 行图。 StreamGraph&#xff1a;是根据用户通过 Stream API 编写的代码生成的最初的图。用来表示程序的拓扑结构。JobGraph&#xff1a; StreamGraph …

[更新]ARCGIS之土地耕地占补平衡、进出平衡系统报备坐标txt格式批量导出工具(定制开发版)

序言 之前开发的耕地占补平衡报备格式&#xff0c;现在之前的基础上集成了耕地进出平衡报备格式导出。 之前版本软件详见&#xff1a;软件介绍 一、软件简介 本软件是基于arcgis二次开发的工具&#xff08;插件&#xff09;&#xff0c;需要授权后才能使用&#xff1b; 本软件…

设计模式——抽象工厂模式

定义: 抽象工厂模式&#xff08;Abstract Factory Pattern&#xff09;提供一个创建一系列或相互依赖对象的接口&#xff0c;而无须指定它们具体的类。 概述:一个工厂可以提供创建多种相关产品的接口&#xff0c;而无需像工厂方法一样&#xff0c;为每一个产品都提供一个具体…

open3d 连接两个点云

连接两个点云 一、连接两个点云二、代码三、结果1.coloud1点云2.cloud2点云3.cloud1 和 colud2 合并4.生成连接字段&#xff08;拼接颜色&#xff09; 四、相关链接五、问题与解决方案1.问题2.解决方案 一、连接两个点云 看代码吧。。。 二、代码 import numpy as np import…

数据结构-二叉树深度详解(附带源码)

目录 一、基本概念&#xff1a; 二、实现二叉树的数据结构&#xff1a; 三、二叉树性质&#xff1a; 四、相关计算 五、搜索二叉树&#xff1a;任何一颗树的左子树都比它小&#xff0c;右子树都比它大 六、二叉树的存储结构 七、二叉树基本操作 八、源码&#xff08;有需…

使用pytest和allure框架实现自动化测试报告优化

pytest&#xff1a; 需要安装pytest和pytest-html(生成html测试报告&#xff09; pip install pytest 和 pip install pytest-html 命名规则 Pytest单元测试中的类名和方法名必须是以test开头,执行中只能找到test开头的类和方法&#xff0c;比unittest更加严谨 unittest&#x…

【centos】【vsftpd】FTP本地用户登录配置

目录 ftp与sftp安装vsftpd和ftp本地用户登录-不限制访问目录本地用户登录-限制访问目录有可能影响连接的问题pam认证selinux策略被动模式防火墙ipv4和ipv6 报错1、 530 Login incorrect2、500 OOPS: vsftpd: refusing to run with writable root inside chroot()3、227 Enterin…