学习 Agent 开发时,最容易混淆的几个词就是 Function、Tool、Skill、Workflow 和 Agent。它们都和“让模型做事”有关,但抽象层次不同。
如果这些概念没分清,后面学习工具调用、多 Agent、MCP、RAG Agent 时,就容易把所有东西都叫成“工具”。这篇文章先把它们拆开。
一句话区分
可以先用一句话理解:
| 概念 | 侧重点 | 典型例子 |
|---|---|---|
| Function | 代码层的普通函数 | search_api(query) |
| Tool | 暴露给模型调用的接口 | web_search工具 |
| Skill | 面向任务封装的能力 | 搜索资料并返回摘要和来源 |
| Workflow | 固定步骤流程 | 搜索 → 阅读 → 总结 |
| Agent | 动态决策执行者 | 判断是否搜索、查库、读文件 |
更简单地说:Function 更偏代码,Tool 更偏调用,Skill 更偏能力,Workflow 更偏流程,Agent 更偏决策。
Function:代码里的普通函数
Function 是程序员写的普通函数,只要代码能调用就行。它不一定有自然语言描述,也不一定有参数 schema,更不一定适合直接交给大模型调用。
defsearch_api(query:str):...这个函数能执行搜索,但模型并不知道它什么时候该用、参数怎么填、返回结果如何理解。
Tool:模型可调用的接口
Tool 是把函数或 API 暴露给模型调用后的形式。它通常包含名称、描述和参数结构。
{"name":"web_search","description":"Search the web for recent information.","parameters":{"query":"string"}}Tool 的重点是“模型能不能调用”。它解决的是调用接口问题。
Skill:面向任务的能力封装
Skill 比 Tool 更强调任务语义和工程边界。一个搜索 Tool 可能只是search(query),而搜索 Skill 应该说明:什么时候搜索、搜什么、返回几条、是否需要来源、没有结果怎么办。
所以 Skill 不只是函数包装,而是包含任务边界、输入输出、异常处理、限制条件和评估指标的能力模块。
Workflow:多个步骤的固定流程
Workflow 是预先定义好的步骤。比如:
上传文件 → 解析文件 → 提取正文 → 生成摘要 → 输出 MarkdownWorkflow 的优势是稳定、可控、可测试;缺点是灵活性弱。标准化任务更适合 Workflow,而不是完全交给 Agent 自由发挥。
Agent:动态选择能力的决策层
Agent 负责理解用户意图,并根据当前任务选择合适的 Tool、Skill 或 Workflow。
例如用户问“帮我分析这份表格并给建议”,Agent 可能会判断需要读取文件、解析表格、计算指标、生成建议。具体调用哪些 Skills,不是固定写死的,而是根据任务动态决定。
实际系统里的组合关系
真实系统通常不是二选一,而是组合使用:
用户请求 ↓ Agent 判断任务 ↓ Skill Router 筛选候选 Skills ↓ Skill 调用底层 Tools / Functions ↓ 必要时执行 Workflow也就是说,Function、Tool、Skill、Workflow、Agent 可以分层协作,而不是互相替代。
面试中怎么回答
可以这样回答:
Function 是代码层普通函数;Tool 是暴露给模型调用的接口;Skill 是面向任务封装的能力单元,会包含名称、描述、输入输出、异常处理和调用边界;Workflow 是多个步骤组成的固定流程;Agent 是根据用户任务动态选择和编排这些能力的决策层。
简单说,Tool 解决“模型能调用什么”,Skill 解决“这个能力怎么稳定完成任务”,Workflow 解决“固定流程怎么执行”,Agent 解决“当前任务下一步该做什么”。
小结
这篇文章的核心是:Skill、Tool、Function、Workflow、Agent 有什么区别?不是一个孤立概念,而是 Agent 工程化中必须讲清楚、设计清楚、验证清楚的一部分。
下一篇继续讨论:一个 Skill 应该包含哪些基本部分?。