本文档是ChatGPT模型使用的底层格式的预览。作为一名开发人员,你可以使用我们的高级API,现在不需要直接与这种格式交互——但希望将来有这个选择!

传统上,GPT模型使用非结构化文本。ChatGPT模型期望一种结构化的格式,称为聊天标记语言(简称ChatML)。ChatML文档由一系列消息组成。每条消息都包含一个报头(现在由说这句话的人组成,但将来会包含其他元数据)和内容(现在是文本有效负载,但将来会包含其他数据类型)。我们仍在改进ChatML,但当前版本(ChatML v0)可以用我们即将推出的“字典列表”JSON格式表示如下:

[
 {"token": "<|im_start|>"},
 "system\nYou are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.\nKnowledge cutoff: 2021-09-01\nCurrent date: 2023-03-01",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "user\nHow are you",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "assistant\nI am doing well!",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "user\nHow are you now?",
 {"token": "<|im_end|>"}, "\n"
]

您也可以用经典的“不安全原始字符串”格式表示它。然而,这种格式本质上允许从包含特殊标记语法的用户输入注入,类似于SQL注入:

<|im_start|>system
You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.
Knowledge cutoff: 2021-09-01
Current date: 2023-03-01<|im_end|>
<|im_start|>user
How are you<|im_end|>
<|im_start|>assistant
I am doing well!<|im_end|>
<|im_start|>user
How are you now?<|im_end|>

Non-chat用例

ChatML可以应用于传统上不被认为是聊天的经典GPT用例。例如,指令跟随(用户请求AI完成指令)可以作为ChatML查询实现,如下所示:

[
 {"token": "<|im_start|>"},
 "user\nList off some good ideas:",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "assistant"
]

我们目前不允许自动完成部分邮件。

[
 {"token": "<|im_start|>"},
 "system\nPlease autocomplete the user's message.",
 {"token": "<|im_end|>"}, "\n", {"token": "<|im_start|>"},
 "user\nThis morning I decided to eat a giant"
]

请注意,ChatML向模型明确了每段文本的来源,并特别显示了人类和AI文本之间的边界。这为减少并最终解决注入问题提供了机会,因为模型可以区分哪些指令来自开发人员、用户或自己的输入。

Few-shot提示

通常,我们建议使用名称字段为example_user或example_assistant的单独系统消息添加少量示例。例如,这里有一个1次提示:

<|im_start|>system
Translate from English to French
<|im_end|>
<|im_start|>system name=example_user
How are you?
<|im_end|>
<|im_start|>system name=example_assistant
Comment allez-vous?
<|im_end|>
<|im_start|>user
{{user input here}}<|im_end|>

如果在系统消息中添加指令不起作用,您还可以尝试将它们放入用户消息中。(在不久的将来,我们将通过系统消息训练我们的模型变得更加可操控。但是到目前为止,我们只训练了一些系统消息,所以模型更加关注用户示例。)