Elasticsearch:使用 OpenAI 生成嵌入并进行向量搜索 - nodejs

在我之前的文章:

  • Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)(二)(三)(四)​​​​​

我详细地描述了如何使用 LangChain 及 OpenAI 进行向量搜索及 RAG。在那篇文章中,它没有用户界面。在今天的文章中,我将展示如何使用 OpenAI 来把数据进行向量化(不是使用 Elastic Stack 提供的 eland 上传模型的方式。这种方案是完全免费的),并写入到 Elasticsearch。我们使用 Web UI 来对向量进行搜索。我们可以在如下的地址下载代码:

git clone https://github.com/liu-xiao-guo/elasticsearch-labs

我们将使用其中的一个例子:

$ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/openai-embeddings

安装

安装 Elasticsearch 及 Kibana

如果你还没有安装好自己的 Elasticsearch 及 Kibana,那么请参考一下的文章来进行安装:

  • 如何在 Linux,MacOS 及 Windows 上进行安装 Elasticsearch

  • Kibana:如何在 Linux,MacOS 及 Windows 上安装 Elastic 栈中的 Kibana

在安装的时候,请选择 Elastic Stack 8.x 进行安装。在我下面的练习中,我将使用 Elastic Stack 8.11 来进行展示。

运行应用

在运行之前,我们在自己的 terminal 中打入如下的命令:

export ELASTICSEARCH_URL=https://localhost:9200
export ELASTIC_USERNAME=elastic
export ELASTIC_PASSWORD=o6G_pvRL=8P*7on+o6XH
export OPENAI_API_KEY=YourOpenAIKey

在我的设置中,我使用自签名证书的 Elasticsearch 集群。在上面,你需要根据自己的 Elasticsearch 超级用户及密码进行配置。你也需要在 OpenAI 的网站中申请开发者 key。你可以在地址 https://platform.openai.com/api-keys 进行申请。

另外,我们需要拷贝 Elasticsearch 的证书到当前的目录中:

$ pwd
/Users/liuxg/python/elasticsearch-labs/example-apps/openai-embeddings
$ cp ~/elastic/elasticsearch-8.11.0/config/certs/http_ca.crt .
$ ls
LICENSE                http_ca.crt            package.json           utils.js
README.md              images                 sample_data            views
generate_embeddings.js package-lock.json      search_app.js

如上所示,generate_embeddings.js 这个文件是用来使用 OpenAI 来生产 embeddings 的。关于如何使用证书及签名连接到 Elasticsearch,请参阅之前的文章 “Elasticsearch:使用最新的 Nodejs client 8.x 来创建索引并搜索”。有关如何连接到 Elasticsearch 的部分代码,请参阅上面的 utils.js。

在运动代码之前,我们使用如下的命令来安装相应的包:

npm install
$ vi package.json 
$ npm installremoved 10 packages, and audited 110 packages in 1s10 packages are looking for fundingrun `npm fund` for detailsfound 0 vulnerabilities

我们可以查看当前的 nodejs 版本:

$ node --version
v19.0.1

我们也可以查看 openai 的版本:

$ npm list | grep openai
openai-integration-example-javascript@1.0.0 /Users/liuxg/python/elasticsearch-labs/example-apps/openai-embeddings
└── openai@4.20.1

在这里需要强调的是 openai 的版本不同,调用的 API 的接口会有区别。

$ npm list | grep elasticsearch
openai-integration-example-javascript@1.0.0 /Users/liuxg/python/elasticsearch-labs/example-apps/openai-embeddings
├── @elastic/elasticsearch@8.8.0

生成向量

我们可以查看 package.json 的文档定义:

package.json

{"name": "openai-integration-example-javascript","version": "1.0.0","description": "OpenAI integration example","main": "search_app.js","scripts": {"app": "node search_app.js","generate": "node generate_embeddings.js"},"author": "Elastic","license": "MIT","dependencies": {"@elastic/elasticsearch": "^8.8.0","express": "^4.18.2","hbs": "^4.2.0","openai": "^4.20.1"}
}

我们使用如下的命令来生成 embeddings:

npm run generate
$ npm run generate> openai-integration-example-javascript@1.0.0 generate
> node generate_embeddings.jsConnecting to Elasticsearch: https://localhost:9200
connection success true
Creating index openai-integration...
Reading from file sample_data/medicare.json
Processing 12 documents...
Processing batch of 10 documents...
docsBatch size: 10
Calling OpenAI API for 10 embeddings with model text-embedding-ada-002
Indexing 10 documents to index openai-integration...
Processing batch of 2 documents...
docsBatch size: 2
Calling OpenAI API for 2 embeddings with model text-embedding-ada-002
Indexing 2 documents to index openai-integration...
Processing complete

在运行上面的命令时,一定要在 terminal 中设置上面的变量。在上面,我们可以看到有12个文档已经被摄入到 Elasticsearch 中。它使用的是 OpenAI 的接口来进行向量化的。我们可以使用如下的命令在 Kibana 中进行查看:

GET openai-integration/_search

启动 web 应用

我们可以使用如下的命令来启动 web 应用:

npm run app
$ npm run app> openai-integration-example-javascript@1.0.0 app
> node search_app.jsConnecting to Elasticsearch: https://localhost:9200
Express app listening on port 3000
connection success true

如上所示,我们的 web 应用在 localhost:3000 的端口上运行。我们可以在浏览器中进行打开:

在 web 应用中进行语义搜索

我们的数据结构如下:

{"url": "https://faq.ssa.gov/en-us/Topic/article/KA-01735","title": "How do I get a replacement Medicare card?","content": "If your Medicare card was lost, stolen, or destroyed, you can request a replacement online at Medicare.gov. You can print an official copy of your card from your online Medicare account or call 1-800-MEDICARE (1-800-633-4227 TTY 1-877-486-2048) to order a replacement card to be sent in the mail."},{"url": "https://faq.ssa.gov/en-us/Topic/article/KA-02713","title": "How do I terminate my Medicare Part B (medical insurance)?","content": "You can voluntarily terminate your Medicare Part B (Medical Insurance). However, you may need to have a personal interview with Social Security to review the risks of dropping coverage and to assist you with your request. To find out more about how to terminate Medicare Part B or to schedule a personal interview, contact us at 1-800-772-1213 (TTY: 1-800-325-0778) or visit your nearest Social Security office."},

在我们的实现中,我们是针对 content 这个 text 字段进行向量化的,也就是说我们可以针对这个字段进行语义搜索。

我们尝试进行如下的搜索:

how much does Medicare cost?

我们还可以进行如下的搜索:

how can I terminate my Medicare?

How can I tell whether I am eligible for Medicare?

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

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

相关文章

自然语言处理第2天:自然语言处理词语编码

​ ☁️主页 Nowl 🔥专栏 《自然语言处理》 📑君子坐而论道,少年起而行之 ​​ 文章目录 一、自然语言处理介绍二、常见的词编码方式1.one-hot介绍缺点 2.词嵌入介绍说明 三、代码演示四、结语 一、自然语言处理介绍 自然语言处理&#xf…

5、Grounded Segement Anything

github sam安装与基本使用 stable diffusion安装与基本使用 安装GroundingDINO git clone https://github.com/IDEA-Research/GroundingDINO.git cd GroundingDINO pip install -e .pip install diffusers transformers accelerate scipy safetensors安装RAM&Tag2Text …

深度学习基本概念

1.全连接层 全连接层就是该层的所有节点与输入节点全部相连,如图所 示。假设输入节点为X1, X 2, X 3,输出节点为 Y 1, Y 2, Y 3, Y 4。令 矩阵 W 代表全连接层的权重, W 12也就代表 …

【C】⽂件操作

1. 为什么使⽤⽂件? 如果没有⽂件,我们写的程序的数据是存储在电脑的内存中,如果程序退出,内存回收,数据就丢失了,等再次运⾏程序,是看不到上次程序的数据的,如果要将数据进⾏持久化…

世微 AP5199S 降压恒流车灯驱动IC 兼容HV9910

说明 AP5199S 是一款外围电路简单的多功能平均电流 型 LED 恒流驱动器,适用于宽电压范围的非隔离式 大功率恒流 LED 驱动领域。 芯片 PWM 端口支持超小占空比的 PWM 调光, 可响应最小 60ns 脉宽。芯片采用我司专利算法,为客 户提供最佳解决方…

AIGC时代,如何保障ai绘图的算力需求

AIGC是目前非常热门的技术领域,被广泛应用于各个行业和领域,但同时AIGC也面临着诸多的痛点,那么如何解决这些痛点问题呢?云时代,又是如何通过云电脑赋能AIGC行业的,那么一起来文章中了解一下吧。 AIGC是什…

Trie 树详解

Trie 树详解 Trie 树(字典树)是一种用于高效存储和搜索字符串集合的树状数据结构。它的主要特点是能够在O(N)时间内实现字符串的插入、删除和搜索操作,其中 N 是字符串的长度。Trie 树的结构适用于敏感词过滤、单词搜索、自动补全等场景。在…

【HarmonyOS】【DevEco Studio】安装教程及环境配置问题解决

目录 一、DevEco Studio 安装二、配置环境ohmp安装报错问题解决方法一:注册表删除数值(没解决)方法二:进入DevEco Studio点击Settings进入设置(没解决)方法三:自己去官网下载ohmp的包安装&#…

PR片头模板|圣诞节快乐视频片头模板 Merry Christmas Logo

Merry Christmas logo 圣诞节快乐片头模板PR视频剪辑素材免费下载。 3个文本层。 9秒持续时间。 轻松的颜色控制。 After Effects and Premiere Pro 2021或更高版本。 全高清(19201080). 不需要插件。 包括视频教程. 不包括音频。 快速渲染。 来自PR模板…

Corona最新渲染器Corona11详解,附送下载地址

近日,Corona进行了大版本更新,发布了最新的Corona11。这次更新,包含众多新功能和新修复,借助 Corona 11 用户可将作品提升到更高的创作水准,更真实可感的视觉水平。 那么更新了那些呢?一起来看看吧&#x…

zookeeper1==zookeeper源码阅读,源码启动ZK集群

下载源码 Tags apache/zookeeper GitHub https://codeload.github.com/apache/zookeeper/zip/refs/tags/release-3.9.1 JDK8 MAVEN3.8.6 mvn -DskipTeststrue package 配置ZK1 zkServer.cmd中指出了启动类是 QuorumPeerMain QuorumPeer翻译成集群成员比较合理&#xf…

el-table/avue-curd 相同列内容合并

1.效果 2.html 3.js spanMethod({ row, column, rowIndex }) {if (column.property deviceName) {if (rowIndex > 0 && row.deviceName this.data[rowIndex - 1].deviceName) {return {rowspan: 0,colspan: 1,};}let rowspan 1;for (let i rowIndex 1; i < …

Windows提权方法

简介 内网提权&#xff0c;本意为通过某些服务的漏洞&#xff0c;从而获取到该服务器的shell&#xff0c;进而内网渗透&#xff0c;最终从普通用户变成超级管理员的一个过程 以下是一些常见的内网提权原理和方法&#xff1a; 横向移动&#xff1a;攻击者通过在内网中的一台受感…

学校家委会的职责和作用

在教育领域&#xff0c;学校家委会是一个不可或缺的角色。那么&#xff0c;学校家委会的职责和作用是什么呢&#xff1f;作为家长&#xff0c;我们又该如何参与其中呢&#xff1f;接下来&#xff0c;我将以知乎的口吻&#xff0c;为大家解答这些问题。 先让我们了解一下学校家委…

选品大作战:通过飙升榜找到了1000个爆款

通过商品飙升榜我发现了1000多个超级爆款&#xff01;赶超空间还很大。 店铺想要有流量、有销量&#xff0c;必须要会打造爆款&#xff01;打造的前提是会找到爆款。 拼多多每段时间都会有不少产品发生变化&#xff0c;在拼多多大幅爆单的&#xff0c;销售排名上升千万的商品…

YB2416D 30V 输入,3A 输出,CCCV 控制,高效率同步降压转换器

YB2416D 30V 输入&#xff0c;3A 输出&#xff0c;CC&CV 控制&#xff0c;高效率同步降压转换器 概述: YB2416是一款输入耐压超过40V,在4.5V-30V输入电压条件下正常工作&#xff0c;并且能够实现精确恒压以及恒流的同步降压型DC-DC转换器。YB2416内部集成80m2的上管和40m2…

Linux高级管理--安装MySQL数据库系统

MySQL服务基础 MySQL.是一个真正的多线程、多用户的SQL数据库服务&#xff0c;凭借其高性能、高可靠和易于使 用的特性&#xff0c;成为服务器领域中最受欢迎的开源数据库系统。在2008年以前&#xff0c;MySOL项目由MySQL AB公司进行开发&#xff0c;发布和支持&#xff0c;之后…

多模态统计图表综述:图表分类,图表理解,图表生成,图表大一统模型

Overview 多模态统计图表综述一、图表分类1.1 Survey1.2 常见分类数据集&#xff1a;1.3 常见图表类型 二、图表理解2.1 VQA2..1.1 DVQA CVPR20182.1.2 PlotQA 20192.1.3 ChartQA 2022 2.2 Summary2.2.1 Chart-to-text ACL 2022 三、图表生成四、图表大一统模型4.1 UniChart 20…

RHEL8_Linux使用podman管理容器

本章主要介绍使用 podman 管理容器 了解什么是容器&#xff0c;容器和镜像的关系安装和配置podman拉取和删除镜像给镜像打标签导出和导入镜像创建和删除镜像 1.了解容器及和镜像的关系 对于初学者来说&#xff0c;不太容易理解什么是容器&#xff0c;这里举一个例子。想象一下…

电线电缆行业生产管理MES系统解决方案

电线电缆行业生产管理mes系统核心功能 基础数据管理&#xff1a;对基础数据进行统一管理&#xff0c;包括组织架构、原材料数据、设备数据、报工数据、检验数据、员工数据等工艺与BOM管理&#xff1a;对工艺标准进行统一管理&#xff0c;包括工艺的版本管理、关联型号管理&…