无需部署,python 控制台对话ChatGPT

简介

很多时候同事想自己使用 Openai 的接口调用完成一些基础操作

但是,他们又不能很了解项目如何部署启动,所以临时写了一个控制台调用的程序

运行效果

在这里插入图片描述

代码

""" 无需界面,命令行中启动一个 chatGPT 对话项目"""
import os

import openai
from colorama import Fore, Style

# 在这里输入你对于机器人的预设,例如这里设置了一个AI助理
INSTRUCTIONS = """你需要扮演一个 AI 助理帮我解决问题。"""

openai.api_key = "sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 如果你有域名代理可以在这里使用
# openai.api_base = 'https://xxx.xxx/v1'

TEMPERATURE = 0.5
MAX_TOKENS = 500
FREQUENCY_PENALTY = 0
PRESENCE_PENALTY = 0.6
# 限制对话轮数,如果对话数量太多会导致超过上下文限制
MAX_CONTEXT_QUESTIONS = 10


def get_response(instructions, previous_questions_and_answers, new_question):
    """获取 openai 的响应

    :param instructions: 预设指令 -可以指定 Openai 所扮演的角色
    :param previous_questions_and_answers:  聊天历史记录
    :param new_question: 新的问题
    :return: 回答
    """

    # 构建消息体
    messages = [
        {
    
    "role": "system", "content": instructions},
    ]
    # 添加历史记录
    for question, answer in previous_questions_and_answers[-MAX_CONTEXT_QUESTIONS:]:
        messages.append({
    
    "role": "user", "content": question})
        messages.append({
    
    "role": "assistant", "content": answer})
    # 添加新的问题
    messages.append({
    
    "role": "user", "content": new_question})

    completion = openai.ChatCompletion.create(
        model="gpt-3.5-turbo",
        messages=messages,
        temperature=TEMPERATURE,
        max_tokens=MAX_TOKENS,
        top_p=1,
        frequency_penalty=FREQUENCY_PENALTY,
        presence_penalty=PRESENCE_PENALTY,
    )
    return completion.choices[0].message.content


def main():
    os.system("cls" if os.name == "nt" else "clear")
    # 保存历史记录
    previous_questions_and_answers = []
    while True:
        # 提示用户输入问题
        new_question = input(
            Fore.GREEN + Style.BRIGHT + "请输入: " + Style.RESET_ALL
        )
        response = get_response(INSTRUCTIONS, previous_questions_and_answers, new_question)

        # 将新问题添加到历史记录中
        previous_questions_and_answers.append((new_question, response))

        # 打印 AI 回答的问题
        print(Fore.CYAN + Style.BRIGHT + "AI bot : " + Style.NORMAL + response)

if __name__ == "__main__":
    main()

猜你喜欢

转载自blog.csdn.net/assember/article/details/130601690