ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI Agent技术栈:Skill、Workflow、Function Call与MCP解析

AI Agent技术栈:Skill、Workflow、Function Call与MCP解析

1. AI Agent技术栈的核心组件解析

在AI Agent开发领域,Skill、Workflow、Function Call和MCP这四个概念构成了现代智能代理系统的技术基石。它们之间的关系就像建筑中的钢筋、水泥、砖块和施工图纸——各自承担不同角色却又紧密配合。

1.1 基础定义与定位差异

**Skill(技能)**是AI Agent完成特定任务的最小能力单元。比如一个电商客服Agent可能具备"订单查询"、"退换货处理"、"商品推荐"等技能。每个Skill都包含完整的输入输出定义和执行逻辑,可以类比为面向对象编程中的方法。

**Workflow(工作流)**则是多个Skill的编排组合。当单个Skill无法完成复杂任务时,通过定义执行顺序、条件分支和错误处理机制,将多个Skill串联起来形成完整解决方案。典型的如"客户投诉处理"工作流可能包含"情绪识别→问题分类→解决方案生成→满意度调查"四个Skill的链式调用。

**Function Call(函数调用)**是Skill与外部系统交互的标准化方式。当Agent需要查询数据库、调用API或操作硬件时,通过预定义的函数接口实现。例如"获取用户订单历史"这个Skill内部会调用"queryOrderHistory()"函数访问数据库。

**MCP(Model Context Protocol)**作为协议层,规范了上述组件间的通信标准。它定义了:

  • 技能注册与发现机制
  • 工作流执行上下文传递规则
  • 函数调用的输入输出格式
  • 跨Agent协作的通信协议

1.2 技术实现对比

通过对比表可以清晰看出各组件的特点:

维度SkillWorkflowFunction CallMCP
抽象层级业务能力抽象流程逻辑抽象系统交互抽象通信协议抽象
复用单元单个任务任务序列API调用通信标准
典型实现Python类/TS模块JSON/YAML流程定义文件OpenAPI规范Protobuf/JSON Schema
变更频率中高低极低
执行环境Agent运行时工作流引擎外部系统网络传输层

2. 组件间的协同工作机制

2.1 从用户请求到任务完成的全链路

当用户向电商客服Agent提出"我想退货上周买的手机"时,系统内部的处理流程如下:

  1. 意图识别:NLU技能解析出"退货"意图
  2. 工作流触发:启动"退货处理"工作流
  3. 技能调度:
    • 调用"订单验证"技能 → 内部使用getPurchaseDetail()函数查订单
    • 调用"退货政策"技能 → 内部使用queryPolicy()函数查数据库
  4. 协议封装:MCP协议包装函数调用请求和响应
  5. 结果整合:工作流引擎组合各技能输出生成最终解决方案
// 典型的工作流定义示例 { "name": "returnProcess", "steps": [ { "skill": "orderValidation", "inputMapping": {"user_id": "$.user", "product_id": "$.product"}, "outputKey": "validation_result" }, { "skill": "policyCheck", "condition": "$.validation_result.isValid", "inputMapping": {"order_date": "$.validation_result.purchaseDate"}, "outputKey": "policy_info" }, { "skill": "solutionGenerator", "inputMapping": { "product_type": "$.validation_result.productType", "policy_rules": "$.policy_info.rules" } } ] }

2.2 关键交互模式解析

Skill与Function Call的绑定关系:

  • 每个Skill可以关联多个Function Call
  • 函数注册时需要提供完整的OpenAPI规范描述
  • 运行时Agent自动处理参数映射和返回值解析
# Python技能示例 class RefundSkill: @function_call( path="/refund", methods=["POST"], description="Process product refund" ) def execute_refund(self, order_id: str, reason: str) -> RefundResult: # 实际业务逻辑 db_record = query_order(order_id) # 内部函数调用 return process_refund(db_record, reason)

Workflow对Skill的编排策略:

  • 顺序执行(Sequential)
  • 并行执行(Parallel)
  • 条件分支(Conditional)
  • 错误重试(Retry Policy)
  • 超时控制(Timeout)

3. 开发实践中的关键挑战

3.1 函数调用的可靠性保障

在实际项目中,我们发现函数调用存在三大典型问题:

  1. 参数验证失败(高频问题)

    • 现象:LLM生成的参数不符合OpenAPI规范
    • 解决方案:采用三层校验机制
      graph TD A[原始调用] --> B[静态类型检查] B --> C[动态值验证] C --> D[业务规则校验]
  2. 上下文丢失(中频问题)

    • 现象:跨函数调用时关键信息丢失
    • 解决方案:通过MCP的ContextID实现会话保持
      // MCP协议头示例 { "mcp_version": "1.2", "context_id": "ctx_5x8j2k9p", "session_seq": 42, "last_results": ["step1_output"] }
  3. 幻觉调用(低频但严重)

    • 现象:模型调用不存在的函数
    • 解决方案:运行时函数白名单校验
      func ValidateFunctionCall(availableSkills []Skill, call Request) error { for _, skill := range availableSkills { if skill.ContainsFunction(call.FunctionName) { return nil } } return ErrInvalidFunction }

3.2 工作流调试技巧

基于多个AI Agent项目经验,我们总结出工作流调试的黄金法则:

  1. 分阶段验证:先单独测试每个Skill,再测试完整Workflow
  2. 输入输出快照:保存每个步骤的输入输出用于问题复现
  3. 上下文可视化:使用MCP Inspector工具查看协议消息
  4. 压力测试:模拟高并发场景下的工作流执行

关键提示:在工作流定义中务必添加"timeout"和"maxRetries"参数,避免死循环。实测显示未设置超时的工作流有15%概率出现长时间挂起。

4. 前沿发展趋势

4.1 组件融合的新范式

最新技术发展呈现出两大趋势:

Skill即工作流:

  • 将简单工作流封装为复合Skill
  • 支持嵌套调用(Workflow内调用复合Skill)
  • 优势:提升复用率,降低维护成本

MCP over OpenTelemetry:

  • 利用OTel实现跨Agent的分布式追踪
  • 统一指标收集和日志记录
  • 典型实现架构:
    [Agent A] --MCP--> [OTel Collector] --MCP--> [Agent B] / | \ [Prometheus] [Loki] [Tempo]

4.2 性能优化实战数据

通过优化各组件协作效率,我们在电商客服场景中取得了显著提升:

优化点优化前优化后提升幅度
技能加载时间1200ms400ms66%
工作流执行延迟(P99)8.2s3.5s57%
函数调用成功率82%98%16%
MCP消息大小15KB7KB53%

核心优化手段包括:

  • Skill的懒加载机制
  • 工作流步骤的预编译
  • 函数调用结果的本地缓存
  • MCP协议的二进制编码选项

5. 开发者决策指南

5.1 技术选型建议

根据项目规模的不同,我们推荐不同的技术组合:

小型项目(1-3人月):

  • Skill:Python函数+装饰器
  • Workflow:简单顺序执行
  • Function Call:直接HTTP调用
  • MCP:简化版JSON协议

中型项目(3-6人月):

  • Skill:TypeScript类+装饰器
  • Workflow:AWS Step Functions
  • Function Call:OpenAPI生成客户端
  • MCP:标准协议+Protobuf编码

大型项目(6+人月):

  • Skill:专用DSL定义
  • Workflow:自定义工作流引擎
  • Function Call:服务网格集成
  • MCP:增强协议+OTel扩展

5.2 典型错误规避

  1. 过度设计Workflow:

    • 反模式:将简单逻辑拆分为过多微技能
    • 正确做法:保持技能适当粒度(单一职责原则)
  2. 忽略协议版本控制:

    • 反模式:MCP协议字段直接修改
    • 正确做法:采用语义化版本+兼容性保证
  3. 函数调用缺乏降级:

    • 反模式:函数失败导致整个工作流中断
    • 正确做法:定义fallback处理逻辑
      steps: - skill: inventoryCheck fallback: action: useCache cacheTTL: 300

在实际项目开发中,建议从简单原型开始,逐步迭代完善各组件。我们团队的标准实践是每两周进行一次架构评审,确保各技术组件的演进保持同步。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进