Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (二)

这是继上一篇文章 “Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)” 的续篇。在这篇文章中,我主要来讲述 ElasticVectorSearch 的使用。

我们的设置和之前的那篇文章是一样的,只不过,在这里我们使用 ElasticVectorSearch 而不是 ElasticKnnSearch。

创建应用并展示

安装包

#!pip3 install langchain

导入包

from dotenv import load_dotenv
from langchain.embeddings import OpenAIEmbeddings
from langchain.vectorstores import ElasticKnnSearch
from langchain.text_splitter import CharacterTextSplitter
from urllib.request import urlopen
import os, jsonload_dotenv()openai_api_key=os.getenv('OPENAI_API_KEY')
elastic_user=os.getenv('ES_USER')
elastic_password=os.getenv('ES_PASSWORD')
elastic_endpoint=os.getenv("ES_ENDPOINT")
elastic_index_name='elastic-vector-search'

将文档分成段落

import json# Load data into a JSON object
with open('workplace-docs.json') as f:workplace_docs = json.load(f)print(f"Successfully loaded {len(workplace_docs)} documents")metadata = []
content = []for doc in workplace_docs:content.append(doc["content"])metadata.append({"name": doc["name"],"summary": doc["summary"],"rolePermissions":doc["rolePermissions"]})text_splitter = CharacterTextSplitter(chunk_size=100, chunk_overlap=0)
docs = text_splitter.create_documents(content, metadatas=metadata)

把数据写入到 Elasticsearch

embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)url = f"https://{elastic_user}:{elastic_password}@{elastic_endpoint}:9200"ssl_verify = {"verify_certs": True,"basic_auth": (elastic_user, elastic_password),"ca_certs": "./http_ca.crt"
}es = ElasticVectorSearch.from_documents( docs,embedding = embeddings, elasticsearch_url = url, index_name = elastic_index_name, ssl_verify = ssl_verify)

如上所示,ElasticVectorSearch 在未来的发布中将被移除。

运行完上面的代码后,我们可以到 Kibana 中进行查看:

展示结果

def showResults(output):print("Total results: ", len(output))for index in range(len(output)):print(output[index])

Similarity / Vector Search (KNN Search)

query = "work from home policy"
result = es.similarity_search(query=query)showResults(result)

我们上面实现的代码可以在地址  https://github.com/liu-xiao-guo/semantic_search_es/blob/main/ElasticVectorSearch.ipynb 进行下载。

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

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

相关文章

在线设计数据库表用Itbuilder,极简易用真香!!!

“如果您想要一个具有快速搜索运行的高性能数据库,那么数据库设计是必不可少的,花时间设计数据库将帮助您避免效率低下和高冗余等问题”。 在线数据库设计软件itbuilder,界面清爽漂亮,功能简洁,没有多余设置很容易上手…

MQTT(详解)

什么是MQTT MQTT(Message Queuing Telemetry Transport)是一种轻量级的通信协议,用于在设备之间传输消息。它通常用于物联网(IoT)和传感器网络中,可以在不同设备之间进行可靠的通信,而且资源消耗…

MySQL3:MySQL中一条更新SQL是如何执行的?

MySQL3:MySQL中一条更新SQL是如何执行的? MySQL中一条更新SQL是如何执行的?1.Buffer Pool缓冲池2.Redo logredo log作用Redo log文件位置redo log为什么是2个? 3.Undo log4.更新过程5.InnoDB官网架构InnoDB架构-内存结构①Buffer …

Python----break关键字对while...else结构的影响

案例: 女朋友生气,要求道歉5遍:老婆大人,我错了。道歉到第三遍的时候,媳妇埋怨这一遍说的不真诚,是不是就是要退出循环了?这个退出有两种可能性: ① 更生气,不打算原谅…

Xcode iOS app启用文件共享

在info.plist中添加如下两个配置 Supports opening documents in place Application supports iTunes file sharing 结果都为YES,如下图所示: 然后,iOS设备查看,文件->我的iPhone列表中有一个和你工程名相同的文件夹出现&…

图像去噪滤波算法汇总(Python)

前言 上篇文章:图像数据噪音种类以及Python生成对应噪音,汇总了常见的图片噪音以及噪音生成方法,主要用在数据增强上面,作为数据集填充的方式,可以避免模型过拟合。想要了解图像数据增强算法的可以去看本人所撰这篇文…

2023深耕kotlin,谈谈前景

为什么学习kotlin? Kotlin 早就已经是 Google 官方推荐的开发语言了,而且 Android 新的 Compose 框架只支持 Kotlin ,在 Google 那里,Android开发中 Java 其实已经被淘汰了。Java 和 Kotlin 虽然都属于高级语言,但是 …

Adversarial attacks and defenses on AI in medical imaging informatics: A survey

Adversarial attacks and defenses on AI in medical imaging informatics: A survey----《AI在医学影像信息学中的对抗性攻击与防御:综述》 背景: 之前的研究表明,人们对医疗DNN及其易受对抗性攻击的脆弱性一直存在疑虑。 摘要:…

设计模式:桥接模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

上一篇《适配器模式》 下一篇《装饰器模式》 简介: 桥接模式,它是一种结构型设计模式,它的主要目的是将抽象部分与具体实现部分分离,使它们都可以独立地变化。…

css 雷达扫描图

html 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>css 雷达扫描</title><style>* {margin: 0;padding: 0;}body {background: #000000;height: 100vh;display: flex;align-items…

计算机毕业设计 基于SpringBoot大学生创新创业项目管理系统的设计与实现 Javaweb项目 Java实战项目 前后端分离 文档报告 代码讲解 安装调试

&#x1f34a;作者&#xff1a;计算机编程-吉哥 &#x1f34a;简介&#xff1a;专业从事JavaWeb程序开发&#xff0c;微信小程序开发&#xff0c;定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事&#xff0c;生活就是快乐的。 &#x1f34a;心愿&#xff1a;点…

工控安全与网络安全有什么不同?

在当代&#xff0c;全球制造业正在经历一场前所未有的技术变革。工业4.0不仅代表着自动化和数据交换的进步&#xff0c;它还揭示了工业自动化、智能制造与系统集成的融合。这种集成为企业带来了效率和质量的双重提升&#xff0c;但同时也暴露出新的安全隐患。工控系统成为了这一…

不同网段的IP怎么互通

最近在整理工作的时候发现一个不同网段无法互通的问题&#xff0c;就是我们大家熟知的一级路由和二级路由无法互通的问题。由于需要记录整个过程的完整性&#xff0c;这里也需要详细记录下整个过程&#xff0c;明白的人不用看&#xff0c;可以直接跳过&#xff0c;到解决方法去…

【MyBatis Plus】深入探索 MyBatis Plus 的条件构造器,自定义 SQL语句,Service 接口的实现

文章目录 前言一、条件构造器1.1 什么是条件构造器1.2 QueryWrapper1.3 UpdateWrapper1.4 LambdaWrapper 二、自定义 SQL 语句2.1 自定义 SQL 的基本用法2.2 自定义 SQL 实现多表查询 三、Service 接口3.1 对 Service 接口的认识3.2 实现 Service 接口3.3 实现增删改查功能3.4 …

支持向量机(SVM)

一. 什么是SVM 1. 简介 SVM&#xff0c;曾经是一个特别火爆的概念。它的中文名&#xff1a;支持向量机&#xff08;Support Vector Machine, 简称SVM&#xff09;。因为它红极一时&#xff0c;所以关于它的资料特别多&#xff0c;而且杂乱。虽然如此&#xff0c;只要把握住SV…

bug:Chrome插件SwitchyOmega安装时程序包无效:“CRX_HEADER_INVALID“问题

bug&#xff1a;Chrome插件SwitchyOmega安装时程序包无效:“CRX_HEADER_INVALID“问题 1 解决 先说解决办法&#xff1a; 将下载的crx重命名为xxx.zip&#xff0c;然后解压打开chrome的开发者模式 点击加载已解压的应用程序&#xff0c;然后选择我们解压后的文件夹即可 安装成…

【linux】安装rpmrebuild

rpmrebuild是一种从已经安装的包中构建RPM文件的工具。它可以用于轻松构建修改后的包&#xff0c;并适用于任何使用RPM的Linux发行版。 访问地址 rpm rebuild download | SourceForge.net 选择版本 版本地址&#xff1a;版本地址 下载安装包 安装 rpm -ivh rpmrebuild-2.15…

简单8位CPU设计verilog微处理器,源码/视频

名称&#xff1a;8位CPU设计微处理器 软件&#xff1a;QuartusII 语言&#xff1a;Verilog 代码功能&#xff1a; 设计一个简单的处理器&#xff0c;可以实现加减法以及简单的逻辑运算。 设计包括程序计数器电路&#xff0c;指令存储器电路&#xff0c;指令译码器电路(控制器…

数字化转型系列主题:数据中台知识体系

当前&#xff0c;大部分企业不再建设从源数据采集到分析应用的烟囱式系统&#xff0c;更倾向于数据集中采集、存储&#xff0c;并应用分层建设。这种方式一方面有利于应用系统的快速部署&#xff0c;另一方面也保证了数据的集中管理与运营&#xff0c;体现数据的资产、资源属性…

异常---

目录 认识异常 自定义异常 认识异常 1.异常是什么&#xff1f; 2&#xff0e;异常的代表是谁&#xff1f;分为几类&#xff1f; Error &#xff1a;代表的系统级别错误&#xff08;属于严重问题&#xff09;&#xff0c;也就是说系统一旦出现问题&#xff0c; s u n 公司会把…