← 返回信息流

AWS AI Blog新闻

使用 Amazon Bedrock 实现向量提示文档分类

aws.amazon.com作者:Pavana Sai Sree Chalamarla教程产品AI评分:50/100

本文介绍了如何利用 Amazon Bedrock 上的 Strands Agents SDK 构建多智能体文档分类系统。系统包含三个智能体:文档分析智能体(使用 Claude Haiku 4.5 进行文本推理)、向量相似性搜索智能体(使用 Titan Multimodal Embeddings 进行视觉相似性搜索)和验证智能体(负责协调与质量保证)。通过结合文本和视觉特征,该系统能够准确分类保险文档(如保单、宣誓书等),并提供了详细的实现步骤和代码示例。

在 Amazon Bedrock 上实现向量提示文档分类,可帮助保险公司准确分类每天处理的大量文档:保单、宣誓书、批单和监管表格,以满足合规、理赔和客户服务需求。人工分类既耗时又容易出错,而传统自动化方法则难以处理那些外观相似但用途不同的文档。保单批单和监管宣誓书可能包含相似的术语,但错误分类可能导致合规违规或处理延迟。

本文演示了如何使用 Strands Agents SDK 构建多智能体解决方案。该解决方案编排了三个专业智能体:用于文本推理的文档分析智能体、用于布局模式识别的向量相似性搜索智能体,以及用于质量保证的验证智能体。每个智能体在其专业领域内自主运行,然后通过编排器协作交付结果。

您将学习如何为自身的文档分类需求实现这种多智能体架构,并附有代码示例和技术指导。这种多智能体方法将 Anthropic 的 Claude Haiku 4.5 的先进推理能力与 Amazon Bedrock 上可用的 Amazon Titan Multimodal Embeddings 的视觉模式识别能力相结合,以实现更高的分类准确率。

解决方案概述

该解决方案架构结合了多个专门的 AI 智能体,每个智能体针对文档分析的特定方面进行了优化,通过协调编排协同工作。这种多智能体方法利用 Amazon Bedrock 提供的不同基础模型和技术的独特优势,解决了单模型分类的局限性。

Multi-agent document classification architecture with a Validation Agent orchestrating the Document Analysis and Vector…
Multi-agent document classification architecture with a Validation Agent orchestrating the Document Analysis and Vector…

使用 Strands Agents SDK 进行多智能体协调

在我们的测试中,单模型方法在处理边缘案例以及需要同时进行文本和视觉分析的复杂文档时表现不佳。多智能体系统通过将分类任务分解为专门的子任务来解决这一问题,每个智能体专注于自身的专业领域。

我们选择 Strands Agents SDK,是因为它将智能体实现为工具,而我们的分类系统需要一个能够将专业智能体作为可调用工具来调用的编排器。验证智能体调用每个专家,比较它们的分类结果,并在无需自定义编排代码的情况下解决分歧。这种模式具有以下几个优势:

  • 模块化:每个智能体都可以独立开发、测试和改进。
  • 透明性:每个智能体都为其决策提供推理依据,形成审计追踪。
  • 灵活性:可以添加新的智能体,而无需重构整个系统。
  • 可靠性:编排器负责智能体协调、错误处理和结果综合。

架构组件

架构的核心是验证智能体,它充当编排器,并使用 Strands Agents SDK 实现“智能体即工具”模式。该智能体通过交叉验证和置信度评分提供质量保证。它比较文档分析智能体和向量相似性搜索智能体的输出,识别一致与分歧的区域,然后生成带有相关置信度评分的最终分类。这一验证步骤帮助系统保持高准确率,同时标记边缘案例以供人工审核。验证智能体与两个专业智能体协调:

文档分析智能体:该智能体使用 Amazon Bedrock 上的 Anthropic Claude Haiku 4.5 进行高级文本推理和法律语言解读。Claude 擅长理解复杂文档、提取关键信息,以及识别文本中指示文档类型的细微模式。该智能体分析文档内容、元数据和语言特征,以生成分类假设。

向量相似性搜索智能体:该智能体使用 Amazon Titan Multimodal Embeddings G1 将文档转换为高维向量表示,用于视觉相似性搜索。Claude Haiku 4.5 擅长理解文档内容:分析文本、提取关键信息以及识别语言模式。向量相似性搜索智能体则专注于视觉和结构特征作为补充。该智能体捕捉文档的外观而非内容含义。它识别格式模式,如表单布局、表格结构和版式惯例,这些特征即使在文本内容变化时也能区分文档类型。该智能体使用 FAISS(Facebook AI 相似性搜索)进行高效的向量相似性搜索,支持与已知文档模板进行快速比对。

通过将文本分析和相似性分析与内置验证相结合,这种多智能体架构实现了更高的分类准确率,并为自动化决策提供可靠的置信度评分。

在接下来的章节中,您将学习如何实现每个组件并部署完整的解决方案。

前提条件

  • 一个有效的AWS账户,具有访问Amazon Bedrock的权限。
  • AWS身份和访问管理(IAM)权限,用于创建和调用基础模型(FM)。
  • 访问Anthropic的Claude Haiku 4.5和Amazon Titan多模态嵌入模型。有关各AWS区域的模型可用性,请参阅Amazon Bedrock中按AWS区域划分的受支持模型。

开发环境

  • 已安装Python 3.14或更高版本。
  • 已安装AWS CLI 2.0或更高版本,并配置了您的凭证。
  • 一个集成开发环境(IDE)或文本编辑器(如VS Code或PyCharm)。
  • Git,用于克隆示例代码仓库。

软件和库

  • Strands Agents SDK(操作指南中提供了安装说明)。
  • FAISS库,用于向量相似性搜索。

注意:本操作指南使用的AWS服务可能会产生费用。请务必查看Amazon Bedrock的定价,并按照文末的清理说明操作,以避免持续产生费用。

实现多智能体文档分类系统

让我们逐步实现多智能体系统的每个组件。完整代码可在我们的GitHub仓库中获取。

步骤1:配置基础模型

首先,通过Amazon Bedrock推理配置文件配置对Claude模型的访问。这可以在各区域间提供一致的性能和可用性。

def create_bedrock_model(
    model_id: str = "anthropic.claude-haiku-4-5-20251001-v1:0", #
    temperature: float = 0.1,
    max_tokens: int = 4096
) -> BedrockModel:
    """创建配置好的Bedrock模型实例。"""
    return BedrockModel(
        model_id=model_id,
        region_name="us-east-1",
        temperature=temperature,
        max_tokens=max_tokens
    )

提示:为了获得更低的延迟和更高的可用性(HA),您可以使用跨区域推理配置文件,在模型ID中添加与您的部署区域匹配的地理前缀(us.、eu.或ap.)。

步骤2:创建文档分析智能体

文档分析智能体利用Claude Haiku 4.5的高级推理能力,专注于文本内容分析。该智能体使用结构化输出来返回一致的、机器可解析的分类结果。

class TextualAnalysisOutput(BaseModel):
    """文档文本分析的结构化输出。"""
    classification: str = Field(description="文档类别:POLICY、AFFIDAVIT或MISCELLANEOUS")
    confidence: float = Field(description="分类置信度得分,范围从0.0到1.0")
    reasoning: str = Field(description="导致此分类的文本特征的说明")

@tool
def analyze_document_text(document_text: str) -> str:
    """分析文档文本内容以对保险文档进行分类。"""

    TEXTUAL_ANALYSIS_PROMPT = """您是保险文档的文档分析专家。
    分析所提供的文档文本,并将其准确分类为以下类别之一:
    - POLICY:保险单、批单、声明页、承保范围文件
    - AFFIDAVIT:宣誓书、公证文件、法律声明、监管申报文件
    - MISCELLANEOUS:任何不完全符合上述类别的文档

    请提供您的分类结果,附上置信度得分(0.0-1.0)以及详细的推理说明,
    解释哪些文本特征导致了您的判断。"""

    text_agent = Agent(
        model=create_bedrock_model(),
        system_prompt=TEXTUAL_ANALYSIS_PROMPT,
        conversation_manager=NullConversationManager(),
    )

    result = text_agent(
        f"请对以下文档进行分类:\n\n{document_text}",
        structured_output_model=TextualAnalysisOutput,
    )
    return str(result.structured_output)

步骤3:构建向量相似性搜索智能体

向量相似性搜索智能体使用Amazon Titan多模态嵌入模型来分析文档布局和视觉特征。

在模块级别仅加载一次 FAISS 索引。 allow_dangerous_deserialization=True 是必需的,因为 FAISS 内部使用 pickle; 此处是安全的,因为该索引是我们使用自己的训练文档自行创建的。 ``python db = FAISS.load_local("hybrid_docs.vdb", embeddings=embeddings, allow_dangerous_deserialization=True) VECTOR_ANALYSIS_PROMPT = """你是一名向量相似性搜索专家。 分析相似性搜索结果并确定文档分类。 请考虑各页面匹配的置信度分数和一致性。""" @tool def analyze_document_vectors(pdf_path: str) -> str: """使用基于智能体推理的向量相似性搜索对文档进行分类。""" base64_pages = pdf_to_base64(pdf_path) first_embedding = create_multimodal_embedding(image_base64=base64_pages[0]) results = db.similarity_search_by_vector(embedding=first_embedding, k=3) labels = [r.metadata["label"] for r in results] classification = Counter(labels).most_common(1)[0][0] confidence = labels.count(classification) / len(labels) vector_agent = Agent( model=create_bedrock_model(), system_prompt=VECTOR_ANALYSIS_PROMPT, conversation_manager=NullConversationManager(), ) result = vector_agent( f"{pdf_path} 的向量搜索结果:\n" f"最佳匹配:{classification}(置信度:{confidence:.2f})\n" f"所有匹配:{labels}\n" f"请提供最终分类及推理依据。", structured_output_model=VectorAnalysisOutput, ) return str(result.structured_output) ``

该智能体使用 perform_vector_classification 执行 FAISS 向量相似性搜索,将文档与存储在向量数据库中的预训练视觉模式进行匹配。

步骤 4:实现验证智能体

验证智能体使用“智能体即工具”模式来协调各专家智能体。

class OrchestratorOutput(BaseModel):
    """验证编排器的结构化输出。"""
    textual_analysis: str = Field(description="文本智能体分类:POLICY、AFFIDAVIT 或 MISCELLANEOUS")
    textual_confidence: float = Field(description="文本智能体置信度 0.0-1.0")
    vector_analysis: str = Field(description="向量智能体分类:POLICY、AFFIDAVIT 或 MISCELLANEOUS")
    vector_confidence: float = Field(description="向量智能体置信度 0.0-1.0")
    final_classification: str = Field(description="最终验证后的分类")
    confidence: float = Field(description="总体置信度分数")
    requires_human_review: bool = Field(description="边缘情况是否需要人工审核")
    decision_logic: str = Field(description="决策的简要说明")
    justification: str = Field(description="来自两位专家的详细推理依据")


class MultiAgentDocumentClassifier:
    def __init__(self, model=None):
        self.model = model or create_bedrock_model()

        self.orchestrator = Agent(
            model=self.model,
            tools=[analyze_document_text, analyze_document_vectors],
            system_prompt="""你是一名文档分类编排器。

你的工作流程:
1. 使用 analyze_document_text 进行文本分析
2. 使用 analyze_document_vectors 进行视觉相似性分析
3. 综合两者得出最终分类

推理准则:
- 两者一致 → 高置信度(0.85-0.95)
- 两者不一致 → 对于内容丰富的文档,文本分析更可靠;对于视觉特征明显的格式,向量分析更可靠
- 文本极短(少于50个字符)或文本置信度低(<0.3)→ 以向量分析为准
- 背书文件属于 POLICY 文档
- 证据相互矛盾时标记为需要人工审核

在做出决定之前,务必同时使用两个工具。"""
        )

验证智能体对两位专家智能体的结果进行交叉检查,以确保质量和一致性。

步骤 5:对文档进行分类

    # MultiAgentDocumentClassifier 的方法
    def classify_document(self, pdf_path: str) -> OrchestratorOutput:
        """使用多智能体编排对文档进行分类。"""
        filename = os.path.basename(pdf_path)
        text_content = extract_pdf_text(pdf_path, max_chars=3000)

        query = f"""请对这份保险文档进行分类:{filename}

文档文本内容(前3000个字符):
{text_content}

用于向量分析的文档文件路径:{pdf_path}

请同时使用 analyze_document_text 和 analyze_document_vectors,然后进行综合判断。"""

        result = self.orchestrator(query, structured_output_model=OrchestratorOutput)
        return result.structured_output

使用分类器的方式如下:

classifier = MultiAgentDocumentClassifier()

result = classifier.classify_document("documents/sample_policy.pdf")
print(f"分类结果:{result.final_classification}")
print(f"置信度:{result.confidence:.2f}")
print(f"推理依据:{result.justification}")

系统通过多个专家代理处理每份文档,将它们的分析综合为带有完整推理过程的最终分类结果。

理解结果

模型选择

针对此工作负载,我们在 Amazon Bedrock 上选择了 Claude Haiku 4.5 作为推理模型。Haiku 4.5 在满足我们准确率要求的同时,提供了更低的延迟和成本,平均每份文档分类耗时 19.3 秒,置信度为 93%。这使其非常适合以速度和成本效率为优先、同时不牺牲正确性的生产工作负载。

常见方法对比

我们将多代理系统与三种常用的 AWS 方法进行了基准测试。目标很明确:找出最直接且能满足合规敏感型工作负载准确率要求的方法。

Amazon Textract 和 Amazon Comprehend 专为文本提取和实体识别而构建。它们在这些任务上表现出色。然而,它们并非为多类别文档分类而设计,尤其是在文档共享重叠法律术语的情况下。两者在我们的测试集上仅达到 25% 的准确率。Amazon Bedrock Data Automation(BDA)表现明显更好,达到 70%,能正确识别大多数宣誓书和杂项文档,但整体上仍有近三分之一的文档被错误分类。多代理系统是唯一在所有文档类别上均达到 100% 准确率的方法。

方法准确率平均耗时复杂度成本
1Amazon Textract + 关键词25%2.88秒
2Amazon Comprehend + 实体25%3.26秒
3Amazon Bedrock Data Automation70%25.7秒
4多代理系统100%23.3秒

按类别和方法划分的准确率

准确率差距在保单文档上最为显著:这类文档包含密集的法律文本,其术语与其他文档类别高度重叠。只有多代理系统能正确分类这些文档。宣誓书也呈现类似模式:BDA 处理得很好,但 Amazon Textract 和 Amazon Comprehend 无法将其与相邻的法律文档类型区分开来。杂项文档包含明显的结构标记,所有方法均能正确分类。

类别数量Amazon TextractAmazon ComprehendBDA多代理
1保单825%25%25%100%
2宣誓书1010%10%100%100%
3杂项2100%100%100%100%

在我们有限的评估范围内(3 个类别共 20 份文档)的测试中,多代理系统达到了 100% 的准确率,比次优方法(BDA 的 70%)提升了 30 个百分点。生产环境中的准确率可能因更大、更多样化的文档集而有所变化。Amazon Textract 和 Amazon Comprehend 分别专为文本提取和实体识别而构建,在这些任务上表现出色。然而,它们并非为术语重叠的细粒度多类别文档分类而设计。这些结果反映的是未经微调或自定义分类逻辑的初始运行情况。通过额外配置,特定用例的准确率可以进一步提升。

多代理系统以处理时间(每份文档约 23 秒)换取显著更高的准确率,非常适合分类错误会带来合规或财务风险的用例。在多代理框架内,Claude Haiku 4.5 在准确率上与 Claude Sonnet 4.5 持平,同时运行速度快 17%。这使其成为以更低延迟和成本运行生产工作负载的更优选择。

生产安全保障

Amazon Bedrock Guardrails 为模型交互提供内容过滤和安全控制。可配置的策略支持拒绝主题、内容过滤器、词语过滤器和敏感信息编辑,以便在应用层实现负责任的 AI 部署。对于处理敏感保险文档的分类流水线,需要明确的控制措施来确保输出保持准确、恰当且可审计。如果没有这些控制,分类流水线可能产生幻觉类别、在日志或下游系统中泄露敏感数据,或做出自信但错误的决策,从而违反合规要求。

  • 应用个人身份信息(PII)编辑过滤器,帮助防止投保人信息传播到分类日志中。
  • 配置主题拒绝策略,将代理限制在其分类范围内。
  • 开启 Amazon Bedrock 模型调用日志记录,捕获完整的请求-响应链路(包括护栏干预事件),以供审计使用。

在我们的解决方案中,Validation Agent 的 requires_human_review 标志会在置信度低于设定阈值时自动触发升级流程。这确保了不确定的分类结果能够送达人工审核人员,而不是继续向下游传播。

清理资源

删除本地资源:

  1. 从本地环境中删除 FAISS 向量数据库文件(hybrid_docs.vdb)。
  2. 删除您上传用于分类的测试 PDF 文档。
  3. 如果您专门为此项目创建了 Python 虚拟环境,请将其清除。

删除 AWS 资源:

  1. 如果您将训练文档存储在 Amazon Simple Storage Service(Amazon S3)中,请删除 S3 存储桶及其内容。
  2. 清除测试期间生成的 Amazon CloudWatch 日志。
  3. 在 AWS Management Console 中查看您的 Amazon Bedrock 使用情况,确认没有正在进行的调用。

注意:Amazon Bedrock 按模型调用次数收费,因此没有需要删除的持久化资源。不过,查看使用情况有助于您了解测试期间产生的费用。

有关详细的清理说明和脚本,请参阅我们 GitHub 仓库中的清理部分。

结论

本文演示了如何通过使用 Amazon Bedrock 基础模型和 Strands Agents SDK 的多智能体工作流来提高文档分类准确性。通过编排三个专门的 AI 智能体,您可以获得更准确的分类结果,该结果结合了文本分析和视觉分析两方面的优势。该解决方案使用由 Anthropic 的 Claude Haiku 4.5 驱动的 Document Analysis Agent、使用 Amazon Titan Multimodal Embeddings 的 Vector Similarity Search Agent,以及用于质量保证的 Validation Agent。

这种多智能体方法相比传统的单模型分类系统具有多项优势。专门的智能体在各自专业领域内自主工作,然后通过 Orchestrator 协作,交付既准确又可解释的结果。您可以先从使用自己的文档类型实施 Document Analysis Agent 开始,然后添加 Vector Similarity Search Agent 以提高对视觉特征明显的文档的分类准确性。尝试设置不同的人工审核置信度阈值,以在自动化与质量保证之间取得平衡。

其他资源:

  • 在我们的 GitHub 仓库中探索完整实现。
  • 了解 Amazon Bedrock 上可用的基础模型的更多信息。
  • 阅读 Strands Agents SDK 文档,了解高级编排模式。
  • 查看有关智能文档处理和多智能体架构的相关文章。

关于作者

阅读原文