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.hqwc.cn/news/488016.html

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

相关文章

一款好用的多线程碰撞工具

host_scan 介绍 多线程host碰撞&#xff0c;发现更多资产。 把域名放在host.txt 把ip放在ip.txt&#xff0c;跑出的结果存放在ok.txt里面。 一开始输出&#xff08;ok.txt&#xff09;的内容可能都是脏数据&#xff0c;需要更关注后面输出(ok.txt)的那些数据&#xff01;&a…

openssl 生成nginx自签名的证书

1、命令介绍 openssl req命令主要的功能有&#xff0c;生成证书请求文件&#xff0c; 查看验证证书请求文件&#xff0c;还有就是生成自签名证书。 主要参数 主要命令选项&#xff1a; -new :说明生成证书请求文件 -x509 :说明生成自签名证书 -key :指定已…

18个惊艳的可视化大屏(第七辑):场馆与园区方向

本期分享智慧场馆和智慧园区方向的可视化大屏&#xff0c;各位老铁上车&#xff0c;坐稳了&#xff0c;上图啦。

172基于matlab的MPPT智能算法

基于matlab的MPPT智能算法&#xff0c;通过细菌觅食进行优化。算法引入了趋向性操作&#xff0c;用以进行局部范围内的最优寻找&#xff1b;引入了复制操作&#xff0c;用以避免种群更新盲目随机性&#xff0c;加快了算法的收敛速度&#xff1b;引入了迁徙操作用以避免算法陷入…

IO进程线程复习

标准IO&#xff1a; 1.打开文件 #include<myhead.h>int main(int argc, const char *argv[]) {//定义文件指针FILE *fpNULL;//以只读的形式打开文件//fpfopen("./text.txt","r");//以只写的形式打开文件fpfopen("./time.c","w"…

PyTorch:transforms.Normalize()函数详解

PyTorch&#xff1a;transforms.Normalize()函数详解 &#x1f308; 个人主页&#xff1a;高斯小哥 &#x1f525; 高质量专栏&#xff1a;Matplotlib之旅&#xff1a;零基础精通数据可视化、Python基础【高质量合集】、PyTorch零基础入门教程 &#x1f448; 希望得到您的订阅和…

华清远见作业第四十二天——Qt(第四天)

思维导图&#xff1a; 编程&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QTextToSpeech> //语音播报类 QT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public Q…

How to implement multiple file uploads based on Swagger 3.x in Spring boot 3.x

How to implement multiple file uploads based on Swagger 3.x in Spring boot 3.x Projectpom.xmlOpenAPIConfigFileUploadControllerapplication.yaml Project pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://…

STM32物联网(封装AT指令进行TCP连接及数据的接收和发送)

文章目录 前言一、AT指令函数封装1.向ESP8266发送数据函数2.设置ESP8266工作模式3.连接WIFI函数4.查询IP地址5.连接TCP服务器6.发送数据到TCP服务器7.接收并解析来自TCP服务器的数据8.关闭TCP服务器 二、代码测试总结 前言 本篇文章将继续带大家学习STM32物联网&#xff0c;那…

音视频剪辑|Windows|抽帧和合帧

什么是抽帧&#xff1f; FFmpeg 抽帧&#xff08;Extracting frames&#xff09;的作用是从视频文件中按需提取单张或多张静止图像&#xff08;帧&#xff09;&#xff0c;并将它们保存为图片文件&#xff08;如 JPEG、PNG 等格式&#xff09;。这一功能在以下场合十分有用&am…

Qt中的网络编程(Tcp和Udp)运用详解以及简单示范案例

概述 Tcp和Udp是我们学习网络编程中经常接触到的两个通讯协议&#xff0c;在Qt也被Qt封装成了自己的库供我们调用&#xff0c;对于需要进行网络交互的项目中无疑是很重要的&#xff0c;希望这篇文章可以帮助到大家。 考虑到可能有点小伙伴可能不知道Tcp和Udp的一些概念&#x…

Django学习笔记-HTML实现服务器图片的下载

1.index编写代码,跳转下载页面 2.创建download界面 3.编写download路由 4.创建download函数 1).如果请求的方法是GET&#xff0c;imglist变量存储从models.imgModel模型中获取的所有对象,创建字典ctx,使用render函数来渲染download.htm 2).如果请求的方法是POST,获取要下载的文…