MagicTools
claudeApril 12, 20261 views1 min read

Agent 工具编排:多步推理与任务分解

工具链:串联多步操作

在实际场景中,Agent 往往需要将多个工具串联起来——用工具 A 的输出作为工具 B 的输入。Agent SDK 天然支持这种模式,模型会自动规划调用顺序。

from claude_agent_sdk import Agent, tool

@tool
def fetch_data(url: str) -> str:
    """从指定 URL 抓取数据"""
    return '{"revenue": 5000000, "growth": "15%"}'

@tool
def analyze_data(data: str) -> str:
    """分析数据并生成报告"""
    return f"分析结果:数据显示收入增长稳健,同比增长 15%。"

@tool
def format_report(analysis: str, format: str) -> str:
    """将分析结果格式化为指定格式"""
    return f"# 季度报告\n\n{analysis}\n\n生成格式:{format}"

agent = Agent(
    name="数据分析师",
    instructions="你是数据分析专家。按顺序:抓取数据、分析数据、生成格式化报告。",
    tools=[fetch_data, analyze_data, format_report],
)

result = agent.run("分析 https://api.example.com/q4-data 的数据,生成 Markdown 报告")

多 Agent 协作:Handoff 模式

当任务涉及多个专业领域时,可以通过 Handoff 让不同 Agent 各司其职:

from claude_agent_sdk import Agent, tool

researcher = Agent(
    name="研究员",
    instructions="你负责搜索和收集信息,完成后交给编辑。",
    tools=[search_web],
)

editor = Agent(
    name="编辑",
    instructions="你负责整理和润色内容,输出最终文章。",
    tools=[format_report],
)

orchestrator = Agent(
    name="协调者",
    instructions="协调研究员和编辑完成内容生产任务。",
    handoffs=[researcher, editor],
)

result = orchestrator.run("写一篇关于量子计算最新进展的文章")

任务分解策略

处理复杂任务的关键是合理分解。常见模式包括:

  • 编排者模式:一个主 Agent 拆分任务,分配给专业子 Agent
  • 流水线模式:Agent 按顺序接力处理,每个 Agent 负责一个阶段
  • 并行模式:多个 Agent 同时处理独立子任务,最后汇总结果

步骤间的校验与容错

在多步流程中,每一步之间添加校验逻辑至关重要:

@tool
def validate_output(data: str, schema: str) -> str:
    """校验上一步输出是否符合预期格式"""
    if not data or len(data) < 10:
        return "校验失败:数据为空或过短,请重新执行上一步"
    return "校验通过"

当某一步失败时,Agent 可以自动重试或切换备选方案,确保整体流程的健壮性。

常见问题

Handoff 和直接调用多个工具有什么区别?

Handoff 是将控制权完全交给另一个 Agent,该 Agent 有自己独立的指令和工具集。而多工具调用是同一个 Agent 在自己的上下文中使用不同工具。Handoff 适合专业分工明确的场景。

多 Agent 系统如何共享上下文?

Agent 之间通过 Handoff 传递消息历史来共享上下文。协调者 Agent 会将当前对话状态传递给下一个 Agent,确保信息不丢失。

工具链过长时如何控制成本?

可以为 Agent 设置 max_turns 参数限制最大执行步数,同时在关键节点添加校验工具,避免无效的重复调用。选择合适的模型也能有效控制成本。

Published by MagicTools