AI Agent多智能体协作系统的架构设计要点
人工智能领域正从单模型推理转向多智能体(Multi-Agent)协作范式。一个典型的AI Agent多智能体系统包含规划Agent、工具调用Agent、校验Agent等角色,各Agent通过消息总线或共享状态协调完成任务。本文以实际项目为背景,拆解多智能体协作系统的核心设计模式和部署细节。
大模型开发中的Agent角色拆分策略
多智能体系统的第一步是角色拆分。经验表明,按职责边界划分Agent比按功能模块划分更有效。以一个自动代码审查系统为例:
- Planner Agent:接收用户需求,生成任务分解计划,输出DAG格式的执行步骤
- Coder Agent:根据计划生成代码补丁,输出diff格式
- Reviewer Agent:对代码补丁进行静态分析和风格检查,输出结构化评审意见
- Integrator Agent:合并通过审查的补丁,触发CI流水线
角色拆分的核心原则是每个Agent的Prompt独立可测试。如果两个Agent共享大量上下文,说明拆分粒度不够,应该合并或重新划界。
Prompt工程在多Agent场景的实践方法
单Agent场景下Prompt工程关注指令精确性,多Agent场景则需要额外处理Agent间的协议格式。推荐做法:
# Planner Agent 输出格式约束
PLAN_SCHEMA = {
"type": "object",
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"agent": {"type": "string", "enum": ["coder", "reviewer", "integrator"]},
"task": {"type": "string"},
"depends_on": {"type": "array", "items": {"type": "integer"}}
},
"required": ["agent", "task", "depends_on"]
}
}
}
}
# 在System Prompt中注入格式约束
SYSTEM_PROMPT = """You are a Planner Agent. Output MUST be valid JSON conforming to this schema:
{schema}
Do NOT include any text outside the JSON object."""
关键技巧:用JSON Schema约束Agent输出,比自然语言描述格式可靠得多。实际测试中,JSON Schema约束将格式错误率从12%降到1%以下。
智能对话系统中Agent间通信机制对比
Agent间的通信机制直接决定系统的可扩展性和容错能力,三种主流方案:
方案一:直接函数调用
Agent A调用Agent B的执行函数,同步等待返回。实现简单,但Agent间强耦合,无法横向扩展。
方案二:消息队列
Agent通过Redis Pub/Sub或RabbitMQ传递消息。解耦彻底,支持异步重试,但引入了消息顺序和幂等性问题。
方案三:共享状态+事件驱动
所有Agent读写共享的状态存储(如Redis Hash),状态变更触发事件通知。适合需要全局视图的场景,如长流程编排。
# 方案三示例:基于Redis的共享状态通信
import redis, json
r = redis.Redis()
def publish_task(agent_name: str, task: dict):
task_id = f"task:{agent_name}:{r.incr('task_counter')}"
r.hset(task_id, mapping={
"status": "pending",
"payload": json.dumps(task),
"created_at": datetime.now().isoformat()
})
r.publish(f"channel:{agent_name}", task_id)
return task_id
def consume_tasks(agent_name: str, callback):
pubsub = r.pubsub()
pubsub.subscribe(f"channel:{agent_name}")
for message in pubsub.listen():
if message["type"] == "message":
task_id = message["data"].decode()
task_data = r.hgetall(task_id)
callback(task_data)
AI模型部署:多Agent系统的资源隔离与调度
多个Agent同时运行会竞争GPU/CPU资源。生产环境的部署方案:
GPU场景:使用vLLM或TGI的continuous batching功能,多个Agent共享同一个推理服务,通过API路由区分请求来源。比每个Agent独占一个模型实例节省60%以上GPU显存。
CPU场景:对延迟不敏感的Agent(如Reviewer)使用Ollama本地部署小参数模型(7B以下),对延迟敏感的Agent(如Planner)调用远程大模型API。
# vLLM多Agent共享部署示例
from openai import OpenAI
# 所有Agent共享同一个vLLM端点
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="EMPTY"
)
def agent_call(system_prompt: str, user_input: str, model="qwen2-72b"):
response = client.chat.completions.create(
model=model,
messages=[
{"role": "system", "content": system_prompt},
{"role": "user", "content": user_input}
],
temperature=0.1, # Agent场景通常低温度
max_tokens=4096
)
return response.choices[0].message.content
AIGC应用中的容错与降级设计
多Agent系统的故障链路比单体应用复杂得多。一个Agent超时可能导致整条任务链路阻塞。必须实现:
- 超时熔断:每个Agent调用设置硬超时,超时后返回降级结果或跳过该步骤
- 重试幂等:Agent调用必须幂等,重试不会产生副作用。用task_id作为幂等键
- 降级路径:当Reviewer Agent不可用时,Planner可以直接跳过审查步骤,标记结果为”未审查”
- 可观测性:每个Agent的输入输出、耗时、token消耗全部结构化日志输出,接入OpenTelemetry链路追踪
# 容错包装器示例
import asyncio
from functools import wraps
def agent_fallback(fallback_value=None, timeout=30, max_retries=2):
def decorator(func):
@wraps(func)
async def wrapper(*args, **kwargs):
for attempt in range(max_retries + 1):
try:
return await asyncio.wait_for(
func(*args, **kwargs),
timeout=timeout
)
except asyncio.TimeoutError:
if attempt == max_retries:
return fallback_value
except Exception as e:
if attempt == max_retries:
return fallback_value
return wrapper
return decorator
@agent_fallback(fallback_value={"approved": False, "reason": "review_timeout"}, timeout=60)
async def review_code(patch: str):
# Reviewer Agent 核心逻辑
pass
AI工具链选型与集成建议
构建多智能体系统时,工具链的选择直接影响开发效率和运维成本。以下为经过生产验证的推荐组合:
编排框架:LangGraph适合复杂DAG编排,CrewAI适合快速原型。自研框架适用对执行流程有定制需求的场景。
记忆层:短期记忆用Redis,长期记忆用PostgreSQL+pgvector做向量检索。避免将全部上下文塞进Prompt,用RAG模式按需检索。
监控层:LangSmith或Arize Phoenix做Agent执行链路追踪,Prometheus+Grafana做基础设施指标监控。两者互补,不能互相替代。
多智能体系统不是银弹。当任务本身不需要分解时,单Agent+工具调用的方案更简洁可靠。引入多Agent的前提是任务存在明确的阶段划分和角色分工,否则只会增加系统复杂度而无法带来收益。
原创文章,作者:小编,如若转载,请注明出处:https://www.yunthe.com/aiagent-duo-zhi-neng-ti-xie-zuo-xi-tong-de-jia-gou-she-ji/