基于 LangChain 与 Amazon Bedrock 知识库的 AI 代理检索架构指南
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
检索增强生成(RAG)已经彻底改变了企业级应用处理私有数据的方式。然而,传统的单次检索(Single-Shot)RAG 系统在面对多层次、对比性或语义模糊的复杂查询时往往力不从心。当用户提问需要跨越多个独立的文档段落或进行多步逻辑推理时,传统的单次向量搜索往往只能返回不完整甚至不相关的上下文。
为了突破这一瓶颈,代理检索(Agentic Retrieval) 正逐渐成为企业级 AI 架构的主流方案。通过结合 LangChain 等编排框架与 Amazon Bedrock Knowledge Bases 等托管式向量知识库,开发者可以让大语言模型(LLM)具备自主拆解查询、动态调用检索工具、评估检索结果并进行多轮迭代合成的能力。
在追求高并发与高可用度的企业级系统建设中,通过统一 API 平台如 n1n.ai 进行模型调度,可以帮助团队在 Claude 3.5 Sonnet、DeepSeek-V3 以及 OpenAI o3 等顶尖模型之间实现低延迟无缝切换,显著降低多模型部署与运维的复杂度。
本文将详细对比单次 RAG 与代理检索的架构差异,提供基于 LangChain 与 Amazon Bedrock 的完整代码实现,并从追踪日志(Trace Events)、检索准确度以及 Token 成本三个维度进行深度实测分析。
单次 RAG 与代理检索架构对比
要理解单次检索在处理多要素复杂问题时的缺陷,首先需要对比两种模式的底层执行逻辑。
单次 RAG 执行流程
- 用户输入:用户提交复杂查询(例如:“对比我们 2023年的云主机预算支出与 2024年实施的网络安全合规更新”)。
- 向量化与搜索:系统将整句 Prompt 转换为单一的密集向量(Dense Vector)。
- Top-K 检索:向量数据库根据余弦相似度或 HNSW 算法从索引库中提取前 K 个最相似切片。
- 上下文注入:将这 K 个切片直接拼接塞入 System Context。
- 回答生成:LLM 仅基于这单次检索获取的文本生成答案。
失效模式:混合了两个独立主题(云主机支出与网络安全合规)的向量在空间中往往偏向检索字数更多或特征更明显的单一方面文档,导致另一个关键维度的数据完全缺失。
代理检索(Agentic Retrieval)执行流程
- 规划与拆解:LLM 代理评估原始查询,识别出该问题需要分步获取两个不同的数据集。
- 子查询生成:代理生成第一个子查询(“2023年云主机预算支出”),并调用知识库检索工具。
- 结果评估:代理检查返回的文档片段。若信息充足,则记录至暂存区(Scratchpad);若不足,则改写查询条件重试。
- 顺序执行:代理生成第二个子查询(“2024年网络安全合规更新”),再次触发检索工具。
- 综合合成:代理汇总多轮工具调用的暂存信息,最终合成结构化且完整的回答。
+-----------------------------------------------------------------------------------+
| 用户输入复杂查询 |
+-----------------------------------------------------------------------------------+
|
+------------------------+------------------------+
| |
v v
[ 单次 RAG 路径 ] [ 代理检索路径 ]
| |
+---------------------------+ +---------------------------+
| 将完整 Prompt 转为单向量 | | 代理 Planner 评估拆解 |
+---------------------------+ +---------------------------+
| |
+---------------------------+ +---------------------------+
| 向量库 Top-K 检索 | | 执行工具:子查询 A 检索 |
+---------------------------+ +---------------------------+
| |
+---------------------------+ +---------------------------+
| 拼接 Context 至 LLM | | 评估上下文暂存区 |
+---------------------------+ +---------------------------+
| |
+---------------------------+ +---------------------------+
| LLM 单次生成回答 | | 执行工具:子查询 B 检索 |
+---------------------------+ +---------------------------+
| |
v +---------------------------+
(缺失部分关键信息) | LLM 汇总多轮结果生成回答 |
+---------------------------+
|
v
(完整无缺失回答)
代码实战:基于 LangChain 与 Amazon Bedrock 实现双路径
下面我们将分别构建单次检索与代理检索的完整运行代码。使用 Amazon Bedrock Managed Knowledge Base 作为后端检索器,结合 LangChain 框架进行调度。
依赖环境安装
在开始前,请确保安装了以下 Python 依赖库:
pip install langchain langchain-aws langchain-community boto3 botocore
1. 单次 RAG 链构建
在单次 RAG 模式中,我们直接将 AmazonBedrockKnowledgeBaseRetriever 接入 LangChain 表达式语言(LCEL)管道。
import os
from langchain_aws import AmazonBedrockKnowledgeBaseRetriever, ChatBedrock
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.runnables import RunnablePassthrough
from langchain_core.output_parsers import StrOutputParser
# 配置项
KNOWLEDGE_BASE_ID = "YOUR_BEDROCK_KB_ID"
REGION_NAME = "us-east-1"
# 初始化 Amazon Bedrock 知识库检索器
retriever = AmazonBedrockKnowledgeBaseRetriever(
knowledge_base_id=KNOWLEDGE_BASE_ID,
retriever_config=\{
"vectorSearchConfiguration": \{
"numberOfResults": 4
\}
\},
region_name=REGION_NAME
)
# 初始化 LLM 模型
llm = ChatBedrock(
model_id="anthropic.claude-3-5-sonnet-20240620-v1:0