OpenAI 的 GPT 接口如何确保在同一次会话中?

OpenAI 的 GPT 接口如何确保在同一次会话中?


在用 OpenAI 构建大语言模型的场景中,通过 OpenAI 的 GPT 模型进行对话或生成文本是一项重要的任务。在这项任务中,保持对话的连贯性和一致性对于提供良好的用户体验至关重要。

需求分析

为了确保在同一次会话中保持对话的连贯性,OpenAI 的 GPT 接口可以通过追踪对话历史的方式实现:即在每次对话请求中,将完整的对话历史作为输入提供给 GPT 模型。


对话历史包含了先前对话中用户的输入和模型的回复。通过将完整的对话历史提供给模型,模型会使用前面的对话内容来理解当前的上下文,并据此生成响应。这种追踪上下文的能力有助于确保在同一次会话中保持连贯性,使得模型的回复能够与前面的对话内容相符。


在实际代码中,你可以通过在每个对话中使用一个列表(数组)来保存对话历史。每当你向 GPT 发送请求时,你需要将该列表作为输入的一部分传递给 GPT。这样,GPT 就可以根据对话历史了解整个对话的上下文。话不多说,下面进入实操。

起步

1. 环境准备

  • 本文通过一个 Python 脚本来实际操作,如果你还没有配置环境,你需要先配置相关的 Python 环境,可参考 Python 环境搭建 这篇文章。
  • 除此之外,你还需要准备一个 OpenAI 提供的 API_KEY


如果都准备好了,下面进入实操阶段。

2. 示例代码

以下是一个示例代码,演示如何使用 Python 和 OpenAI 的 GPT 接口来保持对话的一致性。你可以在相关的 IDE 编辑器(比如 Visual Studio Code)中新建一个以 .py 为后缀命名的文件,然后将代码粘贴进去并运行。

import openai
import os

# 读取环境变量中的api_key
openai.api_key = os.environ.get("OPENAI_API_KEY")
# 也可直接写api_key
#openai.api_key  = 'API_KEY'

# 初始化对话历史,也可以直接置为空
dialogue_history =  [  
    {'role':'system', 'content':'你是个友好的聊天机器人。'}
]

def send_message(message,model="gpt-3.5-turbo"):
    
    # 将当前消息添加到对话历史中
    dialogue_history.append(message)
    
    # 发送请求给 OpenAI GPT
    response = openai.ChatCompletion.create(
        model=model,
        messages=dialogue_history,
        temperature=.7, # 控制模型输出的随机程度
        max_tokens=1000,  # 控制生成回复的最大长度
    )

    # 提取 GPT 的回复
    reply = response.choices[0].message['content']

    return reply

# 对话
while True:
    user_input = input("输入: ")
    message = {"role": "user", "content": user_input}
    print("GPT回答: ", send_message(message))
gpt-session.py

如果有相关的报错,大概率与运行环境有关,其中有三个常见问题:

  • 没有安装 openai 第三方库:pip install openai
  • 你的 API_KEY 不能使用
  • 网络请求超时(没有科学上网)

与 GPT 对话


当上面的示例代码运行之后,即可展开对话,示例对话如下:


输入:你是谁?

GPT 回答:我是一个AI聊天机器人,可以回答您的问题、提供帮助和进行闲聊。

已初始化对话历史,可以询问 GPT 是谁


输入:我的名字是什么?

GPT 回答:很抱歉,我无法知道您的名字,因为我是一个智能聊天机器人,无法获取您的个人信息。

因为还没告诉过 GPT 我的名字,所以它不知道


输入: 我的名字叫 Ring,记住了吗?

GPT回答:  我记住了,Ring。很高兴认识你!有什么我可以帮你的吗?

告诉 GPT 我的名字叫什么


输入: 我的名字叫什么?

GPT回答: 您的名字是 Ring。

再次询问,根据上下文知道了我的名字


输入: 我改名了,从现在起,我的名字叫 Liam

GPT回答: 好的,Liam,很高兴认识你!有什么我能帮助你的吗?

改个名字测试一下


输入: 我的名字叫什么?

GPT回答:  您的名字是Liam。

再次询问,GPT 的回答是更改后的名字


输入: 我一共取过多少个名字?

GPT回答:  你曾经告诉我两个名字:Ring和Liam。

上下文只提供过两个名字,所以 GPT 回答也正确

总结

以上就是通过 OpenAI 的 GPT 接口在同一次会话中的演示操作,想要学习更多关于 AI 方面的知识,可以访问如下链接:

知识扩展:犀牛书中文文档技术大全
订阅
qrcode

订阅

随时随地获取 Apifox 最新动态