【课件】Python调用OpenAI API实现ChatGPT多轮对话

这篇具有很好参考价值的文章主要介绍了【课件】Python调用OpenAI API实现ChatGPT多轮对话。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Python调用openai API实现多轮对话

如何实现多轮对话?

gpt-3.5-turbo 模型调用方法 openai.ChatCompletion.create 里传入的 message 是一个列表,列表里每个元素是字典,包含了角色和内容,我们只需将每轮对话都存储起来,然后每次提问都带上之前的问题和回答即可。

最终效果

【课件】Python调用OpenAI API实现ChatGPT多轮对话

实现代码

import openai
import json
import os

os.environ["HTTP_PROXY"] = "http://127.0.0.1:20171"
os.environ["HTTPS_PROXY"] = "http://127.0.0.1:20171"

# 获取 api
def get_api_key():
    # 可以自己根据自己实际情况实现
    # 以我为例子,我是存在一个 openai_key 文件里,json 格式
    '''
    {"api": "你的 api keys"}
    '''
    openai_key_file = './envs/openai_key'
    with open(openai_key_file, 'r', encoding='utf-8') as f:
        openai_key = json.loads(f.read())
    return openai_key['api']
openai.api_key = get_api_key() 


class ChatGPT:
    def __init__(self, user):
        self.user = user
        self.messages = [{"role": "system", "content": "一个有10年Python开发经验的资深算法工程师"}]
        self.filename="./user_messages.json"

    def ask_gpt(self):
        # q = "用python实现:提示手动输入3个不同的3位数区间,输入结束后计算这3个区间的交集,并输出结果区间"
        rsp = openai.ChatCompletion.create(
          model="gpt-3.5-turbo",
          messages=self.messages
        )
        return rsp.get("choices")[0]["message"]["content"]

    def writeTojson(self):
        try:
            # 判断文件是否存在
            if not os.path.exists(self.filename):
                with open(self.filename, "w") as f:
                    # 创建文件
                    pass
            # 读取
            with open(self.filename, 'r', encoding='utf-8') as f:
                content = f.read()
                msgs = json.loads(content) if len(content) > 0 else {}
            # 追加
            msgs.update({self.user : self.messages})
            # 写入
            with open(self.filename, 'w', encoding='utf-8') as f:
                json.dump(msgs, f)
        except Exception as e:
            print(f"错误代码:{e}")           

def main():
    user = input("请输入用户名称: ")
    chat = ChatGPT(user)
    
    # 循环
    while 1:
        # 限制对话次数
        if len(chat.messages) >= 11:
            print("******************************")
            print("*********强制重置对话**********")
            print("******************************")
            # 写入之前信息
            chat.writeTojson()
            user = input("请输入用户名称: ")
            chat = ChatGPT(user)
            
        # 提问
        q = input(f"【{chat.user}】")
        
        # 逻辑判断
        if q == "0":
            print("*********退出程序**********")
            # 写入之前信息
            chat.writeTojson()
            break
        elif q == "1":
            print("**************************")
            print("*********重置对话**********")
            print("**************************")
            # 写入之前信息
            chat.writeTojson()
            user = input("请输入用户名称: ")
            chat = ChatGPT(user)
            continue
            
        # 提问-回答-记录
        chat.messages.append({"role": "user", "content": q})
        answer = chat.ask_gpt()
        print(f"【ChatGPT】{answer}")
        chat.messages.append({"role": "assistant", "content": answer})

if __name__ == '__main__':
    main()

代码解析:

ChatGPT 类,包含三个函数:

  • __init__初始化函数,初始化了三个个实例变量,user、messages、filename(当前用户、消息列表、存储记录的文件路径)。

  • ask_gpt函数,将当前用户所有历史消息+最新提问发送给 gpt-3.5-turbo ,并返回响应结果。

  • writeTojson函数,结束/重置用户时记录当前用户之前的访问数据。

  • main函数,程序入口函数,用户输入用户名后进入与 ChatGPT 的循环对话中,输入 0 退出程序,输入 1 重置用户,退出和重置都会将当前用户之前访问数据记录搭配 json 文件中。

  • 由于 gpt-3.5-turbo 单次请求最大 token 数为:4096,所以代码里限制了下对话次数。文章来源地址https://www.toymoban.com/news/detail-437728.html

更多拓展

  • 你可以写个函数,从 json 文件读取历史用户访问记录,然后每次访问可以选用户。
  • 你可以写个 web 服务,使用 session 或者数据库支持多用户同时登录,同时访问。
  • 你可以基于之前分享的钉钉机器人项目,将 gpt-3.5-turbo 接入钉钉机器人。

到了这里,关于【课件】Python调用OpenAI API实现ChatGPT多轮对话的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • OpenAI-ChatGPT最新官方接口《聊天交互多轮对话》全网最详细中英文实用指南和教程,助你零基础快速轻松掌握全新技术(二)(附源码)

    Using the OpenAI Chat API, you can build your own applications with gpt-3.5-turbo and gpt-4 to do things like: 使用OpenAI Chat API,您可以使用 gpt-3.5-turbo 和 gpt-4 构建自己的应用程序,以执行以下操作: Draft an email or other piece of writing 起草一封电子邮件或其他书面材料 Write Python code 编写Python代码 Answer

    2023年04月24日
    浏览(62)
  • Java调用ChatGPT的API接口实现对话与图片生成

    有些魔法是需要做配置的。否则无法正确实现代码测试。这里以我使用的工具为例说明。 在pom.xml文件中添加: Constants类中,声明自己的API Key 其中,查看API Key的位置: https://platform.openai.com/account/api-keys 余额查询: https://platform.openai.com/account/usage pom.xml文件中需要增加依赖:

    2024年02月07日
    浏览(45)
  • Java调用ChatGPT(基于SpringBoot),实现可连续对话和流式输出的ChatGPT API(可自定义实现AI助手)

    源码及更详细的介绍说明参见Git上的 README.md 文档 https://github.com/asleepyfish/chatgpt 本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo 流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatgpt-vue 后续使用方法和api版本更新均在Github的READM

    2023年04月13日
    浏览(42)
  • Java调用ChatGPT(基于SpringBoot和Vue),实现可连续对话和流式输出的ChatGPT API(可自定义实现AI助手)

    源码及更详细的介绍说明参见Git上的 README.md 文档 https://github.com/asleepyfish/chatgpt 本文Demo(SpringBoot和Main方法Demo均包括)的Git地址:https://github.com/asleepyfish/chatgpt-demo 流式输出结合Vue前端的Demo的Git地址:https://github.com/asleepyfish/chatgpt-vue 后续使用方法和api版本更新均在Github的READM

    2023年04月24日
    浏览(42)
  • OpenAI开发系列(六):Completions模型的工作原理及应用实例(开发多轮对话机器人)

    授权声明: 本文基于九天Hector的原创课程资料创作,已获得其正式授权。 原课程出处:九天Hector的B站主页,感谢九天Hector为学习者带来的宝贵知识。 请尊重原创,转载或引用时,请标明来源。 全文共7000余字,预计阅读时间约15~30分钟 | 满满干货(附代码),建议收藏! 本文

    2024年02月13日
    浏览(32)
  • OpenAI 推出用于下一代对话式 AI 开发的 ChatGPT 和 Whisper API

    人工智能已经成为技术行业的推动力,使机器能够学习和执行以前被认为是人类独有的任务。领先的 AI 研究机构 OpenAI 一直走在这场革命的最前沿,开发可以处理自然语言并生成类似人类文本的强大模型。其中一个模型是 ChatGPT API,它可以对文本输入生成连贯且上下文相关的

    2024年02月09日
    浏览(47)
  • OpenAI发布ChatGPT函数调用和API更新

    2023年6月13日,OpenAI针对开发者调用的API做了重大更新,包括更易操控的 API模型、函数调用功能、更长的上下文和更低的价格。 在今年早些时候发布gpt-3.5-turbo,gpt-4在短短几个月内,已经看到开发人员在这些模型之上构建了令人难以置信的应用程序。 今天,我们将跟进一些令

    2024年02月08日
    浏览(35)
  • openai-chatGPT的API调用异常处理

    因为目前openai对地区限制的原因,即使设置了全局代理使用API调用时,还是会出现科学上网代理的错误问题。 openai库 == 0.26.5 【错误提示】: raise error.APIConnectionError( openai.error.APIConnectionError: Error communicating with OpenAI: HTTPSConnectionPool(host=\\\' api.openai.com \\\', port=443): Max retries exceede

    2024年01月20日
    浏览(40)
  • 文心一言 VS ChatGPT测评--多轮对话

    上面的图,蓝色图表是文心一言;下面的图,绿色图标是chatGPT。 chatGPT还会抢答了。。。 chatGPT更有条理,1,2,3,4.。。。 文心一言的时效性更强一点,这回合算文心一言赢 还是chatGPT更有条理,文心的回答上句不接下句的,感觉差点意思。 文心的评价感觉更像是吹捧,专业性

    2024年02月15日
    浏览(33)
  • Chatgpt API调用报错:openai.error.RateLimitError

    Chatgpt API 调用报错: openai.error.RateLimitError: You exceeded your current quota, please check your plan and billing details. 调用OpenAI API接口 代码运行报错: 报错原因:         为了探索和试验API,所有新用户都可以获得价值5美元的免费代币。这些代币将在3个月后到期;或者你使用了所有的

    2024年02月13日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包