跳转至

Skill 的典型生命周期是怎样的?从注册、触发到销毁会经历哪些阶段?

面试官:“一个 Skill 从注册到被 Agent 使用,再到最后销毁,它的典型生命周期是怎样的?”

候选人:

“Skill 的生命周期我把它分成六个核心阶段,就像给 Agent 装配一个可以随时调用的专业能力,从安装、激活到退役,每个阶段都有明确的状态转换。我按时间线逐个说清楚。


阶段一:注册与发现 ——‘能力入库’

Skill 首先要被 Agent 系统感知到。注册方式通常有两种:

  • 显式注册:开发者通过配置文件、注解或 SDK 将 Skill 声明到系统中。比如在 Python 里用 @skill(name="book_flight") 装饰一个 Skill 类。

  • 自动发现:系统扫描指定的 Skill 目录,自动加载符合条件的 Skill 模块。

注册时系统会提取 Skill 的元信息:名称、描述、触发条件、所需参数 schema、依赖的其他 Skill 或 API。这些信息存入 Skill 注册中心,供后续 Agent 做意图匹配和调度。


阶段二:初始化与预热 ——‘整装待发’

Skill 注册后通常不会立即加载全部资源,而是懒加载。当第一次被触发,或者系统预判即将被调用时,进入初始化:

  • 加载 Skill 内部依赖的工具、API 客户端、模型等。

  • 读取配置,比如连接哪个数据库、调用哪个外部服务。

  • 执行自检(health check),确保依赖的外部服务可达。

  • 建立与 Agent 上下文总线的连接,准备接收任务。

初始化完成后,Skill 进入 Ready 状态,等待被激活。


阶段三:匹配与触发 ——‘接到任务’

当用户输入一个目标(比如“帮我订明天去上海的机票”),Agent 的规划器会做两件事:

  1. 意图匹配:将用户意图与 Skill 注册中心的元信息做语义比对,找到最合适的 Skill。

  2. 参数提取与澄清:从用户输入和对话历史中提取参数,如果缺少关键参数(比如日期不明),Skill 可以通过 Agent 反问用户澄清。

匹配成功后,Agent 会生成一个执行指令,携带提取的参数,正式触发这个 Skill。


阶段四:执行与推理 ——‘干活’

这是 Skill 生命周期中最复杂的阶段。Skill 按照内部定义的执行逻辑,可能进行:

  • 工具调用:调用一个或多个 API 或内部函数。

  • 多步推理:根据中间结果动态调整下一步行动,比如价格超出预期时选择另外的舱位。

  • 子 Skill 编排:调用其他 Skill 完成子任务(比如“支付”Skill)。

  • 状态管理:在多个执行步骤间保持上下文,记录已完成的进度。

  • 错误恢复:遇到 API 超时时重试、降级,或者在信息不足时暂停并反问用户。

整个执行过程,Agent 主控线程会监控 Skill 的状态(执行中、等待用户确认、已完成),并随时处理中断或取消指令。


阶段五:完成与回馈 ——‘交差’

Skill 执行完毕后,会向 Agent 返回一个结构化结果。通常包含:

  • 状态:成功、失败、部分完成、需要用户确认。

  • 数据:如订单详情、航班列表。

  • 副作用记录:已调用的外部服务、已修改的数据、需要回滚的预备信息。

Agent 收到结果后,把最终答案或下一步选项渲染给用户。同时,如果需要跨 Skill 协作,这个结果也会被写入对话上下文供后续 Skill 读取。


阶段六:休眠与销毁 ——‘退场’

Skill 并不总是常驻内存。典型的回收策略有:

  • 惰性休眠:执行完成后不立即销毁,而是保持 Idle 状态一段时间,下次调用可直接复用。

  • 超时回收:一段时间未被调用,释放资源(如断开数据库连接),回到未初始化状态。

  • 主动销毁:系统升级、内存压力大或 Skill 本身有状态泄漏时,主动终止实例,等待下次调用重新初始化。

  • 注销:当 Skill 被从注册中心移除时,销毁所有实例,清空元信息。


生命周期全景图

注册(Register)
待初始化(Registered)
    │ 首次触发 / 系统预热
初始化中(Initializing)
就绪(Ready) ←──────────┐
    │ 匹配触发            │
    ▼                     │
执行中(Running)          │
    │                     │
    ├── 等待用户确认 ──────┤ (用户回复后继续)
    │                     │
    ▼                     │
已完成(Completed) ───────┘ 可再次触发
    ├──→ 超时/主动释放 → 休眠(Idle)→ 超时回收 → 未初始化
    └──→ 注销 → 已销毁(Destroyed)