ChatGPT 和 Elasticsearch:使用 Elastic 数据创建自定义 GPT
作者:Sandra Gonzales
ChatGPT Plus 订阅者现在有机会创建他们自己的定制版 ChatGPT,称为 GPT,这替代了之前博客文章中讨论的插件。基于本系列的第一部分的基础 —— 我们深入探讨了在 Elastic Cloud 中设置 Elasticsearch 数据和创建向量嵌入 —— 这篇博客将指导你完成开发一个定制的 GPT 的过程,该 GPT 旨在与你的 Elasticsearch 数据无缝交互。

定制 GPT
与插件系统相比,GPT 标志着一项重大进步,为用户提供了一种更简便的方式来创建 ChatGPT 的定制版本。通过直观的用户界面,这种增强简化了定制过程,通常无需编码技能就可以应用于广泛的应用程序。除了基本的个性化定制之外,那些希望将 ChatGPT 与外部数据集成的用户可以通过自定义动作来实现这一点。用户可以选择在 GPT 商店分享这些定制的 GPT,将它们保留为个人使用,或者只在公司的 ChatGPT 团队计划中与你的公司工作空间共享。

如何实现 ChatGPT 与 Elasticsearch 的通信

- ChatGPT 通过 Cloud Run 服务的 /search 端点发起调用。
- 服务将此输入用于创建 Elasticsearch 搜索请求。
- 查询响应与文档主体和 URL 一起返回给服务。
- 服务以文本形式将文档主体和 URL 返回给定制的 ChatGPT。
- 然后,此响应以文本形式中继回给 GPT,准备进行解释。
再次强调,此博客假设你已设置了 Elastic Cloud 账户,对内容进行了向量化处理,并拥有填充了数据的 Elasticsearch 集群,可供使用。如果你还没有完成所有设置,请参阅我们之前的帖子,了解详细的步骤。
代码
为了使我们的定制 GPT 得以实现,我们创建了一个服务,作为 ChatGPT 和我们的 Elasticsearch 数据之间的中间件。这个服务的核心是一个 Python 应用程序,它设置了一个 Quart 应用程序,并定义了 /search 端点。此外,我们使用一个Dockerfile来便于在Cloud Run上部署应用程序。
Python 应用程序连接到我们的 Elastic Cloud 集群,执行一个结合了 BM25 和 kNN 查询的混合搜索,并返回相关的文档主体和 URL。这使得我们的定制 GPT 能够实时访问和利用 Elasticsearch 数据。
完整的代码请参考 GitHub 存储库。这包括了用于 Cloud Run 部署的 Python 应用程序和 Dockerfile。
部署服务
关于使用 Google Cloud Platform(GCP)部署服务的详细步骤,请参考我们之前关于 ChatGPT 插件的博客文章中的部署部分。在那里,你将找到一份逐步指南,指导你在 GCP 上设置和部署你的服务。
创建 GPT
登录你的 ChatGPT Plus 账户后,通过你的个人资料导航到 “My GPTs”(我的 GPT)找到 “Create a GPT”(创建 GPT)链接。或者,你的对话上方的 “Explore GPTs”(探索GPT)部分也可以进入 GPT 商店,在那里你可以找到创建 GPT 的链接。

配置 GPT
GPT 编辑器提供了两种配置你的 GPT 的方式:通过对话提示进行引导设置的 “Create”(创建)标签,以及用于直接配置输入的 “Configure”(配置)标签。为了配置 Elastic Docs Assistant,我们将主要使用手动配置,以精确定义我们的 GPT 的设置。

为你的 GPT 指定一个名称,例如 “Elastic Docs Assistant”,并添加一个简短的描述,突出其功能。
在 Instructions(指令栏) 下,定义你的 GPT 的主要角色,并为其提供展示信息的指令:
You are an Elasticsearch Docs Assistant. Your function is to assist users with docs on Elastic products by querying the defined /search action. Answer the user's query using only the information from the /search action response. If the response contains no results, respond "I'm unable to answer the question based on the information I have from Elastic Docs." and nothing else. Be sure to include the URL at the bottom of each response.
切换到 “Create”(创建)标签,让 ChatGPT 生成对话开始提示和一个 logo。或许我会上传我自己的 logo。

我们不会上传任何知识文件,因为我们使用的所有数据都在 Elasticsearch 中。相反,我们将定义一个动作。
定义一个动作
这是我们将数据连接到 Elasticsearch 的地方。点击 “Create a new action”(创建新动作)将带我们进入动作编辑器。
首先,我在我的环境中设置了一个自定义头部名称,用于定义我在端点服务中使用的 API 密钥。

然后我复制我的 OpenAPI 规范:
openapi: 3.0.1
info:title: ElasticDocs_CustomGPT description: Retrieve information from the most recent Elastic documentationversion: 'v1'
servers:- url: YOUR_SERVICE_URL
paths:/search:get:operationId: searchsummary: retrieves the document matching the queryparameters:- in: queryname: queryschema:type: stringdescription: use to filter relevant part of the elasticsearch documentation responses:"200":description: OK
输入这些信息后,我们的模式将被自动验证,并显示一个搜索动作,任何错误都会显示为红色。如果一切都看起来不错,这就是预览窗格特别有用的地方。你不仅可以测试动作以确认其功能,而且助手还提供有关请求的调试信息。这对于根据服务的响应来完善你的 GPT 的回答非常有帮助。

通过配置 GPT 指令以动态修改其动作请求,可以实现更进一步的定制,例如在用户输入发送到服务之前重写用户输入,或者根据用户输入中的某些条件添加请求查询参数。这消除了传统编码逻辑的需要,前提是你的端点被设计为支持这些修改。
发布 GPT
点击预览窗格上方右上角的 “Publish”(发布),即可转到你新创建的 GPT。

展望未来
通过利用 Elasticsearch 进行动态的、数据驱动的对话,探索定制 GPT 的过程仅仅揭示了可能性的一角。通过利用 ChatGPT 的界面,并将其连接到外部数据,我们为定制化和具有上下文丰富性的交互引入了新的维度,使用了最先进的 AI 模型。
你今天就可以尝试本博客中讨论的所有功能!通过注册免费的 Elastic Cloud 试用版开始吧。
在本博客文章中,我们可能使用了第三方生成AI工具,这些工具由各自的所有者拥有和操作。Elastic 对这些第三方工具没有任何控制权,我们对其内容、操作或使用不承担任何责任或义务,也不对你使用此类工具可能引起的任何损失或损害负责。在使用含有个人、敏感或机密信息的 AI 工具时,请小心谨慎。你提交的任何数据可能会用于 AI 训练或其他目的。无法保证你提供的信息将被保密或安全。在使用任何生成 AI 工具之前,你应该熟悉其隐私实践和使用条款。
Elastic、Elasticsearch 及相关标志是 Elasticsearch N.V. 在美国及其他国家的商标、标志或注册商标。所有其他公司和产品名称都是其各自所有者的商标、标志或注册商标。
准备在你的应用中构建 RAG 吗?想尝试不同的 LLMs 与向量数据库? 查看我们在 Github 上的 LangChain、Cohere 等样本笔记本,并加入即将开始的Elasticsearch 工程师培训!
原文:ChatGPT and Elasticsearch: Creating Custom GPTs with Elastic Data — Elastic Search Labs
相关文章:
ChatGPT 和 Elasticsearch:使用 Elastic 数据创建自定义 GPT
作者:Sandra Gonzales ChatGPT Plus 订阅者现在有机会创建他们自己的定制版 ChatGPT,称为 GPT,这替代了之前博客文章中讨论的插件。基于本系列的第一部分的基础 —— 我们深入探讨了在 Elastic Cloud 中设置 Elasticsearch 数据和创建向量嵌…...
废品回收 小程序+APP
用户实名认证、回收员实名认证、后台审核、会员管理、回收员管理、订单管理、提现管理、地图、档案管理。 支持,安卓APP、苹果APP、小程序 流程: 一、用户端下单,地图选择上门位置、填写具体位置、废品名称、预估重量、选择是企业废旧、家…...
下载好了annaconda,但是在创建一个新的Conda虚拟环境报错
文章目录 问题描述:解决方案1.生成一个配置文件 问题总结 问题描述: ProxyError(MaxRetryError(“HTTPSConnectionPool(host‘repo.anaconda.com’, port443): Max retries exceeded with url: /pkgs/pro/win-64/repodata.json.bz2 (Caused by ProxyErr…...
如何安装MacOS的虚拟机?mac安装虚拟机的步骤 虚拟机安装MacOS VMware Fusion和Parallels Desktop19
要在Mac上运行MacOS的虚拟机,常用的方法是使用虚拟化软件如VMware Fusion或Parallels Desktop。 以下是安装MacOS的虚拟机的主要步骤: 1. 检查系统要求:确定您的Mac硬件和操作系统满足安装要求。您需要一台具备足够性能的Mac,并…...
Flutter 中 AutomaticKeepAliveClientMixin 的介绍及使用
在 Flutter 中,当你在一个页面中滑动列表或者进行其他一些操作时,如果你返回到该页面,可能会发现之前的状态已经丢失了。这在某些情况下可能是不可取的,特别是当你想要保留之前的状态,而不是每次都重新加载页面时。 为…...
注意力机制篇 | YOLOv8改进之清华开源ACmix:自注意力和CNN的融合 | 性能速度全面提升
前言:Hello大家好,我是小哥谈。混合模型ACmix将自注意力机制和卷积神经网络进行整合,使其同时具有自注意力机制和卷积神经网络的优点。这是清华大学、华为和北京人工智能研究院共同发布在2022年CVPR中的论文。ACmix结合了自注意力机制和卷积神经网络的优势,以提高模型的性能…...
Go语言支持重载吗?如何实现重写?
Go语言不支持传统意义上的函数和方法重载。在Go语言中,函数名或方法名不能相同但参数列表不同,因为这会导致编译错误。 然而,可以通过方法重写(override)来实现类似的功能。方法重写是指在子类中定义一个与父类同名的…...
Spring中基于事件监听驱动 和 线程池的异步任务
文章目录 事件监听驱动 与 异步事件源ApplicationContextAware接口 发布事件事件实体监听事件实现异步注入綫程池 事件驱动机制,与MQ消息队列比较 事件监听驱动 与 异步 事件监听驱动优点:解耦,将 事件和业务进行解耦,通过Asyc注解…...
C++ 优先级队列用法详解与模拟实现
文章目录 C 优先级队列用法与模拟实现介绍用法头文件1.创建优先级队列priority_queue 2. 插入元素push 3. 删除元素pop 访问顶部元素top 检查优先级队列的大小size 检查优先级队列是否为空empty 模拟实现 C 优先级队列用法与模拟实现 介绍 优先级队列(Priority Qu…...
Linux进阶之旅:深入探索Linux的高级功能
文章目录 Linux进阶之旅:深入探索Linux的高级功能1. Shell脚本编程2. 进程管理3. 网络管理4. 文本处理5. 系统监控6. 总结 Linux进阶之旅:深入探索Linux的高级功能 在上一篇博客中,我们对Linux操作系统进行了入门级的介绍,包括Linux的特点、发行版、安装方法以及基本使用。接下…...
【Java】内存可见性问题是什么?
文章目录 内存模型内存可见性解决方案volatile 内存模型 什么是JAVA 内存模型? Java Memory Model (JAVA 内存模型)是描述线程之间如何通过内存(memory)来进行交互。 具体说来, JVM中存在一个主存区(Main Memory或Java Heap Mem…...
Guava里一些比较常用的工具
随着java版本的更新提供了越来越多的语法和工具来简化日常开发,但是我们一般用的比较早的版本所以体验不到。这时就用到了guava这个包。guava提供了很多方便的工具方法,solar框架就依赖了guava的16.0.1版本,这里稍微介绍下。 一、集合工具类…...
在windows系统中【.gz.tar】和【.whl】文件分别应该怎么下载到conda的某个虚拟环境中
在 Windows 系统中,你可以按照以下步骤将 .gz.tar 和 .whl 文件下载到 Conda 的某个虚拟环境中: 激活虚拟环境:打开 Anaconda Prompt 或者命令行窗口,使用以下命令激活你想要安装文件的虚拟环境: conda activate <虚…...
Rust - 数据类型
Rust 是静态编译语言,在编译时必须知道所有变量的类型。 基于使用的值,编译器通常能推断出它的具体类型,但如果可能的类型比较多,例如把String转换为整数的parse方法,就必须添加类型的标注,否则编译会报错…...
基于springboot实现洗衣店订单管理系统项目【项目源码+论文说明】计算机毕业设计
基于springboot实现洗衣店订单管理系统演示 摘要 随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势,针对这个问题开发一个专门适应洗衣店业务新的交流形式的网站。本文介绍了洗衣店订单管理系统的开发全过程。通过分析企业对于洗衣店订单管理系统…...
Java基础知识总结(53)
(1)集合框架概述 Java集合大致分为List、Set、Map和Queue Collection是一个顶级接口,其子接口有,List、Set、Queue List:有序(存放和取出顺序是一致的)、有索引、可重复 Set:无序、无索引、不可重复 &…...
196算法之谜在 JSP 中使用内置对象 request 获取 form 表单的文本框 text 提交的数据。
(1)编写 inputNumber . jsp ,该页面提供一个 form 表单,该 form 表单提供一个文本框 text ,用于用户输入一个正整数,用户在 form 表单中输入的数字,单击 submit 提交键将正整数提交给 huiwenNumber . jsp 页…...
初识责任链模式--一起学习吧之数据库
一、定义 责任链模式是一种对象行为型模式,用于处理请求发送者和多个请求处理者之间的耦合问题。在这种模式中,请求的处理者通过前一对象记住其下一个对象的引用而连成一条链。当有请求发生时,请求会沿着这条链传递,直到有对象处…...
解决Xshell登录云服务器的免密码和云服务器生成子用户问题
Xshell登录云服务器的免密码问题 前言一、Xshell登录云服务器的免密码操作实践 二、centos创建用户创建用户实操删除用户更改用户密码直接删除子用户 前言 Xshell登录云服务器免密码问题的解决方案通常涉及使用SSH密钥对。用户生成一对密钥(公钥和私钥)…...
webRtc生产环境实用方法
最近做了几个项目发现多个项目反反复复会出现几个高频的需求, 都依赖于获取系统采集设备和指定设备id获取媒体流;为了不在反复书写总结2个公用方法; 检索当前系统所有可用设备 /*** 检索当前系统所有可用设备* returns {* audioInputOption…...
Windows ❀ 高效端口检测工具tcping的安装与实战技巧
1. 为什么你需要tcping这个神器? 做运维的朋友应该都遇到过这种情况:服务器明明能ping通,但服务就是访问不了。这时候传统的ping命令就束手无策了,因为它只能检测网络层是否连通,而无法判断具体端口是否开放。这就是tc…...
从零到精通:Human Resource Machine 全关卡高效解法与思维跃迁指南
1. 为什么《Human Resource Machine》是程序员的最佳思维训练场 第一次打开《Human Resource Machine》时,我以为这不过是个披着编程外衣的小游戏。但当我卡在"第三年"的关卡整整一个下午后,才意识到这可能是最接近真实编程思维的训练场。这款…...
day23 模拟2
...
从IMU初始化到点云去畸变:深入Fast-LIO2的传感器融合核心流程
从IMU初始化到点云去畸变:Fast-LIO2传感器融合全流程解析 在自动驾驶和机器人定位领域,激光雷达与IMU的紧耦合系统正成为高精度状态估计的主流方案。Fast-LIO2作为这一技术路线的代表,其核心创新在于将IMU的动力学特性与激光点云几何特征深度…...
VScode 高效开发 Springboot 应用的完整指南
1. 环境准备与项目创建 第一次用VScode开发Springboot项目时,我对着空白编辑器发呆了半小时。后来发现只要装对插件,效率能翻倍。先打开VScode的扩展商店,这三个插件是必装的: Java Extension Pack:包含语言支持、调…...
python基于微信小程序的家政服务与互助平台
目录技术栈选择功能模块设计数据库设计接口开发小程序前端部署与测试安全与合规项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作技术栈选择 后端采用Python的Django或Flask框架,提供RESTful API接口。数据库使用MyS…...
TC3XX Autosar系统中文配置手册:包含19个模块的详细解析与联系指南
tc3xx autosar EB中文配置手册,需要联系。 一共有大约19个模块。 在汽车电子开发领域,TC3xx系列芯片AUTOSAR架构的组合越来越常见。最近研究EB(Elektrobit)配置工具时,发现其19个核心模块的配置逻辑其实藏着不少"…...
VuePress/Hexo博客作者必看:VSCode Paste Image插件路径配置避坑指南
VuePress/Hexo博客作者必看:VSCode Paste Image插件路径配置避坑指南 当你沉浸在VSCode中撰写技术博客时,是否遇到过这样的场景:本地预览时图片显示完美,但一旦部署到线上,所有图片都变成了令人沮丧的404错误ÿ…...
Linux下RTL8188无线网卡变身AP热点:从驱动安装到自动分配IP全流程(附避坑指南)
Linux下RTL8188无线网卡配置AP热点全攻略:从驱动到自动IP分配的实战指南 在嵌入式开发和物联网应用中,将无线网卡配置为接入点(AP)是常见需求。RTL8188系列USB无线网卡因其高性价比和广泛兼容性,成为开发者的热门选择。…...
跨引擎资源无缝迁移:Unity到Godot的资产转换革新方案
跨引擎资源无缝迁移:Unity到Godot的资产转换革新方案 【免费下载链接】unitypackage_godot Import assets from UnityPackage files into Godot 项目地址: https://gitcode.com/gh_mirrors/un/unitypackage_godot 在游戏开发领域,引擎间的资源迁移…...
