在 Azure OpenAI 中使用文本补全
GPT-35-Turbo 和 GPT-4 模型是针对对话接口进行了优化的语言模型。 该模型的行为与旧的 GPT-3 模型不同。 以前的模型是文本输入和文本输出,这意味着它们接受了提示字符串并返回了一个会追加到提示的补全,正如你刚刚所学到的。
不过,GPT-35-Turbo 和 GPT-4 模型都是输入对话和输出消息模式。这两种模型需要以类似聊天的具体脚本形式提供输入,然后通过聊天返回补全信息,以展示模型编写的消息。
GPT-35-Turbo 和 GPT-4 仍然可以接受并生成文本补全,但它们的亮点在于聊天。
在 Azure OpenAI 中,你有两种不同的方案与这两种类型的模型交互:
- 聊天补全 API。
- 使用聊天标记语言 (ChatML) 的补全 API。
聊天补全 API 是一个新的专用 API,用于与 GPT-35-Turbo 和 GPT-4 模型交互,我们将在接下来使用它。
了解聊天补全 API 角色
OpenAI 训练了 GPT-35-Turbo 和 GPT-4 模型,以接受对话形式的输入。 发送到模型的每个输入或提示以及模型返回的每个响应都会添加到聊天补全 API 中的整体对话中。
聊天补全 API 将传入的提示和传出的响应称为消息。
模型接受消息对象数组,以及按角色整理的对话。 有三种类型的角色:系统、用户和助理。
系统角色
数组的开头包含系统角色(也称为系统消息)。 此消息提供模型的初始说明。 可以在系统角色中提供各种信息,包括:
- 助手的简要说明
- 助手的个性特征
- 你希望助手遵循的指令或规则
- 模型所需的数据或信息,例如 FAQ 中的相关问题
你可以为用例自定义系统角色,也可以仅包含基本说明。 系统角色/消息是可选的,但建议至少包含一条基本说明,以获得最佳结果。
用户和助手角色
聊天发生在用户和助手之间。 用户是输入提示并与模型交互的人。 模型的响应由系统角色表示。
用户发送到模型的消息应遵循设计提示的最佳做法,以获得最高质量的响应。
消息提示示例
下面是一些可用于 GPT-35-Turbo 和 GPT-4 模型的不同提示样式的示例。 这些示例只是为了抛砖引玉,你可以尝试使用不同的提示来自定义行为。
基本示例
如果你希望 GPT-35-Turbo 模型的行为类似于 chat.openai.com,可以使用基本系统消息,例如“助手是 OpenAI 训练的大型语言模型”。
在下一单元中,我们将了解如何使用聊天补全 API 的 .NET SDK,现在我们将继续使用变量名称作为示例。
string systemMessage = "Assistant is a large language model trained by OpenAI";
string userMessage = "Who were the founders of Microsoft?";
说明的示例
对于某些场景,你可能希望向模型提供其他说明,以定义模型能够执行的操作边界。
string systemMessage = """
Assistant is an intelligent chatbot designed to help users answer their tax related questions.
Instructions:
- Only answer questions related to taxes.
- If you're unsure of an answer, you can say "I don't know" or "I'm not sure" and recommend users go to the IRS website for more information.
""";
string userMessage = "When are my taxes due?";
管理对话
模型没有内存,因此它需要更新的脚本,其中包含每个新问题以及所有问题和回答,否则它将失去上下文。
这意味着,每次与模型交互时,都需要将整个更新的对话发送到模型,这样的话,很容易达到每个模型的标记上限。
gpt-35-turbo
的标记限制为 4096 个标记,而 gpt-4
和 gpt-4-32k
的标记限制分别为 8192 和 32768。 必须保持在这些上限之下,否则将收到错误。
可以跟踪标记数,并从发送到模型的数组中删除最早的消息。 最好始终保留系统消息,仅删除助手或用户消息。 但是,随着时间的推移,这种管理对话的方法可能会导致对话质量下降,因为对话早期的上下文会丢失。
或者,达到标记上限后,可以提示用户启动新对话。