OpenAI 昨天发布了一个新的 ChatGPT API。 很多人都兴奋地想尝试一下。但是它实际上与现有的 API 相比如何呢? 在得出明确的答案之前还需要一段时间,但这里有一些初步的想法。 因为我很懒,所以我也请 ChatGPT API 本身来帮助进行评估。 困惑了吗? 别担心。 让我们深入了解一下。
相关链接
我们正在评估什么任务?
在本文中,我们将评估链在特定数据集上进行 问答 的性能。 此链接受查询,执行“检索”步骤以查找向量存储中的相关文档,然后执行“生成”步骤以将它们与原始查询一起传递给模型以获得答案。 我们将保持“检索”步骤不变,因此我们仅评估链的“生成”步骤。
我们正在比较哪些模型/提示?
首先,我们有标准的 text-davinci-003
模型,以及标准的 VectorDBQAChain
提示。
我们想将此与 ChatGPT 进行比较。 有两种潜在的方法可以做到这一点。 一种是使用包装器并将 ChatGPT 视为另一个 LLM。 另一种是尝试更原生化地使用 ChatGPT API。
我所说的“原生化”是什么意思? ChatGPT API 与 GPT-3 API 的不同之处在于,它接受消息列表(而不是单个字符串)并返回消息。 这些消息本质上是字典,其中包含两个字段:content
和 role
。 两者都用于提示中。 content
字段可以是任何内容,而 role
字段应为 user
、system
或 assistant
之一。 据推测,该模型经过训练,将 user
消息视为人类消息,将 system
消息视为某些系统级配置,并将 assistant
消息视为来自助手的先前聊天回复。
那么我们如何使用它来进行问答呢? 让我们回顾一下我们需要传入的信息。 有三个组成部分
- 说明(关于它应该如何回答、格式等)
- 用户问题
- 检索到的内容片段
说明似乎应该是第一条消息,并且角色为 system
。 用户问题似乎应该具有 user
角色,但在列表中的位置不太清楚。 检索到的内容片段应该放在哪个 role
或消息列表中的哪个位置非常不清楚。 请注意,我说的是“应该”,但我们的理解可能会在不久的将来发生变化。
关于如何组合用户问题和检索到的内容片段的一些想法
- 将内容片段放在系统消息中,并告诉模型仅使用该信息。
- 将每个内容片段作为其自己的消息(角色为
assistant
或user
)放在对话的中间 - 首先提出用户问题,然后为每个内容片段添加一条消息(角色为
assistant
),然后再添加另一条user
消息,要求它根据这些内容片段进行回答。
很多选择! 为了本次实验的目的,我选择了选项 2,将角色设置为 user
,并指示模型在回答时仅使用用户之前告诉它的信息片段。
我们如何评估的?
我们使用了我们常用的“国情咨文”作为玩具示例。 然后,我们从此数据集中生成了一堆问题和相应的答案。 这是使用 GPT-3 完成的,使用了我们 现有的问答生成管道。 然后,我们通过两个链(GPT3 和 ChatGPT)运行了每个问题。 然后,我们评估了答案 - 使用 GPT3 和 ChatGPT。 具体来说,我们还有另一个名为 QAEvalChain
的链,它使用 GPT3 来评估问答响应。 我们创建了一个相应的 QAEvalChatChain
,它使用 ChatGPT API 来做类似的事情。 为了锦上添花,我们还创建了一个 QACompChatChain
,它接受问题、正确答案和两个预测答案,并将它们进行比较。
在这篇文章中,我们将主要关注评估器的结果。 因此,在一种元方式中,我们正在使用语言模型来评估语言模型,但(目前)我们仍然是评估评估器模型的人。
那么结果如何呢?
请参阅我们的完整结果 此处。 为了速度/简单性,我们仅评估了 7 个问题,因此这存在样本量非常小的问题。
请注意,导入的代码仍在分支上,因为我们正在努力弄清楚这种新的聊天范式的最佳抽象。
首先,GPT3 如何评价这两个模型?
- GPT3 评价 GPT3:4/7
- GPT3 评价 ChatGPT:4/7
那么 ChatGPT 如何评价这两个模型呢?
- ChatGPT 评价 GPT3:5/7
- ChatGPT 评价 ChatGPT:4/7
看看差异在哪里很有趣。 有一个例子,GPT3 认为 GPT3 和 ChatGPT 都不正确,但 ChatGPT 认为两者都正确。 还有一个单独的例子,GPT3 认为两者都正确,但 ChatGPT 认为 ChatGPT 不正确。 让我们来看看。
首先,GPT3 评为不正确但 ChatGPT 评为正确的例子

在这里,GPT3 似乎可能是因为答案的冗长而将其评为不正确,但 ChatGPT 并不介意这一点。 另一种解释可能是 ChatGPT 更能够真正理解“赞扬了她的法律能力”与给出的答案是一致的。
接下来,GPT3 评为两者都正确,但 ChatGPT 评为 ChatGPT 不正确的例子。

我们可以看到,在这个例子中,GPT3 的答案几乎与真实答案完全相同。 这几乎可以肯定是因为我们使用了 GPT3 来生成问题/答案对。 ChatGPT 的答案更冗长,虽然技术上没有错误,但不如 GPT3 的答案具体和直接。 同样,这很可能是由于使用 GPT3 生成问题/答案对造成的。 给自己注意:可能需要手动策划一个测试集以备将来使用。
直接比较怎么样?
我们做的最终评估是向 ChatGPT 提供问题、答案和两个预测答案,并要求它比较答案。 总结一下这里的结果
- GPT3 比 ChatGPT 更简洁
- ChatGPT 比 GPT3 更详细
- ChatGPT 比 GPT3 更礼貌
请记住,这不仅仅是基础模型,还有使用的提示。 因此,这并不是两个模型之间的真正比较,而是现有链的比较。
下一步
在探索 ChatGPT API 方面还有很多工作要做! 如何才能最好地使用 role
参数? system
角色实际上是做什么的? 这种新型 API 的正确抽象是什么?
只有时间会证明一切。 激动人心的时刻!