本文使用 OpenAI GPT(Generative Pre-Training)聊天机器人模型,实现可自动回复提问的聊天功能。

代码解释

首先,我们导入相关的库,例如 openaiPathtime 等。

接下来,为了使模型可以正常工作,我们需要设置 openaiapi_key ,以及一些初始变量,如 text, turns, last_result,用来记录聊天记录。

之后,我们定义了一个函数 chatgpt,目的是为了接收用户输入的问题,并返回 GPT 模型生成的回答。函数中,除了指定使用 davinci-003 模型外,我们还设置了 temperaturemax_tokensfrequency_penaltypresence_penalty 等参数,用来控制结果的随机性和字数,以达到最佳的回答效果。

最后,在 if __name__ == '__main__': 下,我们初始化两个列表,用来存放用户输入的问题和 GPT 模型自动生成的回答,然后在 while 循环中,接收用户输入的问题,并调用 chatgpt 函数,最后将问题和回答分别存储到对应的列表中,最终将内容保存到文件中。

代码使用说明

  • 使用该代码,你需要先申请 OpenAI 的api_key,并将其输入到代码中,然后运行该程序,
  • 输入你的问题,即可获得 GPT 模型的回答;
  • 若输入exit则直接退出当前对话;
  • 程序结束时,会将问答的内容记录到文件中,以便下次查看。

ini配置文件

在目录下创建config.ini文件,内容如下

[openai]ai_account_key = sk-AsqirFnBSHKvalmEe1AnT3BlbkFJe2rX0xxxxxxxxxxx

对话模式代码

点击查看代码

import openai
from pathlib import Path
import time
import configparserANSI_COLOR_GREEN = "\x1b[32m"
ANSI_COLOR_RESET = "\x1b[0m"# 从ini文件中读取api_key
config = configparser.ConfigParser()
config.read('config.ini')
openai.api_key = config['openai']['ai_account_key']text = ""  # 设置一个字符串变量
turns = []  # 设置一个列表变量,turn指对话时的话轮
last_result = ""def chatgpt(question):global textglobal turnsglobal last_resultprompt = text + "\nHuman: " + questiontry:response = openai.Completion.create(model="text-davinci-003",  # 这里我们使用的是davinci-003的模型,准确度更高。prompt=prompt,  # 你输入的问题temperature=0.9,  # 控制结果的随机性,如果希望结果更有创意可以尝试 0.9,或者希望有固定结果可以尝试 0.0max_tokens=2048,  # 这里限制的是回答的长度,你可以可以限制字数,如:写一个300字作文等。top_p=1,# [控制字符的重复度] -2.0 ~ 2.0 之间的数字,正值会根据新 tokens 在文本中的现有频率对其进行惩罚,从而降低模型逐字重复同一行的可能性frequency_penalty=0,# [控制主题的重复度] -2.0 ~ 2.0 之间的数字,正值会根据到目前为止是否出现在文本中来惩罚新 tokens,从而增加模型谈论新主题的可能性presence_penalty=0)result = response["choices"][0]["text"].strip()last_result = resultturns += [question] + [result]  # 只有这样迭代才能连续提问理解上下文if len(turns) <= 10:  # 为了防止超过字数限制程序会爆掉,所以提交的话轮语境为10次。text = " ".join(turns)else:text = " ".join(turns[-10:])return resultexcept Exception as exc:  # 捕获异常后打印出来print(exc)if __name__ == '__main__':# 将问题和回复记录下来,待结束后保存到文件中question_list = []answer_list = []while True:question = input(ANSI_COLOR_GREEN +"\n请输入问题,若输入exit退出\n" + ANSI_COLOR_RESET)question_list.append(question)if question == "exit":breakanswer = chatgpt(question)answer_list.append(answer)print("AI: " + answer)# 保存到文件中timestamp = time.strftime("%Y%m%d-%H%M-%S", time.localtime())file_name = 'output/chat ' + timestamp + '.md'f = Path(file_name)f.parent.mkdir(parents=True, exist_ok=True)with open(file_name, "w", encoding="utf-8") as f:for q, a in zip(question_list, answer_list):f.write(f"question: {q}\nanswer: {a}\n\n")print(ANSI_COLOR_GREEN + "对话内容已保存到文件中: " + file_name + ANSI_COLOR_RESET)

单问答模式代码

点击查看代码

import openai
from pathlib import Path
import time
import configparserANSI_COLOR_GREEN    = "\x1b[32m"
ANSI_COLOR_RESET    = "\x1b[0m"def get_ai_answer(prompt, save=True):# 去除字符串前后的空白符prompt = prompt.strip()# 发起请求if len(prompt) != 0:print(f'已发起请求,问题描述{len(prompt)}个长度,请稍等...')# 从ini文件中读取api_keyconfig = configparser.ConfigParser()config.read('config.ini')openai.api_key = config['openai']['ai_account_key']# Get my answerresponse = openai.Completion.create(prompt=prompt,model="text-davinci-003",temperature=0.9,max_tokens=2048,  #返回结果的长度top_p=1,frequency_penalty=0.0,presence_penalty=0.0)# Print my answer# print(response)answer = response["choices"][0]["text"].strip()print(answer)# 将内容写到以时间戳为名的md文件if save:timestamp = time.strftime("%Y%m%d-%H%M-%S", time.localtime())file_name = 'output/' + timestamp + '.md'f = Path(file_name)f.parent.mkdir(parents=True, exist_ok=True)text = f'# Q\n{prompt}\n# A\n{answer}\n'f.write_text(text, encoding='utf-8')print(ANSI_COLOR_GREEN  +"对话内容已保存到文件中: " + file_name + ANSI_COLOR_RESET)return answerif __name__ == '__main__':prompt = '''
你今年几岁了'''get_ai_answer(prompt)

gitee在线版

此外,我用html写了一个可直接对话的openai gpt3在线版,用该页面需要提前自备openai的apikey。

项目源码https://gitee.com/x223222981/chat-gpt.js

基于python实现openai可结合上下文的问答,含html在线版相关推荐

  1. python爬虫网络安全的_基于Python网络爬虫实战 - 安全牛课堂 - 领先的信息安全在线教育平台...

    { "i18nChapterName": "章", "i18nUnitName": "节", "i18nLes ...

  2. 基于python的界面自动化测试-基于Python语言的自动化测试系统的设计与实现

    黄建军+李宥谋+刘婧+周欢 摘 要: 通过分析现代工业生产对自动化测试系统的要求,提出一种基于面向对象的编程语言Python构建的自动化测试系统.利用Python语言的高效.灵活和简洁等特点,结合Py ...

  3. 基于Python的超市管理系统毕业设计源码111042

    目  录 摘要 1 绪论 1.1研究背景 1.2研究现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2基于Python的 超市管理系统 系统分析 2.1 可行性分析 2.2 系统流程分析 2 ...

  4. 基于python的家政管理系统毕业设计源码071111

    目  录 摘要 1 绪论 1.1开发意义 1.2研究现状 1.3系统开发技术的特色 1.4论文结构与章节安排 2基于Python的 家政管理系统 系统分析 2.1 可行性分析 2.2 系统流程分析 2 ...

  5. 从头搭建一个基于 Python 的在线聊天室

    本场 Chat,是基于 Python + Redis + Flask 来搭建一个简单易用的在线聊天室.完全从零开始,一步一步完成整个项目. 主要分享内容: Flask 项目结构 Python Redi ...

  6. python图片识别验证码软件_基于python图片识别工具(图片识别,车牌,PDF,验证码)...

    先上图  不多说. 对于一般的用户来说识别率还是能达到百分之90以上. 已经打包成exe文件.windows用户可以直接使用.要软件的加我QQ python代码: # -*- coding: UTF- ...

  7. NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现)、案例应用之详细攻略

    NLP之Chatgpt:基于openai框架通过调用API接口实现Chatgpt的吊炸天功能的图文教程(基于python代码实现).案例应用之详细攻略 导读:2023年1月30日版本更新,以下是最新消 ...

  8. Unity接入ChatGPT基于Python.Runtime的实现

    目录 前言 编译Python.Runtime.dll Unity接入ChatGPT 1.第一步 准备环境 2.第二步 python代码的书写 3.第三步 C#调用python代码 前言: 相信各位游戏 ...

  9. 基于python实现微信接入ChatGpt进行自动回复

    基于python实现微信接入ChatGpt进行自动回复 教程说明 下载和使用python库 如何下载python库 如何使用python库 导入python库 chatgpt部分 申请openai的k ...

最新文章

  1. 让你的 wowza server提供 RESTful web 服务
  2. QQ采用什么传输协议?
  3. 【算法数据结构Java实现】欧几里得算法
  4. window下不用安装虚拟机,也可以玩转linux,玩转最新redis
  5. Oracle-存储过程实现更改用户密码
  6. python之按位运算
  7. TIOBE 4月编程语言排行榜:C++重回前三,PHP下降明显
  8. unity安装2020或2019出现空白错误
  9. 2022年全球市场GPS追踪装置总体规模、主要生产商、主要地区、产品和应用细分研究报告
  10. Codeforces 1013 A. Piles With Stones
  11. java.util.MissingResourceException: Can‘t find resource for bundle java.util.PropertyResourceBundle
  12. O - Buns(混合背包)
  13. 西南大学计算机2019专业英语秋季答案,西南大学2019年秋《大学英语B》作业资料参考答案...
  14. 华为在HDC2021发布全新HMS Core 6 宣布跨OS能力开放
  15. 3.3KW车载充电机开关电源方案数字控制单相PFC与全桥LLC
  16. 图文解读——为何采购申请PR总是频繁出错
  17. Ubuntu下adb无法识别android设备的解决方法
  18. 《这么慢,那么美》------ 听见
  19. mysql怎么打开slow_MySQL开启Slow慢查询的方法示例
  20. 俄语IT词汇积累之二

热门文章

  1. Android系统替换默认输入法
  2. MySQL超市会员管理系统_springboot+mysql超市会员管理系统
  3. js 格式化prettier配置_prettier 格式化插件
  4. 计算机组成原理(详细)
  5. 字符串类型list转换为list
  6. linux下jdk的安装与配置
  7. rpc服务器不可用自动重启,rpc服务器不可用_详细解决方法,彻底修复
  8. R语言主成分分析总结
  9. R语言 因子分析 代码 可视化
  10. PyQt(Python+Qt)学习随笔:Qt Designer中怎么给toolBar添加按钮