基于 Amazon Bedrock AgentCore 与事件驱动架构构建无感 AI 代理
- 作者

- 姓名
- Nino
- 职业
- Senior Tech Editor
绝大多数传统的对话式 AI 架构都基于同步交互模式:用户在聊天框中输入 Prompt 提示词,触发 HTTP 接口调用,然后等待模型返回流式响应。虽然这种方式非常适合探究性对话或内容草拟,但在企业级生产运营自动化场景中,这种模式很难实现真正的横向扩展。企业实际业务需要的是无感代理(Ambient Agents)——能够在后台静默运行、主动监听 Amazon S3 文件上传、定时 Cron 计划或系统监控告警,并在无需人工干预的情况下自主推理并执行任务的智能系统。
构建高可用、事件驱动的无感代理,需要解决异步事件接入、状态持久化控制以及安全审计干预等核心技术问题。借助 Amazon Bedrock AgentCore,结合 Amazon SQS、AWS Lambda 和 Amazon DynamoDB 等云原生基础设施,开发者能够轻松构建框架无关的无感代理工作流。此外,在处理复杂的多模型调用与高并发诉求时,通过 n1n.ai 等聚合 API 平台接入 Claude 3.5 Sonnet 或 DeepSeek-V3 等前沿大语言模型,可以有效保障后台推理的高可用性与成本优化。
本文将深入剖析无感 AI 代理的核心架构设计,并给出从事件触发、状态挂起到人机协作(Human-in-the-Loop, HITL)审批的全流程工程落地指南。
架构范式对比:对话式代理 vs 无感代理
为了明确无感代理的设计要求,我们需要将其与传统的聊天机器人(Chatbots)进行技术维度的对比:
| 特性维度 | 对话式 AI 代理 (Conversational Agents) | 无感 AI 代理 (Ambient Agents) |
|---|---|---|
| 触发源 | 同步的用户 Chat 交互 | 事件信号 (S3 上传, CloudWatch 告警, SQS 消息) |
| 执行上下文 | 短暂的 HTTP 链接会话 | 异步后台工作进程 (AWS Lambda / ECS) |
| 状态生命周期 | 内存级 Session 上下文 | 持久化存储 (Amazon DynamoDB) |
| 执行耗时 | 短时响应 (通常 < 30秒) | 长途或多阶段任务 (数分钟至数小时) |
| 治理机制 | 用户实时打断与纠偏 | 异步人机协作 (ask_human 工具) |
| 核心引擎 | 标准 Frontend Chat UI | Bedrock AgentCore + 事件处理管道 |
| API 管道支持 | 单一模型 API | 支持 n1n.ai 多模型路由与灾备降级 |
无感代理打破了必须由人类发起的交互循环。它们持续监听系统内部信号,自主分析业务数据,按需调用工具链。当推理置信度低于预设门槛或即将触发高风险写操作时,代理会自动挂起并请求人工审核。
核心系统架构图解
该无感代理系统架构包含以下 5个关键核心层:
- 事件接入层 (Event Ingestion):Amazon S3 接收到新业务文件(如发票 PDF 或日志文件),触发事件推送至 Amazon SQS FIFO 队列。
- 调度工作节点 (Orchestration Worker):AWS Lambda 消费 SQS 队列消息,在 DynamoDB 中初始化任务状态,并启动 Agent 推理引擎。
- 代理推理引擎 (Bedrock AgentCore):Amazon Bedrock AgentCore 解析事件 Payload,执行相关工具函数。在复杂业务场景中,可以通过 n1n.ai 统一接口调用不同厂商的模型来降低整体 Token 成本。
- 状态持久与挂起中心 (State Store):Amazon DynamoDB 保存任务执行日志、中间工具返回结果以及挂起状态标志(
WAITING_FOR_HUMAN)。 - 人机协作界面 (HITL Jobs Dashboard):前端 Web 任务面板轮询或订阅 DynamoDB 中的待审批任务,供业务人员进行人工复核与授权。
+------------------+ +-------------------+ +--------------------+
| 事件信号 | --> | Amazon SQS | --> | AWS Lambda |
| (S3 / Cron) | | (缓冲消息队列) | | (Worker 调度节点) |
+------------------+ +-------------------+ +--------------------+
|
v
+--------------------+
| Bedrock AgentCore |
| (代理推理引擎) |
+--------------------+
|
+--------------------+--------------------+
| |
v v
+--------------------+ +--------------------+
| 自动化业务工具 | | `ask_human` 工具 |
| (DB / API 调用) | +--------------------+
+--------------------+ |
v
+--------------------+
| Amazon DynamoDB |
| (状态: SUSPENDED) |
+--------------------+
|
v
+--------------------+
| 人工审批管理界面 |
| (Jobs Dashboard) |
+--------------------+
分步实现指南
第一步:配置异步 Lambda 消息消费器
无感代理的入口是异步 Worker。AWS Lambda 函数负责解析从 SQS 传来的消息,提取元数据,并在 DynamoDB 中建立初始化记录。
import json
import os
import uuid
import boto3
from datetime import datetime
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(os.environ['AGENT_STATE_TABLE'])
def lambda_handler(event, context):
for record in event['Records']:
body = json.loads(record['body'])
job_id = str(uuid.uuid4())
# 在 DynamoDB 中创建初始化 Job 记录
table.put_item(
Item={
'job_id': job_id,
'status': 'RUNNING',
'event_type': body.get('event_type', 'UNKNOWN'),
'payload': body,
'created_at': datetime.utcnow().isoformat(),
'updated_at': datetime.utcnow().isoformat()
}
)
# 启动 Agent 推理管道
run_agent_pipeline(job_id, body)
return {'statusCode': 200, 'body': json.dumps('Event processed successfully')}
第二步:设计框架无关的 Agent Core 推理循环
在 run_agent_pipeline 函数中,系统与 Bedrock AgentCore 进行交互。为了确保在推理高峰期不出现 API 速率限制(Rate Limits),系统可灵活选择通过 n1n.ai 提供的稳定 API 接入多模型备份策略。
下面展示了代理如何处理标准工具执行以及拦截 ask_human 挂起调用的核心逻辑:
import boto3
import json
bedrock_agent_runtime = boto3.client('bedrock-agent-runtime')
def run_agent_pipeline(job_id: str, payload: dict):
agent_id = os.environ['BEDROCK_AGENT_ID']
agent_alias_id = os.environ['BEDROCK_AGENT_ALIAS_ID']
prompt = f"分析并处理以下事件 Payload: {json.dumps(payload)}"
response = bedrock_agent_runtime.invoke_agent(
agentId=agent_id,
agentAliasId=agent_alias_id,
sessionId=job_id,
inputText=prompt
)
for event in response.get('completion'):
if 'returnControl' in event:
# Agent 触发了需要人工确认的特定工具
control_event = event['returnControl']
invocation_inputs = control_event['invocationInputs']
for input_item in invocation_inputs:
function_call = input_item.get('functionInvocationInput', {})
if function_call.get('actionGroup') == 'HumanGovernanceGroup' and \
function_call.get('function') == 'ask_human':
params = function_call.get('parameters', [])
reason = next((p['value'] for p in params if p['name'] == 'reason'), '系统触发风险控制,需人工审核')
suspend_agent_job(
job_id=job_id,
invocation_id=control_event['invocationId'],
reason=reason
)
return
第三步:实现 ask_human 工具与状态挂起机制
当无感代理遇到敏感操作时(如数据库高危修改或金额超过 1000 美元的交易确认),它会调用 ask_human 工具。
该工具在 Bedrock Agent 中的 Open API 定义如下:
\{
"openapi": "3.0.0