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

news2025/1/23 18:12:44

作者:来自 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.coloradmin.cn/o/2281036.html

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

相关文章

算法刷题笔记——图论篇

这里写目录标题 理论基础图的基本概念图的种类度 连通性连通图强连通图连通分量强连通分量 图的构造邻接矩阵邻接表 图的遍历方式 深度优先搜索理论基础dfs 与 bfs 区别dfs 搜索过程深搜三部曲所有可达路径广度优先搜索理论基础广搜的使用场景广搜的过程 岛屿数量孤岛的总面积沉…

神经网络:什么是交叉熵?

在机器学习和深度学习中,交叉熵(Cross Entropy) 是一种常见的损失函数,特别适用于分类问题。尽管这个术语听起来可能有点复杂,但通过一个类比,我们可以更直观地理解它的含义和作用。 类比场景:…

数据结构——队列和栈(介绍、类型、Java手搓实现循环队列)

我是一个计算机专业研0的学生卡蒙Camel🐫🐫🐫(刚保研) 记录每天学习过程(主要学习Java、python、人工智能),总结知识点(内容来自:自我总结网上借鉴&#xff0…

[Spring] OpenFeign的使用

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏: 🧊 Java基本语法(97平均质量分)https://blog.csdn.net/2301_80050796/category_12615970.html?spm1001.2014.3001.5482 🍕 Collection与…

LangChain + llamaFactory + Qwen2-7b-VL 构建本地RAG问答系统

单纯仅靠LLM会产生误导性的 “幻觉”,训练数据会过时,处理特定知识时效率不高,缺乏专业领域的深度洞察,同时在推理能力上也有所欠缺。 正是在这样的背景下,检索增强生成技术(Retrieval-Augmented Generati…

SpringCloud Gateway 集成 Sentinel 详解 及实现动态监听Nacos规则配置实时更新流控规则

目录 一、前言二、版本选择和适配2.1、本文使用各组件版本2.2、官方推荐版本 三、部署sentinel-dashboard3.1、下载 sentinel-dashboard jar包3.2、启动 sentinel-dashboard 四、Gateway 集成 Sentinel实现控制台配置流控规则测试4.1、添加Gateway 集成 Sentinel 包4.2、添加 G…

三相电变为家庭220V,市电火线和零线关系,为什么用三相电输送

参考: https://www.zhihu.com/question/30555841/answer/85723024 上面是电力系统的主要组成,发电站发电后升压传输,然后到各大城市再降压使用。 我们看到电塔上都是三根线,那么因为整个过程都是三相电。 为什么用三相电&#xff…

YOLOv8改进,YOLOv8检测头融合DSConv(动态蛇形卷积),并添加小目标检测层(四头检测),适合目标检测、分割等

精确分割拓扑管状结构例如血管和道路,对各个领域至关重要,可确保下游任务的准确性和效率。然而,许多因素使任务变得复杂,包括细小脆弱的局部结构和复杂多变的全局形态。在这项工作中,注意到管状结构的特殊特征,并利用这一知识来引导 DSCNet 在三个阶段同时增强感知:特征…

DNS未响应服务问题的解决(电脑连着网但浏览器访问不了网页)

天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…

鸿蒙Harmony json转对象(1)

案例1 运行代码如下 上图的运行结果如下: 附加1 Json_msg interface 案例2 import {JSON } from kit.ArkTS; export interface commonRes {status: numberreturnJSON: ESObject;time: string } export interface returnRes {uid: stringuserType: number; }Entry Component …

Transformer详解:Attention机制原理

前言 Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本系列文章是作者参加DataWhale2025年1月份学习赛,旨在讲解Transformer模型的理论和实践。😲 本文将详细探讨Attention机制的原理…

SpringBoot为什么要禁止循环依赖?

大家好,我是锋哥。今天分享关于【SpringBoot为什么要禁止循环依赖?】面试题。希望对大家有帮助; SpringBoot为什么要禁止循环依赖? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring Boot 禁止循环依赖的原因与 Spring 框架本身的设计…

利用Qt5.15.2编写Android程序时遇到的问题及解决方法

文章目录 背景1.文件读写 背景 目前我用的是Qt5.15.2来编写Qt程序,环境的配置看我这篇文章【Qt5.15.2配置Android开发环境】 项目中的一些配置的截图: 1.文件读写 假如直接用 QFileDialog::getExistingDirectory来获取路径的话,会得到类…

RV1126+FFMPEG推流项目源码

源码在我的gitee上面,感兴趣的可以自行了解 nullhttps://gitee.com/x-lan/rv126-ffmpeg-streaming-projecthttps://gitee.com/x-lan/rv126-ffmpeg-streaming-project

三维扫描赋能文化:蔡司3D扫描仪让木质文化遗产焕发新生-沪敖3D

挪威文化历史博物馆在其修复工作中融入现代3D扫描技术,让数百年的历史焕发新生。 文化历史博物馆的工作 文化历史博物馆是奥斯陆大学的一个院系。凭借其在文化历史管理、研究和传播方面的丰富专业知识,该博物馆被誉为挪威博物馆研究领域的领先机构。馆…

2024年美赛C题评委文章及O奖论文解读 | AI工具如何影响数学建模?从评委和O奖论文出发-O奖论文做对了什么?

模型假设仅仅是简单陈述吗?允许AI的使用是否降低了比赛难度?还在依赖机器学习的模型吗?处理题目的方法有哪些?O奖论文的优点在哪里? 本文调研了当年赛题的评委文章和O奖论文,这些问题都会在文章中一一解答…

Text2Sql:开启自然语言与数据库交互新时代(30/30)

一、Text2Sql 简介 在当今数字化时代,数据处理和分析的需求日益增长。对于众多非技术专业人员而言,数据库操作的复杂性常常成为他们获取所需信息的障碍。而 Text2Sql 技术的出现,为这一问题提供了有效的解决方案。 Text2Sql,即文…

初阶5 排序

本章重点 排序的概念常见排序的算法思想和实现排序算法的复杂度以及稳定性分析 1.排序的概念 排序: 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性: 假定在待排序的记录序列中&#xff0…

【优选算法】6----查找总价格为目标值的两个商品

这道题相对于前寄到算法题较为容易~ 同样也是使用了双指针的算法哦~ ----------------------------------------begin-------------------------------------- 题目解析: 题目也是很简单地一句话,但是意图还是很明确~ 讲解算法原理: 同样的&…

windows11关闭系统更新详细操作步骤

文章目录 1.打开注册表2.修改注册表内容2.1 新建文件2.2 修改值 3.修改设置 1.打开注册表 winR输入regedit(如下图所示) 2.修改注册表内容 进HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsUpdate\UX\Settings 2.1 新建文件 右侧界面右键即可 2.2 修改值 重命名为如下…