介绍
自去年发布 Beta 版 Answers 端点以来,我们开发了新方法来为这项任务取得更好的结果。因此,我们将从我们的文档中删除 Answers 端点,并在 2022 年 12 月 3 日为所有组织删除对该端点的访问。6 月 3 日之后创建的新帐户将无法访问此端点。
我们强烈鼓励开发人员改用更新的技术,以产生更好的结果,如下所述。
当前文档
https://beta.openai.com/docs/guides/answers
https://beta.openai.com/docs/api-reference/answers
选项
作为快速回顾,以下是当前 Answers 端点的高级步骤:
此处还概述了所有这些选项
选项 1:过渡到基于嵌入的搜索(推荐)
我们相信,通过将底层搜索系统移动到使用基于向量的嵌入搜索,大多数用例将得到更好的服务。主要原因是我们当前的系统使用二元组过滤器来缩小候选范围,而我们的嵌入系统具有更多的上下文感知。此外,一般来说,从长远来看,使用嵌入的成本会大大降低。如果您对此不熟悉,可以访问我们的嵌入指南了解更多信息。
如果您使用的是小型数据集(<10,000 个文档),请考虑使用该指南中描述的技术来查找最佳文档来构建类似于此的提示。然后,您可以将该提示提交到我们的完成端点。
如果您有更大的数据集,请考虑使用 Pinecone 或 Weaviate 等矢量搜索引擎来支持该搜索。
选项 2:重新实现现有功能
如果您想重新创建 Answers 端点的功能,我们是这样做的。还有一个脚本可以复制大部分功能。
在较高级别,您可以通过两种主要方式使用答案端点:您可以从上传的文件中获取数据或将其与请求一起发送。
如果您使用文档参数
如果您在 Answers API 调用中提供文档,则只有一个步骤。
以下是我们使用的大致步骤:
-
使用此格式构建提示。
-
收集所有提供的文件。如果它们符合提示,只需使用它们。
-
做一个OpenAI 搜索(注意这也被弃用并且有一个转换指南),其中文档是用户提供的文档,查询是来自上面的查询。按分数对文档进行排名。
-
按照得分顺序,尝试添加 Elastic 搜索文档,直到用完上下文中的空间。
-
使用提供的参数(logit_bias、n、stop 等)请求完成
在所有这些过程中,您需要检查提示的长度是否不超过模型的令牌限制。要评估提示中存在的令牌数量,我们建议使用https://huggingface.co/docs/transformers/model_doc/gpt2#transformers.GPT2TokenizerFast。
如果您使用的是文件参数
第一步:上传一个jsonl文件
在幕后,我们将新文件上传到 Elastic 搜索集群中作为答案。然后将 jsonl 的每一行作为文档提交。
如果您上传的文件的目的是“答案”,我们还会在换行符上拆分文档,并将每个块作为单独的文档上传,以确保我们可以搜索并引用文件中最多数量的相关文本部分。
每行都需要一个“文本”字段和一个可选的“元数据”字段。
这些是我们索引的弹性搜索设置和映射:
{
"properties": {
"document": {"type": "text", "analyzer": "standard_bigram_analyzer"}, -> the “text” field
"metadata": {"type": "object", "enabled": False}, -> the “metadata” field
}
}
{
"analysis": {
"analyzer": {
"standard_bigram_analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": ["lowercase", "english_stop", "shingle"],
}
},
"filter": {"english_stop": {"type": "stop", "stopwords": "_english_"}},
}
}
之后,我们执行了标准的 Elastic search 搜索调用,并使用 `max_rerank` 来确定要从 Elastic search 返回的文档数。
第 2 步:搜索
这是我们使用的大致步骤。我们的最终目标是创建一个具有这种格式的完成请求。它看起来与文档非常相似
从那里开始,我们的步骤是:
-
从 `experimental_alternative_question` 开始,或者,如果没有提供,则从 `question` 字段中的内容开始。称之为查询。
-
使用查询作为搜索参数查询弹性搜索“max_rerank”文档。
-
获取这些文档并对它们进行OpenAI 搜索,其中来自 Elastic 搜索的条目是文档,查询是您在上面使用的查询。使用搜索的分数对文档进行排名。
-
按照得分顺序,尝试添加 Elastic 搜索文档,直到提示中的空间用完为止。
-
使用提供的参数(logit_bias、n、stop 等)请求 OpenAI 完成。将该答案返回给用户。
完成提示
===
Context: {{ provided examples_context }}
===
Q: example 1 question
A: example 1 answer
---
Q: example 2 question
A: example 2 answer
(and so on for all examples provided in the request)
===
Context: {{ what we return from Elasticsearch }}
===
Q: {{ user provided question }}
A: