赞
踩
作者:Jeff Vestal
结合 Elasticsearch 的搜索相关性和 OpenAI 的 ChatGPT 的问答功能来查询你的数据。 在此博客中,你将了解如何使用 Elasticsearch 将 ChatGPT 连接到专有数据存储,并为你的数据构建问答功能。
ChatGPT 和 Elasticsearch:OpenAI 遇见私有数据
详细的操作步骤,请阅读文章 “ChatGPT 和 Elasticsearch:OpenAI 遇见私有数据(二)”。
ChatGPT 和 Elasticsearch:OpenAI 满足私有数据设置演练
近几个月来,人们对 ChatGPT 充满了热情,这是一种由 OpenAI 创建的开创性人工智能模型。 但 ChatGPT 到底是什么?
基于强大的 GPT 架构,ChatGPT 旨在理解文本输入并生成类似人类的响应。 GPT 代表 “Generative Pre-trained Transformer”。 Transformer 是一种顶尖模型架构,彻底改变了自然语言处理 (NLP) 领域。这些模型在海量数据上进行了预训练,能够理解上下文、生成相关响应,甚至进行对话 . 要详细了解 Transformer 模型的历史和 Elastic Stack 中的一些 NLP 基础知识,请务必查看 Elastic ML 工程师 Josh Devins 的精彩演讲。
ChatGPT 的主要目标是促进人机之间有意义且引人入胜的交互。 通过利用 NLP 的最新进展,ChatGPT 模型可以提供广泛的应用程序,从聊天机器人和虚拟助手到内容生成、代码完成等等。 这些人工智能驱动的工具已迅速成为无数行业的宝贵资源,帮助企业简化流程并增强服务。
然而,尽管 ChatGPT 具有不可思议的潜力,但用户仍应注意某些限制。 一个值得注意的限制是知识截止日期。 目前,ChatGPT 接受的数据训练截至 2021 年 9 月,这意味着它不知道此后发生的事件、发展或变化。 因此,用户在依赖 ChatGPT 获取最新信息时应牢记这一限制。 在讨论快速变化的知识领域(例如软件增强和功能甚至世界大事)时,这可能会导致反应过时或不正确。
ChatGPT 虽然是一种令人印象深刻的 AI 语言模型,但偶尔会在其响应中产生幻觉,当它无法访问相关信息时通常会加剧。 这种过度自信会导致向用户提供不正确的答案或误导性信息。 重要的是要意识到这一限制,并在必要时以一定程度的怀疑态度、交叉检查和验证信息来处理 ChatGPT 生成的响应,以确保准确性和可靠性。
ChatGPT 的另一个限制是它缺乏关于特定领域内容的知识。 虽然它可以根据接受过培训的信息生成连贯且与上下文相关的响应,但它无法访问特定领域的数据或提供依赖于用户独特知识库的个性化答案。 例如,它可能无法深入了解组织的专有软件或内部文档。 因此,用户在直接从 ChatGPT 寻求有关此类主题的建议或答案时应谨慎行事。
最小化这些限制的一种方法是为 ChatGPT 提供对与你的领域和问题相关的特定文档的访问权限,并启用 ChatGPT 的语言理解功能以生成量身定制的响应。
这可以通过将 ChatGPT 连接到 Elasticsearch 等搜索引擎来实现。
Elasticsearch 是一个高效的搜索引擎,旨在提供相关文档检索,确保用户可以快速准确地访问他们需要的信息。 Elasticsearch 的主要重点是向用户提供最相关的结果、简化搜索过程并增强用户体验。
Elasticsearch 拥有众多可确保一流搜索性能的功能,包括支持传统关键字和基于文本的搜索 (BM25) 以及具有精确匹配和近似 kNN(k 最近邻)搜索功能的 AI 就绪向量搜索。 这些高级功能使 Elasticsearch 不仅可以检索相关的结果,还可以检索使用自然语言表达的查询的结果。 通过利用传统、向量或混合搜索 (BM25 + kNN),Elasticsearch 可以提供无与伦比的精确结果,帮助用户轻松找到他们需要的信息。
Elasticsearch 的主要优势之一是其强大的 API,它可以与其他服务无缝集成以扩展和增强其功能。 通过将 Elasticsearch 与各种第三方工具和平台集成,用户可以根据自己的特定需求创建功能强大的自定义搜索解决方案。 这种灵活性和可扩展性使 Elasticsearch 成为希望提高搜索能力并在竞争激烈的数字环境中保持领先地位的企业的理想选择。
通过与 ChatGPT 等高级人工智能模型协同工作,Elasticsearch 可以为 ChatGPT 提供最相关的文档以用于其响应。 Elasticsearch 和 ChatGPT 之间的这种协同作用可确保用户收到与其查询相关的事实、上下文相关和最新的答案。 从本质上讲,Elasticsearch 的检索能力与 ChatGPT 的自然语言理解能力相结合,提供了无与伦比的用户体验,为信息检索和 AI 支持的协助树立了新标准。
1)Python 界面接受用户提问。
为 Elasticsearch 生成混合搜索请求
2)搜索请求被发送到 Elasticsearch。
3)文档正文和原始 url 返回给 python。
4.)对 OpenAI ChatCompletion 进行 API 调用。
5)生成的响应返回给 python。
6)Python 将原始文档源 url 添加到生成的响应中,并将其打印到屏幕上供用户使用。
ElasticDoc ChatGPT 流程利用 Python 界面接受用户问题并为 Elasticsearch 生成混合搜索请求,结合 BM25 和 kNN 搜索方法从 Elasticsearch Docs 站点查找最相关的文档,这些文档现已在 Elasticsearch 中编制索引。 但是,你不必使用混合搜索甚至向量搜索。 Elasticsearch 可以灵活地使用最适合你需求的搜索模式,并为你的特定数据集提供最相关的结果。
在检索到最佳结果后,该程序会为 OpenAI 的 ChatCompletion API 制作提示,指示它仅使用所选文档中的信息来回答用户的问题。 此提示是确保 ChatGPT 模型仅使用官方文档中的信息、减少产生幻觉的机会的关键。
最后,该程序向用户展示 API 生成的响应和源文档的链接,提供无缝且用户友好的体验,集成了前端交互、Elasticsearch 查询和 OpenAI API 使用以实现高效的问答。
请注意,虽然为简单起见我们只返回得分最高的文档,但最佳做法是返回多个文档以为 ChatGPT 提供更多上下文。 可以在不止一个文档页面中找到正确的答案,或者如果我们要为完整的正文文本生成向量,那么这些较大的文本正文可能需要分块并存储在多个 Elasticsearch 文档中。 通过利用 Elasticsearch 与传统搜索方法协同搜索大量向量字段的能力,你可以显着提高你的顶级文档召回率。
技术要求相当低,但需要一些步骤才能将所有部分组合在一起。 对于此示例,我们将配置 Elasticsearch 网络爬虫以摄取 Elastic 文档并在摄取时为标题生成向量。 你可以按照以下步骤复制此设置或使用你自己的数据。 为了跟进,我们需要:
本节中的步骤假设你当前没有在 Elastic Cloud 中运行的 Elasticsearch 集群。 如果你这样做,可以跳到下一部分。
如果你还没有 Elasticsearch 集群,你可以注册 Elastic Cloud 免费试用。
注册后,系统会提示你创建第一个部署。
在我们继续之前,我们需要在 Cloud Console 中做几件事:
添加机器学习节点。
重置 Elasticsearch 部署用户和密码:
复制 Elasticsearch 部署云 ID。
接下来,我们需要将嵌入模型加载到 Elasticsearch 中,为我们的博客标题生成向量,然后为用户的搜索问题生成向量。 我们将使用由 SentenceTransformers 训练并托管在 Hugging Face 模型中心上的 all-distilroberta-v1 模型。 此设置不需要此特定模型即可工作。 它适合一般用途,因为它是在涵盖广泛主题的非常大的数据集上训练的。 但是,对于向量搜索用例,使用针对您的特定数据集进行微调的模型通常会提供最佳相关性。
为此,我们将使用 Elastic 创建的 Eland python 库。 该库提供了广泛的数据科学功能,但我们将使用它作为桥梁,将模型从 Hugging Face 模型中心加载到 Elasticsearch,以便它可以部署在机器学习节点上以供推理使用。
Eland 可以作为 python 脚本的一部分运行,也可以在命令行上运行。 该存储库还为希望走这条路的用户提供了一个 Docker 容器。 今天我们将在一个小型 python notebook 中运行 Eland,它可以在网络浏览器中免费运行在谷歌的 Colab 中。
打开程序链接并单击顶部的 “Open in Colab” 按钮以在 Colab 中启动 notebook。
将变量 hf_model_id 设置为模型名称。 此模型已在示例代码中设置,但如果你想使用不同的模型或仅供将来参考:
运行 cloud auth 部分,系统会提示您输入:
运行剩余的步骤。
接下来我们将创建一个新的 Elasticsearch 索引来存储我们的 Elastic 文档,将网络爬虫配置为自动抓取这些文档并为其编制索引,并使用摄取管道为文档标题生成向量。
请注意,你可以在此步骤中使用你的专有数据,以创建适合你的领域的问答体验。
更新 dense_vector 字段的映射。 (注意:对于 Elasticsearch 8.8+ 版本,此步骤应该是自动的。)
- POST search-elastic-docs/_mapping
- {
- "properties": {
- "title-vector": {
- "type": "dense_vector",
- "dims": 768,
- "index": true,
- "similarity": "dot_product"
- }
- }
- }
- {
- "acknowledged": true
- }
配置网络爬虫以爬取 Elastic Docs 站点:
Disallow | Contains | release-notes |
Allow | Regex | /guide/en/.*/current/.* |
Disallow | Regex | .* |
Elasticsearch 的网络爬虫现在将开始爬取文档站点,为标题字段生成向量,并对文档和向量建立索引。
第一次爬网需要一些时间才能完成。 同时,我们可以设置 OpenAI API 凭证和 Python 后端。
要向 ChatGPT 发送文档和问题,我们需要一个 OpenAI API 帐户和密钥。 如果你还没有帐户,可以创建一个免费帐户,你将获得初始数量的免费积分。
创建帐户后,你需要创建一个 API 密钥:
1)安装所需的 python 库。 我们在具有隔离环境的 Replit 中运行示例程序。 如果您在笔记本电脑或 VM 上运行它,最佳做法是为 python 设置一个虚拟 ENV。
2)设置身份验证和连接环境变量(例如,如果在命令行上运行:export openai_api="123456abcdefg789")
3)运行 streamlit 程序。 有关 streamlit 的更多信息可以在其文档中找到。
4) 这将启动网络浏览器,并将 url 打印到命令行。
一切都已摄取且前端启动并运行后,你可以开始询问有关 Elastic 文档的问题。
询问 “Show me the API call for an inference processor” 现在会返回一个示例 API 调用和一些有关配置设置的信息。
询问将新集成添加到 Elastic Agent 的步骤将返回:
如前所述,允许 ChatGPT 仅根据训练过的数据回答问题的风险之一是它容易产生错误答案的幻觉。 该项目的目标之一是为 ChatGPT 提供包含正确信息的数据,并让它制定答案。
那么当我们给 ChatGPT 一个不包含正确信息的文档时会发生什么? 比如,让它告诉你如何造船(Elastic 的文档目前没有涵盖):
当 ChatGPT 无法在我们提供的文档中找到问题的答案时,它会退回到我们的提示指令,简单地告诉用户它无法回答问题。
在此示例中,我们展示了如何将 Elasticsearch 强大的搜索检索功能与人工智能从 GPT 模型生成的响应中的前沿技术相结合,如何将用户体验提升到一个全新的水平。
可以对各个组件进行定制以满足你的特定要求并进行调整以提供最佳结果。 虽然我们使用 Elastic 网络爬虫来摄取公共数据,但你并不局限于这种方法。 随意尝试其他嵌入模型,尤其是那些针对特定领域数据进行微调的模型。
你今天可以尝试本博客中讨论的所有功能! 要构建你自己的 ElasticDocs GPT 体验,请注册一个 Elastic 试用帐户,然后查看此示例代码库以开始使用。
如果你想尝试搜索相关性的想法,可以尝试以下两个:
原文:ChatGPT and Elasticsearch: OpenAI meets private data | Elastic Blog
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。