如何使用自定义数据训练 ChatGPT

cyz*_*0v1 5 openai-api

我想使用 ChatGPT 在我的网站上创建一个聊天机器人。我有一些预先定义的问题答案,如下所示:

Question: What is the price of ...?
Answer: $100

Question: How this help ..?
Anwer: 1) Improve... 2) Better... 3) More...
Run Code Online (Sandbox Code Playgroud)

当客户提出与预定义问题相关的问题时,它应该从预定义问题中获取答案并使用自然语言来回答客户。

但我不知道实现这个的逻辑。聊天完成分为三种角色(系统、用户、助手)。

我是否在系统角色中插入所有这些预定义的问题和答案,例如:

[
   'role' => 'system',
   'content' => 'I write all the information here'
],
Run Code Online (Sandbox Code Playgroud)

或者我将其全部写在单个用户提示符中,例如:

[
   'role' => 'system',
   'content' => 'You're are a helpful assistant'
],
[
   'role' => 'user',
   'content' => 'I write all the information here'
]
Run Code Online (Sandbox Code Playgroud)

或者我将其分成不同的用户提示,例如:

[
   'role' => 'system',
   'content' => 'You're are a helpful assistant'
],
[
   'role' => 'user',
   'content' => 'First pre-defined question and answer...'
],
[
   'role' => 'user',
   'content' => 'Second pre-defined question and answer...'
],
[
   'role' => 'user',
   'content' => 'Third pre-defined question and answer...'
]
Run Code Online (Sandbox Code Playgroud)

这是训练聊天机器人的正确方法吗?

h2s*_*ein 3

对于较新的 OpenAI GPT 模型来说,这不是一个特别好的用例,因为它们尚不允许微调。如果您在提示中指定信息,您可能很快就会超出 GPT 模型的令牌限制。然后不能保证 GPT 会留意您的提示,但会根据其预先训练的知识回答用户的问题。

如果您仍想使用 OpenAI 的最新 GPT 模型,您有两种选择:

  1. 您在消息中输入所有问题-答案对user,并在消息中告诉 GPTsystem这是您要使用的上下文。这称为“提供参考文本策略”
  2. 您可以在单独的消息中提供每个问题-答案对,问题在消息中user,答案在assistant消息中。这称为“提供示例策略”或通常的“少量学习”。

第一种方法在一定程度上有效,并且比第二种方法更有效。第二种方法是 GPT 的训练方式,因此这可能会给出更好的结果。没有办法知道,必须尝试一下。

对于您的用例,可能有更好的方法。以下是三种选择:

  1. 使用允许微调的模型(来自 OpenAI、其他供应商或开源模型)并将其与您的数据进行匹配。
  2. 使用嵌入模型(同样来自 OpenAI、其他供应商或开源模型)来计算查询的嵌入向量并将结果存储在向量数据库中。这被称为“使用基于嵌入的搜索来实现高效的知识检索策略”
  3. 使用 OpenAI API 的新函数调用功能允许 GPT 询问更多信息,并将其与 (2) 中的嵌入方法结合起来。这可能会给出最好的结果,但成本和复杂性更高(2x 完整 API + 1x 嵌入 API)。这就是“使用代码执行来进行更精确的计算或调用外部API的策略”

OpenAI 有一个很好的教程,您可能想阅读“如何构建可以回答有关您网站的问题的 AI”