内页banner>

联系方式

当前位置: 首页 > 新闻中心

新闻中心 News

联系我们Contact Us

飞鱼加速器(中国)官方网站|飞鱼加速器

电话:13594780107

联系人:周经理

邮箱:addictive@hotmail.com

网址:https://www.ghcyd.com

地址:泉州市刊舌入口209号

创建一个具备高级RAG和Amazon Bedrock的多模态助手 机器学习博客

2026-01-27 13:14:42
30次

使用高级RAG与Amazon Bedrock创建多模态助手

作者:Alfred Shen Julianna Delua 和 Changsha Ma 发布日期:2024年5月21日

重要要点

多模态RAGmmRAG:这是一种新方法,旨在解决RAG模型在生成AI助理中的现有限制。Amazon Bedrock:提供优质的基础模型,支持多种生成AI应用程序的开发。解决方案架构:通过将不同数据类型分开提取,生成文本摘要,并将其嵌入向量数据库来提高准确性。

Retrieval Augmented GenerationRAG模型作为提高语言模型能力的一种前景方法,通过引入外部知识来增强其表现。然而,尽管在各种自然语言处理任务中表现令人惊艳,RAG模型依然面临著许多限制,亟需解决。

原生的RAG模型存在著缺失内容、推理不匹配以及处理多模态数据的挑战,虽然它们能够检索相关信息,但在所需的信息缺失的情况下,可能无法生成完整且一致的回应,导致结果不完整或不准确。此外,即使获得了相关信息,模型在正确解释和推理内容方面也可能存在困难,结果可能出现不一致或逻辑错误。更重要的是,对于主要基于文本的模型,有效理解和推理多模态数据仍然是一项重大挑战。

创建一个具备高级RAG和Amazon Bedrock的多模态助手 机器学习博客

在这篇文章中,我们介绍了一种名为多模态RAGmmRAG的新方法,以更详细地解决这些现有限制。该解决方案旨在满足实际的生成式人工智能(AI)助理用例需求。此外,我们还探讨了如何利用先进的LangChain功能提高大型语言模型(LLMs)和视觉语言模型(VLMs)的能力,从而能够生成更全面、一致和准确的输出,同时有效地处理多模态数据。该解决方案利用了Amazon Bedrock,这是一项完全托管的服务,提供来自领先AI公司的高性能基础模型(FMs)的选择,为开发生成AI应用程序提供多种安全、隐私和负责任的能力。

解决方案架构

mmRAG解决方案的概念很简单:单独提取不同数据类型,透过VLM生成文本摘要,将文本摘要及其原始数据嵌入向量数据库,并将原始非结构化数据存储在文档存储中。查询将促使LLM从向量数据库和文档存储中检索相关向量并生成有意义且准确的答案。

下图说明了解决方案架构。

架构图显示了mmRAG架构,该架构集成了高级推理和检索机制。它将文本、表格和图像包括图表数据合并为统一的向量表示,实现跨模态的理解和检索。该过程从各种来源如URL和PDF文件提取多样化数据,通过单独解析和预处理文本、表格和图像数据类型,同时将表格数据转换为原始文本,将图像数据转换为标题。

这些解析后的数据流被送入多模态嵌入模型,将不同的数据类型编码为统一的高维向量。生成的向量表示语义内容,无论其原始格式如何,都被索引在向量数据库中以便进行高效的近似相似性查询。当收到查询时,推理和检索组件会在这个向量空间中执行相似性搜索,以检索来自广泛集成知识库的最相关信息。

检索到的多模态表示然后被生成组件用来生成文本、图像或其他模态的输出。VLM组件专门为文本数据生成向量表示,进一步增强系统的语言理解能力。整体来说,这一架构通过将不同数据模态统一到共同的语义空间,促进了先进的跨模态推理、检索和生成。

开发者可以在GitHub库中访问mmRAG源代码。

使用LangChain配置Amazon Bedrock

首先,您需要配置Amazon Bedrock来与来自LangChain Community库的不同组件集成,这使您能够使用核心FMs。您可以使用BedrockEmbeddings类来创建两个不同的嵌入模型:一个用于文本embeddingbedrocktext和一个用于图像embeddingsbedrockimage。这些嵌入以数字格式表示文本和视觉数据,这对于各种自然语言处理NLP任务至关重要。

此外,您还可以使用LangChain Bedrock和BedrockChat类来创建来自Anthropic Claude 3 Haiku的VLM模型实例llmbedrockclaude3haiku以及基于不同模型Sonnet的聊天实例chatbedrockclaude3sonnet。这些实例用于高级查询推理、论证和检索任务。请参见以下代码片段:

pythonfrom langchaincommunityembeddings import BedrockEmbeddingsfrom langchaincommunitychatmodelsbedrock import BedrockChat

embeddingbedrocktext = BedrockEmbeddings(client=boto3bedrock modelid=amazontitanembedg1text02)embeddingsbedrockimage = BedrockEmbeddings(client=boto3bedrock modelid=amazontitanembedimagev1)

modelkwargs = { maxtokens 2048 temperature 00 topk 250 topp 1 stopsequences [nnn]}chatbedrockclaude3haiku = BedrockChat( modelid=anthropicclaude3haiku20240307v10 client=boto3bedrock modelkwargs=modelkwargs)

chatbedrockclaude3sonnet = BedrockChat( modelid=anthropicclaude3sonnet20240229v10 client=boto3bedrock modelkwargs=modelkwargs)

从数据源解析内容并嵌入文本和图像数据

在本节中,我们将探讨如何有效利用Python解析来自URL和PDF中的文本、表格和图像,使用两个强大的库:Beautiful Soup和PyMuPDF。Beautiful Soup是一个设计用于网络抓取的库,可以轻松地筛选HTML和XML内容,从网页中提取所需数据。PyMuPDF提供了广泛的功能,以便与PDF文件交互,使得提取文本、表格和图像变得简单。以下是代码示例:

pythonfrom bs4 import BeautifulSoup as Soupimport fitz

def parsetablesimagesfromurls(urlstr) # 使用BeautifulSoup解析HTML内容 soup = Soup(responsecontent htmlparser)

# 找到所有表格元素tables = soupfindall(table)# 找到所有图像元素images = soupfindall(img)

def parseimagestablesfrompdf(pdfpathstr) pdffile = fitzopen(pdfpath)

# 遍历每一页for pageindex in range(len(pdffile))    # 选择此页    page = pdffile[pageindex]    # 在页面上搜索表格    tables = pagefindtables()    df = tabletopandas()    # 在页面上搜索图像    images = pagegetimages()    imageinfo = pdffileextractimage(xref)    imagedata = imageinfo[image]

以下代码片段演示了如何通过调用bedrockgetimgdescription辅助函数生成图像标题。此外,还展示了如何使用Amazon Titan图像嵌入模型amazontitanembedingimagev1嵌入图像像素及其标题,调用gettextembedding函数。

pythonimagecaption = bedrockgetimgdescription(modelid prompt=您是分析图像方面的专家,您的任务是仔细检查提供的图像并生成详细、准确的文本描述,以捕捉图像中所有重要元素和上下文。请仔细注意任何可见的数字、数据或定量信息,并确保在描述中包含这些数值及其语义含义。请彻底阅读和解释整个图像,然后提供详细标题,描述图像内容以文本格式。力求真实和准确的代表所描绘的内容。 image=imagebyteio maxtoken=maxtoken temperature=temperature topp=topp topk=topk stopsequences=Human)

imagesumvectors = gettextembedding(imagebase64=imagebase64 textdescription=imagecaption embdmodelid=embdmodelid)

嵌入和向量化多模态数据

您可以利用新发布的Anthropic Claude 3 Sonnet和Haiku,结合Amazon Titan图像嵌入模型以及LangChain的功能。这一强大组合使您能够为表格和图像生成全面的文本标题,并将其无缝地集成到您的内容中。此外,您还可以将向量、对象、原始图像文件名和源文档存储到Amazon OpenSearch Serverless向量存储和对象存储中。以下是创建图像标题的代码片段,通过调用辅助函数bedrockgetimgdescription。同时,使用Amazon Titan图像嵌入模型amazontitanembedingimagev1嵌入图像像素及其标题,调用gettextembedding函数。

pythondef gettextembedding(imagebase64=None textdescription=None embdmodelidstr=amazontitanembedimagev1) inputdata = {} if imagebase64 is not None inputdata[inputImage] = imagebase64 if textdescription is not None inputdata[inputText] = textdescription if not inputdata raise ValueError(至少需要提供 imagebase64 或 textdescription 其中之一) body = jsondumps(inputdata) response = boto3bedrockinvokemodel( body=body modelId=embdmodelid accept=application/json contentType=application/json ) responsebody = jsonloads(responseget(body)read()) return responsebodyget(embedding)

imagecaption = bedrockgetimgdescription(modelid prompt=您是分析图像方面的专家,您的任务是仔细检查提供的图像并生成详细、准确的文本描述,以捕捉图像中所有重要元素和上下文。请仔细注意任何可见的数字、数据或定量信息,并确保在描述中包含这些数值及其语义含义。请彻底阅读和解释整个图像,然后提供详细标题,描述图像内容以文本格式。力求真实和准确的代表所描绘的内容。 image=imagebyteio maxtoken=maxtoken temperature=temperature topp=topp topk=topk stopsequences=Human)

imagesumvectors = gettextembedding(imagebase64=imagebase64 textdescription=imagesum embdmodelid=embdmodelid)

免费加速器15分钟试用

您可以查阅提供的代码示例以获取更多有关如何嵌入多模态并将向量文档插入到OpenSearch Serverless向量存储的资讯。如需有关数据存取的更多信息,请参阅Amazon OpenSearch Serverless的数据访问控制。

python

形成一个数据字典,包含图像元数据、原始图像对象存储位置和Base64编码的图像数据

document = { docsource imageurl imagefilename s3imagepath embedding imagebase64}

从完整的临时路径中仅解析出图像名称

filename = fjsons/{imagepathsplit(/)[1]split()[0]}json

将数据字典写入JSON数据

with open(filename w) as file jsondump(document file indent=4)

从临时目录加载所有json文件

loader = DirectoryLoader(/jsons glob=/json showprogress=False loadercls=TextLoader)

loader = DirectoryLoader(/jsons glob=/json showprogress=True loadercls=JSONLoader loaderkwargs = {jqschemacontent})

newdocuments = loaderload()newdocs = textsplittersplitdocuments(newdocuments)

插入到AOSS

newdocsearch = OpenSearchVectorSearchfromdocuments( newdocs bedrockembeddings opensearchurl=host httpauth=auth timeout = 100 usessl = True verifycerts = True connectionclass = RequestsHttpConnection indexname=newindexname engine=faiss)

先进的RAG与融合和分解

RAG中的融合技术展示了一种创新的搜索策略,旨在超越传统搜索技术的局限,更好地符合人类查询的复杂性。此举通过整合多角度查询生成和使用反向排名融合技术来改善搜索结果的重新排名,从而提升了搜索体验。这种方法提供了更细致和有效的方式,帮助用户导航大量可用信息,满足用户的复杂和多变的搜索需求。

下图展示了此工作流。

我们使用Anthropic Claude 3 Sonnet和Haiku模型,它们能处理视觉和语言数据,这使得它们能够有效地进行查询分解和答案融合的阶段。以下代码片段演示了如何使用OpenSearch Serverless创建检索器:

pythonfrom langchainvectorstores import OpenSearchVectorSearchretriever = OpenSearchVectorSearch( opensearchurl = {}{}aossamazonawscomformat(ltcollectionidgt ltmyregiongt) indexname = ltindexnamegt embeddingfunction = embd)

融合和分解的组合旨在解决语言模型中的思维链CoT方法的限制。这涉及将复杂问题分解为更简单的顺序子问题,每个子问题都建立在上个问题的解决方案之上。这一技术显著增强了语言模型在符号操作、组合推广和数学推理等领域的问题解决能力。

RAG分解方法使用分解步骤见以下代码

飞鱼加速器(中国)官方网站|飞鱼加速器

电话:13594780107

联系人:周经理

邮箱:addictive@hotmail.com

网址:https://www.ghcyd.com

地址:泉州市刊舌入口209号

在线留言

  • 体验移动端

    体验移动端

  • 联系客服

    联系客服