核心能力
1. Plan Generation
将目标(自然语言或结构化 DSL)分解为子任务序列:目标→子任务分解→工具选择→依赖排序。每个子任务明确输入/输出契约和预期结果阈值。支持sequential、parallel、conditional 三种依赖类型。
2. Critic
在每个子任务完成后实时监控执行结果,判断是否偏离原始目标。Critic 不直接修改计划——它产生评估报告(on-track / deviation-detected / goal-violated),供 Planner 决策。
3. Recovery
子任务失败时自动生成替代方案。Recovery 策略包括:回退上一 checkpoint 重试、替换工具链、调整参数范围、降级目标(如面积放宽 5% 换取时序收敛)。所有 recovery 路径需经过 Gate 评估。
4. Stop Criteria
区分硬性门禁与软性门禁:
- 硬性门禁:约束违规(如面积超限)、预算耗尽(wall-clock 或工具调用次数)、不可恢复错误。
- 软性门禁:收益递减(连续 N 轮改善 < 阈值)、达到目标但继续微调无显著收益。
Agent 调用方式
from ieda.agent import Planner, Goal, StopCriteria
planner = Planner()
goal = Goal(
target="优化关键路径时序,面积增加不超过 5%",
constraints={"area_budget_pct": 5.0},
quality={"timing_slack_ps": -50}
)
plan = planner.plan(goal)
# plan.result: TypedPlan {
# steps: [Step("sta-analyze", tool="iSTA"),
# Step("resize-critical", tool="iPL", deps=["sta-analyze"]),
# Step("verify", tool="iSTA", deps=["resize-critical"])],
# stop: HardStop("area_budget_pct <= 5.0"),
# critic: OnStepComplete("verify") -> CompareDelta("timing_slack_ps")
# }
result = planner.execute(plan, db=current_idb)
# critic runs after each step, recovery triggers on failure
// MCP 协议:Agent 通过标准接口调用 Planner
{
"method": "tools/call",
"params": {
"name": "planner.plan",
"arguments": {
"goal": "优化关键路径时序,面积增加不超过 5%",
"tool_capabilities": ["iSTA", "iPL", "iCTS"],
"design_snapshot": "checkpoint:v3",
"stop": {
"hard": ["area_budget_pct <= 5.0", "runtime_sec <= 3600"],
"soft": ["delta_timing_pct < 0.5"]
}
}
}
}
# Tcl 接口:通过 iEDA flow 脚本调用 Planner
ieda::planner plan \
-goal "优化关键路径时序" \
-constraint {area_budget_pct 5.0} \
-quality {timing_slack_ps -50} \
-tools {iSTA iPL iCTS}
ieda::planner execute -db current_idb -monitor on
# 查看计划状态
ieda::planner status ;# running | completed | failed | recovered
输入/输出契约
| 方向 | 字段 | 类型 | 说明 |
|---|---|---|---|
| 输入 | goal | str | Goal | 自然语言或结构化目标描述 |
| 输入 | constraints | dict | 硬约束:面积、功耗、时间预算 |
| 输入 | tool_capabilities | list[str] | 可用工具列表(用于工具选择) |
| 输入 | design_snapshot | str | 设计 checkpoint 标识 |
| 输出 | plan | TypedPlan | 包含 steps、deps、stop、critic 的完整计划 |
| 输出 | execution_trace | Trace | 每个 step 的输入/输出/耗时/结果 |
| 输出 | recovery_log | list[Recovery] | 所有 recovery 事件及替代方案 |