跳转至

Multi-Agent 编排实战:LangGraph / AutoGen / CrewAI 三框架对比 + 5 个生产案例

单 Agent 已经搞不定的场景越来越多——故障诊断要 3 个专家、变更审批要 5 步流转、代码评审要 2 个角色——这时候就得用 Multi-Agent 编排。写这篇时我在生产环境里跑过 3 个框架,都踩过超时、成本失控、循环死锁的坑。这篇文章聚焦生产落地,不是"什么是 Agent"科普。

Multi-Agent 的核心是编排(orchestration),也就是怎么让多个 agent 分工协作。目前主流三大框架:LangGraph(状态机,LangChain 生态)、AutoGen(多角色对话,Microsoft 出品)、CrewAI(角色协作,YAML 配置友好)。三家的哲学差异很大,选型错了后面全乱。

1. 三框架核心差异

1.1 LangGraph:状态机编排

核心概念:图 = 节点(Agent/函数)+ 边(转移条件),节点之间传 State。

from langgraph.graph import StateGraph, START, END
from typing import TypedDict

class OpsState(TypedDict):
    incident: str
    diagnosis: str
    plan: str
    result: str
    needs_human: bool

graph = StateGraph(OpsState)

# 节点
graph.add_node("diagnose", diagnose_agent)
graph.add_node("plan", plan_agent)
graph.add_node("execute", execute_agent)
graph.add_node("human_review", human_review_node)

# 条件边
graph.add_conditional_edges(
    "diagnose",
    lambda s: "human_review" if s["needs_human"] else "plan",
)
graph.add_edge(START, "diagnose")
graph.add_edge("plan", "execute")
graph.add_edge("human_review", END)
graph.add_edge("execute", END)

app = graph.compile()
result = app.invoke({"incident": "Nginx 502 upstream timeout"})

特点: - ✅ 状态机清晰,每步可预测、可回放 - ✅ 支持 checkpoint,中断后从断点恢复 - ✅ LangSmith 集成好,全链路可观测 - ✅ 支持 human-in-the-loop - ❌ 学习曲线陡,概念多(Node/Edge/State/Reducer) - ❌ 需要显式定义所有状态转移

适合:故障诊断、变更审批、告警路由等有明确状态流转的场景。

1.2 AutoGen:多角色对话

核心概念:多个 AssistantAgent + UserProxyAgent 循环对话,直到终止条件。

from autogen import AssistantAgent, UserProxyAgent

diagnostician = AssistantAgent(
    name="diagnostician",
    system_message="你是运维诊断专家。收到故障描述后给出可能原因。",
    llm_config={"model": "gpt-4o"},
)

remediator = AssistantAgent(
    name="remediator",
    system_message="你是修复专家。根据诊断给出修复步骤。",
    llm_config={"model": "gpt-4o"},
    tools=tools,  # 可调用工具
)

user_proxy = UserProxyAgent(
    name="user_proxy",
    human_input_mode="NEVER",
    code_execution_config={"work_dir": "workspace"},
)

group = autogen.GroupChat(
    participants=[diagnostician, remediator, user_proxy],
    speaker_selection_method="round_robin",
    message_history_autoset="none",
)

chat = autogen.GroupChatManager(group)
chat.initiate_chat(
    user_proxy,
    message="Nginx 502 upstream timeout",
    max_round=5,
)

特点: - ✅ 上手快,几十行代码就跑通 - ✅ 多角色自然对话,适合开放式任务 - ✅ OpenAI 出品,模型支持最广 - ❌ 状态不明确,难以精确控制流程 - ❌ 循环控制弱,容易陷入死循环(必须 max_round) - ❌ 生产可观测性差

适合:方案评审、代码审查、开放式研究讨论等对话驱动的场景。

1.3 CrewAI:角色协作

核心概念:Crew = 一组 Role,每个 Role 有任务清单,用 YAML 配置。

# crew.yaml
agents:
  - role: Incident Researcher
    goal: Diagnose the incident and identify root causes
    backstory: >
      You are a senior SRE with 10 years of experience.
  - role: Solution Engineer
    goal: Design a fix plan based on diagnosis
    backstory: >
      You are an expert in system remediation.
  - role: Reviewer
    goal: Review the fix plan before execution
    backstory: >
      You are a security-focused reviewer.

tasks:
  - description: Analyze the Nginx 502 incident
    expected_output: Diagnosis with root cause
    agent: Incident Researcher
  - description: Design a fix
    expected_output: Step-by-step remediation plan
    agent: Solution Engineer
  - description: Review the fix
    expected_output: Approval or rejection with reasons
    agent: Reviewer

process: sequential
max_rpm: 30
from crewai import Crew, Agent, Task

diagnostician = Agent(role="Incident Researcher", llm="gpt-4o")
remediator = Agent(role="Solution Engineer", llm="gpt-4o")
reviewer = Agent(role="Reviewer", llm="gpt-4o-mini")

crew = Crew(
    agents=[diagnostician, remediator, reviewer],
    process=Process.sequential,
    verbose=True,
    memory=True,
)

crew.kickoff(inputs={"incident": "Nginx 502 upstream timeout"})

特点: - ✅ YAML 配置,非工程师也能定义流程 - ✅ 角色分工明确,任务边界清晰 - ✅ 内置 memory、planning、process - ❌ 灵活性弱,复杂状态机难表达 - ❌ 深度定制受限 - ❌ 与 LangChain 生态整合不如 LangGraph 深

适合:业务型 agent 协作(工单路由、内容生产、数据分析),角色相对固定的场景。

1.4 三框架对比矩阵

维度 LangGraph AutoGen CrewAI
编排模型 状态机 + 图 多角色对话 角色 + 任务
状态管理 显式 State 隐式消息历史 Task 输出链
学习曲线 陡 平 平
可观测性 LangSmith 优秀 一般 一般
Human-in-loop 内置 有限 有限
生产稳定性 ⭐⭐⭐⭐⭐ ⭐⭐⭐ ⭐⭐⭐⭐
生态整合 LangChain 全家桶 独立 独立
适合场景 故障诊断/审批 代码审查/评审 内容生产/工单
上手时间 3-5 天 半天 半天

选型铁律: - 有明确状态流转 → LangGraph - 开放式对话协作 → AutoGen - 角色固定业务场景 → CrewAI - 不确定 → LangGraph(最可控)

2. 五个真实生产案例

案例 1:告警诊断 Agent(LangGraph)

场景:Prometheus 报警触发,Agent 自动诊断并给出修复建议。

from langgraph.graph import StateGraph, START, END
from langchain_openai import ChatOpenAI

class DiagnosisState(TypedDict):
    alert: dict          # Prometheus alert payload
    context: dict        # 相关上下文(服务、依赖、变更)
    diagnosis: str       # 诊断结果
    action: str          # 建议动作
    severity: str        # P0-P4
    needs_human: bool    # 是否需要人工介入

llm = ChatOpenAI(model="gpt-4o", temperature=0)

def gather_context(state: DiagnosisState) -> dict:
    """从告警 payload 收集上下文"""
    alert = state["alert"]
    context = {
        "service": alert.get("labels", {}).get("service", ""),
        "cluster": alert.get("labels", {}).get("cluster", ""),
        "instance": alert.get("labels", {}).get("instance", ""),
        "recent_changes": query_recent_changes(alert),
        "related_alerts": query_related_alerts(alert),
    }
    return {"context": context}

def diagnose(state: DiagnosisState) -> dict:
    """LLM 诊断"""
    prompt = f"""
    根据以下告警和上下文,给出根因分析和修复建议。

    告警:{state['alert']}
    上下文:{state['context']}

    返回 JSON:
    {{
      "root_cause": "...",
      "evidence": ["...", "..."],
      "fix_suggestion": "...",
      "severity": "P0|P1|P2|P3|P4",
      "needs_human": true|false
    }}
    """
    result = llm.invoke(prompt)
    parsed = parse_json(result)
    return {
        "diagnosis": parsed,
        "severity": parsed.get("severity", "P3"),
        "needs_human": parsed.get("needs_human", True),
    }

def decide_action(state: DiagnosisState) -> str:
    """根据严重度和诊断决定动作"""
    if state["severity"] in ("P0", "P1"):
        return "human_review"
    if state["needs_human"]:
        return "human_review"
    if "restart" in state["diagnosis"].get("fix_suggestion", ""):
        return "human_review"  # 高危操作必人工
    return "auto_execute"

graph = StateGraph(DiagnosisState)
graph.add_node("gather", gather_context)
graph.add_node("diagnose", diagnose)
graph.add_node("human_review", human_review_node)
graph.add_node("auto_execute", auto_execute_node)

graph.add_edge(START, "gather")
graph.add_edge("gather", "diagnose")
graph.add_conditional_edges(
    "diagnose",
    decide_action,
    {
        "human_review": "human_review",
        "auto_execute": "auto_execute",
    }
)
graph.add_edge("human_review", END)
graph.add_edge("auto_execute", END)

app = graph.compile(checkpointer=MemorySaver())

关键设计: - 上下文收集在诊断之前,避免 LLM 猜 - 高危操作强制人工介入:涉及 restart/redeploy/config_change 必须走 human_review - P0/P1 强制人工:不给 LLM 自作主张的权力

案例 2:变更审批 Agent(LangGraph + 工具)

场景:变更单进入,Agent 自动评估风险、检查依赖、给出审批建议。

class ChangeState(TypedDict):
    change_request: dict
    risk_score: float
    impact_analysis: dict
    dependency_check: dict
    approval: str  # "auto_approve" | "review" | "reject"

tools = [
    query_change_history,     # 查同类变更历史
    check_service_health,     # 检查服务健康
    check_dependents,         # 查下游依赖
    check_window,             # 检查变更窗口
    query_incident_correlation,  # 查关联事故
]

def assess_risk(state: ChangeState) -> dict:
    """综合评估风险"""
    factors = [
        change_size_factor(state["change_request"]),
        blast_radius_factor(state["change_request"]),
        window_factor(state["change_request"]),
        history_factor(state["change_request"]),
    ]
    score = sum(factors) / len(factors)
    return {"risk_score": score}

def decide(state: ChangeState) -> str:
    if state["risk_score"] < 0.3:
        return "auto_approve"
    elif state["risk_score"] > 0.7:
        return "reject"
    else:
        return "review"

# 加超时熔断
compiled = graph.compile(
    checkpointer=MemorySaver(),
    recursion_limit=10,  # 防死循环
)

关键设计: - 每一步用工具拿真实数据,不靠 LLM 编 - 风险评分多维度加权 - 三档决策:低分自动通过、高分自动拒绝、中间人工

案例 3:代码审查 Agent(AutoGen)

场景:PR 提交后,多个角色(安全、性能、可读性)并行审查。

security_reviewer = AssistantAgent(
    name="security_reviewer",
    system_message="你是安全审查专家。关注:SQL 注入、XSS、密钥泄漏、权限问题。",
    llm_config={"model": "gpt-4o"},
)

perf_reviewer = AssistantAgent(
    name="perf_reviewer",
    system_message="你是性能专家。关注:N+1 查询、热点函数、内存泄漏、并发。",
    llm_config={"model": "gpt-4o"},
)

readability_reviewer = AssistantAgent(
    name="readability_reviewer",
    system_message="你是代码质量专家。关注:命名、注释、复杂度、重复。",
    llm_config={"model": "gpt-4o-mini"},  # 便宜模型
)

user_proxy = UserProxyAgent(
    name="code_owner",
    human_input_mode="ALWAYS",  # 有人确认
)

# Round-robin 对话,每人审一轮
group = autogen.GroupChat(
    participants=[
        security_reviewer,
        perf_reviewer,
        readability_reviewer,
        user_proxy,
    ],
    speaker_selection_method="round_robin",
)

chat = autogen.GroupChatManager(group)
chat.initiate_chat(
    user_proxy,
    message=f"审查这个 PR:\n\n{diff_content}",
    max_round=10,
)

关键设计: - 三个 reviewer 用不同 prompt 和模型(性能/可读性用便宜模型) - Round-robin 保证每人都有发言 - human_input_mode="ALWAYS" 让 code owner 参与

案例 4:工单路由 Agent(CrewAI)

场景:客户工单进入,Agent 分类、路由、起草回复。

from crewai import Agent, Task, Crew, Process
from crewai_tools import SerperDevTool, GoogleSearch

triage_agent = Agent(
    role="工单分类员",
    goal="分析工单内容,判断优先级和负责团队",
    backstory="10 年一线客服经验,能快速判断工单类型。",
    tools=[GoogleSearch],
    llm="gpt-4o-mini",
)

writer_agent = Agent(
    role="回复撰写员",
    goal="根据分类和知识库起草专业回复",
    backstory="熟悉公司产品文档,能给出准确的技术解答。",
    llm="gpt-4o",
)

reviewer_agent = Agent(
    role="回复审核员",
    goal="审核回复的专业性和合规性",
    backstory="技术专家,熟悉合规红线。",
    llm="gpt-4o",
)

triage_task = Task(
    description="分析工单内容,给出分类和优先级",
    expected_output="JSON: {category, priority, team, summary}",
    agent=triage_agent,
)

draft_task = Task(
    description="根据分类起草回复",
    expected_output="专业的工单回复文本",
    agent=writer_agent,
    context=[triage_task],
)

review_task = Task(
    description="审核回复并给出建议",
    expected_output="审核意见:批准/驳回 + 原因",
    agent=reviewer_agent,
    context=[draft_task],
)

crew = Crew(
    agents=[triage_agent, writer_agent, reviewer_agent],
    process=Process.sequential,
    verbose=True,
    memory=True,
)

crew.kickoff(inputs={"ticket": ticket_content})

关键设计: - 分类用便宜模型(GPT-4o-mini),审核用贵模型 - 三 agent 顺序执行,后一个依赖前一个的输出 - context= 传递上游结果

案例 5:故障诊断多智能体(LangGraph 复杂编排)

场景:生产事故,多 agent 协作诊断,含并行分支和人工介入。

from langgraph.graph import StateGraph, START, END

class IncidentState(TypedDict):
    alert: dict
    symptoms: dict           # 症状清单
    root_causes: list        # 候选根因
    confirmed_root_cause: str
    plan: str
    executed: bool
    needs_human: bool
    result: str

# 3 个诊断 agent 并行跑
def parallel_diagnose(state: IncidentState):
    """三个诊断 agent 并行"""
    with ThreadPoolExecutor() as pool:
        net_result = pool.submit(network_diagnoser, state)
        app_result = pool.submit(app_diagnoser, state)
        infra_result = pool.submit(infra_diagnoser, state)
    return {
        "root_causes": [
            net_result.result(),
            app_result.result(),
            infra_result.result(),
        ]
    }

# 汇总 agent
def consolidate(state: IncidentState) -> dict:
    """根据并行结果汇总"""
    prompt = f"""
    多个诊断 agent 给出了候选根因:
    {state['root_causes']}

    请判断哪个最可信,给出 confidence 分数。
    """
    result = llm.invoke(prompt)
    return {
        "confirmed_root_cause": result,
        "needs_human": result.confidence < 0.7,
    }

# 执行 agent(仅低风险动作)
def safe_execute(state: IncidentState) -> dict:
    """低风险动作自动执行,高危拒绝"""
    safe_actions = ["restart_pod", "scale_up", "clear_cache"]
    if state["plan"] not in safe_actions:
        return {"needs_human": True}
    return {"executed": True, "result": execute_plan(state["plan"])}

graph = StateGraph(IncidentState)
graph.add_node("gather", gather_symptoms)
graph.add_node("parallel_diagnose", parallel_diagnose)
graph.add_node("consolidate", consolidate)
graph.add_node("plan", plan_agent)
graph.add_node("execute", safe_execute)
graph.add_node("human_review", human_review_node)

graph.add_edge(START, "gather")
graph.add_edge("gather", "parallel_diagnose")
graph.add_edge("parallel_diagnose", "consolidate")
graph.add_conditional_edges(
    "consolidate",
    lambda s: "human_review" if s["needs_human"] else "plan",
)
graph.add_edge("plan", "execute")
graph.add_conditional_edges(
    "execute",
    lambda s: "human_review" if s["needs_human"] else END,
)
graph.add_edge("human_review", END)

app = graph.compile(
    checkpointer=MemorySaver(),
    recursion_limit=15,
)

关键设计: - 并行诊断:三个领域 agent 同时跑,ThreadPoolExecutor - 汇总决策:consolidate agent 判断 confidence,低于阈值转人工 - 分级执行:safe_execute 只允许低风险动作,高危自动转人工

3. 生产落地四要点

3.1 超时熔断

每个 agent 设硬超时,避免链路过长:

import asyncio

async def run_agent_with_timeout(agent, state, timeout=30):
    try:
        return await asyncio.wait_for(agent.invoke(state), timeout=timeout)
    except asyncio.TimeoutError:
        return {"error": "timeout", "fallback": "human_review"}

# LangGraph 节点里包一层
def diagnose_with_timeout(state: DiagnosisState):
    result = run_agent_with_timeout(diagnose_agent, state, timeout=30)
    if result.get("error") == "timeout":
        return {"needs_human": True, "fallback": "timeout"}
    return result

推荐配置: - 单 agent 步长:30 秒 - 整体链路:3-5 分钟 - 超时后走 fallback 路径(通常是人工介入)

3.2 人工介入点

原则:涉及"破坏性操作"必须人工确认,其他可自动化。

必须人工介入的场景: - 重启服务、重启容器、重启节点 - 删除数据、删除资源 - 变更配置、修改数据库 - 涉及支付、涉及用户数据 - P0/P1 级别告警 - 涉及生产环境变更

代码模式:

def decide(state):
    risky_ops = ["restart", "delete", "rm", "DROP", "TRUNCATE", "chmod 777"]
    if any(op in state["plan"].lower() for op in risky_ops):
        return "human_review"
    if state["severity"] in ("P0", "P1"):
        return "human_review"
    return "auto_execute"

3.3 成本控制

三层预算:

# Agent 级预算
class BudgetLLM:
    def __init__(self, llm, budget_tokens=5000):
        self.llm = llm
        self.budget = budget_tokens
        self.used = 0

    def invoke(self, prompt):
        response = self.llm.invoke(prompt)
        self.used += response.usage.total_tokens
        if self.used > self.budget:
            raise BudgetExceededError(f"Exceeded budget {self.budget}")
        return response

# 任务级预算
task_budget = 30000

# 模型分级
model_tier = {
    "planner": "gpt-4o",       # 贵但准
    "executor": "gpt-4o-mini", # 便宜够用
    "summarizer": "gpt-4o-mini",
    "classifier": "gpt-3.5-turbo",  # 最便宜
}

成本参考(2026 年 10 月价格): - GPT-4o:$2.50/M input, $10/M output - GPT-4o-mini:$0.15/M input, $0.60/M output - GPT-3.5-turbo:$0.50/M input, $2.00/M output - Claude 3.5 Sonnet:$3.00/M input, $15/M output - Gemini 1.5 Flash:$0.075/M input, $0.30/M output

经验:一个 Multi-Agent 任务用混合模型,平均成本 $0.05-0.30,比全用 GPT-4o 便宜 5-10 倍。

3.4 可观测性

没有 trace 的 Multi-Agent 就是黑箱:

# 方案 1:LangSmith(LangChain 官方)
import os
os.environ["LANGCHAIN_TRACING_V2"] = "true"
os.environ["LANGCHAIN_API_KEY"] = "ls_xxx"
os.environ["LANGCHAIN_PROJECT"] = "ops-ai-prod"

# 方案 2:Langfuse(开源替代)
os.environ["LANGFUSE_PUBLIC_KEY"] = "pk-xxx"
os.environ["LANGFUSE_SECRET_KEY"] = "sk-xxx"
os.environ["LANGFUSE_HOST"] = "https://langfuse.example.com"

# 方案 3:自建 trace
import structlog
logger = structlog.get_logger()

def traced_node(fn):
    async def wrapper(state):
        trace_id = state.get("trace_id") or str(uuid4())
        node_id = fn.__name__
        start = time.time()
        try:
            result = await fn(state)
            logger.info("node_complete",
                       trace_id=trace_id,
                       node=node_id,
                       duration=time.time() - start,
                       tokens=result.get("usage", {}),
            )
            return result
        except Exception as e:
            logger.error("node_failed",
                       trace_id=trace_id,
                       node=node_id,
                       error=str(e),
            )
            raise
    return wrapper

trace 必须包含: - trace_id:贯穿整条链路 - node_id:当前节点 - step_index:节点内的第几步 - duration_ms:耗时 - tokens_input, tokens_output:token 消耗 - error:错误信息 - state_snapshot:状态快照(可选,敏感数据脱敏)

4. 常见翻车案例

案例 1:死循环

现象:Agent A 让 Agent B 做事,B 又让 A 做,无限循环。

根因:Round-robin 或 handoff 逻辑没终止条件。

修法:

# AutoGen
chat.initiate_chat(user_proxy, message=..., max_round=5)

# LangGraph
compiled = graph.compile(recursion_limit=10)

# 状态里加计数器
class State(TypedDict):
    round: int

def agent_a(state):
    if state["round"] > 5:
        return {"stop": True}
    return {"round": state["round"] + 1, ...}

案例 2:token 爆炸

现象:单个任务烧了 $50+,因为 agent 之间消息不断累积。

修法:

# 消息压缩
def compress_history(messages, max_tokens=2000):
    if count_tokens(messages) > max_tokens:
        summary = llm.invoke(f"总结以下对话要点:\n{messages}")
        return [SystemMessage(summary)] + messages[-2:]
    return messages

# Agent 之间传摘要不传全量
agent_b_input = compress_history(agent_a_output, max_tokens=2000)

案例 3:状态不一致

现象:Agent A 修改了 state,Agent B 又改回去了,最后状态混乱。

修法:

# LangGraph 用 reducer
class State(TypedDict):
    root_causes: Annotated[list, operator.add]  # 追加而不是覆盖
    decisions: Annotated[list, operator.add]

# 或者用 checkpoint
compiled = graph.compile(checkpointer=MemorySaver())
config = {"configurable": {"thread_id": "incident-123"}}
result = compiled.invoke(state, config)  # 状态保存

案例 4:模型幻觉

现象:Agent 编造了不存在的 API 调用,执行失败。

修法:

# 工具白名单
allowed_tools = [
    "kubectl_get_pods",
    "kubectl_describe_pod",
    "curl_http",  # 只允许 GET
]

agent = Agent(
    tools=allowed_tools,
    # 其他工具一律禁止
)

# 结果验证
def verify_action(action: dict) -> bool:
    if action["command"].startswith("kubectl delete"):
        return False  # 高危
    if action["command"].startswith("rm "):
        return False
    return True

案例 5:LLM 不遵循 JSON 格式

现象:Agent 输出应该返回 JSON 但经常漏字段或加解释。

修法:

# 结构化输出(LangChain)
from pydantic import BaseModel

class Diagnosis(BaseModel):
    root_cause: str
    evidence: list[str]
    fix: str
    severity: Literal["P0", "P1", "P2", "P3", "P4"]

result = llm.with_structured_output(Diagnosis).invoke(prompt)
# result 类型保证是 Diagnosis

# 或者提示词强化
prompt = """
返回严格的 JSON,不要任何其他内容:
{
  "root_cause": "...",
  "evidence": ["...", "..."],
  "fix": "...",
  "severity": "P0|P1|P2|P3|P4"
}
"""

5. FAQ

Q1: Multi-Agent 一定比单 Agent 好吗?

A: 不一定。单 Agent 加工具集能解决 80% 的问题,成本还低。Multi-Agent 只在这些场景值得用:① 任务复杂到单 agent prompt 塞不下 ② 需要不同角色(安全 vs 性能)分工 ③ 需要明确的状态流转(审批链)④ 需要 human-in-the-loop。能用单 Agent 就用单 Agent,Multi-Agent 是最后手段。

Q2: Multi-Agent 是不是需要更强的模型?

A: 相反。每个 Agent 可以做更窄的任务,反而可以用便宜模型。编排的价值在于"分而治之":复杂任务拆给多个便宜模型,比一个贵模型搞复杂任务更省钱更稳。

Q3: Agent 之间的通信怎么设计?

A: 三种模式:① 消息传递(AutoGen):agent 之间对话,消息累积 ② 状态共享(LangGraph):agent 读写同一 state,通过 reducer 合并 ③ 消息队列(自定义):agent 通过 Kafka/Redis 异步通信。生产环境推荐 LangGraph 状态机模式,最可控。

Q4: 怎么处理 Agent 出错重试?

A: 三层策略:① 节点级重试:LangGraph 节点可配置 retry 3 次指数退避 ② 任务级 fallback:某节点连续失败 3 次走 fallback 路径 ③ 链路级人工介入:整条链路超时或多次失败转人工。

from langgraph.types import RetryPolicy

node = graph.add_node(
    "diagnose",
    diagnose_agent,
    retry=RetryPolicy(max_attempts=3, backoff_factor=2),
)

6. 常见误区

误区 真相
"Multi-Agent 是趋势,越复杂越好" 单 Agent 加工具集能解决 80% 问题,别过度设计
"LangGraph 复杂,AutoGen 简单" 复杂性来自任务本身,选错框架再简单也解决不了
"Agent 越多越聪明" 每个 agent 都增加成本和延迟,5+ agent 就该评估是否拆分任务
"LLM 是决策大脑,agent 只是执行" 现代 agent 强调工具使用,LLM 只是 planner,tool 才是手脚
"Multi-Agent 可以完全自动化" 涉及生产变更必须 human-in-the-loop,这是底线不是可选项

7. 关联阅读