JJput
JJput
Published on 2026-07-27 / 2 Visits
0
0

Agent 如何真正完成任务:从模型、MCP 到 Skill

模型负责推理,MCP 负责连接能力,Skill 负责加载方法,执行轨迹负责让整个系统持续变好。

最近我连续和团队聊了几次 Agent 工程。从 Agent 为什么能写代码,到 MCP 到底解决了什么问题,再到 Skill 为什么会成为新的上下文组织方式,讨论里出现了很多概念,也出现了很多容易混在一起的说法。

但把这些名词都拿掉以后,最值得追问的其实是一个非常朴素的问题:

大模型本质上只是接收信息、生成文字,它凭什么能够读取文件、查询数据库、操作浏览器,甚至替我们生成一份业务报告?

这篇文章想把这条链路完整讲清楚。

我同时做了一份配套交互演示。文章是主体,网页只是把其中的关键关系做成了 20 页可交互的视觉说明。阅读过程中遇到抽象概念时,可以打开相应页面对照查看,但不打开网页也不影响阅读全文。


先把“大模型”和“Agent”分开

理解 Agent 的第一步,是不要把它和大模型混为一谈。

大模型本身可以被理解成一个刚毕业的全科研究生:知识面广,能够理解语言、拆解问题、推理和生成内容。但是这个人刚来到公司时,没有账号、没有电脑权限、不知道项目代码在哪里,也不了解公司的业务流程。

它很聪明,但它还没有工作环境。

Agent 工程做的事情,就是在模型外面搭建一套工作台:

  • 给它可以使用的工具;
  • 告诉它每个工具的用途和参数;
  • 把工具执行结果重新交给它;
  • 为高风险操作设置边界;
  • 在需要时加载当前业务的知识和流程;
  • 记录整个过程,方便发现和修正问题。

因此,大模型和 Agent 可以看成两个层次:

大模型:理解、推理、判断、生成
Agent:工具、权限、状态、反馈、规则、上下文

模型决定能力上限,工程决定它能不能稳定到达这个上限。

同一个模型,放在不同的 Agent 环境里,最终效果可能相差很大。工具定义不清楚、上下文塞得太满、错误信息无法行动,都会让一个原本很强的模型表现得像在乱试。

配套图示:模型能力与 Agent 工程


Agent 的核心不是“一次回答”,而是一个闭环

普通聊天更像一次问答:用户提出问题,模型生成答案。

Agent 则需要反复经历一个循环:

理解目标
  ↓
选择工具
  ↓
生成结构化调用
  ↓
宿主程序执行工具
  ↓
把成功结果或错误返回模型
  ↓
模型修正、继续调用或完成任务

例如,我们给 Agent 一个专利检索工具,然后问它:“帮我查一下锐捷网络有哪些专利。”

模型可能先生成这样的调用意图:

{
  "company_name": "锐捷网络",
  "page_index": 1,
  "page_size": 100
}

真正请求专利系统的并不是模型,而是 Agent 外层的宿主程序。工具执行以后,可能返回 284 条记录、当前页数据和下一页信息,也可能返回“缺少必填参数”之类的错误。

这些结果会再次进入模型的上下文。模型再判断:

  • 是否需要继续翻页;
  • 是否应该按年份缩小范围;
  • 是否需要询问用户具体目标;
  • 是否已经具备生成汇总或报告的条件。

这就是 Agent 能够“做事”的关键:模型不只是输出最终答案,它还在持续观察环境反馈,并决定下一步。

所谓智能体,不只是智能,而是智能加上行动和反馈闭环

配套图示:Agent 的工具调用闭环


模型没有直接“按按钮”,它输出的是结构化意图

我们经常说模型“调用了工具”,这个说法容易让人误以为模型真的在电脑中点击了某个按钮。

实际上,模型看到的是一份工具定义。例如:

{
  "name": "search_patents",
  "description": "按企业名称与年份检索专利",
  "inputSchema": {
    "company_name": "string",
    "year": "number?",
    "page_index": "number",
    "page_size": "number"
  }
}

模型根据工具定义和当前任务,生成一个结构化的 tool_call。外层程序识别这个调用以后,才会真正执行 HTTP 请求、数据库查询、文件读取或命令行操作。

所以工具定义并不是一份给开发者看的普通接口文档,它其实是模型的操作界面。

人使用一个设计糟糕的软件会迷路,模型面对一个含糊的工具定义也会迷路。

工具叫什么、描述是否准确、参数是否容易混淆、错误能不能指导下一步,这些细节都会直接影响 Agent 的准确率。


MCP 解决的是“怎样连接”,不是“怎样完成业务”

在没有统一协议时,每为模型接入一种外部能力,都要重新定义一套工具说明、参数格式和执行方式。

今天接天气接口,写一套;明天接数据库,再写一套;后天接文档系统,还要重新适配。不同团队提供的工具也很难直接复用。

MCP 的价值,是让这些外部能力以相对一致的方式被发现、描述和调用。

Agent
  ↕
MCP 提供的标准化连接层
  ↕
数据库 / 浏览器 / 文档 / 内部系统 / 远程 API

从 Agent 的角度看,它不需要知道一个专利工具内部使用 REST API、浏览器自动化还是本地脚本。它只需要知道:

  • 这个工具能做什么;
  • 什么时候应该使用;
  • 需要传入哪些参数;
  • 会返回怎样的结果。

因此,MCP 不是让模型变得更聪明,而是让模型能够以一致的方式连接外部世界。

它解决的是“我能访问什么、我怎样调用”,而不是“这个业务应该按照什么方法完成”。后一个问题会在 Skill 部分出现。

配套图示:MCP 是 Agent 与外部能力之间的桥梁


工具工程的质量,往往藏在参数名里

协议统一,并不意味着工具自然就好用。

假设一个分页接口提供两个参数:

page
size

这里马上会产生很多问题:

  • page 从 0 还是从 1 开始?
  • size 是总数量还是每页数量?
  • 有没有最大值?
  • 不填时使用什么默认值?

如果接口本身没有说明,模型只能猜。猜错以后再根据错误重试,不仅增加失败率,也会持续消耗上下文。

更清楚的定义可能是:

page_index:从 1 开始的页码
page_size:每页返回数量,范围为 1–100
company_name:企业工商全称

错误信息同样重要。

“请求失败”对 Agent 没有行动价值;“缺少 company_name”或者“page_size 必须处于 1–100”则能让模型立即修正。

这不是在限制模型,而是在规范输入输出,减少不必要的歧义。

很多时候,Agent 准确率的提升并不来自更长的提示词,而是来自更清楚的接口、更稳定的返回结构和更容易行动的错误信息。


好规则不是想出来的,而是从执行轨迹里长出来的

成熟 Agent 的系统规则里,经常能看到一些很细的要求:

  • 搜索文件时优先使用专用搜索工具;
  • 读取文件前先检查文件大小;
  • 创建文件前确认目标路径和已有内容;
  • Git、删除和移动等操作需要额外边界;
  • 不要把大量无关输出直接塞进上下文。

这些规则不应该来自开发者的想象,而应该来自真实的执行轨迹。

一个更可靠的迭代过程是:

观察失败
  → 定位原因
  → 增加最小规则
  → 再次验证
  → 回归测试

例如,命令行当然能够读取文件。但如果模型习惯性地使用命令把一个大型文件完整输出,结果可能是上下文瞬间被占满。于是工程上会增加一个专用读取工具:先判断大小和类型,再按行读取、提取结构或摘要。

这条规则不是因为“命令行不能读文件”,而是因为真实实验表明,专用工具能够带来更稳定的体验。

规则的价值来自它解决过具体失败,而不是因为规则数量很多。


当工具越来越多,真正的瓶颈会变成上下文

用户在聊天框里只输入了一句话,不代表模型这一轮只看见了这一句话。

模型实际接收到的上下文可能包括:

  • 系统规则;
  • 所有工具的名称、描述和参数;
  • 已经发生的历史对话;
  • 读取的文件内容;
  • 数据库或 API 返回结果;
  • 当前任务需要的专业知识。

这些内容共同消耗上下文窗口。

如果让工具原样返回一个 1.8 MB 的文本文件或者大型 JSON,即使没有直接超过模型上限,大量无关信息也会稀释模型对当前任务的注意力。

因此,好的工具不会简单地“把所有数据交给模型”,而会先做一层工程处理:

  • 检查文件大小与类型;
  • 只读取相关行或片段;
  • 对 JSON 提取结构;
  • 对长内容分块;
  • 必要时先摘要,再让主模型继续判断。

上下文有限,真正稀缺的不是信息本身,而是与当前决策有关的信息

这也解释了为什么最近大家越来越多地讨论“上下文工程”,而不只是“提示词工程”。

提示词工程关注一句话怎样写;上下文工程关注整个任务中,什么信息应该在什么时间进入模型。

配套图示:上下文成本


Skill:不是再加一个工具,而是让 Agent 学会一类工作

假设我们已经通过 MCP 接入了专利检索系统。

Agent 现在可以查询企业、年份和专利列表,但这并不代表它已经会写专利查新报告。

“能拿到数据”和“知道怎样完成业务”是两个不同问题。

一份专业报告可能还要求 Agent 理解:

  • 应该先确认哪些用户条件;
  • 怎样设计检索策略;
  • 如何对结果去重;
  • 怎样判断相似性;
  • 什么时候需要公开网络补充证据;
  • 报告应该采用什么结构;
  • 输出前需要做哪些校验。

这些内容不是某个 API 的参数,而是业务知识、流程和经验。

Skill 的作用,就是把“会做这件事”的方法组织成一个可以复用、按需加载的模块。

它可以包含三类内容:

专业知识:术语、规则、判断标准
业务流程:先做什么、何时询问、失败怎样处理
资源与脚本:模板、示例、校验器、确定性辅助程序

Skill 不只是告诉模型“知道什么”,还要告诉它:在什么条件下,按照什么顺序,把事情做到什么标准。


Skill 的目录为什么要分层

一个典型 Skill 可以采用这样的结构:

patent-novelty-report/
├─ SKILL.md
├─ references/
│  ├─ report-format.md
│  └─ search-strategy.md
├─ scripts/
│  └─ validate_report.py
└─ assets/
   └─ report-template.docx

其中,SKILL.md 是入口。文件前部通常包含名称和描述,用来帮助 Agent 判断当前任务是否应该使用这个 Skill;正文则保留核心流程和资源路由。

更详细的报告规范、检索策略和领域知识放在 references 中。稳定、重复、结果确定的步骤可以放在 scripts 中。模板等非文本资源则放在 assets 中。

这里的关键并不是目录看起来整齐,而是它支持渐进式加载。

第一层:name + description
        用于发现和选择 Skill

第二层:SKILL.md
        命中任务后加载核心方法

第三层:references / scripts / assets
        只有实际需要时才继续读取或执行

如果当前任务只需要了解检索流程,就不必加载完整报告模板;如果没有进入校验阶段,也不必执行验证脚本。

这比把所有专业知识永久放在系统提示中更节省,也能减少不同领域内容之间的相互干扰。

配套图示:Skill 的渐进式加载


文档需要理解,脚本通常只需要执行

Skill 中的参考文档和脚本,还有一个非常重要的区别。

报告结构、行业规则和判断标准,需要模型阅读、理解并结合场景进行推理。这类内容适合放在 Markdown 文档中。

格式校验、批量转换、固定计算等步骤,结果通常是确定的,更适合写成脚本。

模型不一定需要阅读脚本的全部源码。它只需要知道:

  • 什么时候执行;
  • 输入参数是什么;
  • 输出结果代表什么;
  • 失败以后应该怎样处理。

这样既能减少上下文消耗,也能避免模型每次临时重写一段代码,导致行为不稳定。

一个简单的判断方式是:

需要理解和权衡的内容交给模型;需要稳定、重复执行的内容交给脚本。


MCP 与 Skill 的边界

MCP 和 Skill 有时会让人觉得很接近,因为两者都可能向 Agent 提供新的能力,Skill 中也可能带有可执行脚本。

但从职责上看,两者的边界仍然比较清楚:

对比维度 MCP Skill
回答的问题 我能访问什么? 这件事应该怎样做?
主要内容 工具、参数、资源、返回值 知识、流程、模板、判断标准
典型例子 查询专利、读取数据库、写入文档 完成一份专利查新报告
关注重点 连接和执行 专业化和上下文组织

只有 MCP,没有 Skill,Agent 可能拥有很多工具,却不知道业务的正确方法。

只有 Skill,没有 MCP,Agent 可能理解流程,却拿不到数据,也无法完成外部操作。

两者组合,才会形成一套完整的业务能力。

配套图示:MCP 与 Skill 的分工


把两者组合成一套专利查新报告 Agent

把前面的概念放到同一个业务场景中,可以得到这样一套架构:

用户需求
主题 / 公司 / 时间范围 / 输出要求
        ↓
专利查新 Skill
澄清条件 → 制定检索式 → 证据去重 → 相似性对比 → 生成报告
        ↓
多个 MCP 工具
内部专利库 / 公开检索 / 文档写入
        ↓
最终交付
可追溯证据 + 结构化报告 + 校验结果

用户首先提供主题、公司、时间范围和交付要求。如果信息不足,Skill 的第一步应该主动澄清,而不是让模型自行猜测。

接着,Skill 按业务顺序编排多个 MCP 工具:从内部系统获得专利数据,通过公开检索补充证据,把结果去重并进行相似性对比,最后调用文档能力生成报告。

最终交付不能只是一份“看起来像报告”的文件。它还应该包含能够回溯的证据、关键判断依据和校验结果。

只有这样,Agent 才能从一个演示效果不错的聊天机器人,变成可以复核的业务工具。

配套图示:专利查新报告 Agent 架构


真正落地时,我会按照这个顺序推进

如果要从零开始构建一个业务 Agent,我更倾向于按照下面的顺序:

1. 人先把业务做清楚

收集真实输入、真实报告和真实失败案例,明确什么叫合格。自己都说不清楚的流程,无法指望模型自动替我们定义正确标准。

2. 梳理数据源与动作

确认系统接口、认证方式、字段、分页、错误结构和权限边界。区分哪些只是查询,哪些会修改真实数据。

3. 把杂乱 API 封装成清晰工具

工具名称应该容易判断,参数含义明确,返回值支持下一步决策,错误信息可以直接指导修正。

4. 把专业方法沉淀为 Skill

只在入口文件保留核心流程,把详细知识、模板和确定性脚本按职责拆开。不要把所有内容塞进同一个巨大的提示文件。

5. 观察真实执行轨迹

逐步检查模型选择了什么工具、传了什么参数、收到了什么结果、为什么继续或者停止。

6. 只为真实失败补规则

找到可以稳定复现的问题,再增加最小约束并做回归测试。不要在没有证据时无限增加系统规则。

这套过程的重点不是“一次把提示词写完”,而是建立一个能够持续观察和改进的工程循环。


最后,记住这条链路就够了

回到文章开头的问题:一个只会生成文字的模型,为什么能够真正完成任务?

答案并不是某一个神奇功能,而是一整套协作关系:

MODEL:理解目标并推理下一步
MCP:连接外部数据和操作能力
SKILL:按需加载专业知识与工作流
TRACE:记录过程,让失败可见、可验证、可修正

好的 Agent 不是提示词更长,也不是工具越多越好。

它应该具备清晰的能力边界、规范的输入输出、克制的上下文和完整的反馈闭环。每一步发生了什么都能够被看见,每一个失败都能够转化成下一轮工程改进。

这才是 Agent 从“看起来很聪明”,走向“真正能够稳定完成工作”的过程。


配套交互演示怎么查看

文章配套网页:

https://www.jjput.com/fjfhyjy-ai/agent-mcp-skill-course/index.html

网页将本文的核心关系整理成 20 页交互式视觉内容,可以作为阅读辅助、转发预览或现场分享材料。

基本操作

操作 作用
/ / Space 前后翻页
O 打开 20 页总览并快速跳转
F 全屏查看
T 在白色工程图、深蓝蓝图、深色开发者等主题间切换
Home / End 跳到第一页或最后一页

用于现场分享

如果需要把这篇文章改成现场分享,可以在网页中按 S 打开演讲者视图。原窗口继续显示给观众,新窗口会显示当前页、下一页、讲稿和计时器;两个窗口可以同步翻页。

如果浏览器拦截弹窗,允许该网站打开弹出式窗口后刷新即可。只有一个屏幕时,可以按 N 临时查看当前页的补充说明。

重点页面直达

网页是文章的视觉补充,文章本身则保留完整的解释、推导与实践思路。两者可以独立阅读,也可以配合使用。



Comment