ChatGPT 和 Elasticsearch:使用 ChatGPT 处理 Elastic 数据的插件

news2024/11/24 5:36:02

作者:Baha Azarmi

你可能已经阅读过这篇关于我们将 Elasticsearch 的相关性功能与 OpenAI 问答功能相结合的博文。 该帖子的主要思想是说明如何将 Elastic 与 OpenAI 的 GPT 模型结合使用来构建响应并向用户返回上下文相关的内容。

我们构建的应用程序可以公开一个搜索端点并被任何前端服务调用。 好消息是,现在 OpenAI 已经发布了未来 ChatGPT 插件框架的私有 alpha 版。

在此博客中,你将学习如何使用 Elastic 文档实施插件并将 ChatGPT 的使用扩展到在 Elasticsearch 中索引的任何内容。

 

什么是 ChatGPT 插件?

ChatGPT 插件是为帮助模型完成其知识或执行操作而开发的扩展。

例如,我们知道 ChatGPT 从知识角度的割接时间是 2021 年 9 月,所以任何关于近期数据的问题都不会回答。 此外,任何与超出模型训练范围的过于具体的问题相关的问题都不会得到回答。

插件可以扩大可能的应用范围并增强模型的功能,但相应地,插件的输出会被模型本身增强。

ChatGPT 目前支持的官方插件列表如下。 随着越来越多的组织尝试使用 ChatGPT,你可以预期此列表会迅速扩展:

当你浏览列表时,你会注意到用例在这里慢慢显现出来。 以 Expedia 为例,其插件正在扩展 ChatGPT 以协助规划旅行,使 ChatGPT 成为旅行规划助手。

此博客旨在为 Elastic 实现类似的目标 — 允许 ChatGPT 访问 Elastic 的当前知识库并协助你完成 Elastic 项目。

 

架构

我们将对我的同事 Jeff Vestal 在第 1 部分中提供的示例代码进行轻微修改,这会对成本产生积极影响。

我们将删除对 OpenAI API 的调用,因为现在 ChatGPT 将履行从 Elasticsearch 获取内容并将其消化回用户的角色:

 

1)ChatGPT 调用插件的 “/search” 端点。

        这个决定是基于插件 “rules”`description_for_human`(见下面的插件清单)。

2)插件代码创建一个发送到 Elasticsearch 的搜索请求。

3)文档正文和原始 url 返回给 Python。

4)插件将文档正文和 url 以文本形式返回给 ChatGPT。

5)ChatGPT 使用来自插件的信息来制作其响应

同样,这篇博文假设你已经设置了你的 Elastic Cloud 帐户,对你的内容进行了矢量化处理,并拥有一个充满数据的 Elasticsearch 集群以供使用。 如果你还没有设置所有这些,请参阅我们之前的帖子以了解要遵循的详细步骤。

插件代码

OpenAI 为 ChatGPT 构建了一个相当易于处理的插件框架。 它部署了一个公开的服务:

  • 插件 manifest,解释插件向用户和 ChatGPT 提供的内容
  • 插件 openAPI 定义,这是使 ChatGPT 能够理解可用 API 的功能描述

插件代码可以在这里找到。

插件文件结构

下面的屏幕截图显示了结构的样子:

  • 根据 OpenAI 最佳实践,插件清单存储在 .well-known 目录下的 ai-plugin.json 文件中。
  • 主要服务代码在 app.py 中。
  • Dockerfile 稍后将用于将插件部署到 Google Cloud Compute。
  • ChatGPT 插件商店中显示的插件徽标 (logo.ong),此处为 Elastic 徽标。
  • 插件的 OpenAI 描述。

Python代码

有关完整代码,请参阅 GitHub 存储库。 我们将只看这段代码的主要部分:

…
@app.get("/search")
…
@app.get("/logo.png")
…
@app.get("/.well-known/ai-plugin.json")
…
@app.get("/openapi.yaml")
…

我们去掉了所有细节,将主要部分保留在这里。 这里有两类 API:

1)OpenAI构建插件所需的:

  • /logo.png:获取插件标志
  • /.well-known/ai-plugin.json:获取插件清单
  • /openapi.yaml:获取插件 OpenAPI 描述

2.插件 API:

/search 是这里唯一暴露给 ChatGPT 并在 Elasticsearch 中运行搜索的

插件清单

ChatGPT 将使用插件清单来验证插件的存在(可访问)。 定义如下:

{
   "schema_version": "v1",
   "name_for_human": "ElasticGPTDoc_Plugin",
   "name_for_model": "ElasticGPTDoc_Plugin",
   "description_for_human": "Elastic Assistant, you know, for knowledge",
   "description_for_model": "Get most recent elasticsearch docs post 2021 release, anything after release 7.15",
   "auth": {
     "type": "none"
   },
   "api": {
     "type": "openapi",
     "url": "PLUGIN_HOSTNAME/openapi.yaml",
     "is_user_authenticated": false
   },
   "logo_url": "PLUGIN_HOSTNAME/logo.png",
   "contact_email": "info@elastic.co",
   "legal_info_url": "http://www.example.com/legal"
 }

这里有两点需要指出:

1)有两种说明:

  • description_for_human - 这是人们在 ChatGPT 网络用户界面中安装插件时看到的内容。
  • description_for_model - 模型了解何时使用插件的说明。

2)Python 代码中有 PLUGIN_HOSTNAME 等占位符被替换。

OpenAPI 定义

我们的代码将只向 ChatGPT 公开一个 API 端点,允许它搜索 Elastic 文档。 这是描述:

openapi: 3.0.1
info:
 title: ElasticDocGPT
 description: Retrieve information front the most recent Elastic documentation
 version: 'v1'
servers:
 - url: PLUGIN_HOSTNAME
paths:
 /search:
   get:
     operationId: search
     summary: retrieves the document matching the query
     parameters:
     - in: query
       name: query
       schema:
           type: string
       description: use to filter relevant part of the elasticsearch documentations
     responses:
       "200":
         description: OK

对于定义文件,关键点是:

  • 我们获取 ChatGPT 提示内容并将其作为查询传递给我们的 Elasticsearch 集群。
  • Python 代码中替换了一些占位符,例如 PLUGIN_HOSTNAME。

在 Google Cloud Platform (GCP) 中部署 Elastic 插件

你可以选择一种部署方法来公开你的插件,也可以选择使用不同的云提供商。 我们在这篇博文中使用了 GCP——更具体地说是 Google Cloud Run 和 Google Cloud Build。 一是暴露和运行服务,二是持续集成。

设置

此设置假定你的 GCP 用户具有以下权限:

  • 在 Google Container Registry 中使用 Google Cloud Build 构建容器镜像
  • 在 Google Cloud Run 中部署容器

如果没有,你将需要更新 GCP IAM 页面上的权限。

我们将使用 gcloud CLI 来设置我们的环境。 你可以在此处找到安装说明。

安装后,运行以下命令进行身份验证:

gcloud auth

然后将项目标识符设置为你的 GCP 项目:

 gcloud config set project PROJECT_ID

你现在已准备好构建和部署。

构建和部署

第一步是使用 Cloud Build 构建容器镜像并将其推送到 Google Container Registry:

  gcloud builds submit --tag gcr.io/PROJECT_ID/my-python-app

将 PROJECT_ID 替换为你的 GCP 项目 ID,将 my-python-app 替换为你要为容器映像指定的名称。

导出 Python 代码创建 Elasticsearch 客户端所需的环境:

  export YOUR_CLOUD_ID=VALUE 
  export YOUR_CLOUD_PASS=VALUE 
  export YOUR_CLOUD_USER=VALUE

最后,将容器镜像部署到 Cloud Run:

  gcloud run deploy my-python-app \
  --image gcr.io/PROJECT_ID/my-python-app \
  --platform managed \
  --region us-central1 \
  --allow-unauthenticated \
  --set-env-vars  cloud_id=YOUR_CLOUD_ID,cloud_pass=YOUR_CLOUD_PASS,cloud_user=YOUR_CLOUD_USER

你应该会看到你的服务在 Cloud Run 中运行:

请注意,你还可以激活持续集成,以便 GitHub 存储库中的任何提交都将触发重新部署。 在服务详细信息页面上,单击设置持续部署。

 

在 ChatGPT 中安装插件

部署插件并具有可公开访问的端点后,即可将其安装在 ChatGPT 中。 在我们的例子中,由于它部署在 Google Cloud Run 中,你可以在此处获取 URL:

然后在 ChatGPT 中,进入插件商店:

 

选择做 “Develop your own plugin”:

粘贴你从 Google Cloud Run 页面复制的 URL:

确保插件已找到且有效:

按照安装说明进行操作,直到你在列表中看到你的插件可用:

让我们测试一下我们的插件!

好的,现在是最好的部分! 请记住,当你的提示超出其知识范围时,ChatGPT 会决定委托。 为确保发生这种情况,只需提出类似于此示例的问题:

通过本博客中提供的步骤,你可以创建自己的插件并将其部署在云提供商或你自己的主机上。 这使你可以开始探索增强 ChatGPT 的知识和功能,用专业和专有知识增强本已令人惊叹的工具。

你今天可以尝试本博客中讨论的所有功能! 通过注册免费的 Elastic Cloud 试用版开始。

以下是你可能会感兴趣的其他一些博客:

  • ChatGPT 和 Elasticsearch:OpenAI 遇见私有数据
  • 使用 OpenTelemetry 和 Elastic 监控 OpenAI API 和 GPT 模型
  • 使用 ChatGPT 探索安全的未来

在这篇博文中,我们可能使用了由其各自所有者拥有和运营的第三方生成人工智能工具。 Elastic 对第三方工具没有任何控制权,我们对其内容、操作或使用不承担任何责任,也不对你使用此类工具可能造成的任何损失或损害承担任何责任。 使用带有个人、敏感或机密信息的 AI 工具时请谨慎行事。 你提交的任何数据都可能用于人工智能训练或其他目的。 无法保证你提供的信息将得到安全保护或保密。 在使用之前,你应该熟悉任何生成人工智能工具的隐私惯例和使用条款。

Elastic、Elasticsearch 和相关标记是 Elasticsearch N.V. 在美国和其他国家/地区的商标、徽标或注册商标。 所有其他公司和产品名称均为其各自所有者的商标、徽标或注册商标。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/535112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

好久不见,甚是想念

大家好,我是程序员小哈。 一晃停更好久了,之前因为12月份阳了,身体一直感觉没有完全恢复,就一直偷懒了,外加单位的事情比较多,实在是分身乏术,最近总算是告一段落了,咱们的知识分享…

shell脚本——流编辑器“三剑客”之sed命令

shell脚本——流编辑器“三剑客”之sed命令 一、流编辑器“三剑客”二、sed编辑器1、sed的工作流程2、命令格式3、常用选项4、常用操作5、打印内容6、使用地址7、删除行8、替换9、插入 一、流编辑器“三剑客” sed awk grep 二、sed编辑器 sed是一种流编辑器,流编…

手把手项目实战,搞完,直接写在简历上!

大家好,我是田哥 很多没有项目经验,或者没有亮点项目的朋友可以看过来。 最近田哥在搞一个项目:充电桩项目。本文给大家介绍这个项目背景、部分原型图、核心功能、核心模块、技术栈等。 项目背景介绍 随着我国汽车行业的不断发展&#xff0c…

AI绘画-Midjourney基础1-基本操作

Midjourney是一款 AI 绘画工具,可以根据你的提示(本文中称为 prompt)创作出各种图像。你只需要在Discord上和一个机器人聊天,就可以用简单的命令来控制它。目前已不支持免费试用,可以选择付费计划来获得更多功能和优势…

Ae 效果详解:Roto 笔刷和调整边缘

使用 Roto 笔刷工具或调整边缘工具之后,Ae 会向图层应用“Roto 笔刷和调整边缘” Roto Brush & Refine Edge效果。 版本 Version 目前包括 1.0(经典)1.0 Classic和 2.0 两个版本。 品质 Quality 选择围绕边缘的细节质量。 --标准 Stan…

传输时延和传播时延(补充:频段,信道带宽,数据速率的区别,以及帧大小和帧长)

先来看例题,看是否能区分 例题1: 假设生产管理网络系统采用B/S工作方式,经常上网的用户数为150个,每用户每分钟产生8个事务处理任务,平均事务章大小为0.05MB,则这个系统需要的信息传输速率为(68)。 (68)A…

Node接入ChatGPT 的最强对手Claude

由于个人的chatGPT免费版本即将到期, Claude 很火,在网上被说成是 ChatGPT 的最强对手,是 ChatGPT 的替代品。本文我将介绍下 Claude 是什么,以及如何免费使用 Claude. 什么是Claude 看一下它是如何自我介绍的 Slack Slack 是一款流行的团…

在 Transformers 中使用对比搜索生成可媲美人类水平的文本

1. 引言 自然语言生成 (即文本生成) 是自然语言处理 (NLP) 的核心任务之一。本文将介绍神经网络文本生成领域当前最先进的解码方法 对比搜索 (Contrastive Search)。提出该方法的论文 “A Contrastive Framework for Neural Text Generation” 最初发表于 NeurIPS 2022 ([论文]…

目标检测创新:一种基于区域的半监督方法,部分标签即可(附原论文下载)...

关注并星标 从此不迷路 计算机视觉研究院 公众号ID|ComputerVisionGzq 学习群|扫码在主页获取加入方式 论文地址:https://arxiv.org/pdf/2201.04620v1.pdf 计算机视觉研究院专栏 作者:Edison_G 研究表明,当训练数据缺少…

招募:AICG内容联合创作计划 | AIGC实践

AIGC(AI Generated Content,人工智能自动生成内容)必将成为小微创业团队进行低成本内容运营的最佳实践。 你同意这个观点吗? 如果我们恰好想法一致,或许可以一起搞点事情,探索一下商业场景下,应…

ChatGPT prompt指令大全

ChatGPT prompt指令大全 更多Prompt自动使用,可以在chrome插件中搜索 WebChatGPT,没有账号的,可以拉到文章最下面。 目录 担任雅思写作考官 写小说 充当 Linux 终端 充当英语翻译和改进者 充当论文润色者(拿摘要部分举例&am…

企业实践 | 如何从VMWare ESXi Shell中挂载以及拷贝NTFS或者FAT32分区格式的USB闪存驱动器...

欢迎关注「WeiyiGeek」公众号 点击 👇 下方卡片 即可关注我哟! 设为「星标⭐」每天带你 基础入门 到 进阶实践 再到 放弃学习! 涉及 网络安全运维、应用开发、物联网IOT、学习路径 、个人感悟 等知识 “ 花开堪折直须折,莫待无花空折枝。 ”…

K_A39_004 基于STM32等单片机驱动AT24C02模块 串口+OLED0.96显示

K_A39_004 基于STM32等单片机驱动AT24C02模块 串口OLED0.96显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明时序对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCAT24C02模块1.2、STM32F103C8T6AT24C02模块 五、基础知识学习与相关资料下载六、…

〖技术人必学的职业规划白宝书 - 职业规划篇②〗- 进入职场前必须要考虑的问题

历时18个月,采访 850 得到的需求。 不管你是在校大学生、研究生、还是在职的小伙伴,该专栏有你想要的职业规划、简历、面试的答案。说明:该文属于 技术人必学的职业规划白宝书 专栏,购买任意白宝书体系化专栏可加入TFS-CLUB 私域社…

如何优雅的使用各类LLM

近几个月,随着ChatGPT的风靡,大型语言预训练模型也如雨后春笋般地涌现,虽然效果差强人意,好在不受限制。配置稍好的电脑也能跑个7B、13B参数的大语言模型。 虽然模型众多,但是如果给每一个模型都单独去配置环境&#x…

Go语言的条件判断和循环语句

目录 【if语句】 if语句的内部变量 if语句的优雅写法 【switch语句】 switch语句的特点 switch语句的表达式类型 switch获取变量类型 x.(type) 【for语句】 for语句的变体 for...range break 和 continue goto for 语句的常见“坑”与避坑方法 Go语言的条件判断有…

数组map用法以及特殊值的情况

数组map用法以及特殊值的情况 一、map用法的说明 map(callbackFn, thisArg); // callbackFn回调函数,thisArg可选 callbackFn是个回调函数,该回调函数的参数按照顺序为element(当前正在处理的元素),index&#xff0…

深化企业数据智能应用 用友敢当“急先锋”

面对扑面而来的数字经济时代,一场轰轰烈烈的企业数智化转型正进行得如火如荼。 然而许多企业虽然明知道数智化转型势在必行,但是又担忧自己不具备相关能力。这些企业在数据和智能上面临哪些挑战?如何才能如何加速数智化创新?AIGC和…

人机融合智能与哲学

GPT系列的大型语言模型(LLM)在初步成功之后,需要人们重新审视图灵的计算理论,重新认识计算的本质和形式,重新思考计算机和计算机理论,以及深入思考计算的家族、广义的计算和计算的哲学等问题。这是因为GPT系…

从面对代码下不去的文章,到DBA群讨论

开头还是介绍一下群,如果感兴趣polardb ,mongodb ,mysql ,postgresql ,redis 等有问题,有需求都可以加群群内有各大数据库行业大咖,CTO,可以解决你的问题。加群请联系 liuaustin3 ,在新加的朋友会分到2群(共…