LangChain Agent Skills 架构实战:从 Tool 到 LangGraph 的能力封装
最近在处理 AI Agent 项目的能力扩展时,我遇到了一个很典型的架构问题:每给 Agent 增加一个子任务能力,都要重新写工具函数、调提示词、编排执行链路,代码越堆越厚,能力却越来越难维护。后来我把目光转向了 LangChain 新版本中热度很高的 Agent Skills 架构,才真正把这一团乱麻理清楚。
这篇文章会从一个完整的架构视角,拆解 Agent Skills 到底解决了什么问题,和 Tool、Agent、LangGraph 之间是什么关系,然后用 12 个可直接落地的案例,带你从“会写 Skill”进阶到“会设计 Agent 能力体系”。无论你是刚接触 langchain 的入门开发者,还是已经在做复杂 Agent 工程的架构师,这篇文章都值得收藏慢慢看。
1. 背景与核心概念:为什么 Agent 需要 Skills 架构
1.1 Agent 开发中的能力复用问题
先回忆一下传统 Agent 开发流程。大多数 Agent 应用的核心结构是:用户消息进入 Prompt,Agent 通过 ReAct 或 Function Calling 循环判断调用哪个 Tool,工具返回结果后再交给模型继续推理。
这套模式在 Demo 阶段很好用,但项目一复杂就会出现几个问题:
- 工具粒度不好控制。有的函数写得特别细,比如“读取文件”“解析 Markdown 标题”“拼接字符串”,Agent 需要多次调用才能完成一个任务,既费 Token 又容易中断。
- 提示词和工具逻辑严重耦合。同一个能力,在 A 场景和 B 场景可能需要不同的调用方式,但工具函数无法携带“如何使用、何时使用”的上下文。
- 能力难以沉淀。团队里每个人都在写自己的工具集,缺少统一的组织方式,换一个项目几乎全部重写。
这些问题本质上不是某个函数写错了,而是 Agent 体系里缺少一层“任务级能力封装”。Agent Skills 正是在这个背景下出现的。
1.2 什么是 Agent Skills
用一句通俗的话解释:Agent Skills 是“带说明书的能力模块”。
它把完成某个任务所需的知识、提示词、代码、工具、验证逻辑打包成一个相对独立的单元。Agent 主流程不直接关心技能内部的实现细节,只需要根据任务描述判断“该调用哪个 Skill”,然后技能模块自己负责把任务执行完,再返回结构化结果。
从 LangChain 新版本的实践来看,一个 Skill 通常包含:
- 技能元信息:名称、描述、适用场景、输入输出约定。
- 技能实现:一个或多个 Python 函数、Runnable 对象,甚至是一整条工具链。
- 技能说明:告诉 Agent 什么情况下用这个技能、怎么用、注意什么边界。
- 可选配置:模型名称、温度、依赖库等独立配置。
和普通 Tool 相比,Agent Skills 更像一个“微型 Agent”:它不仅可以暴露单个函数,还可以封装多步骤流程、内部状态和领域知识。而普通 Tool 更接近“单个操作”。
1.3 Agent Skills 与传统 Agent、Tool、LangGraph 的关系
这一节几乎是我每次讲 Agent 架构时都会被问到的问题,因为很多人分不清这几个概念。
从定位上看:
- Tool 是最小操作单元,类似“手”。它回答“能做什么”。
- Agent 是决策和执行循环,类似“大脑”。它回答“接下来做什么”。
- Agent Skills 是任务级能力包,类似“肌肉记忆”。它介于两者之间,既包含 Tool,又包含完成一个任务所需的完整流程和知识。
- LangGraph 是低层编排框架,类似“神经系统”。它通过有状态的图结构控制节点流转,适合构建复杂、可控、可恢复的 Agent 工作流。
所以它们不是对立关系,而是不同抽象层。一个基于 LangGraph 构建的 Agent,可以在某个节点内调用 Agent Skills;一个 Agent Skills 内部也可以使用 Tool。LangChain 和 LangGraph 的区别,也经常被讨论:LangChain 偏高层应用框架,LangGraph 偏底层流程编排,前者更方便快速开发,后者更灵活可控,而 Agent Skills 可以在两者之间起到很好的能力封装作用。
2. 环境准备与版本说明
2.1 运行环境
本文示例以 Python 3.10+ 环境为基础,建议使用虚拟环境隔离依赖。操作系统不限,Windows / macOS / Linux 均可。
需要说明的是,LangChain 相关库的更新速度非常快,不同小版本之间的 API 可能有细微差异。建议先创建虚拟环境,再按下面的命令安装依赖,避免污染全局环境。
2.2 安装依赖
核心依赖主要是 langchain 和模型接入包。示例中使用 OpenAI 风格接口,也可以用本地模型服务替代,只需要修改模型地址和 API Key。
如果你的项目还需要使用 LangGraph 编排流程,可以额外安装:
这里不写死具体版本号,因为依赖更新较快。安装完毕后,可以用下面的命令确认版本:
如果你的版本低于某个较新的小版本,部分 Agent Skills 相关接口可能不可用,建议升级到当前最新稳定版。
2.3 示例项目结构
为了方便后续 12 个案例复用,建议项目采用下面的目录结构:
其中 skills/ 目录用来存放每个技能包,agents/ 目录用来组装最终 Agent,tests/ 目录用来验证技能可用性,main.py 是入口脚本。这个结构在后文会反复用到。
3. Agent Skills 核心架构拆解
3.1 Skill 的模块化结构
一个 Skill 的核心不是一段函数代码,而是一套“可发现、可描述、可执行”的模块。结构上通常包含三个层次:
第一层是技能描述层,用于给 Agent 主循环识别。这一层相当于技能的“简历”,内容要写清楚技能名称、擅长任务、输入输出要求、注意事项,甚至给出示例调用方式。描述写得好不好,直接决定 Agent 在复杂任务中能不能准确选中正确技能。
第二层是技能执行层,包含完成该任务的实际逻辑。它可以是一个函数、一个 Runnable 对象,也可以封装多个子工具,甚至是调用另一个小型 Agent。
第三层是约束配置层,包括技能运行所需的依赖、超时时间、安全限制、是否允许写文件、是否允许网络请求等。这一层在独立部署或沙箱运行场景中非常关键。
下面是一个最小技能模块的示意,重点不是为了直接运行,而是展示结构: