亚马逊AWS官方博客

Firecracker在航空营销多智能体中的应用

1、背景

随着大语言模型与智能体(Agent)技术的持续演进,越来越多的行业客户正将其业务支撑与发展的技术路线,由传统架构全面转向基于大模型的智能化实现。

首当其冲被“大模型化”的是客服、营销、运营三个高频场景:智能问答取代传统IVR、对话式营销替代短信轰炸、知识抽取+自动生成把合同、标书的撰写时间从“天”缩短到“小时”;随后,风控、运维、测试、培训等链路也凭借“文本即接口”的特性被快速重构,形成客户Bot、运营Bot、合规Bot等单点智能体。

由于大模型上下文长度限制,跨系统流程需要反复调用API等原因,企业又逐渐进化成多智能体分工协作:调度Agent负责任务分解与路由、检索Agent专精知识召回、执行Agent负责工具调用、反思Agent做结果校验等,彼此通过消息总线协作。

但是,业务场景的愈发复杂,多智能体并行协作中使用的自然语言协议总线表现出众多不足,例如频繁出现字段缺失、格式随意、循环回复等问题,特别是当流程存在复杂分支、事务或回滚时,自然语言往往无法精确实现握手,表现不佳。

2、客户需求

客户是一家大型航空公司,正在开发一款智能营销软件。该软件以智能客服问答机器人作为切入场景,实现航空业务链路全打通,包括以下功能:

  • 情绪感知互动:根据问答对话的情绪、会员等级、场景标签等自动化调整语气与优惠力度。
  • 一站式行程服务:动态航班查询,退改签智能评估与操作,增值产品即时预订与支付。
  • 智能营销引擎:会员360度画像,融合乘机历史、RFM、偏好航线、投诉记录等;根据实时动价+舱位库存实现个性化报价。
  • 营销自动化:场景化剧本编排,新客礼、生日券等流程配置;预算风控,超限能自动暂停活动。
  • 企业级集成与合规:能与GDS、离港系统、收益管理系统双向API对接;实现多数据驻留,安全合规,敏感字段动态脱敏等。

在上述功能需求中,最大的难点是要在确保航空公司利益最大化的前提下,实现对接多套业务系统,根据用户画像和航班动态信息等,实时为用户提供个性化的报价。个性化报价是这套智能营销系统的核心,即关乎用户的体验,又关乎成交率。这个智能决策的过程需要考虑多个方面的平衡,经过调研分析,我们总结发现,有四个核心原则在营销决策过程中需要遵循:

原则一:库存贬值率(Perishability Principle)

逻辑:距离起飞时间越近,座位的价值贬值越快。

  • 如果是起飞前24小时,还有5个空位,航空公司会倾向于以更低的折扣(如4折)和更少的积分要求进行报价,目标是“只要有人坐,总比空着强”。
  • 如果是起飞前一周,则会要求更高的折扣(如8折),因为舱位还有机会原价卖出。

原则二:用户价格敏感度评分(Price Elasticity)

逻辑:根据历史数据判断当前用户的价格敏感性。

  • 系统需要能调取用户的历史交易记录:如果用户以前有自费升舱记录等,价格敏感度不高,则倾向于较高现金报价+少量积分兑换。
  • 如果用户只在促销时下单,则会直接给出大量积分+现金折扣的“地板价”来引导用户下单或升舱。

原则三:积分财务健康度(Point Liability Management)

逻辑:航空公司需要控制总体积分余额,防止“积分通胀”。

  • 如果当前全公司会员积分余额过高,财务主管会给系统下达 “消债”任务,系统则需要自动调高积分占比(例如要求扣除 30% 积分,但现金只要 2折)。

则四:转化概率最大化(Conversion Optimization)

逻辑:个性化报价的目的是为了促进成交。

  • 系统需要运行一个概率模型,动态计算不同方案的预计成交率。
  • 系统需要能自动对比不同方案的期望值,选择收益最高的那一个。

面对如此复杂的营销需求,仅仅依靠多智能体的自然语言协议进行并行协商,效果很难保证。因此,我们推荐了基于Firecracker的Agent CodeAct方案。

3、解决方案

这里首先简要介绍CodaAct和Firecracker,再叙述基于Firecracker的Agent CodeAct方案的实施过程。

3.1 CodeAct介绍

CodeAct是由UIUC研究团队于2024年在论文《Executable Code Actions Elicit Better LLM Agents》中首次提出。该框架摒弃传统JSON/文本动作指令,让大模型直接生成可执行的程序代码作为行动,通过与解释器多轮交互实现动态调试、变量复用与复杂控制流,从而把大模型在预训练阶段积累的编程知识转化为低成本、高灵活度的智能体行动方案。

CodeAct以“可执行代码”作为智能体行动的指令,让大模型不再只是输出结构松散的自然语言或固定JSON,而是直接生成Python/JS等代码脚本,并在隔离沙箱内立即运行,通过“代码-结果-调试”的闭环确保复杂任务的完成。其核心组件包括:

  • 代码执行环境:虚拟机或内核级隔离。
  • 提示工程机制:引导模型按语法标签输出代码块。
  • 状态管理:持久化上下文与变量。
  • 工作流定义系统:规范生成-执行-重试的流程。

相比传统的智能体多轮工具调用,CodeAct具备完备的表达力,可以在单轮内完成循环、分支、异常捕获或与多种工具组合,支持数据清洗、可视化、事务回滚等高级操作,并能借助执行反馈实现自纠错与迭代优化。

CodeAct能够很好的提升多智能体系统在复杂场景下的处理能力,但是选择什么样的虚拟机能满足大型航空公司多智能体营销场景中快速、高效、稳定、安全的需求呢?

3.2 Firecracker介绍

Firecracker是由Amazon Web Services 开发者创建的开源轻量级虚拟机。是基于Linux内核虚拟机(KVM,Kernel-based Virtual Machine)的虚拟化监视器(VMM),采用Rust语言实现,能够为多租户、无服务器和容器化应用提供极致轻量、快速和安全的运行环境。Firecracker在Amazon Lambda和Fargate等服务中的大规模应用和海量的用户实践,验证了其超高的效率和巨大的价值。

CodeAct需要为LLM生成的可执行代码提供“秒级拉起、运行即弃”的安全沙箱。Firecracker可以在收到脚本后百毫秒内启动MicroVM、挂载限制型seccomp与cgroup,执行完毕后立即销毁,这一特性可以完美实现“代码-结果-环境”的一次性隔离。既防止恶意系统调用,又可以避免不同用户间的变量残留与侧信道泄漏,为多Agents系统提供了理想的隔离和资源管理方案。

与传统的虚拟化和容器技术相比较,Firecracker在实验中也展示出了卓越的性能优势:

维度 传统虚拟机 容器 Firecracker microVM
启动时间 数十秒到分钟级 秒级 100-200 毫秒
内存开销 数百 MB 数十 MB 3-5 MB
资源密度 极高(单机可达数千个)
隔离强度 强(硬件隔离) 弱(共享内核) 强(硬件隔离)

这些性能指标意味着,使用Firecracker可以在一台物理服务器上以前所未有的密度和速度,安全地运行成百上千个独立的虚拟机,并能根据负载变化进行毫秒级的弹性伸缩。能够很好的满足大型航空公司智能营销系统个性化报价的复杂需求。

3.3 方案实施

在用户跟智能体交互的过程中,Agent可以在经过授权后通过MCP服务获取到客户关系管理系统CRM中的用户数据,包括用户历史信息(如积分、会员等级、乘机历史等)、用户画像(如价格敏感度评分、个人偏好)等;也可以在经过授权后获取到收益管理系统RMS中航班的实时运行数据,包括各舱位的售卖情况、标准定价、边际成本等。这些信息共同构成给用户提供个性化报价的基础。

信息获取到以后,Agent会要求大模型对些零散的数据进行整合,制定多个备选方案,然后在舱司利益最大化的原则下,按照用户的偏好进行决策,给出个性化报价。在CodeAct范式中,大模型会把这一复杂的对比决策过程写成一段程序,交给虚拟机Firecracker来执行。

对于每天需要处理大量用户请求的航空公司营销智能体来说,Firecracker能够安全的隔离每个用户的处理数据,并且高效的实现弹性并发。时序流程如下:

Firecracker需要运行在mental类型的EC2上,这里以启动一台c5.metal实例为例演示实施过程。

启动后编译Firecracker,使用命令“firecracker –version”查看其版本,这里使用v1.5.0版本。

接下来使用Strands Agents框架构建一个多智能体系统。Strands Agents是一个开源的AI Agents编排引擎,可以使智能体自主完成任务规划、工具选择和执行序列决策等。当用户提出问题后,进入Strands Agents调用不同tool获取信息、生成代码并提交到Firecracker沙箱环境中执行,最后获取返回结果并组装出友好的回复反馈给用户。整体架构如下:

为了降低复杂性,这里使用Mock数据来模拟业务系统,Agents关键代码实现如下:

from strands import Agent, tool
from firecracker_sandbox import eval_fn

@tool
def execute_python(code: str) -> str:
    """在Firecracker虚拟机中执行Python代码"""
    import json
    import re
    
    result, _ = eval_fn(code)
    
    # 尝试从输出中提取JSON
    try:
        # 查找JSON格式的输出
        json_pattern = r'\{[^{}]*\}'
        matches = re.findall(json_pattern, result)
        
        for match in matches:
            try:
                parsed_json = json.loads(match)
                # 如果成功解析JSON,返回格式化的结果
                return f"JSON Result: {json.dumps(parsed_json, indent=2)}\n\nRaw Output: {result}"
            except json.JSONDecodeError:
                continue
        
        # 如果没找到有效JSON,返回原始结果
        return f"Raw Output: {result}"
        
    except Exception as e:
        return f"Error processing output: {e}\nRaw Output: {result}"

@tool
def get_user_data(user_id="U001"):
    """从航空公司 CRM(客户关系管理)系统中提取指定用户的画像数据。是评估**"客户能出多少钱"和"客户有多大动力升舱"**的核心依据。
    Args:
        user_id: 用户ID,默认为"U001"
    Returns:
        统一格式的 JSON 响应,字段如下:
            name (str): 用户姓名,用于生成个性化话术。
            points (int): 用户账户内当前的可用里程积分。可以根据此数值决定"积分抵扣"的比例。
            sensitivity (float): 价格敏感度评分(0.0 到 1.0)。数值越高表示客户对价格越敏感,需要给出更激进的折扣。
            tier (str): 会员等级(如 Blue, Silver, Gold, Platinum)。等级越高,通常意味着客户的忠诚度越高,但对服务品质也更挑剔。
    """
    data = {
        "U001": {"name": "张先生", "points": 150000, "sensitivity": 0.2, "tier": "Gold"},
        "U002": {"name": "李女士", "points": 8000, "sensitivity": 0.8, "tier": "Silver"},
        "U003": {"name": "王医生", "points": 45000, "sensitivity": 0.5, "tier": "Blue"}
    }
    return data.get(user_id)

@tool
def get_flight_data(flight_id="NW123"):
    """从收益管理系统(RMS)中提取特定航班的实时运行状态。是评估**"这笔生意的成本是多少"以及"库存压力有多大"**的关键。
    Args:
        flight_id: 航班ID,默认为"NW123"
    Returns:
        统一格式的 JSON 响应,字段如下:
            seats_left (int): 目标舱位(即公务舱)当前的剩余空位数。空位越多,则越需要降价促销。
            hours_to_fly (int): 距离飞机起飞的剩余小时数。是判断"库存价值贬值速度"的关键变量。
            full_diff (float): 经济舱与目标舱位之间的标准现金差价(全价差)。是计算折扣的基准点。
            marginal_cost (float): 边际成本。指多承载一名升舱旅客所增加的实际成本(如餐食、清洁、燃油微增)。这是报价的绝对底线,现金报价不得低于此值。
    """
    # full_diff: 经济舱到公务舱的标准现金价差
    return {
        "NW123": {"seats_left": 5, "hours_to_fly": 12, "full_diff": 2000, "marginal_cost": 400},
        "CD567": {"seats_left": 2, "hours_to_fly": 72, "full_diff": 3500, "marginal_cost": 700}
    }

def main() -> None:
    """主程序入口"""
    system_prompt = """You are an AI airline revenue analyst helping customers find the best upgrade deals.

Your role:
1. Use get_user_data() and get_flight_data() to gather information
2. Use execute_python() to calculate optimal pricing strategies
3. Present results with CLEAR, SPECIFIC pricing information

CRITICAL: When calculating offers, ensure:
- Points used cannot exceed the customer's available points
- Cash price must be clearly stated
- Total cost breakdown must be accurate
- All calculations must be realistic and feasible

PYTHON CODE REQUIREMENTS:
- Write ALL Python code in English only (no Chinese comments, strings, or variable names)
- Use English variable names and comments only
- All strings in Python code must be in English
- Only your final response to the user should be in Chinese

MANDATORY: Every Python code block MUST end with a print() statement that outputs a JSON object with this exact format:
```python
import json
result = {
    "cash_price": 1200,
    "points_used": 8000, 
    "total_cost": 2000,
    "discount_percent": 60
}
print(json.dumps(result))
```

After getting the JSON result, present a customer-friendly upgrade offer in Chinese with:
- Exact cash amount to pay (yuan)
- Exact points to use (must be ≤ available points)  
- Clear total cost breakdown
- What the customer gets"""
    
    agent = Agent(
        tools=[execute_python, get_user_data, get_flight_data],
        system_prompt=system_prompt
    )
    
    task = """# Role
你是一名航空公司 AI 收益精算师。你擅长使用 Python 执行 CodeAct 逻辑,通过实时计算为客户提供"最难拒绝"的升舱方案。

# Context
客户正在查看其预订的机票。你需要通过 API 获取客户画像和航班实时库存,然后编写并运行 Python 代码,计算出一个能平衡"航司收益最大化"与"客户转化率最大化"的升舱报价。

# Constraints & Logic
1. **收益模型**:期望收益 $E = P(成交) \times (现金收入 + 积分财务价值)$。
2. **定价原则**:
   - 离起飞越近(<24h)且空位越多,现金价格越低。
   - 客户积分余额越高,应引导其消耗更多积分(积分价值按 0.05元/分折算)。
   - 报价不得低于目标舱位边际成本(假设为原差价的 20%)。
3. **CodeAct 要求**:
   - 必须编写 Python 脚本进行方案模拟。
   - 对比 [4折, 6折, 8折] 等不同档位,选择期望收益最高的一组。

# Output Format
1. 思考过程(分析库存与客户画像)。
2. 生成并执行 Python 代码块。
3. 给出最终给客户展示的文案。

# User Query
我的用户ID是U002,NW123航班升舱太贵了,有没有便宜点的方案?
    """
    result = agent(task)
    print(f"\n完整回复:\n{result}")

if __name__ == "__main__":
    main()

核心的Firecracker虚拟机代码firecracker_sandbox.py实现如下:

#!/usr/bin/env python3
"""
Firecracker沙箱 - 安全的Python代码执行环境
提供基于Firecracker微虚拟机的Python代码执行服务,确保代码在隔离环境中安全运行。
"""

import json
import time
import pexpect
import requests_unixsocket
import os
import atexit
from typing import Tuple, Dict, Any, Optional

FIRECRACKER_SOCKET = "/tmp/firecracker.sock"
DEFAULT_KERNEL = "/home/ec2-user/codeact/llm-vmlinux-l.bin"
DEFAULT_ROOTFS = "/home/ec2-user/codeact/llm-rootfs-1.ext4"

firecracker_process: Optional[pexpect.spawn] = None
vm_console: Optional[pexpect.spawn] = None

def firecracker_api_put(path: str, data: dict) -> dict:
    """向Firecracker API发送PUT请求"""
    session = requests_unixsocket.Session()
    url = f"http+unix://{FIRECRACKER_SOCKET.replace('/', '%2F')}{path}"
    headers = {"Content-Type": "application/json"}
    
    resp = session.put(url, headers=headers, data=json.dumps(data), timeout=5)
    if not resp.ok:
        raise RuntimeError(f"Firecracker API PUT {path} failed: {resp.text}")
    
    return resp.json() if resp.text.strip() else {}

def cleanup_firecracker() -> None:
    """清理Firecracker进程和相关资源"""
    global firecracker_process, vm_console
    
    if vm_console:
        vm_console.close()
        vm_console = None
        
    if firecracker_process:
        firecracker_process.terminate()
        firecracker_process.wait()
        firecracker_process = None
        
    if os.path.exists(FIRECRACKER_SOCKET):
        os.unlink(FIRECRACKER_SOCKET)

def start_vm(kernel: str = DEFAULT_KERNEL, rootfs: str = DEFAULT_ROOTFS, buffer_size: int = 65536) -> None:
    """启动Firecracker虚拟机"""
    global vm_console, firecracker_process
    
    if not os.path.exists(kernel) or not os.path.exists(rootfs):
        raise FileNotFoundError("Kernel or rootfs not found")
    
    if os.path.exists(FIRECRACKER_SOCKET):
        os.unlink(FIRECRACKER_SOCKET)
    
    # 启动Firecracker进程,使用动态缓冲区
    firecracker_process = pexpect.spawn(
        '/usr/local/bin/firecracker', 
        ['--api-sock', FIRECRACKER_SOCKET],
        encoding='utf-8', 
        timeout=30, 
        maxread=buffer_size, 
        searchwindowsize=min(buffer_size // 8, 8192)
    )
    vm_console = firecracker_process
    atexit.register(cleanup_firecracker)
    
    for _ in range(10):
        if os.path.exists(FIRECRACKER_SOCKET):
            break
        time.sleep(0.5)
    else:
        raise RuntimeError("Firecracker socket not created")

    # 配置VM
    firecracker_api_put("/boot-source", {
        "kernel_image_path": kernel,
        "boot_args": "console=ttyS0 reboot=k panic=1 pci=off"
    })
    
    firecracker_api_put("/drives/rootfs", {
        "drive_id": "rootfs",
        "path_on_host": rootfs,
        "is_root_device": True,
        "is_read_only": False
    })
    
    firecracker_api_put("/actions", {"action_type": "InstanceStart"})
    
    vm_console.expect('login:', timeout=15)
    vm_console.sendline('root')
    
    idx = vm_console.expect(['Password:', '#'], timeout=5)
    if idx == 0:
        vm_console.sendline('root')
        vm_console.expect('#', timeout=5)

def convert_to_oneline(script: str) -> str:
    """将多行Python脚本转换为单行执行格式"""
    lines = [line for line in script.split('\n') 
             if line.strip() and not line.strip().startswith('#')]
    
    code_block = '\\n'.join(lines)
    return f'exec("""{code_block}""")'

def extract_json_from_output(output: str) -> Optional[str]:
    """从VM输出中提取JSON数据"""
    import re
    json_patterns = [
        r'\{[^{}]*(?:\{[^{}]*\}[^{}]*)*\}',  # 简单嵌套
        r'\{(?:[^{}]|(?:\{[^{}]*\}))*\}',    # 递归嵌套
        r'\{.*?\}',                          # 贪婪匹配
    ]
    
    for pattern in json_patterns:
        json_matches = re.findall(pattern, output, re.DOTALL)
        
        for match in json_matches:
            try:
                json.loads(match)  # 验证JSON有效性
                return match
            except json.JSONDecodeError:
                continue
    
    return None

def clean_vm_output(output: str) -> str:
    """清理VM输出,移除控制字符和命令回显"""
    lines = output.split('\r\n')
    filtered = []
    
    for line in lines:
        line = line.strip()
        if (line and 
            not line.startswith('python3') and
            not line.startswith('[') and  # 内核消息
            not line.endswith('#') and
            'localhost' not in line and
            '\x1b' not in line):  # ANSI转义序列
            filtered.append(line)
    
    return '\n'.join(filtered)

def calculate_buffer_size(script: str) -> int:
    """根据代码大小计算所需的缓冲区大小"""
    base_size = 32768  # 32KB
    code_length = len(script)
    estimated_output = code_length * 3
    buffer_size = max(base_size, min(estimated_output + base_size, 1048576))
    return buffer_size

def eval_fn(script: str, context: Optional[dict] = None) -> Tuple[str, Dict[str, Any]]:
    """在Firecracker VM中执行Python代码"""
    global vm_console
    
    print("-" * 40)
    print(f"LLM-Generated Python Code: \n{script}")
    print("~" * 40)
    
    buffer_size = calculate_buffer_size(script)
    if vm_console is None:
        start_vm(buffer_size=buffer_size)
    else:
        current_maxread = getattr(vm_console, 'maxread', 65536)
        if buffer_size > current_maxread:
            cleanup_firecracker()
            start_vm(buffer_size=buffer_size)
    
    try:
        oneline_script = convert_to_oneline(script)
        escaped_script = oneline_script.replace('"', '\\"').replace('$', '\\$')
        vm_console.sendline(f'python3 -c "{escaped_script}"')
        vm_console.expect('#', timeout=60)
        output = vm_console.before.strip()
        
        print("-" * 40)
        print(f"VM raw output ({len(output)} chars): {output}")
        print("=" * 40)
        
        json_result = extract_json_from_output(output)
        if json_result:
            return json_result, {}
        cleaned_output = clean_vm_output(output)
        return cleaned_output, {}
    except pexpect.TIMEOUT:
        return "Error: Execution timeout", {}
    except Exception as e:
        return f"Error: {str(e)}", {}

3.4 功能测试

以上述程序中Agents中收到的问题为例:“我的用户ID是U002,NW123航班升舱太贵了,有没有便宜点的方案?”,Agent通过查询CRM可以获取到用户画像:

  • 姓名:李女士
  • 积分:8000
  • 价格敏感度:8(说明:数据越高表示客户对价格越敏感)
  • 会员等级:银卡

通过收益管理系统RMS可以获取到航班NW123的实时状态:

  • 公务舱余票:5(说明:较多)
  • 距离起飞时间:12(说明:较近)
  • 升舱标准差价:2000
  • 边际成本:400(说明:升舱所增加的实际成本,是报价的绝对底线,现金报价不得低于此值)

运行Agents,查看日志可以观察到基于以上信息大模型的思考过程:

随后生成一段复杂的Python代码进行处理:

Agent将代码交给Firecracker虚拟机运行后,获得执行结果,输出如下:

可以看到,对于价格敏感度较高的新客户李女士,在余票较多且距离起飞时间较近的情况下,智能营销系统给出了较为激进的个性化报价,即“现金800元+6000积分”就可升公务舱,能很好的促进下单。

3.5 多场景测试

使用不同的场景进行测试,可以看出基于Firecracker的多智能体系统可以在复杂情况下作出优化的个性化报价决策:

场景一:高净值金卡客户(积分多,价格不敏感)

  • 用户:张先生 (U001)
  • 航班:NW123 (仅剩12小时,库存多)
  • 交互过程:
    1. User: “我想看看明天的航班NW123 有没有升舱机会。”
    2. Agent: (调用MCP,发现张先生积分15万,时间紧迫)“正在为您计算最优权益…”
    3. CodeAct: 计算出6折扣能平衡收益,同时消耗大量积分。
    4. Agent: “张先生您好,检测到您是金卡会员,现为您推出**‘积分消暑’**特惠:仅需15,000积分 + 1,200元(原价2000元)即可直升公务舱。仅剩最后2席,建议您立即锁定。”

 

场景二:中端忠诚客户(价格权衡中,需要临门一脚)

  • 用户:王医生 (U003)
  • 航班:CD567 (离起飞还早,库存充足)
  • 交互过程:
    1. User: “现在升舱要多少钱?”
    2. Agent: (调用MCP,发现张先生积分5万,时间尚早)“正在为您计算最优权益…”
    3. CodeAct: 计算出当前离起飞还有72小时,不需要给地板价,建议8折。
    4. Agent: 如果现在下单,我们可以额外为您锁定**‘优先行李’**权益,目前仅需 4,500积分+2,800元。此方案30分钟内有效,您看可以吗?”

4、方案收益

应用基于Amazon Firecracker的多智能体CodeAct,很好的解决了大型航空公司智能营销软件中个性化报价的难题,不仅考虑到了用户的偏好和特点,也兼顾了航班舱位销售情况,提高了成单率,保证了航司利益的最大化。

但是CodeAct和Amazon Firecracker不仅是适用于航空营销业务,在逻辑相对复杂的企业自动动化运维、金融科技与商业智能、数据科学与BI等各种场景中都可以发挥很大作用。

5、结语

本文以大型航空公司多智能体营销系统为例,分析了其核心业务需求和难点、针对性的给出了基于Firecracker的Agent CodeAct解决方案。并对方案选型和实施过程进行了详细阐述,在多个场景中进行了测试和观察,验证了在复杂场景中方案的可行性。如果你正在面临类似的业务挑战,欢迎参考本文的实现思路,也期待与同行交流探讨。

*前述特定亚马逊云科技生成式人工智能相关的服务目前在亚马逊云科技海外区域可用。亚马逊云科技中国区域相关云服务由西云数据和光环新网运营,具体信息以中国区域官网为准。

本篇作者

刘黎明

西云数据解决方案架构师。10+年IT专业服务经验,积淀多行业项目实践,深耕AI/ML/Agent领域并落地技术架构设计。


AWS 架构师中心: 云端创新的引领者

探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用