Elasticsearch:使用 Amazon Bedrock 的 semantic_text

作者:来自 Elastic Gustavo Llermaly

使用 semantic_text 新功能,并使用 AWS Bedrock 作为推理端点服务。

Elasticsearch 的新 semantic_text 映射类型旨在简化构建 RAG 应用程序的常见挑战。它整合了文本分块、生成嵌入以及检索嵌入的步骤。

在本文中,我们将使用 Amazon Bedrock 作为我们的推理服务,在不离开 Elastic 的情况下创建一个端到端 RAG 应用程序。

步骤

  1. 创建端点
  2. 创建映射
  3. 索引数据
  4. 提出问题

创建端点

在创建索引之前,我们必须创建用于推理过程的端点。端点将被命名为:

  1. 嵌入任务
  2. 完成任务

我们将使用 Bedrock 作为它们的提供者。使用这两个端点,我们可以仅使用 Elastic 工具创建一个完整的 RAG 应用程序!

如果你想了解有关如何配置 Bedrock 的更多信息,我建议你先阅读这篇文章。

嵌入任务

此任务将帮助我们为文档内容和用户将要提出的问题创建向量嵌入(vector embeddings)。

利用这些向量,我们可以找到与问题更相关的块并检索包含答案的文档。

继续在 Kibana DevTools 控制台中运行以创建端点:

PUT _inference/text_embedding/bedrock-embeddings
 {
    "service": "amazonbedrock",
    "service_settings": {
        "access_key": "{AWS_ACCESS_KEY}",
        "secret_key": "{AWS_SECRET_KEY}",
        "region": "{AWS_REGION}",
        "provider": "amazontitan",
        "model": "amazon.titan-embed-text-v1"
    }
}
  • provider 必须是 amazontitan、cohere 之一
  • model 必须是你在 Bedrock 中可以访问的 model_id

可选附加设置

  • dimensions:用于推理的输出维度
  • max_input_tokens:输入 token 的最大数量
  • similarity:要使用的相似度度量

Completion 任务

找到最佳块(chunk)后,我们必须将它们发送到 LLM 模型,以便它可以为我们生成答案。

运行以下命令添加完成端点:

PUT _inference/completion/bedrock-completion
{
    "service": "amazonbedrock",
    "service_settings": {
        "access_key": "{AWS_ACCESS_KEY}",
        "secret_key": "{AWS_SECRET_KEY}",
        "region": "{AWS_REGION}",
        "model": "anthropic.claude-3-haiku-20240307-v1:0",
        "provider": "anthropic",
    }
}
  • provider 必须是 amazontitan、anthropic、ai21labs、cohere、meta、mistral 之一
  • model 必须是你在 Bedrock 中可以访问的一个 model_id 或 ARN

创建映射

新的 semantic_text 映射类型将使事情变得非常简单。它将负责推断嵌入映射和配置,并为你进行段落分块!如果你想了解更多信息,可以阅读这篇精彩的文章。

PUT semantic-text-bedrock
{
  "mappings": {
    "properties": {
      "super_body": {
        "type": "semantic_text",
        "inference_id": "bedrock-embeddings"
      }
    }
  }
}

是的。就是这样。super_body 已准备好使用向量进行搜索,并处理分块。

索引数据

对于数据索引,我们有许多方法可用,你可以选择你喜欢的方法。

为了简单起见和递归性,我将把我们的这整篇文章复制为富文本并将其存储为文档。

POST semantic-text-bedrock/_doc
{
  "super_body": "<The content of this article>"
}

我们有它。是时候测试了。

提问

提问和回答是一个两步过程。首先,我们必须检索与问题相关的文本块,然后我们必须将块发送到 LLM 以生成答案。

我们将探索两种策略来实现这一点,正如承诺的那样,无需任何额外的代码或框架。

策略 1:API 调用

我们可以运行两个 API 调用:一个到 _search 端点以检索块,另一个到 inference 端点以执行 LLM 完成步骤。

检索块

我们将尝试一种 “大海捞针” 查询,以确保 LLM 的答案是从这篇文章中获得的,而不是从 LLM 基础知识中获得的。我们将询问有关这篇文章的递归性的 cat.gif。

我们可以运行简短的语义文本默认查询:

GET semantic-text-bedrock/_search
{
  "query": {
    "semantic": {
      "field": "super_body",
      "query": "what's the cat thing about?"
    }
  }
}

问题是,这个查询不会按相关性对内部命中(块)进行排序,如果我们不想将整个文档作为上下文发送到 LLM,那么我们就需要这样做。它将按文档而不是按块对文档的相关性进行排序。

这个较长的查询将按相关性对内部命中(块)进行排序,因此我们可以抓取有用的内容。

GET semantic-text-bedrock/_search
{
  "_source": false,
  "retriever": {
    "standard": {
      "query": {
        "nested": {
          "path": "super_body.inference.chunks",
          "query": {
            "knn": {
              "field": "super_body.inference.chunks.embeddings",
              "query_vector_builder": {
                "text_embedding": {
                  "model_id": "bedrock-embeddings",
                  "model_text": "what's the cat thing about?"
                }
              }
            }
          },
          "inner_hits": {
            "size": 1,
            "name": "semantic-text-bedrock.super_body",
            "_source": "*.text"
          }
        }
      }
    }
  }
}

我们将根级 _source 设置为 false,因为我们只对相关块感兴趣

如你所见,我们正在使用 retrievers 进行此查询,响应如下所示:

现在,我们可以从响应中复制顶部块并将文本组合成一个大字符串。一些框架所做的是向每个块添加元数据。

回答问题

现在我们可以使用我们之前创建的 bedrock 完成端点将此问题与相关块一起发送并获取答案。

POST _inference/completion/bedrock-completion
{
    "input": """Answer the question:\n
    
    _what's the cat thing about?_ , 
    based on the following context \n 
    
    <paste the relevant chunks here>"""
}

我们来看看答案吧!

策略 2:Playground

现在你已经了解了内部工作原理,让我向你展示如何轻松完成此操作,并使用漂亮的用户界面。使用 Elastic Playground。

转到 Playground,配置 Bedrock 连接器,然后选择我们刚刚创建的索引,你就可以开始了。

从这里你可以开始向你的全新索引提出问题。

如果你想了解块文档的另一种方法,我们建议你阅读有关使用嵌套向量字段的摄取管道的信息。

结论

新的 semantic_text 映射类型使创建 RAG 设置变得非常容易,而无需离开 Elastic 生态系统。分块和映射设置等不再是挑战(至少最初不是!),并且有多种替代方法可以向数据提问。

AWS Bedrock 通过提供嵌入和 completion 端点以及作为 Playground 连接器包含在内而完全集成!

如果你有兴趣重现本文的示例,可以在此处找到包含请求的 Postman 集合

准备好自己尝试一下了吗?开始免费试用。
Elasticsearch 集成了 LangChain、Cohere 等工具。加入我们的高级语义搜索网络研讨会,构建你的下一个 GenAI 应用程序!

原文:semantic_text with Amazon Bedrock — Search Labs

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++进阶(while循环——函数应用)

知识点代码框架总结 输入n组数据 &#xff0c;对n组数据里面的每一组进行处理&#xff08;输出、求和 、运算、其他&#xff09; int n;//几组数据cin >> n;//2while(n--){//对每组数据进行处理}看到下面的样例&#xff0c;肌肉型反映出上面的框架//2// 1 2 3// 4 5 6若…

机器学习筑基篇,Jupyter Notebook 精简指南

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 0x00 Jupyter Notebook 简明指南 描述&#xff1a;前面我们已经在机器学习工作站&#xff08;Ubuntu 24.04 Desktop Geforce RTX 4070Ti SUPER&#xff09;中安装 Anaconda 工具包&#xff0c;其…

Oracle23ai 新特性IF [NOT] EXISTS 语法支持

Oracle23ai 新特性IF [NOT] EXISTS Syntax Support 官方文档地址 https://docs.oracle.com/en/database/oracle/oracle-database/23/lnpls/release-changes.html#GUID-9EE96980-43F9-4068-893E-C191CD83ACA6 IF [NOT] EXISTS 语法支持 CREATE、ALTER和DROP DDL语句支持IF NO…

python:绘制一元三次函数的曲线

编写 test_x3_3x.py 如下 # -*- coding: utf-8 -*- """ 绘制函数 y x^33x4 在 -3<x<3 的曲线 """ import numpy as np from matplotlib import pyplot as plt# 用于正常显示中文标题&#xff0c;负号 plt.rcParams[font.sans-serif] […

【人工智能】线性回归

目录 一、使用正规化方法计算下列样本的预测函数 1. 没有归一化之前 2. 归一化之后 二、读取ex1data2.txt中的数据&#xff0c;建立样本集&#xff0c;使用正规化法获取&#xff08;房屋面积&#xff0c;房间数量&#xff09;与房屋价格间的预测函数 1. 读取数据&#xff…

pico+unity3d项目配置

重点&#xff1a;unity编辑器版本要和pico的sdk要求一致、比如&#xff1a; 对于 Unity 2022.1.14 及以上版本&#xff0c;若同时在项目中使用 URP、Linear 色彩空间、四倍抗锯齿和OpenGL&#xff0c;会出现崩溃。该问题待 Unity 引擎解决。对于 Unity 2022&#xff0c;若同时…

Ubuntu20.04 编译安装FFmpeg,出错分析以及解决方案

最近工程上需要对FFmpeg底层源码进行修改&#xff0c;需要重新编译&#xff0c;遇见不少坑&#xff0c;出篇教程记录一下。 文章目录 1.FFmpeg源码下载地址2.编译环境配置3.编译FFmpeg4.配置FFmpeg运行环境 1.FFmpeg源码下载地址 官方下载地址:Index of /releases (ffmpeg.or…

寄存器分配

概述 寄存器位于CPU 或 GPU内部的少量高速存储器&#xff0c;通常用于保存机器指令的操作数 由于其价格昂贵&#xff0c;导致其数量有限&#xff0c;又由于存储速度快&#xff0c;使其不可或缺。因此&#xff0c;寄存器是计算机体系结构中的关键资源之一。在计算复杂表达式的…

Python爬虫速成之路(2):爬天气情况

hello hello~ &#xff0c;这里是绝命Coding——老白~&#x1f496;&#x1f496; &#xff0c;欢迎大家点赞&#x1f973;&#x1f973;关注&#x1f4a5;&#x1f4a5;收藏&#x1f339;&#x1f339;&#x1f339; &#x1f4a5;个人主页&#xff1a;绝命Coding-CSDN博客 &a…

常见问题记录(持续更新)

备注&#xff1a; 在7月10日记录之前遇到的问题及解决方法: 一&#xff1a;常见的访问问题&#xff1a; 403 Forbidden&#xff1a;&#xff08;未有请求权限&#xff09; 表示服务器理解请求但是拒绝执行它。这通常是由于服务器上的文件或资源没有正确的读、写或执行权限&…

IDEA启动Web项目总是提示端口占用

文章目录 IDEA启动Web项目总是提示端口占用一、前言1.场景2.环境 二、正文1.场景一:真端口占用2. 场景二:假端口占用 IDEA启动Web项目总是提示端口占用 一、前言 1.场景 IDEA启动Web项目总是提示端口占用&#xff1a; 确实是端口被占用&#xff0c;比如&#xff1a;没有正常…

复制vmware虚拟机文件并改名(文件名使用python替换)得到一台新的虚拟机

文章目录 需求实验复制文件夹并重命名使用python将所有文件名“WinSer2022”字符替换成“wingetmac”修改虚拟机配置文件&#xff08;.vmx&#xff09;打开新的虚拟机成功 需求 将已有的Winser2022虚拟机复制成wingetmac并开机 实验 复制文件夹并重命名 将"WinSer2022…

使用机器学习 最近邻算法(Nearest Neighbors)进行点云分析 (scikit-learn Open3D numpy)

使用 NearestNeighbors 进行点云分析 在数据分析和机器学习领域&#xff0c;最近邻算法&#xff08;Nearest Neighbors&#xff09;是一种常用的非参数方法。它广泛应用于分类、回归和聚类分析等任务。下面将介绍如何使用 scikit-learn 库中的 NearestNeighbors 类来进行点云数…

NSSCTF_RE(一)暑期

[SWPUCTF 2021 新生赛]简单的逻辑 nss上附件都不对 没看明白怎么玩的 dnspy分析有三个 AchievePoint , game.Player.Bet - 22m; for (int i 0; i < Program.memory.Length; i) { byte[] array Program.memory; int num i; array[num] ^ 34; } Environment.SetEnvironment…

全自主巡航无人机项目思路:STM32/PX4 + ROS + AI 实现从传感融合到智能规划的端到端解决方案

1. 项目概述 本项目旨在设计并实现一款高度自主的自动巡航无人机系统。该系统能够按照预设路径自主飞行&#xff0c;完成各种巡航任务&#xff0c;如电力巡线、森林防火、边境巡逻和灾害监测等。 1.1 系统特点 基于STM32F4和PX4的高性能嵌入式飞控系统多传感器融合技术实现精…

机器学习(五) -- 监督学习(6) --逻辑回归

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;5&#xff09; -- 线性回归2 下篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;7&#xff09; --SVM1 前言 tips&#xff1a;标题前有“***”的内…

GuLi商城-商品服务-API-品牌管理-JSR303分组校验

注解:@Validated 实体类: package com.nanjing.gulimall.product.entity;import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.nanjing.common.valid.ListValue; import com.nanjing.common.valid.Updat…

[Vulnhub] Stapler wp-videos+ftp+smb+bash_history权限提升+SUID权限提升+Kernel权限提升

信息收集 IP AddressOpening Ports192.168.8.106TCP:21,22,53,80,123,137,138,139,666,3306, Using Nmap for scanning: $ nmap -p- 192.168.8.106 --min-rate 1000 -sC -sV The results are as follows: PORT STATE SERVICE VERSION 20/tcp closed ftp-data…

交换机和路由器的工作流程

1、交换机工作流程&#xff1a; 将接口中的电流识别为二进制&#xff0c;并转换成数据帧&#xff0c;交换机会记录学习该数据帧的源MAC地址&#xff0c;并将其端口关联起来记录在MAC地址表中。然后查看MAC地址表来查找目标MAC地址&#xff0c;会有一下一些情况&#xff1a; MA…

springboot新闻发布及管理系统-计算机毕业设计源码21929

新闻发布及管理系统的设计与实现 摘 要 新闻发布及管理系统的设计与实现&#xff0c;是当下信息社会发展的重要一环。随着互联网的普及和新闻媒体的数字化转型&#xff0c;一个高效、稳定且功能全面的新闻发布与管理平台显得尤为重要。SpringBoot框架以其简洁、快速和易于集成的…