简介
很多时候同事想自己使用 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()