📢 转载信息
原文作者: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能力:
- 使用 BioM-ELECTRA-Large-SQuAD2 模型的 SageMaker AI,用于专业医疗查询和托管自动扩展。
- Amazon Bedrock 搭配 Anthropic 的 Claude 3.5 Sonnet V2,用于复杂推理和基础模型访问。
- Amazon OpenSearch Service,用于向量相似性匹配和带医疗知识索引的上下文知识检索。
- Amazon Elastic Container Service (Amazon ECS) 搭配 AWS Fargate,用于无服务器容器编排和使用smolagents库的 Python 应用程序的可扩展部署。
- 用于安全和访问控制的 AWS Identity and Access Management (IAM)。
- 用于自托管模型部署的容器化模型服务器(使用 BioM-ELECTRA-Large-SQuAD2)。
下图说明了解决方案架构。

该架构是 Hugging Face smolagents 框架与 AWS 服务的完整集成。客户端 Web 界面连接到一个医疗保健智能体容器,该容器编排了三个模型后端:使用 BioM-ELECTRA 的 SageMaker AI、使用 Claude 3.5 Sonnet V2 的 Amazon Bedrock,以及使用 BioM-ELECTRA 的容器化模型服务器。该解决方案包括一个由 OpenSearch Service 驱动的向量存储和一个具有静态和传输中数据加密的安全层。安全层还处理 IAM 访问控制和身份验证,以及任何用于监管合规性的医疗免责声明。
此解决方案通过 smolagents 支持部署选项,其中每个后端都针对不同场景进行了优化:
- SageMaker AI:用于托管端点,具有自动扩展功能,并使用 Hugging Face Hub 模型处理生产工作负载。
- Amazon Bedrock:用于无服务器访问基础模型,并通过 AWS API 进行复杂推理。
- 容器化模型服务器:用于自托管模型部署和从 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 运行容器化工作负载有助于您实现可靠的运营,并通过自动化资源扩展来优化成本。
让我们逐步介绍如何实现此解决方案。
先决条件
在部署解决方案之前,您需要满足以下条件:
- 一个具有适当权限的 AWS 帐户,用于创建 IAM 角色、Amazon ECS 集群和 Amazon OpenSearch Service 域。
- 安装并配置了 AWS 命令行界面 (AWS CLI) 2.0 或更高版本。
- Python 3.10 或更高版本,用于运行部署脚本。
- 已安装并正在运行 Docker(生产环境需要,以提供安全的代码执行沙箱)。
- 在您的 AWS 区域中拥有 Amazon Bedrock、SageMaker AI 和 OpenSearch Service 的访问权限,并具有创建和管理资源的适当 IAM 权限。
- 对于此实现,我们使用 Python 3.10+、smolagents 框架、transformers 4.28.1+、PyTorch 2.0.0+ 和 boto3。
运行以下命令安装所需的 Python 包:
pip install -r healthcare_ai_agent/phase_00_installation/requirements.txt
配置环境变量
在部署基础设施之前,设置 AWS 区域和资源名称所需的环境变量。
- 在终端中设置以下环境变量:
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
- 验证变量是否已设置:
echo $AWS_REGION echo $SAGEMAKER_ENDPOINT_NAME
这些环境变量在整个部署和测试过程中都会使用。在进行下一步之前,请验证它们是否已设置。
设置 AWS 基础设施
首先,使用 Smolagents_SageMaker_Bedrock_Opensearch.py 实现中的 SampleAWSInfrastructureManager 类创建基础 AWS 基础设施组件。
部署完整基础设施(自动化方法)
对于 AWS 基础设施组件的自动化部署,您可以使用增强的主函数。
- 启动增强的主函数:
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main enhanced_main() # 选择选项 1 进行完整的 AWS 基础设施部署
- 部署将自动创建 Amazon ECS 集群、IAM 角色和 OpenSearch Service 域。
- 等待部署完成(大约 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 端点(手动方法)
- 验证您的 SageMaker 环境变量是否已设置(来自配置环境变量部分):
echo $SAGEMAKER_MODEL_ID echo $SAGEMAKER_ENDPOINT_NAME
- 运行 Amazon SageMaker 部署函数:
from Smolagents_SageMaker_Bedrock_Opensearch import deploy_sagemaker_endpoint_safe endpoint_name = deploy_sagemaker_endpoint_safe()
- 部署使用 HuggingFaceModel,包含 transformers 4.28.1、PyTorch 2.0.0 和 ml.m5.xlarge 实例类型。
- 等待端点部署完成(大约 5–10 分钟)。
- 验证端点部署:
# 验证端点状态 print(f"✅ Endpoint deployed: {endpoint_name}")
- 端点配置用于问答任务,设置了
MAX_LENGTH=512和TEMPERATURE=0.1。
配置多模型后端
使用 SampleTripleHealthcareAgent 类配置另外两个后端选项,该类根据操作需求选择模型。
选项 1 – 设置 Amazon Bedrock 访问
配置对 Amazon Bedrock 的访问,以集成 Claude 3.5 Sonnet V2 基础模型。
- 验证您的 Amazon Bedrock 模型配置是否已设置(来自配置环境变量部分):
echo $BEDROCK_MODEL_ID
- 您的 AWS 帐户会自动提供对 Claude 3.5 Sonnet V2 的访问权限。
- 您可以在 Amazon Bedrock 控制台的模型目录下验证模型的可用性。
初始化医疗知识库
使用六种药物和 OpenSearch Service 中的向量嵌入设置医疗知识数据库。您可以使用 enhanced_main() 函数(提供部署任务的交互式菜单),或使用 SampleOpenSearchManager 类手动初始化。
使用增强的主函数初始化(自动化方法)
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main() # 选择选项 4 进行 OpenSearch 初始化和医疗知识索引
初始化医疗知识库(手动方法)
- 初始化
SampleOpenSearchManager:
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main() # 选择选项 4 进行 OpenSearch 初始化和医疗知识索引
- 系统创建具有
drug_name、content和content_type字段映射的医疗知识索引。 - Metformin、Lisinopril、Atorvastatin、Amlodipine、Omeprazole 和 Simvastatin 的医疗知识会自动被索引。
- 每种药物都包含副作用、监测要求和药物分类信息。
- 向量存储支持带内容类型过滤的相似性搜索,以实现定向查询。
- 验证索引成功完成:
# 验证索引成功完成 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 容器部署
部署容器化模型服务器(手动方法)
- 验证您的容器化模型配置是否已设置(来自配置环境变量步骤):
echo $CONTAINERIZED_MODEL_ID
- 初始化容器化模型服务器:
from Smolagents_SageMaker_Bedrock_Opensearch import LocalContainerizedModelServer containerized_server = LocalContainerizedModelServer() containerized_server.start_server()
容器化模型服务器使用 Docker 沙箱进行安全的代码执行。
- 验证容器化模型服务器是否正在运行:
print(f"✅ Containerized Model Server status: {containerized_server.get_status()}")
- 容器化模型服务器包括带医疗知识数据库集成的回退机制。
- 容器化模型服务器支持与 Amazon ECS 服务发现的部署。
实现医疗保健智能体
使用 SampleTripleHealthcareAgent 类部署核心医疗保健智能体,该类演示了 smolagents 与跨这三个后端的部署能力的集成。
初始化三重医疗保健智能体
设置主医疗保健智能体,该智能体与 smolagents 框架集成,并在 SageMaker AI、Amazon Bedrock 和容器化模型服务器之间进行编排。
- 创建向量存储实例:
from Smolagents_SageMaker_Bedrock_Opensearch import SampleOpenSearchVectorStore vector_store = SampleOpenSearchVectorStore() vector_store_available = vector_store.initialize_client()
- 初始化三重医疗保健智能体:
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 )
- 该智能体初始化三个模型后端:
SampleSageMakerEndpointModel集成 BioM-ELECTRASampleBedrockClaudeModel集成 Claude 3.5 Sonnet V2 APISampleContainerizedModel带有回退机制
- 每个后端都用
SampleHealthcareCodeAgent包装以实现 smolagents 集成。 - 智能体配置了
max_steps=3和DuckDuckGoSearchTool集成。
配置部署选项
系统根据操作需求演示了三种部署选项。
了解部署选项:
- SageMaker AI 部署:有关药物信息、副作用和监测要求的专业医疗查询。
- Amazon Bedrock 部署:需要详细医疗分析和多步推理的复杂推理任务。
- 容器化部署:自定义模型集成,带有专业工具和自托管模型访问。
每个后端都包含带医疗知识的数据库回退(针对六种药物),Amazon OpenSearch Service 通过相似性匹配为所有模型后端提供上下文信息。
测试交互式系统
使用 sample_interactive_healthcare_assistant 函数测试多模型部署。
- 启动交互式医疗保健助手:
from Smolagents_SageMaker_Bedrock_Opensearch import sample_interactive_healthcare_assistant sample_interactive_healthcare_assistant()
- 系统提供用于模型切换的命令:
- 1 代表 SageMaker 端点
- 2 代表容器化模型服务器
- 3 代表 Amazon Bedrock Claude API
- compare <question> 查看三个响应
- 测试查询限制为 100 个字符,以获得最佳性能。
- 响应包含可用时的向量上下文和数据库回退信息。
运行和测试解决方案
您现在可以运行和测试多模型医疗保健智能体,以使用实际的六种药物医疗知识库,观察 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 函数访问测试工具并验证多模型部署。
交互式医疗演示
体验医疗保健助手的对话界面,具有近乎实时地切换模型的功能。
- 启动增强的主函数:
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main # 启动增强的主函数 enhanced_main()
- 选择选项 5(交互式 3 模型演示)以启动对话界面。
- 系统提供用于模型切换的命令:
- 1 代表 SageMaker 端点
- 2 代表容器化模型服务器
- 3 代表 Amazon Bedrock Claude API
- compare <question> 查看三个响应
- 测试查询限制为 100 个字符,以获得最佳性能。
- 响应包含可用时的向量上下文和数据库回退信息。
比较模型响应
使用 enhanced_main 函数比较不同查询类型的三个部署选项。
运行交互式测试
- 启动增强的主函数:
from Smolagents_SageMaker_Bedrock_Opensearch import enhanced_main enhanced_main()
选择选项 7 (比较 3 个模型)以测试部署选项。
- 使用 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." - 使用 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 - 测试使用容器化模型服务器的查询:
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 的向量上下文(如果可用),并在模型响应旁边显示相似性匹配结果。
验证部署状态
使用内置的测试工具来验证医疗保健智能体部署和组件状态。
- 运行组件测试(
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
- 使用
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
- 测试容器化模型服务器功能(选项 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+全球最新模型,以及全球各种生图生视频模型,无需翻墙高速稳定,文档丰富,小白也可以简单操作。
评论区