大多数关于RAG的教程都是以同样的方式结束的:你最终会得到一个可以正常运行的原型系统,同时还会产生一笔与向量数据库相关的费用——无论是否有人在使用这个数据库,这笔费用都会持续产生。如果再添加一个始终处于运行状态的嵌入服务、一个托管式的LLM接口,以及常见的AWS基础设施,那么在第一个用户出现之前,你就已经需要支付一大笔钱了。
但实际上并不一定非得这样。在本教程中,你将部署一个完全无服务器架构的RAG处理流程,该流程能够处理文档、图片、视频和音频数据,并且当没有人使用它时,其资源消耗会降为零。
所有这些服务都会在你的AWS账户中运行,你的数据也永远不会离开你的基础设施。对于一个规模较小的知识库系统来说,你每月所需的费用大概在2-3美元左右,而远远不会达到300美元。
我们将使用RAGStack-Lambda这个开源项目来进行演示。通过本教程的学习,你最终将获得一个已部署好的处理流程系统,其中包括一个控制面板、一个带有来源引用功能的人工智能聊天界面、一个可以嵌入到任何应用程序中的Web组件,以及一个可用于为你的知识库系统提供上下文信息的MCP服务器。
接下来我们将介绍以下内容:
实际费用是多少
在开始任何操作之前,我们先来谈谈费用问题——因为了解成本结构才是整个学习过程的核心所在。
RAG处理流程通常包含两个费用阶段:数据导入阶段(一次性处理你的文档)和后续使用阶段(长期查询这些文档)。
大多数平台都会收取固定的月费,而无论你处于哪个阶段。但无服务器架构则有所不同:数据导入阶段需要支付一定的费用,之后所有资源的使用量都会降为零。
数据导入阶段:一次性产生的费用
当你上传文档时,会涉及到以下几个步骤:文本提取(针对PDF文件和图片进行OCR处理)、嵌入信息的生成、元数据的提取,以及文档的存储。下面是各项服务的具体费用情况:
TextExtract(OCR):这是数据导入阶段中最昂贵的环节,但它仅适用于需要提取文本的扫描PDF文件和图片。对于纯文本文件、HTML格式文件、CSV文件以及其他基于文本的格式,这一步骤是完全不必要的。
Textract针对标准文本检测服务,每1,000页收取约1.50美元的费用。如果你上传500页扫描后的PDF文件,费用约为0.75美元;而如果一次性上传数千页扫描文件,费用可能会达到5-10美元。不过一旦你的文档被处理完毕,除非你再次添加新的文档,否则不会再产生这些费用。
Bedrock Embeddings (Nova Multimodal):该服务会将你的内容转换为向量格式,以便进行语义搜索。其收费标准低得惊人:
-
文本:每1,000个输入字符收取
0.00002美元 -
图片:每张图片收取
0.00115美元 -
视频/音频:每分钟收取
0.00200美元
举个例子来说,如果你有1,500份文本文件,每份文件平均包含2,500个字符,那么整个转换过程的总费用约为0.08美元。一个包含500张图片的知识库,转换成本仅为0.58美元;即使是包含文本、图片以及几小时视频的混合数据集,整个转换过程的费用也远远低于2美元。需要注意的是,这些费用只需支付一次——除非你后来添加或更新了文档,否则无需再次支付。
Bedrock LLM (元数据提取):RAGStack会使用大语言模型来分析每份文档,并自动提取结构化的元数据。对于每份文档来说,这一过程只需要进行几次推理计算,而且使用的模型是Nova Lite或类似的模型。按照每百万输入/输出字符0.06美元/0.24美元的收费标准来计算,处理1,500份文档的总费用远低于1美元。
S3向量存储:用于存储转换后的向量数据。按照每GB每月0.06美元的标准收费,一个包含1,500份文档、每份文档的向量维度为1,024的知识库,所占用的存储空间几乎可以忽略不计——每月的费用仅为几美分而已。
S3文档存储:你的原始文档可以存储在标准的S3系统中。其收费标准更低,仅为每GB每月0.023美元。
DynamoDB:用于存储文档的元数据及处理状态。由于采用按请求计费的模式,因此在数据导入阶段需要支付费用,而在数据存储阶段则无需额外付费。对于初次导入大量数据的情况,所需费用也仅为几美分而已。
举个具体的例子:如果你上传200份文本文件(PDF、HTML或markdown格式),整个数据导入过程的总费用很可能低于1美元;而如果你上传1,000份需要进行OCR处理的扫描PDF文件,一次性费用可能会达到5-8美元。有时会看到有人提到7-10美元>这个数字,那其实是针对初次上传大量文件、且需要进行大量OCR处理的情况而言的。
扩展性:从零开始实现规模扩张的优势
一旦你的文档被导入系统,后续的处理流程就会进入等待状态,并不会立即开始运行。下面是各种查询操作的费用明细:
Lambda函数:调用次数和执行时长都会被计入费用。免费 tier允许每月进行100万次请求;对于个人或小型团队使用的知识库来说,很可能永远都用不到超过免费 tier的限制。
S3向量查询服务:每进行100万次查询API调用,收取2.50美元的费用,此外还会根据处理的数据量额外收费。对于一个每月仅被查询几百次的小型索引来说,实际费用几乎可以忽略不计。
Bedrock(聊天推理服务):这是您的主要运营成本。每条聊天回复都需要调用大型语言模型。如果使用Nova Lite,每百万输入令牌的费用为0.06美元,每百万输出令牌的费用为0.24美元,那么一个典型的检索与生成查询(包括检索结果、用户问题以及回复内容)每次查询的成本大概在0.001–0.003美元之间。如果每月进行100次这样的查询,总成本将为0.10–0.30美元。
Step Functions:该服务用于协调文档处理流程。标准工作流程的费用为每1,000次状态转换0.025美元。在运行过程中,其耗费相对较低,因为只有在数据被导入系统时才会被激活。
Cognito:用户认证服务。对于每月活跃用户数量不超过10,000人的情况,该服务是免费的。
CloudFront:用于提供仪表板界面的访问服务。免费 tier允许用户每月传输最多1 TB的数据。
API Gateway:负责处理GraphQL API请求。免费 tier允许用户每月进行最多100万次API调用。
如果一个知识库包含500份文档,且每月会有几百次查询被发起,那么您的每月运营成本大概会在0.50美元到3.00美元之间。其中大部分费用都用于支付聊天回复所涉及的大型语言模型推理服务。
真正值得比较的地方
以下是使用传统的全天候运行架构构建相同系统时的成本对比:
| 服务名称 | RAGStack-Lambda | 传统架构 |
|---|---|---|
| 向量数据库 | S3 Vectors:每月费用极低 | Pinecone Starter:每月70美元 |
| 其他向量数据库选项 | S3 Vectors:每月费用极低 | OpenSearch Serverless:最低每月约350美元 |
| 计算资源 | Lambda:免费 tier | EC2或ECS:每月50–150美元 |
| 大型语言模型推理服务 | 每次查询的费用相同 | 每次查询的费用相同 |
| 总成本(空闲状态时) | 约0.50–3.00美元/月 |
120–500美元/月 |
无论采用哪种架构,每次查询所涉及的大型语言模型推理服务的费用大致都是相同的。真正的区别在于其他各项成本。传统架构无论是否有人使用,都会产生固定的费用;而无服务器架构则只按实际使用的资源来付费,空闲状态时几乎不会产生任何费用。
Transcribe服务呢?
如果您需要上传视频或音频文件,AWS Transcribe会收取语音转文本转换的费用。标准转录服务的费用约为每分钟音频内容0.024美元。对于一段10分钟的视频来说,转录所需的费用为0.24美元。这部分费用只需支付一次;一旦文本被转录并嵌入到系统中,后续对这些文本片段的查询就与其他文档一样,不需要再额外付费。
您最终将构建什么?
完成本教程的学习后,您将会拥有一个已经部署好的系统流程,该系统能够完成以下功能:
-
您可以通过网页控制面板上传文件(PDF、图片、视频、音频、HTML、CSV格式;具体可支持的文件类型列表非常详细)。
-
系统会自动识别文件的类型,并将其转发给相应的处理工具。扫描后的PDF文件会通过Textract进行OCR处理;视频和音频文件则会先经过Transcribe软件被转换成文本,同时还会被分割成长度为30秒的片段,并附带说话者的身份信息;图片则会被生成视觉嵌入特征,同时也会保留您添加的标题文字。
-
一个大语言模型会自动分析每份文件,提取其中的结构化元数据、主题、文件类型、时间范围以及被提及的人物等信息。
-
所有处理后的数据都会使用Amazon Nova Multimodal Embeddings技术进行嵌入处理,然后存储在由S3 Vectors提供支持的Bedrock知识库中。
-
您或您的用户可以通过AI聊天界面提出问题,系统会检索相关的文件,将这些文件作为背景信息传递给Bedrock大语言模型,最终返回包含可折叠引用信息的答案;对于视频和音频文件,还会提供时间戳链接,让用户能够直接跳转到相应的位置。
所有这些功能都在你的AWS账户中运行。不需要任何外部控制层,也不需要除了AWS之外的第三方服务。
架构设计

关于这一架构设计,有几点需要注意:
Step Functions负责协调所有流程。当有文档被上传时,状态机会管理整个处理流程:它会检测文件的类型,将其转发到相应的处理程序,等待像Transcribe这样的异步操作完成,之后再触发嵌入数据和元数据提取的操作。
正是这种设计使得该处理流程无需运行任何服务器就能保持可靠性。如果某个步骤失败,系统会自动重试;你也可以清楚地了解到每份文档在处理流程中的当前位置。
Lambda负责具体的计算工作。每一个处理环节实际上都是一个Lambda函数。这些函数会在需要时被启动,运行几秒到几分钟后就会关闭。因此,根本不会有EC2实例在凌晨3点还处于空闲状态。
S3 Vectors用于存储向量数据。你的嵌入数据是保存在S3专为存储向量数据而设计的存储系统中,而不是像Pinecone或OpenSearch这样的专用向量数据库中。
正因为如此,才能实现“零成本扩展”的目标:你只需按照对象存储的费用标准来支付向量数据的存储费用,而无需维持任何数据库集群的运行。此外,你的向量数据也保存在自己的S3桶中,而不是由第三方服务来管理。
Cognito负责处理身份验证工作。控制面板和API都是通过Cognito用户池来进行保护的。在部署时,你会通过电子邮件收到一个临时密码;Web组件使用基于IAM的身份验证机制,而服务器端的集成则使用API密钥进行认证。
CloudFront用于提供UI界面。控制面板实际上是一个静态的React应用,它是通过CloudFront来提供的,因此不需要维护任何Web服务器。
两种部署方式
根据你的需求,有两种不同的部署途径:
通过AWS Marketplace进行部署(快速路径):只需点击“部署”按钮,填写两个字段(堆栈名称和电子邮件地址),然后等待大约10分钟即可。这种方式不需要使用任何本地工具,我们也会首先介绍这种部署方法。
从源代码开始进行部署(开发者路径):>你需要克隆仓库,运行`publish.py`脚本,然后通过SAM CLI来进行部署。如果你想要自定义处理流程、修改UI界面或为该项目做出贡献,就可以选择这种方式。在介绍了AWS Marketplace的部署方法之后,我们会详细讲解这种开发者的部署途径。
这两种方式最终生成的堆栈配置是相同的。只不过通过AWS Marketplace进行部署时,CloudFormation模板会被封装成一个一键可完成的部署流程而已。
先决条件
在开始部署之前,你需要准备以下内容:
-
需要一个具有创建CloudFormation堆栈、Lambda函数、S3存储桶、DynamoDB表以及Cognito用户池权限的AWS账户。如果您使用的是管理员账户,那么这些权限已经满足要求。
-
需要具备访问Bedrock模型的权限:RAGStack默认使用
us-east-1区域,因为该区域提供了Nova Multimodal Embeddings服务。亚马逊自家的模型(包括Nova)在Bedrock中也是默认可用的,无需手动启用。只需确保您的IAM角色具有必要的bedrock:InvokeModel权限即可。 -
对于访问Marketplace资源而言,只需要一台网页浏览器即可。
-
对于处理源代码而言,需要Python 3.13及以上版本、Node.js 24及以上版本、配置好的AWS CLI和SAM CLI,以及用于构建Lambda函数的Docker环境。
通过AWS Marketplace进行部署
这是最快的部署方式——无需使用任何本地工具、CLI或Docker。您只需在大约10分钟内完成CloudFormation堆栈的配置并启动相应的部署流程即可。
步骤1:启动堆栈创建流程
点击直接部署链接,即可打开预装有相关模板的CloudFormation“快速创建堆栈”页面。

步骤2:填写两个字段
虽然页面上有很多设置选项,但您只需要填写两个字段即可:
-
堆栈名称:必须使用小写字母进行命名。这个名称将会作为您所有AWS资源的前缀(例如
my-docs、team-kb、project-notes)。请保持名称简短。 -
管理员邮箱:该字段属于“必填设置”项。Cognito会将临时登录凭据发送到这个邮箱地址,请使用您当前可以访问的邮箱地址。
其他所有选项,如构建选项、高级设置、OCR后端配置以及模型选择等,都可以保持默认值。这些选项以后可以根据需要进行自定义调整,但默认设置已经能够满足基本需求。
步骤3:开始部署
滚动到页面底部,确认“功能与转换”选项下的三个复选框都已选中,然后点击创建堆栈按钮。
部署过程大约需要10分钟。如果您感兴趣,可以在CloudFormation事件页面上查看部署进度,但在堆栈状态变为CREATE COMPLETE之前,您无需进行任何操作。
步骤4:登录系统
当部署完成后,请检查您的邮箱。Cognito会发送 dashboard的访问地址和临时密码给您。登录后设置新的密码,然后您就可以使用这个空的dashboard来管理文档了。

从源代码进行部署
如果您想自定义处理流程、修改用户界面,或者为该项目做出贡献,那么请选择从源代码进行部署。
步骤1:克隆并设置环境
git clone https://github.com/HatmanStack/RAGStack-Lambda.git
cd RAGStack-Lambda
python -m venv venv
source venv/bin/activate # 在Windows系统中:venv\Scripts\activate
pip install -r requirements.txt
步骤2:进行部署
publish.py脚本会完成所有工作:构建前端界面,打包Lambda函数,并通过SAM CLI进行部署。
python publish.py \
--project-name my-docs \
--admin-email admin@example.com
默认情况下,Nova Multimodal Embeddings会使用us-east-1区域进行部署。该脚本会构建React控制面板,生成Web组件,使用Docker打包所有的Lambda函数层,然后通过SAM部署CloudFormation堆栈。
首次部署需要较长时间(15到20分钟),因为所有内容都是从零开始构建的。后续的部署速度会更快,因为SAM会缓存那些没有发生变化的资源。
如果您只想要修改后端代码而不需要生成用户界面,可以执行以下命令:
# 跳过控制面板的构建过程(但仍然会生成Web组件)
python publish.py --project-name my-docs --admin-email admin@example.com --skip-ui
# 完全跳过所有用户界面的构建过程
python publish.py --project-name my-docs --admin-email admin@example.com --skip-ui-all
部署完成后,您将获得与在Marketplace上使用的相同的Cognito邮箱地址以及控制面板访问链接。
上传您的第一份文档
该控制面板提供了针对不同类型内容的标签页。我们先从“文档”标签页开始操作,因为这是最常用的功能。
文档
点击文档标签页,然后上传文件。RAGStack支持多种文件格式:PDF、DOCX、XLSX、HTML、CSV、JSON、XML、EML、EPUB、TXT以及Markdown。您可以直接拖放文件,也可以使用文件选择器来上传文件。
文件上传成功后,它就会进入处理流程。您可以实时看到处理进度更新:
-
已上传:文件已接收并存储在S3服务器上。
-
正在处理:Step Functions系统已经接收到文件,并将其转发给相应的处理程序。文本格式的文件(如HTML、CSV、Markdown)会直接被提取内容;扫描后的PDF文件和图片则会通过Textract OCR技术进行识别;大型语言模型则会分析文件内容,提取结构化元数据、主题、文档类型、提及的人名、时间范围等相关信息。
-
已建立索引:文件的嵌入信息已经生成,向量数据也已存储完毕,现在就可以通过该控制面板进行搜索了。
文本文档通常在1到5分钟内就能完成处理。而对于那些包含大量OCR内容的文档(如扫描后的PDF文件或带有文字的图片),处理时间会根据页数不同而有所变化,一般在2到15分钟之间。

图片
图片选项卡的工作方式有所不同。您可以上传JPG、PNG、GIF或WebP格式的图片,并为其添加说明文字。无论是图片本身还是说明文本,都会通过Nova多模态嵌入技术被嵌入到系统中,因此您既可以依据图片内容进行搜索,也可以根据所添加的描述来进行查询。
正是这种多模态嵌入技术发挥了其作用。传统的仅基于文本的RAG处理流程要求用户手动为每张图片编写描述;而在这里,图片本身就具备了可搜索性。而且由于所有数据都存储在您的AWS账户中,因此您无需将个人照片或敏感的视觉内容发送到外部服务进行处理。
视频和音频文件呢?
如果您上传了视频或音频文件,RAGStack会通过AWS Transcribe将其转换为文本。转换后的文本会被分割成每段30秒的长度,并标注出说话者的身份信息,然后像其他文档一样被嵌入到系统中。当聊天结果中提到了某个视频来源时,系统会提供时间戳链接,让您可以直接跳转到录像中的相应位置。
网络爬取
爬取选项卡允许您直接将网页内容导入知识库中。只需输入一个URL地址,RAGStack就会自动浏览该页面、提取其中的内容,并将其通过与上传文档相同的处理流程进行进一步处理,包括元数据提取、嵌入以及建立索引等。
这种方法非常实用,因为它可以让您无需手动保存和上传网页内容,就能直接从现有的网络资源中构建知识库。无论是文档网站、博客存档还是参考资料,只要这些内容是公开可访问的,都可以使用这个功能。

与知识库进行交互
这才是真正的价值所在。当您进入聊天选项卡并输入问题时,RAGStack会从您的知识库中检索相关文档,将这些文档作为上下文传递给Bedrock大型语言模型,然后生成包含来源引用的答案。
这些引用信息是可以展开查看的,点击即可了解哪些文档为生成答案提供了依据,同时还可以下载这些原始文件。对于视频和音频资料,系统还会提供可点击的时间戳链接,让您可以直接跳转到相关内容的位置。