【AI面试临阵磨枪-90】Skill 之间如何调用、依赖、组合、编排?

一、面试题目

AI Agent 中多个 Skill 之间如何实现调用、依赖、组合、编排?分别说明调用方式、依赖管理、组合模式、编排引擎与落地实践。

二、知识储备

1. 核心定位

Skill 是可复用的业务能力单元 ,单个 Skill 只能完成单一业务闭环;复杂业务需要多个 Skill 串联、并联、条件分支、嵌套调用,由编排引擎 统一管理,本质是业务流程的可视化编排 + 状态机驱动

2. Skill 调用方式(4 种)

(1)直接调用(同步调用)

  • A Skill 内部直接实例化/调用 B Skill,同步阻塞执行
  • 适合强依赖、串行步骤:查订单 → 校验售后 → 退款
  • 特点:简单直接、上下文透传、同步返回结果

(2)异步调用(事件驱动)

  • Skill 触发后发送事件,由消息队列/总线触发下一个 Skill
  • 适合长耗时、解耦场景:投诉受理 → 派单 → 跟进 → 回访
  • 特点:非阻塞、削峰、解耦,支持跨服务

(3)嵌套调用

  • 一个父 Skill 内部封装多个子 Skill
  • 例:全域售后Skill 内部嵌套:判责Skill、赔付Skill、通知Skill
  • 特点:层级清晰、可复用,子 Skill 对外透明

(4)Agent 调度调用

  • Agent 根据意图、上下文、条件,动态选择 Skill 调用
  • 适合不确定流程:用户问题不同,自动匹配不同业务技能

3. Skill 依赖管理

(1)依赖类型

  • 硬依赖:必须先执行 A 才能执行 B,如查订单 → 退款
  • 软依赖:可选执行,不影响主流程,如退款后可执行通知(可降级)
  • 数据依赖:B 需要 A 的输出结果(订单ID、金额、责任判定)

(2)依赖解耦方案

  1. 上下文透传:所有 Skill 共享统一 Context,参数自动传递
  2. 依赖注入 DI:Skill 运行时注入所需前置 Skill,不硬编码
  3. DAG 有向无环图校验:编排时检查循环依赖,禁止死锁
  4. 版本兼容:Skill 升级不破坏下游依赖,接口兼容

4. Skill 常见组合模式(面试必背)

(1)串行组合(顺序执行)

A → B → C,上一个输出作为下一个输入

示例:查询骑手位置 → 判断超时 → 自动赔付

(2)并行组合(并发执行)

多个 Skill 同时执行,全部完成后合并结果

示例:同时查订单、查物流、查库存,综合判断

(3)条件分支组合(if‑else)

根据前序结果走不同 Skill

示例:超时 → 赔付Skill;未超时 → 安抚Skill

(4)循环组合(循环执行)

满足条件重复执行,如多次重试、多轮确认

示例:多次引导用户补充参数,直到信息完整

(5)容错兜底组合

主 Skill 失败自动切换备用 Skill

示例:退款Skill异常 → 人工转接Skill

5. 编排引擎实现(企业级标准)

(1)技术选型

  • 轻量:LangGraph 状态机编排(Agent 首选)
  • 复杂业务:工作流引擎(Camunda、Flowable)
  • 自研:状态机 + DAG 调度器,适配多租户 Skill 中台

(2)编排核心能力

  1. 可视化画布:拖拽配置 Skill、连线、条件分支
  2. 状态持久化:中断后可续跑,防止流程丢失
  3. 超时/重试/熔断透传:编排层统一管控
  4. 上下文全局共享:参数自动传递、无需手动传参
  5. 多租户隔离编排:租户拥有独立编排流程

6. 落地约束(生产环境)

  1. 禁止 Skill 循环依赖,编排前做 DAG 校验
  2. 子 Skill 异常不导致主流程雪崩,支持降级
  3. 所有跨 Skill 调用统一鉴权、幂等、日志可追溯
  4. 编排规则可配置、可灰度、可回滚

三、代码实现(伪代码,LangGraph 风格)

python 复制代码
from langgraph import StateGraph

# 1. 定义Skill
def query_order_skill(context): ...
def judge_responsibility_skill(context): ...
def refund_skill(context): ...

# 2. 编排DAG流程
workflow = StateGraph()
workflow.add_node("query_order", query_order_skill)
workflow.add_node("judge", judge_responsibility_skill)
workflow.add_node("refund", refund_skill)

# 串行编排
workflow.add_edge("query_order", "judge")
workflow.add_edge("judge", "refund")

# 条件分支
workflow.add_conditional_edges(
    "judge",
    lambda x: "refund" if x["is_responsibility"] else "end"
)

四、破局之道(面试升华)

Skill 之间的调用与编排,本质是把离散的业务能力,组装成可执行的业务工作流

通过直接/异步/嵌套/Agent调度 实现灵活调用,用DAG+状态机 管理依赖与顺序,支持串行、并行、分支、循环、容错 多种组合模式;上层由编排引擎统一管控,实现可视化、可配置、可运维、可灰度,解决传统 Function Calling 无法处理复杂长链路任务的痛点,是企业级 Agent 平台的核心架构。

30 秒口述精简版

Skill 支持直接调用、异步调用、嵌套调用、Agent动态调度;通过上下文透传与DAG做依赖管理;采用串行、并行、条件分支、循环、容错模式组合;基于状态机/工作流引擎统一编排,实现复杂业务流程自动化。

相关推荐
Raink老师1 小时前
【AI面试临阵磨枪-92】Skill 开发规范:命名、文档、测试、日志、监控、告警?
java·面试·log4j
酉鬼女又兒2 小时前
零基础入门计算机网络物理层:核心任务、四大关键特性与全类型传输媒体(双绞线/同轴电缆/光纤/微波/红外线/可见光)完整详解
网络·网络协议·计算机网络·职场和发展·求职招聘
x_xbx2 小时前
LeetCode:20. 有效的括号
算法·leetcode·职场和发展
Raink老师2 小时前
【AI面试临阵磨枪-93】Skill 性能优化:冷启动、并发、内存、IO、缓存?
人工智能·面试·性能优化
一只小白0002 小时前
【JVM | 第四篇】—— JVM 内存分配
jvm·面试
Raink老师2 小时前
【AI面试临阵磨枪-89】Skill 幻觉、参数缺失、格式错误、业务异常如何处理?
面试·职场和发展
linweidong3 小时前
Java 后端开发面试 50 个高频易混淆知识点详解
java·spring boot·spring·spring cloud·面试·mybatis·spring事务
练习时长一年5 小时前
LeetCode热题100(二叉树的最大路径和)
算法·leetcode·职场和发展
笑尘~Y12 小时前
每日技术面试高频题精选
面试