目 录CONTENT

文章目录

使用AWS上的Hugging Face smolagents构建多模型框架的智能体AI

Administrator
2026-02-24 / 0 评论 / 0 点赞 / 0 阅读 / 0 字

📢 转载信息

原文链接:https://aws.amazon.com/blogs/machine-learning/agentic-ai-with-multi-model-framework-using-hugging-face-smolagents-on-aws/

原文作者:Sanhita Sarkar, Jeff Boudier, Simon Pagezy, and Florent Gbelidji


本文由 Jeff Boudier、Simon Pagezy 和 Florent Gbelidji(均来自 Hugging Face)联合撰写。

智能体AI系统代表了从对话式AI向能够进行复杂推理、工具使用和代码执行的自主智能体演进。企业应用受益于针对特定需求量身定制的战略部署方法。这些需求包括提供自动扩展功能的托管端点、支持复杂推理的基础模型 API,以及支持自定义集成要求的容器化部署选项

Hugging Face smolagents 是一个开源 Python 库,旨在通过几行代码轻松构建和运行智能体。我们将向您展示如何通过将 Hugging Face smolagents 与 Amazon Web Services (AWS) 托管服务集成来构建一个智能体AI解决方案。您将了解如何部署一个医疗保健AI智能体,该智能体演示了多模型部署选项、向量增强的知识检索和临床决策支持功能。

尽管我们使用医疗保健作为示例,但此架构适用于多个行业,在这些行业中,领域特定的智能和可靠性至关重要。该解决方案利用了smolagents模型无关、模态无关和工具无关的设计,以编排 Amazon SageMaker AI 端点、Amazon Bedrock API 和容器化模型服务器。

解决方案概述

许多AI系统在单一模型方法上存在局限性,无法适应各种企业需求。这些系统通常部署选项固定,不同AI服务间的API不一致,并且缺乏多模型部署选项以实现最佳模型选择。

本解决方案展示了组织如何构建解决这些限制的AI系统。该解决方案允许根据操作需求选择部署方式,并在不同的AI后端和部署方法之间提供一致的请求和响应格式。它通过整合医疗知识和向量搜索生成上下文响应,并通过容器化架构支持从开发到生产环境的部署。

这个医疗保健用例说明了AI智能体如何处理关于六种药物的复杂医疗查询,并提供临床决策支持以及AWS的安全和合规能力。

架构

该解决方案由以下服务和功能组成,以提供智能体AI能力:

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

Architecture workflow is described within the following blog body copy.

该架构是 Hugging Face smolagents 框架与 AWS 服务的完整集成。客户端 Web 界面连接到一个医疗保健智能体容器,该容器编排了三个模型后端:使用 BioM-ELECTRA 的 SageMaker AI、使用 Claude 3.5 Sonnet V2 的 Amazon Bedrock,以及使用 BioM-ELECTRA 的容器化模型服务器。该解决方案包括一个由 OpenSearch Service 驱动的向量存储和一个具有静态和传输中数据加密的安全层。安全层还处理 IAM 访问控制和身份验证,以及任何用于监管合规性的医疗免责声明。

此解决方案通过 smolagents 支持部署选项,其中每个后端都针对不同场景进行了优化:

  1. SageMaker AI:用于托管端点,具有自动扩展功能,并使用 Hugging Face Hub 模型处理生产工作负载。
  2. Amazon Bedrock:用于无服务器访问基础模型,并通过 AWS API 进行复杂推理。
  3. 容器化模型服务器:用于自托管模型部署和从 Hugging Face Hub 集成工具。

这三个后端都实现了 Hugging Face Messages API 兼容性,确保无论选择哪个模型服务,请求和响应格式都是一致的。用户根据自己的要求选择适当的后端——该解决方案提供部署选项,而不是自动路由。

完整的实现可在 sample-healthcare-agent-with-smolagents-on-aws GitHub 存储库中找到。

主要优势

将 Hugging Face smolagents 与 AWS 托管服务集成,为企业智能体AI部署带来了显著优势。

部署选择

组织可以为每种用例选择最佳部署:Amazon Bedrock 用于无服务器访问基础模型,容器化部署用于自定义工具集成,或 SageMaker AI 用于专业领域模型。这些选项有助于匹配特定的工作负载需求,而不是采用“一刀切”的方法。

多模型部署选项

组织可以在不更改其智能体逻辑的情况下优化其基础设施选择。您可以在容器化模型服务器、SageMaker AI 和 Amazon Bedrock 之间切换,而无需修改应用程序代码。这提供了部署选项,同时保持一致的智能体行为。

代码生成能力

smolagents 的 CodeAgent 方法通过直接的 Python 代码生成和处理,简化了多步操作。以下比较说明了 smolagents 的多步操作:

基于JSON的多步方法:

{ "action": "search", "parameters": {"query": "drug interactions"}, "next_action": { "action": "filter", "parameters": {"criteria": "severity > moderate"} } }

smolagents CodeAgent:

# 在单个代码块中搜索和过滤 results = search_tool("drug interactions") filtered_results = [r for r in results if r.severity > "moderate"] final_answer(f"Found {len(filtered_results)} severe interactions: {filtered_results}")

smolagents CodeAgent 支持单个代码块来处理多步操作,减少了大型语言模型 (LLM) 的调用次数,同时简化了智能体开发。它在整个 AWS 服务部署中提供了对智能体逻辑的完全控制。

可扩展架构

通过在 AWS 上部署应用程序,您可以利用安全功能和自动扩展功能,帮助您满足组织安全要求并保持监管合规性。使用 Amazon ECS 和 Fargate 运行容器化工作负载有助于您实现可靠的运营,并通过自动化资源扩展来优化成本。

让我们逐步介绍如何实现此解决方案。

先决条件

在部署解决方案之前,您需要满足以下条件:

运行以下命令安装所需的 Python 包:

pip install -r healthcare_ai_agent/phase_00_installation/requirements.txt

配置环境变量

在部署基础设施之前,设置 AWS 区域和资源名称所需的环境变量。

  1. 在终端中设置以下环境变量:
export AWS_REGION=us-west-2 export SAGEMAKER_ENDPOINT_NAME=healthcare-qa-endpoint-1 export OPENSEARCH_DOMAIN=healthcare-vector-store export OPENSEARCH_INDEX=medical-knowledge export BEDROCK_MODEL_ID=anthropic.claude-3-5-sonnet-20241022-v2:0 export SAGEMAKER_MODEL_ID=sultan/BioM-ELECTRA-Large-SQuAD2 export CONTAINERIZED_MODEL_ID=sultan/BioM-ELECTRA-Large-SQuAD2
  1. 验证变量是否已设置:
echo $AWS_REGION echo $SAGEMAKER_ENDPOINT_NAME

这些环境变量在整个部署和测试过程中都会使用。在进行下一步之前,请验证它们是否已设置。

设置 AWS 基础设施

首先,使用 Smolagents_SageMaker_Bedrock_Opensearch.py 实现中的 SampleAWSInfrastructureManager 类创建基础 AWS 基础设施组件。

部署完整基础设施(自动化方法)

对于 AWS 基础设施组件的自动化部署,您可以使用增强的主函数。

  1. 启动增强的主函数:
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main enhanced_main() # 选择选项 1 进行完整的 AWS 基础设施部署
  1. 部署将自动创建 Amazon ECS 集群、IAM 角色和 OpenSearch Service 域。
  2. 等待部署完成(大约 15–20 分钟)。

创建单个 AWS 组件(替代方法)

如果您希望单独创建组件,可以设置 OpenSearch Service 域用于向量增强的知识检索和 Amazon ECS 集群用于容器化部署。

OpenSearch Service 域和 Amazon ECS 集群都作为完整 AWS 基础设施部署(enhanced_main 中的选项 1)的一部分自动创建。如果您已经部署了完整的基础设施,则两个组件都已准备就绪,您可以跳到部署 Amazon SageMaker AI 端点部分。

部署 Amazon SageMaker AI 端点

将 BioM-ELECTRA-Large-SQuAD2 模型部署到 SageMaker AI,用于专业医疗查询处理。提供了自动化方法(用于通过增强的主函数部署)和手动方法(用于通过 SageMaker AI 端点部署)。

使用增强的主函数部署(自动化方法)

from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main() # 选择选项 2 进行 SageMaker 端点部署

部署 SageMaker AI 端点(手动方法)

  1. 验证您的 SageMaker 环境变量是否已设置(来自配置环境变量部分):
echo $SAGEMAKER_MODEL_ID echo $SAGEMAKER_ENDPOINT_NAME
  1. 运行 Amazon SageMaker 部署函数:
from Smolagents_SageMaker_Bedrock_Opensearch import deploy_sagemaker_endpoint_safe endpoint_name = deploy_sagemaker_endpoint_safe()
  1. 部署使用 HuggingFaceModel,包含 transformers 4.28.1、PyTorch 2.0.0 和 ml.m5.xlarge 实例类型。
  2. 等待端点部署完成(大约 5–10 分钟)。
  3. 验证端点部署:
# 验证端点状态 print(f"✅ Endpoint deployed: {endpoint_name}")
  1. 端点配置用于问答任务,设置了 MAX_LENGTH=512TEMPERATURE=0.1

配置多模型后端

使用 SampleTripleHealthcareAgent 类配置另外两个后端选项,该类根据操作需求选择模型。

选项 1 – 设置 Amazon Bedrock 访问

配置对 Amazon Bedrock 的访问,以集成 Claude 3.5 Sonnet V2 基础模型。

  1. 验证您的 Amazon Bedrock 模型配置是否已设置(来自配置环境变量部分):
echo $BEDROCK_MODEL_ID
  1. 您的 AWS 帐户会自动提供对 Claude 3.5 Sonnet V2 的访问权限。
  2. 您可以在 Amazon Bedrock 控制台的模型目录下验证模型的可用性。

初始化医疗知识库

使用六种药物和 OpenSearch Service 中的向量嵌入设置医疗知识数据库。您可以使用 enhanced_main() 函数(提供部署任务的交互式菜单),或使用 SampleOpenSearchManager 类手动初始化。

使用增强的主函数初始化(自动化方法)

from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main() # 选择选项 4 进行 OpenSearch 初始化和医疗知识索引

初始化医疗知识库(手动方法)

  1. 初始化 SampleOpenSearchManager
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main() # 选择选项 4 进行 OpenSearch 初始化和医疗知识索引
  1. 系统创建具有 drug_namecontentcontent_type 字段映射的医疗知识索引。
  2. Metformin、Lisinopril、Atorvastatin、Amlodipine、Omeprazole 和 Simvastatin 的医疗知识会自动被索引。
  3. 每种药物都包含副作用、监测要求和药物分类信息。
  4. 向量存储支持带内容类型过滤的相似性搜索,以实现定向查询。
  5. 验证索引成功完成:
# 验证索引成功完成 print("Medical knowledge base initialized with 6 medications")

选项 2 – 部署容器化模型服务器

设置核心基础设施后,部署一个容器化模型服务器,该服务器提供自托管模型部署功能。

使用 LocalContainerizedModelServer 类和 BioM-ELECTRA-Large-SQuAD2 来部署模型,从而部署容器化模型服务器。

部署容器到 Amazon ECS(自动化方法)

对于自动化部署,请使用容器化的 Amazon ECS 部署:

from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main() # 选择选项 3 进行 ECS 容器部署

部署容器化模型服务器(手动方法)

  1. 验证您的容器化模型配置是否已设置(来自配置环境变量步骤):
echo $CONTAINERIZED_MODEL_ID
  1. 初始化容器化模型服务器:
from Smolagents_SageMaker_Bedrock_Opensearch import LocalContainerizedModelServer containerized_server = LocalContainerizedModelServer() containerized_server.start_server()

容器化模型服务器使用 Docker 沙箱进行安全的代码执行。

  1. 验证容器化模型服务器是否正在运行:
print(f"✅ Containerized Model Server status: {containerized_server.get_status()}")
  1. 容器化模型服务器包括带医疗知识数据库集成的回退机制。
  2. 容器化模型服务器支持与 Amazon ECS 服务发现的部署。

实现医疗保健智能体

使用 SampleTripleHealthcareAgent 类部署核心医疗保健智能体,该类演示了 smolagents 与跨这三个后端的部署能力的集成。

初始化三重医疗保健智能体

设置主医疗保健智能体,该智能体与 smolagents 框架集成,并在 SageMaker AI、Amazon Bedrock 和容器化模型服务器之间进行编排。

  1. 创建向量存储实例:
from Smolagents_SageMaker_Bedrock_Opensearch import SampleOpenSearchVectorStore vector_store = SampleOpenSearchVectorStore() vector_store_available = vector_store.initialize_client()
  1. 初始化三重医疗保健智能体:
from Smolagents_SageMaker_Bedrock_Opensearch import SampleTripleHealthcareAgent import os agent = SampleTripleHealthcareAgent( endpoint_name=os.getenv('SAGEMAKER_ENDPOINT_NAME'), vector_store=vector_store if vector_store_available else None )
  1. 该智能体初始化三个模型后端:
    • SampleSageMakerEndpointModel 集成 BioM-ELECTRA
    • SampleBedrockClaudeModel 集成 Claude 3.5 Sonnet V2 API
    • SampleContainerizedModel 带有回退机制
  2. 每个后端都用 SampleHealthcareCodeAgent 包装以实现 smolagents 集成。
  3. 智能体配置了 max_steps=3DuckDuckGoSearchTool 集成。

配置部署选项

系统根据操作需求演示了三种部署选项。

了解部署选项:

  • SageMaker AI 部署:有关药物信息、副作用和监测要求的专业医疗查询。
  • Amazon Bedrock 部署:需要详细医疗分析和多步推理的复杂推理任务。
  • 容器化部署:自定义模型集成,带有专业工具和自托管模型访问。

每个后端都包含带医疗知识的数据库回退(针对六种药物),Amazon OpenSearch Service 通过相似性匹配为所有模型后端提供上下文信息。

测试交互式系统

使用 sample_interactive_healthcare_assistant 函数测试多模型部署。

  1. 启动交互式医疗保健助手:
from Smolagents_SageMaker_Bedrock_Opensearch import sample_interactive_healthcare_assistant sample_interactive_healthcare_assistant()
  1. 系统提供用于模型切换的命令:
    • 1 代表 SageMaker 端点
    • 2 代表容器化模型服务器
    • 3 代表 Amazon Bedrock Claude API
    • compare <question> 查看三个响应
  2. 测试查询限制为 100 个字符,以获得最佳性能。
  3. 响应包含可用时的向量上下文和数据库回退信息。

运行和测试解决方案

您现在可以运行和测试多模型医疗保健智能体,以使用实际的六种药物医疗知识库,观察 smolagents 的多后端部署能力。

运行应用程序

解决方案根据您偏好的开发环境,提供了多种与医疗保健AI智能体交互的方式。

Streamlit Web 界面

用于交互式基于 Web 的体验:

cd healthcare_ai_agent/streamlit_demo streamlit run healthcare_app.py

Jupyter Notebook

用于交互式开发和实验:

jupyter lab Smolagents_SageMaker_Bedrock_Opensearch.ipynb

直接 Python

用于命令行执行:

python Smolagents_SageMaker_Bedrock_Opensearch.py

这些方法提供了对相同多模型医疗保健智能体功能的访问,但用户界面不同。

测试部署选项

使用 enhanced_main 函数访问测试工具并验证多模型部署。

交互式医疗演示

体验医疗保健助手的对话界面,具有近乎实时地切换模型的功能。

  1. 启动增强的主函数:
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main()
  1. 选择选项 5交互式 3 模型演示)以启动对话界面。
  2. 系统提供用于模型切换的命令:
    • 1 代表 SageMaker 端点
    • 2 代表容器化模型服务器
    • 3 代表 Amazon Bedrock Claude API
    • compare <question> 查看三个响应
  3. 测试查询限制为 100 个字符,以获得最佳性能。
  4. 响应包含可用时的向量上下文和数据库回退信息。

比较模型响应

使用 enhanced_main 函数比较不同查询类型的三个部署选项。

运行交互式测试

  1. 启动增强的主函数:
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main enhanced_main()

选择选项 7 比较 3 个模型)以测试部署选项。

  1. 使用 SageMaker AI 测试医疗查询:
    Query: "What are the side effects of metformin?" Expected deployment: SageMaker AI (specialized medical knowledge) Response: "Metformin side effects: Nausea, Diarrhea. Serious: Lactic acidosis."
  2. 使用 Amazon Bedrock 测试复杂推理查询:
    Query: "Compare cardiovascular risks of atorvastatin and simvastatin" Expected deployment: Amazon Bedrock (complex reasoning with Claude 3.5 Sonnet V2) Response: Detailed analysis with mechanism of action and monitoring requirements
  3. 测试使用容器化模型服务器的查询:
    Query: "Tell me about lisinopril monitoring requirements" Expected deployment: Containerized Model Server (specialized tools and fallback) Response: "Monitor Blood pressure, Kidney function for Lisinopril"

实际响应包括来自 OpenSearch Service 的向量上下文(如果可用),并在模型响应旁边显示相似性匹配结果。

验证部署状态

使用内置的测试工具来验证医疗保健智能体部署和组件状态。

  1. 运行组件测试(enhanced_main 中的选项 6):
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main enhanced_main() # 选择选项 6 进行组件测试

预期输出:

  • OpenSearch: Connected
  • SageMaker endpoint: Active
  • Bedrock: Available
  • Containerized model server: Started
  • ECS cluster: Active

 

  1. 使用 get_container_status() 监控智能体状态:
status = agent.get_container_status() print(status) # Shows: Healthcare Agent Container, smolagents framework Active, # Messages API Compatible, 6 medications loaded

预期输出:

  • Healthcare agent container: Active
  • smolagents framework: Active
  • Messages API: Compatible
  • Drug database: 6 medications loaded
  • Vector store: OpenSearch integrated

 

  1. 测试容器化模型服务器功能(选项 10),以独立验证容器化模型服务器:
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main() # 选择选项 10 进行容器化模型服务器测试

预期输出:

  • Containerized model server: Started successfully
  • BioM-ELECTRA model: Loaded
  • Medical knowledge: Available
  • Fallback mechanism... [内容被截断]



🚀 想要体验更好更全面的AI调用?

欢迎使用青云聚合API,约为官网价格的十分之一,支持300+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。

0

评论区