将 Amazon Bedrock 与 Elasticsearch 和 Langchain 结合使用

Amazon Bedrock 是一项完全托管的服务,通过单一 API 提供来自 AI21 Labs、Anthropic、Cohere、Meta、Stability AI 和 Amazon 等领先 AI 公司的高性能基础模型 (FMs) 选择,以及广泛的 构建生成式 AI 应用程序所需的功能,简化开发,同时维护隐私和安全。 由于 Amazon Bedrock 是无服务器的,因此你无需管理任何基础设施,并且可以使用你已经熟悉的 AWS 服务将生成式 AI 功能安全地集成和部署到你的应用程序中。

在此示例中,我们将文档拆分为段落,在 Elasticsearch 中索引该文档,使用 ELSER 执行语义搜索来检索相关段落。 通过相关段落,我们构建了上下文并使用 Amazon Bedrock 来回答问题。

1. 安装包并导入模块

首先我们需要安装模块。 确保 python 安装的最低版本为 3.8.1。

!python3 -m pip install -qU langchain elasticsearch boto3

然后我们需要导入模块

from getpass import getpass
from urllib.request import urlopen
from langchain.vectorstores import ElasticsearchStore
from langchain.text_splitter import CharacterTextSplitter
from langchain.llms import Bedrock
from langchain.chains import RetrievalQA
import boto3
import json

注意:boto3 是适用于 Python 的 AWS 开发工具包的一部分,并且需要使用 Bedrock LLM

2. 初始化基岩客户端

要在 AWS 服务中授权,我们可以使用 ~/.aws/config 文件和配置凭证或将 AWS_ACCESS_KEY、AWS_SECRET_KEY、AWS_REGION 传递给 boto3 模块

我们的示例使用第二种方法。

default_region = "us-east-1"
AWS_ACCESS_KEY = getpass("AWS Acces key: ")
AWS_SECRET_KEY = getpass("AWS Secret key: ")
AWS_REGION = input(f"AWS Region [default: {default_region}]: ") or default_regionbedrock_client = boto3.client(service_name="bedrock-runtime",region_name=AWS_REGION,aws_access_key_id=AWS_ACCESS_KEY,aws_secret_access_key=AWS_SECRET_KEY
)

3. 连接到 Elasticsearch

ℹ️ 我们为此 notebook 使用 Elasticsearch 的 Elastic Cloud 部署。 如果你没有 Elastic Cloud 部署,请在此处注册免费试用。

我们将使用 Cloud ID 来标识我们的部署,因为我们使用的是 Elastic Cloud 部署。 要查找你的部署的 Cloud ID,请转至 https://cloud.elastic.co/deployments 并选择你的部署。

我们将使用 ElasticsearchStore 连接到我们的 Elastic 云部署。 这将有助于轻松创建和索引数据。 在 ElasticsearchStore 实例中,将嵌入设置为 BedrockEmbeddings 以嵌入本示例中将使用的文本和 elasticsearch 索引名称。 在本例中,我们将 strategy 设置为 ElasticsearchStore.SparseVectorRetrievalStrategy(),因为我们使用此策略来拆分文档。

当我们使用 ELSER 时,我们使用 SparseVectorRetrievalStrategy 策略。 该策略使用 Elasticsearch 的稀疏向量检索来检索 top-k 结果。 Langchain 中还有更多其他 strategies 可以根据你的需要使用。

CLOUD_ID = getpass("Elastic deployment Cloud ID: ")
CLOUD_USERNAME = "elastic"
CLOUD_PASSWORD = getpass("Elastic deployment Password: ")vector_store = ElasticsearchStore(es_cloud_id=CLOUD_ID,es_user=CLOUD_USERNAME,es_password=CLOUD_PASSWORD,index_name= "workplace_index",strategy=ElasticsearchStore.SparseVectorRetrievalStrategy()
)

4. 下载数据集

让我们下载示例数据集并反序列化文档。

url = "https://raw.githubusercontent.com/elastic/elasticsearch-labs/main/example-apps/chatbot-rag-app/data/data.json"response = urlopen(url)workplace_docs = json.loads(response.read())

5. 将文档分割成段落

我们将把文档分成段落,以提高检索的特异性,并确保我们可以在最终问答提示的上下文窗口中提供多个段落。

在这里,我们将文档分块为 800 个标记段落,其中有 400 个标记重叠。

这里我们使用一个简单的拆分器,但 Langchain 提供了更高级的拆分器来减少上下文丢失的机会。

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=800, chunk_overlap=400)
docs = text_splitter.create_documents(content, metadatas=metadata)

6. 将数据索引到 Elasticsearch 中

接下来,我们将使用 ElasticsearchStore.from_documents 将数据索引到 elasticsearch。 我们将使用在创建云部署步骤中设置的云 ID、密码和索引名称值。

在实例中,我们将策略设置为 SparseVectorRetrievalStrategy()

注意:在开始索引之前,请确保你已在部署中下载并部署了 ELSER 模型,并且正在 ml 节点中运行。

documents = vector_store.from_documents(docs,es_cloud_id=CLOUD_ID,es_user=CLOUD_USERNAME,es_password=CLOUD_PASSWORD,index_name="workplace_index",strategy=ElasticsearchStore.SparseVectorRetrievalStrategy()
)

7. 初始 Bedrock 硕士

接下来,我们将初始化 Bedrock LLM。 在 Bedrock 实例中,将传递 bedrock_client 和特定 model_id:amazon.titan-text-express-v1、ai21.j2-ultra-v1、anthropic.claude-v2、cohere.command-text-v14 等。你可以看到列表 Amazon Bedrock 用户指南上的可用基本模型

default_model_id = "amazon.titan-text-express-v1"
AWS_MODEL_ID = input(f"AWS model [default: {default_model_id}]: ") or default_model_id
llm = Bedrock(client=bedrock_client,model_id=AWS_MODEL_ID
)

8. 提出问题

现在我们已经将段落存储在 Elasticsearch 中并且 LLM 已初始化,我们现在可以提出问题来获取相关段落。

retriever = vector_store.as_retriever()qa = RetrievalQA.from_llm(llm=llm,retriever=retriever,return_source_documents=True
)questions = ['What is the nasa sales team?','What is our work from home policy?','Does the company own my personal project?','What job openings do we have?','How does compensation work?'
]
question = questions[1]
print(f"Question: {question}\n")ans = qa({"query": question})print("\033[92m ---- Answer ---- \033[0m")
print(ans["result"] + "\n")
print("\033[94m ---- Sources ---- \033[0m")
for doc in ans["source_documents"]:print("Name: " + doc.metadata["name"])print("Content: "+ doc.page_content)print("-------\n")

尝试一下

Amazon Bedrock LLM 是一个功能强大的工具,可以通过多种方式使用。 你可以尝试使用不同的基本模型和不同的问题。 你还可以使用不同的数据集进行尝试,看看它的表现如何。 要了解有关 Amazon Bedrock 的更多信息,请查看文档。

你可以尝试在 Google Colab 中运行此示例。

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

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

相关文章

MS2510:8 比特高速模数(ADC)转换器

描述: MS2510 是 8 比特, 20MSPS 模数转换器( ADCs ) , 同时使用一个半闪速结构。 MS2510 在 5V 的电源电压下工作,其典型功耗只有 130mW ,包括一个内部的采样保持电路,具有 高阻抗方…

斐波那契数列

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

ffmpeg和opencv一些容易影响图片清晰度的操作

ffmpeg 转视频或者图片,不指定码率清晰度会下降 ffmpeg -i xxx.png xxx.mp4 码率也叫比特率(Bit rate)(也叫数据率)是一个确定整体视频/音频质量的参数,秒为单位处理的字节数,码率和视频质量成正比,在视频…

IP被封怎么办?访问网站时IP被阻止?解决IP禁令全方法

相信很多人遇到过IP禁令:比如你在访问社交媒体、搜索引擎或电子商务网站时会被限制访问,又或者你的的账号莫名被封,这些由于网络上的种种限制我们经常会遭遇IP被封的情况,导致无法使用继续进行网络行动。在本文中,我们…

04 约数

定义: 若整数n除以整数d的余数为0,即d能够整除n,n是d的倍数,记作d|n. 通过质因子求一个数的约数 如果n可以表示成 其中均为n的质因子 因为对于任意一个质因子都有选0个 选1个 选2个....选个共种可能, n的约数个数…

在DevEco开发工具中,使用Previewer预览界面中的UI组件

1、在DevEco工具中,点击并展开PreViewer预览器 2、在PreViewer预览器中,点击Tt按钮(Inspector)切换至组件查看模式 3、在组件查看模式下选择组件,代码呈现选中状态,右侧呈现组件树,右下方呈现组…

ARM 驱动 1.22

linux内核等待队列wait_queue_head_t 头文件 include <linux/wait.h> 定义并初始化 wait_queue_head_t r_wait; init_waitqueue_head(&cm_dev->r_wait); wait_queue_head_t 表示等待队列头&#xff0c;等待队列wait时&#xff0c;会导致进程或线程被休眠&…

倍增算法笔记

主要应用场景 RMQ&#xff1a;区间最值问题 LCA&#xff1a;最近公共祖先问题 RMQ问题——区间最值 如果用数组f[N]存储,用数组a[i][j]表示从第i个数起连续 2^j 个数中的最大值,[i,i 2^j - 1],显然a[i][0] f[i],则很容易得到状态转移方程: a[i][j] max(a[i][j - 1], a[i …

读书笔记-《数据结构与算法》-摘要11[Divide and Conquer - 分治法]

在计算机科学中&#xff0c;分治法是一种很重要的算法。分治法即『分而治之』&#xff0c;把一个复杂的问题分成两个或更多的相同或相似的子问题&#xff0c;再把子问题分成更小的子问题……直到最后子问题可以简单的直接求解&#xff0c;原问题的解即子问题的解的合并。这个思…

电商API接口|爬虫案例|采集某东商品评论信息

前言&#xff1a; 平常大家都有网上购物的习惯&#xff0c;在商品下面卖的好的产品基本都会有评论&#xff0c;当然也不排除有刷评论的情况&#xff0c;因为评论会影响我们的购物决策。今天主要分享用pythonre正则表达式获取京东商品评论。API接口获取京东平台商品详情SKU数据…

11k+ star 一款不错的笔记leanote安装教程

特点 支持普通模式 支持markdown模式 支持搜索 安装教程 1.安装mongodb 1.1.下载 #下载 cd /opt wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-3.0.1.tgz 1.2解压 tar -xvf mongodb-linux-x86_64-3.0.1.tgz 1.3配置mongodb环境变量 vim /etc/profile 增…

电脑可以连接wifi,甚至可以qq聊天,但就是不能用浏览器上网,一直显示未检测出入户网线的解决方案

今天回到家&#xff0c;准备办公却发现电脑可以连接wifi&#xff0c;甚至可以qq聊天&#xff0c;但就是不能用浏览器上网&#xff0c;一直显示未检测出入户网线的解决方案&#xff0c;小白也可以看懂 以下有几种解决方案&#xff0c;不妨都试试&#xff0c;估计可以解决95%的相…

C#-前后端分离连接mysql数据库封装接口

C#是世界上最好的语言 新建项目 如下图所示选择框红的项目 然后新建 文件夹 Common 并新建类文件 名字任意 文件内容如下 因为要连接的是mysql数据库 所以需要安装 MySql.Data.MySqlClient 依赖; using MySql.Data.MySqlClient; using System.Data;namespace WebApplication1.…

Django 为应用定制化admin独立后台

定制后界面 在应用目录下找到admin.py并进行编辑 from django.contrib.admin import AdminSite from .models import Question,Choiceclass PollsAdminSite(AdminSite):site_header"Admin-site-header"site_title"admin-site-title"index_title"admi…

Conda 使用environment.yml创建一个新的Python项目

Conda系列&#xff1a; 翻译: Anaconda 与 miniconda的区别Miniconda介绍以及安装Conda python运行的包和环境管理 入门Conda python管理环境environments 一 从入门到精通Conda python管理环境environments 二 从入门到精通Conda python管理环境environments 三 从入门到精通…

Ansible自动化运维(三)Playbook 模式详解

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

未来已来:OJAC诚邀您与张立赛博士解锁GPT Store的无限潜力!

亲爱的伙伴们&#xff01;本月31日晚上8:30&#xff0c;我们近屿智能OJAC的培训讲师——哈尔滨工业大学博士毕业生、前之江实验室资深研究员张立赛博士&#xff0c;将为我们带来一场深度技术更新讲座&#xff0c;深度探讨GPT Store的最新发展。 本次讲座将从GPT Store的基本概念…

什么是互联网打工人都需要知道的API?电商API是什么?

我们生活在一个科技主导的世界。在这里&#xff0c;数据无处不在。作为许多不同产品的用户&#xff0c;我们所追寻的不再是某一个能将工作完成的最佳产品&#xff0c;而是一个不仅能有效完成工作&#xff0c;同时也与我们所使用的其他工具完美兼容的产品。因此&#xff0c;了解…

欧氏、曼哈顿、马氏距离

马氏距离&#xff08;Mahalanobis Distance&#xff09;、欧氏距离&#xff08;Euclidean Distance&#xff09;、曼哈顿距离&#xff08;Manhattan Distance&#xff09;是常用的距离度量方式&#xff0c;它们在数据分析、模式识别、聚类等领域中经常被使用。 欧氏距离&#…

3D建模素材网站的特点有哪些?

3D建模素材网站的特点主要包括丰富多样的模型种类、高质量的模型、实时预览功能、易于使用、价格合理以及社区互动等。这些特点使得3D建模素材网站成为设计师们不可或缺的资源之一&#xff0c;帮助他们快速高效地完成设计工作。 那么3D建模素材网站的特点有哪些? 1、模型种类丰…