美文网首页
Python简单封装的一个chatgpt对话框,可上下文

Python简单封装的一个chatgpt对话框,可上下文

作者: Chting | 来源:发表于2023-02-26 10:11 被阅读0次
import openai
import os
from dotenv import find_dotenv, load_dotenv
load_dotenv(find_dotenv('.env'))

openai.api_key = os.getenv("api_key")

print("if you want to stop the conversation, please input 'quit'") #提示想终止聊天时输入"quit"


def chat(prompt):  #定义一个函数,以便后面反复调用

    try:
        response = openai.Completion.create(
                  model="text-davinci-003",
                  prompt= prompt,
                  temperature=0.9,
                  max_tokens=2500,
                  top_p=1,
                  frequency_penalty=0.0,
                  presence_penalty=0.6,
                  stop=[" Human:", " AI:"]
                )

        answer = response["choices"][0]["text"].strip()
        return answer
    except Exception as exc:
        #print(exc)  #如果需要打印出故障原因可以使用本行代码,如果想增强美感,就屏蔽它。
        return "broken"



text = "" #设置一个字符串变量
turns = [] #设置一个列表变量,turn指对话时的话轮
while True: #能够连续提问
    question = input("You:")
    if len(question.strip()) == 0: #如果输入为空,提醒输入问题
        print("please input your question")
    elif question == "quit":  #如果输入为"quit",程序终止
        print("\nAI: See You Next Time!")
        break
    else:
        prompt = text + "\nHuman: " + question
        result = chat(prompt)
        while result == "broken": #问不出结果会自动反复提交上一个问题,直到有结果为止。
            print("please wait...")
            result = chat(prompt) #重复提交问题
        else:
            turns += [question] + [result]#只有这样迭代才能连续提问理解上下文
            # print("Ai:"+result)
            print(result)
        if len(turns)<=100:   #为了防止超过字数限制程序会爆掉,所以提交的话轮语境为10次。
            text = " ".join(turns)
        else:
            text = " ".join(turns[-10:])

相关文章

网友评论

      本文标题:Python简单封装的一个chatgpt对话框,可上下文

      本文链接:https://www.haomeiwen.com/subject/kfoqldtx.html