ChatGPT 摘要,以 ESS 作为你的私有数据存储

作者:来自 Elastic Ryan_Earle

本教程介绍如何设置 Elasticsearch 网络爬虫,将网站索引到 Elasticsearch 中,然后利用 ChatGPT 使用我们的私人数据来总结对其提出的问题。

Python 脚本的 Github Repo:https://github.com/Gunnerva/elastic_chatgpt/

目标:

了解如何使用 Elasticsearch 作为 ChatGPT 的私有数据存储。

流程

1. 创建 ESS 部署

要开始本教程,我们将首先创建 ESS 部署。
在 ESS 上创建 Elasticsearch 集群 8.17 或更高版本。确保它至少包含 1 个机器学习节点。

建议的最小配置:

  • 2 个 8GB 热节点
  • 1 个 2GB 机器学习节点(确保未启用机器学习自动扩展,这有助于了解这些机器学习过程对你的资源的影响)。部署模型时,模型的分配越多,所需的内存就越多。

请注意此过程中机器学习节点的使用情况。根据你决定定位的网站,机器学习节点可能是你的瓶颈。这是因为必须对文档进行索引,然后机器学习节点将在提取文档时将下一步中引用的嵌入模型应用于文档。

布局示例:

你的 Elasticsearch 集群需要可供远程 AI 源使用。这不需要 ESS,但它是最容易快速实现的。一般来说,本地部署需要防火墙规则等...以允许远程 AI 连接到本地 Elasticsearch 集群。

2. 设置嵌入模型

在抓取我们的网站以创建与 ChatGPT 交互的私有索引之前,我们需要将嵌入模型加载到 Elasticsearch 中。

对于此示例,我们将使用由 SentenceTransformers 训练并托管在 Hugging Face 模型中心的 all-distilroberta-v1 (sentence-transformers/all-distilroberta-v1 · Hugging Face) 模型。可以使用其他模型,但此特定模型适合一般用途,并且是在涵盖各种主题的大型数据集上进行训练的。

此特定模型不是此设置工作所必需的。它适合一般用途,因为它是在涵盖广泛主题的非常大的数据集上进行训练的。但是,对于向量搜索用例,使用针对你的特定数据集进行微调的模型通常会提供最佳结果。例如,如果你正在搜索科学研究论文,此模型可能不是最好的。

为此,我们将使用 Elastic 创建的 Eland Python 库(

python3 -m pip install 'eland[pytorch]'

GitHub - elastic/eland:用于 Elasticsearch 中的 DataFrames、大数据、机器学习和 ETL 的 Python 客户端和工具包)。该库提供了广泛的数据科学功能,但我们将使用它作为桥梁,将模型从 Hugging Face 模型中心加载到 Elasticsearch 中,以便将其部署在机器学习节点上进行推理。

Eland 可以从命令行、docker 容器或作为 Python 脚本的一部分运行。

从命令行安装(使用 Ubuntu 20.04 的示例)。此处有其他 Docker 说明:导入训练后的模型和词汇表 | Elastic Stack 中的机器学习 [8.17] | Elastic

:你可以参考我之前的的文章 “Elasticsearch:如何部署 NLP:文本嵌入和向量搜索” 来进行部署。

步骤 1:在你的机器上安装 eland 或使用 Docker(请参阅上面的链接了解 Docker 说明):

python3 -m pip install 'eland[pytorch]'

步骤 2 :复制你的 ESS 部署 URL

转到 https://cloud.elastic.co 并登录。选择目标部署旁边的 “Manage”。单击 Elasticsearch 旁边的 “Copy Endpoint”

步骤 3:将模型加载到 Elasticsearch

使用你从云控制面板(Cloud Control Panel)复制的 URL、Elastic 用户名和密码 —— 完成以下命令并执行。

以下命令将把 hub-model 加载到你的机器学习节点上并自动启动它。

eland_import_hub_model --url https://test-f22762.es.us-central1.gcp.cloud.es.io:9243 -u elastic -p YOURPASSWORD --hub-model-id sentence-transformers/all-distilroberta-v1 --task-type text_embedding

步骤 4 - 登录 Kibana 并验证模型是否已启动

  • 登录 Kibana
  • 导航至 Machine Learning
  • 在模型管理下单击 “Trained Models”

3. 抓取你的数据

步骤 1:确定你想要抓取的网站。在此示例中,我们将抓取 NFL 名人堂(NFL's hall of fame)。

-- 我们不会设置排除项等...但应在生产中配置它们

步骤 2:登录 Kibana。

在 “Search” 下选择 Elasticsearch

步骤 3:单击 “ Web Crawlers”

步骤 4:单击 “New Web Crawler”

步骤 5:输入索引的名称。

它将以 “search” 作为前缀。例如:nfl-hof 将成为索引 search-nfl-hof

第 6 步:单击 “Create Index”

第 7 步:转到 “管理域” 添加要抓取的域。

单击 “Validate Domain”,然后单击 “Add Domain”。

示例:Players | Pro Football Hall of Fame | Pro Football Hall of Fame(球员 | 职业足球名人堂 | 职业足球名人堂)

第 8 步:转到管道

单击 “Unlock your custom pipelines” 下的 “Copy and Customize”

接下来查看 “Machine Learning Inference Pipelines” - 单击 “Add Inference Pipleine”

步骤 9:选择密集向量文本嵌入 sentence-transformers__all-distilroberta-v1 然后点击继续

步骤 10:在“Select Field Mappings” 下选择 “Title”,然后单击 “Add”

第 11 步:单击 “Continue”,直到看到 “Create Pipeline”,然后单击 “Create Pipeline”

步骤12:单击 “Crawl”

步骤 13:检查网络爬虫索引并确保文档被填充到搜索索引中

第 14 步:执行测试查询,确保你有兴趣发送到 ChatGPT 的文档已被提取到 Elasticsearch 中

示例查询,以确保 Walter Payton 文档已被提取到索引中。

GET search-nfl-hofx/_search
{"query": {"match": {"title" : "Walter Payton"}}
}

4. 安装 Streamlit

需要 Streamlit 来执行步骤 5 中引用的 python 脚本。这将创建界面。

pip install streamlit

通过从控制台发出以下命令来测试并确保 Streamlit 已成功安装:

streamlit hello

5. 下载 python 脚本。

链接:https://github.com/elastic/support/tree/master/chatgpt_demo

有两个选项:

  • A. 将 ESS 连接到 OpenAI 脚本:
    • hof_es_gpt_noBing.py
  • B. 将 ESS 连接到 OpenAI 并将 Bing 连接到 OpenAI
    • hof_es_gpt_withBing.py

在 Python 脚本中编辑索引名称以匹配你在设置网络爬虫时创建的索引的名称:hof_es_gpt_noBing.py 中的第 70 行

index = 'search-nfl-hofx'

6. 设置外部资源:

设置 OpenAI 的 ChatGPT:

要连接到 ChatGPT,你需要一个 OpenAI API 帐户和密钥。如果你还没有帐户,你可以创建一个免费帐户,你将获得初始免费积分。

转到 https://platform.openai.com 并单击注册。

创建帐户后,你需要创建一个 API 密钥:

  • 单击 API Keys。
  • 单击 Create new secret key。
  • 复制新密钥并将其保存在安全的地方,因为你将无法再次查看该密钥。

可选设置 Bing API —— 这将允许应用程序首先搜索 ESS 数据存储,然后如果找不到数据,则允许它通过 Bing 搜索互联网。

Bing Custom Search API:Bing Custom Search API | Microsoft Bing

7. 设置脚本

  • 步骤 1. 启动控制台
  • 步骤 2. 导航到保存 Python 脚本的目录
  • 步骤 3. 在控制台中定义脚本变量:

所需要的变量:

OpenAI API Key
ESS Cloud ID
ESS username
ESS password

可选(取决于脚本):

  • Bing API 密钥
  • Bing 端点

在运行 Python 脚本之前,我们需要在控制台中定义一些变量。如果你不使用 Bing 脚本,则可以跳过 Bing 变量 - 更改 API 密钥以匹配你的 API 密钥。以下密钥已被撤销(只是作为展示使用目的)。

export openai_api="sk-IduoyWxSoVRtGpJUiyY99QaGO70v8sf1agXvuuFrVUT3BlbkFJrUBcDHY-ervQgdun2Z7IkJa6YYXqCczk1NnrEzPSEA"
export cloud_id="814-test:dXMtY2VudHJhbDEuZ2NwLmNsb3VkLmVzLmlvOjQ0MyQ5ZDJiZDRlODc3YmM0YmQ0YWFhM2I4MjBlMzk2ZDhiYSQwYWM5YjRmMWEzZTg0ODdlOTlmZGM3OTVkZjg4YTUxNQ=="
export cloud_pass="aCu1A6hkhQAw6cso359o8IH5"
export cloud_user="elastic"
export bing_subkey="94b11de338384967a4ddb61b611d3c97"
export bing_endpoint="https://api.bing.microsoft.com/"

定义以下变量后执行脚本:

使用 streamlit 执行脚本:

streamlit run hof_es_gpt_noBing.py

示例

最终产品应该是什么样子或是什么样子的示例:

测试:

如何测试我们上传的模型:

POST _ml/trained_models/sentence-transformers__all-distilroberta-v1/_infer
{"docs": [{"text_field": "Halo is a military science fiction media franchise, originally developed and created by Bungie and currently managed and developed by 343 Industries, part of Microsofts Xbox Game Studios. The series launched in 2001 with the first-person shooter video game Halo: Combat Evolved and its tie-in novel, The Fall of Reach. The latest main game, Halo Infinite, was released in late 2021. Combat Evolved started life as a real-time strategy game for personal computers, turning into a first-person shooter exclusive to Microsoft's Xbox video game console after Bungie was acquired by the company. Bungie regained its independence in 2007, releasing additional Halo games through 2010 before moving on from the franchise. Microsoft established 343 Industries to oversee Halo going forward, producing games itself and in partnership with other studios."},{"text_field": "Sonic the Hedgehog[c] is a 1991 platform game developed by Sonic Team and published by Sega for the Genesis/Mega Drive. It was released in North America on June 23 and in PAL regions and Japan the following month. Players control Sonic the Hedgehog, who can run at near supersonic speeds; Sonic sets out on a quest to defeat Dr. Robotnik, a scientist who has imprisoned animals in robots and seeks the powerful Chaos Emeralds. The gameplay involves collecting rings as a form of health, and a simple control scheme, with jumping and attacking controlled by a single button. Development began in 1990 when Sega ordered its developers to create a game featuring a mascot for the company. The developers chose a blue hedgehog designed by Naoto Ohshima after he won an internal character design contest, and named themselves Sonic Team to match their character. It uses a novel technique that allows Sonic's sprite to roll along curved scenery which was based on a concept by Oshima from 1989.[2] Sonic the Hedgehog, designed for fast gameplay, was influenced by games by Super Mario series creator Shigeru Miyamoto. The music was composed by Masato Nakamura, bassist of the J-pop band Dreams Come True."}],"inference_config": {"text_embedding": {}}
}

获取我们上传的模型的统计信息:

GET _ml/trained_models/sentence-transformers__all-distilroberta-v1/_stats

测试查询:

传统查询:

POST search-nfl-hof/_search
{"size": 1,"query": {"bool": {"must": [{"match": {"title": {"query": "Walter Payton","boost": 1}}},{"knn": {"field": "ml.inference.title.predicted_value","num_candidates": 20,"query_vector_builder": {"text_embedding": {"model_id": "sentence-transformers__all-distilroberta-v1","model_text": "Walter Payton"}},"boost": 24}}],"filter": [{"exists": {"field": "ml.inference.title.predicted_value"}}]}}
}

KNN Query:

POST search-nfl-hof/_search
{"size" : 1,"query" : {"bool" : {"must" : {"knn": {"field": "ml.inference.title.predicted_value","num_candidates": 20,"query_vector_builder": {"text_embedding": {"model_id": "sentence-transformers__all-distilroberta-v1","model_text": "Tell me about Tom Brady"}},"boost": 24}}}}}

原文:Dec 16th, 2024: [EN] ChatGPT Summary with ESS as your Private Datastore - Advent Calendar - Discuss the Elastic Stack

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

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

相关文章

java开发,IDEA转战VSCODE配置(mac)

一、基本java开发环境配置 前提:已经安装了jdk、maven、vscode,且配置了环境变量 1、安装java相关的插件 2、安装spring相关的插件 3、vscode配置maven环境 打开 VsCode -> 首选项 -> 设置,也可以在setting.json文件中直接编辑&…

Autosar CP中SWC收发LIN消息的函数调用流程原理解析

Part 1:SWC发送 在AUTOSAR架构中,软件组件(SWC,Software Component)要发送LIN消息时,通常通过COM模块的接口来发起请求。这是因为COM模块是AUTOSAR架构中负责信号和数据传输的核心模块,它为SWC提…

Flink Gauss CDC:深度剖析存量与增量同步的创新设计

目录 设计思路 1.为什么不直接用FlinkCDC要重写Flink Gauss CDC 2.存量同步的逻辑是什么 2.1、单主键的切片策略是什么 2.2、​​​​​复合主键作切片,怎么保证扫描到所有的数据 3、增量同步的逻辑是什么 4、存量同步结束之后如何无缝衔接增量同步 5、下游数据如何落…

C#,入门教程(06)——解决方案资源管理器,代码文件与文件夹的管理工具

上一篇: C#,入门教程(05)——Visual Studio 2022源程序(源代码)自动排版的功能动画图示https://blog.csdn.net/beijinghorn/article/details/124675293 大家平时都怎么管理源代码与文件夹呢?世界上最好的集成开发环境…

【时时三省】(C语言基础)文件的顺序读写

山不在高,有仙则名。水不在深,有龙则灵。 ----CSDN 时时三省 文件顺序读写 示例: 这个会输出bit 如果把写文件的内容屏蔽掉 它就会把它清空 流 高度抽象的概念 可以往流里面写数据 c语言程序,只要运行起来,就默认…

Web安全攻防入门教程——hvv行动详解

Web安全攻防入门教程 Web安全攻防是指在Web应用程序的开发、部署和运行过程中,保护Web应用免受攻击和恶意行为的技术与策略。这个领域不仅涉及防御措施的实现,还包括通过渗透测试、漏洞挖掘和模拟攻击来识别潜在的安全问题。 本教程将带你入门Web安全攻防…

Bigemap pro批量设置属性/填充字段

在图层里面有大量点位或者线面需要批量编辑时,可以借助bigemap pro软件来进行编辑修改 第一步:在对应图层点击右键,选择样式,选择需要修改的点线面来设置图标、大小等,如图所示: 第二步:设置要…

全球化趋势与中资企业出海背景

1. 全球化趋势与中资企业出海背景 1.1 全球经济格局变化 全球经济格局正经历深刻变革,新兴经济体崛起,全球产业链重塑,中资企业出海面临新机遇与挑战。据世界银行数据,新兴市场和发展中经济体在全球 GDP 中占比已超 40%&#xff…

汇编与逆向(二)-汇编基础

一、汇编入门 (一)x86体系的CPU的工作模式 有两种基本的工作模式:实模式和保护模式。 实模式:也称为实地址模式,该模式最早被DOS,win9x所支持。可访问1M内存,可直接访问硬件,如对…

【游戏设计原理】77 - 沙盒与导轨

沙盒式体验和导轨式体验是游戏设计中两种截然不同的理念和手法,它们各自的特性和目标受众决定了其适用场景和设计思路。以下是对这两种体验的理解: 一、沙盒式体验 核心特点 自由度高:沙盒游戏给予玩家极大的自由,让他们自己决定…

【STM32】-TTP223B触摸开关

前言 本文章旨在记录博主STM32的学习经验,我自身也在不断的学习当中,如果文章有写的不对的地方,欢迎各位大佬批评指正。 准备工作 今天这篇文章介绍的是触摸开关这一外围硬件。 ST-link调试器STM32最小系统板单路TTP223B触摸传感器模块LE…

Python的进程和线程

ref 接受几个设定: 进程是一家almost密不透风的公司,缅甸KK园区 线程里面工作的…人 进程**[园区]**内公共资源对于进程来说,可以共享. 别的园区[进程],一般不能和自己的园区共享人员资源,除非… 好的,现在再接受设定: 单个CPU在任一时刻只能执行单个线程,只有…

消息队列篇--原理篇--Pulsar和Kafka对比分析

Pulsar和Kafka都是高性能、分布式的消息队列系统,广泛应用于大规模数据流处理和实时分析场景。然而,它们的设计哲学、架构特点和适用场景存在显著差异。以下是Pulsar和Kafka的详细对比,帮助你根据具体需求选择最合适的技术。 1、架构设计 P…

Git实用指南:忽略文件、命令别名、版本控制、撤销修改与标签管理

目录 1.忽略特殊文件 1.1.那如何配置我们需要忽略的文件的呢? 1.2.如何检验效果? 2.给命令配置别名 3.基本操作之版本回退 3.1.使用场景: 3.2.使用方法: 4.撤销修改 情况一:对于工作区的代码,还没…

Saas Paas Iaas服务区别

Saas、Paas和Iaas是云计算中常见的服务模式,它们分别代表软件即服务(Software as a Service)、平台即服务(Platform as a Service)和基础设施即服务(Infrastructure as a Service)。仅供大家参考…

nslookup在内网渗透的使用

1. 什么是 nslookup? nslookup(Name Server Lookup)是一个用于查询 DNS(域名系统)记录的命令行工具。通过该工具,用户可以查询域名的解析结果,例如获取某个域名对应的 IP 地址或查找域名的相关记…

博客搭建 — GitHub Pages 部署

关于 GitHub Pages GitHub Pages 是一项静态站点托管服务&#xff0c;它直接从 GitHub 上的仓库获取 HTML、CSS 和 JavaScript 文件&#xff0c;通过构建过程运行文件&#xff0c;然后发布网站。 本文最终效果是搭建出一个域名为 https://<user>.github.io 的网站 创建…

pikachu靶场-敏感信息泄露概述

敏感信息泄露概述 由于后台人员的疏忽或者不当的设计&#xff0c;导致不应该被前端用户看到的数据被轻易的访问到。 比如&#xff1a; ---通过访问url下的目录&#xff0c;可以直接列出目录下的文件列表; ---输入错误的url参数后报错信息里面包含操作系统、中间件、开发语言的版…

阿九的python 爬虫进阶课18.3 学习笔记

文章目录 前言1. 爬取大标题2. 爬取小标题3. 证券栏下的标题4. 某篇文章里的具体内容 前言 网课链接&#xff1a;https://www.bilibili.com/video/BV1kV4y1576b/新浪财经网址&#xff1a;https://finance.sina.com.cn/需先下载库&#xff1a; conda install lxml布置爬取的一…

客户案例:电商平台对帐-账单管理(亚马逊amazon)

账单管理&#xff1a; 功能定义&#xff1a; 账单管理用于上传亚马逊&#xff08;amazon&#xff09;平台下载的原始账单数据&#xff0c;美国站、日本站、墨西哥站等账单模板直接进行数据上传&#xff0c;做到0调整&#xff0c;下载下来的账单数据无缝上传至对账平台-账单管…