这里把首页的控制半径拆成可通关章节:Tool → ReAct → Loop → MCP → Multi-Agent → Skill → A2A/Card → 前沿雷达。
一页讲透现代 AI Agent 的
完整拼图
Tool(工具调用)、ReAct、Agent Loop 与 Loop Engineering、MCP 与 MCP Server——这五块拼图拼在一起,就是你每天在用的 Cursor、Claude Code、ChatGPT Agent 的全部骨架。学完可回到首页,用 Harness / Loop / Graph Demo 亲手验证。
🗺 先看学习地图:这些概念是怎么一步步长出来的
🤔 出发点:再聪明的大脑,也只是个"文字接龙机"
大语言模型(LLM)的本质是:读入一段文字(上下文),预测下一段文字(输出)。它没有时钟、没有网络、没有文件系统、没有记忆——它连"今天是几号"都不知道。它是一个被关在玻璃房里的天才:博览群书、推理惊人,但看不到外面、也摸不着外面。
下面这个对比实验,直观感受一下"裸模型"和"带工具的模型"的差距(点击问题按钮,两边同时开跑):
三个问题,三种典型的"玻璃房困境":拿不到实时信息(时间)、算不准确定性计算(大数乘法会"一本正经地胡说")、够不着你的环境(本地文件)。而右边的模型并没有变聪明——它只是获得了"申请让别人替它做事"的能力。这就是接下来五章的全部主线。
🧩 五块拼图,各管什么
主线之外还有两站加餐:第 6 章 · Agent 主流架构与 Multi-Agent(单个循环如何组合成系统:Workflow vs Agent、六种架构图鉴、多智能体的甜区与陷阱),以及 第 7 章 · Skill 分层能力手册(把可复用流程做成渐进披露的能力包),再加 第 8 章 · 2026 前沿概念雷达(J-Space、世界模型、A2A、Skills、Vibe Coding……把热词放回正确位置)。
🔧 Tool:让模型学会"开单子"
Tool use / Function calling · 现代 Agent 的最小机制单元
⚙️ 机制拆解:一次工具调用的完整往返
以"上海明天天气怎么样?"为例,一次完整往返共 5 步。点击下方步骤逐帧看,注意每一步"谁在动":
{
"model": "gpt-5.2",
"messages": [
{ "role": "user", "content": "上海明天天气怎么样?" }
],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询指定城市指定日期的天气预报",
"parameters": {
"type": "object",
"properties": {
"city": { "type": "string", "description": "城市名,如:上海" },
"date": { "type": "string", "description": "日期 YYYY-MM-DD" }
},
"required": ["city"]
}
}
}]
}{
"role": "assistant",
"content": null,
"tool_calls": [{
"id": "call_a1b2c3",
"type": "function",
"function": {
"name": "get_weather",
"arguments": "{\"city\": \"上海\", \"date\": \"2026-07-09\"}"
}
}]
}# 模型只是"申请",执行权在你手里
call = response.tool_calls[0]
args = json.loads(call.function.arguments)
if call.function.name == "get_weather":
result = weather_api.forecast(args["city"], args.get("date"))
# result = {"temp": "26~31°C", "condition": "多云转小雨", "rain": "62%"}{
"role": "tool",
"tool_call_id": "call_a1b2c3",
"content": "{\"temp\": \"26~31°C\", \"condition\": \"多云转小雨\", \"rain\": \"62%\"}"
}{
"role": "assistant",
"content": "上海明天多云转小雨,气温 26~31°C,降水概率 62%,出门建议带伞 ☂️"
}🎯 四个关键认知(面试/实战都会考)
🎮 小游戏:你来当一次模型
用户说:"下周三我要去北京出差,帮我看下那天的天气,顺便告诉我现在几点。" 你手里的工具菜单是 get_weather(city, date) 和 get_time(timezone)。作为模型,这一轮你应该输出什么?
深入一层:OpenAI 与 Anthropic 的工具定义长得不太一样?
各家 API 的字段名略有差异,但骨架完全一致:name + description + JSON Schema 参数。这种"表面不同、内核相同"正是第 4 章 MCP 要解决的问题之一。
{
"type": "function",
"function": {
"name": "get_weather",
"description": "查询城市天气预报",
"parameters": { "type": "object", "properties": { "...": "..." } }
}
}{
"name": "get_weather",
"description": "查询城市天气预报",
"input_schema": { "type": "object", "properties": { "...": "..." } }
}Anthropic 把参数叫 input_schema,模型的调用以 tool_use 内容块出现,结果以 tool_result 塞回 user 消息——形式不同,五步往返一模一样。
"工具越多越强!"——工具太多会稀释注意力、吃掉上下文,模型反而选错。成熟做法:精选少量工具 + 把描述写好,比堆一百个工具有效得多。
- 工具 = name + description + JSON Schema 三件套;描述是隐形提示词。
- 模型只输出结构化意图(tool_calls),执行永远发生在你的运行时。
- 一次往返五步:发菜单 → 开单 → 执行 → 回填 → 作答;结果不够就再开单(→ 循环)。
- 并行 tool_calls 是常态,能显著减少往返次数。
📚 本章延伸
🧠 ReAct:一切 Agent 的思想源头
Reason + Act · 2022 年的一篇论文,定义了此后所有 Agent 的元模式
2022 年 10 月,普林斯顿大学与 Google Brain 的研究者(姚顺雨等)发表论文 《ReAct: Synergizing Reasoning and Acting in Language Models》(ICLR 2023)。当时既没有 function calling,也没有 Agent 产品——但这篇论文回答了一个根本问题:
只做不想(纯 Action):像没头苍蝇,一个动作接一个动作,不复盘、不规划,搜错了方向也不知道调头。
ReAct:开卷考试 + 做笔记。每做一次动作就停下来想想"我拿到了什么、下一步该干嘛",推理指导行动,行动反哺推理。
🎬 亲眼看一遍论文里的真实轨迹
下面是 ReAct 论文 Figure 1 的经典案例(内容译自原文轨迹)。问题故意很绕:"除了 Apple Remote,还有什么设备能控制 Apple Remote 最初设计所服务的那个程序?"——纯 CoT 的模型会自信地答错成 "iPod",看看 ReAct 怎么一步步逼近真相:
📜 那时候没有 function calling,Action 是怎么"调用"的?
全靠提示词约定 + 文本解析。给模型看几个 Thought / Action / Observation 格式的范例(few-shot),模型就会模仿着输出;程序再用正则把 Action: search[...] 抠出来去执行:
PROMPT = """请交替使用 Thought / Action / Observation 解决问题。
可用动作: search[词条], lookup[关键词], finish[答案]
问题: {question}
Thought 1:"""
text = llm(PROMPT) # 模型继续"接龙"
m = re.search(r"Action \d+: (\w+)\[(.+?)\]", text)
action, arg = m.group(1), m.group(2) # 用正则解析出"申请单"
obs = wikipedia_search(arg) # 程序执行,把结果拼回提示词
PROMPT += text + f"\nObservation: {obs}\nThought:" # 循环往复对比一下就能看清进化脉络:ReAct 用脆弱的文本约定实现的事,Function Calling 用训练进模型的结构化输出把它变成了稳定机制。格式变了,"想 → 做 → 看"的骨架一点没变。
| 2022 · ReAct 时代 | 现在 · 原生工具调用时代 | |
|---|---|---|
| 模型如何表达"我要做事" | 输出 Action: search[Apple Remote] 文本 | 输出结构化 tool_calls JSON |
| 如何保证格式 | few-shot 示范 + 祈祷,正则解析易碎 | 后训练强化 + Schema 约束,稳定可靠 |
| "想"的部分 | 显式写出 Thought 文本 | 推理模型的 thinking / 交错思考 |
| 不变的内核 | 推理与行动交替,用外部观察修正方向 | |
- ReAct = Thought → Action → Observation 循环,推理与行动互相成就。
- 纯推理会幻觉(闭卷胡说),纯行动会瞎撞(没头苍蝇),结合才是 Agent。
- 2022 年靠提示词约定 + 文本解析;今天靠原生 tool_calls——思想没变,机制升级。
📚 本章延伸
🔁 Agent Loop 与 Loop Engineering
把工具往返装进 while 循环,Agent 就诞生了;让循环稳定产出,是一门新工程学
Simon Willison 给过一个被业界广泛引用的极简定义:"LLM Agent 就是在循环里运行工具以达成目标的东西"(An LLM agent runs tools in a loop to achieve a goal)。先看这个循环本体——它可能是当代软件业"含金量最高的 15 行代码":
def agent(task: str) -> str:
context = [system_prompt, user(task)] # 上下文从任务开始
while True: # ← Agent 的全部秘密
reply = llm(context, tools=TOOLS) # 1. 模型思考
context.append(reply)
if not reply.tool_calls: # 2. 不再开单 = 任务完成
return reply.text # ← 自然停止条件
for call in reply.tool_calls: # 3. 执行每张"申请单"
result = execute(call) # (读文件/跑命令/查库…)
context.append(tool_result(call.id, result)) # 4. 结果写回
# 回到循环顶部,模型带着新观察继续想 —— 这就是 ReAct 的现代形态对照上一章:Thought 就是 llm() 的思考,Action 就是 tool_calls,Observation 就是 tool_result。ReAct 是思想,Function Calling 是机制,这个 while 循环是运行时——三章在这里合流了。
🎬 看循环跑一个真实任务
点击"运行",看 Agent 如何用 4 轮循环修好一个失败的测试。注意右侧三件事:轮数在涨、上下文在膨胀、直到停止条件触发:
刚才那次运行里藏着三个值得咀嚼的细节:第 2 轮的修改在第 3 轮复测时仍有用例失败(漏了一个边界条件),但失败信息作为 Observation 喂回去后,第 4 轮就修对了——失败不可怕,失败的信息回得去才是关键;停止不是谁喊停,而是模型不再开单;上下文一直在涨,真实任务里它会涨到需要"压缩"的程度。
🏗 Loop Engineering:从"盯着循环"到"设计循环"
循环本体 15 行,但让它稳定地产出正确结果需要一整套工程。2026 年 6 月前后,这套实践被 Google 工程师 Addy Osmani 等人正式命名为 Loop Engineering(循环工程)。它的来历很能说明问题——Claude Code 负责人 Boris Cherny 说:"我已经不直接提示模型了,我的工作是写循环(My job is to write loops)";Peter Steinberger 说得更直白:"你不该再一句句提示 Agent,而该去设计提示 Agent 的循环"。
先分清两层"循环",很多文章混着说:
| 层次 | 是什么 | 谁来做 |
|---|---|---|
| 内循环 · Agent Loop | 上面那个 while:思考 → 调工具 → 观察,直到完成一个任务 | Cursor / Claude Code 等产品已内置,你主要是用好它 |
| 外循环 · Loop Engineering | 包住内循环的系统:找活儿 → 派给 Agent → 用验证器检查 → 记录状态 → 决定下一步,无人值守地转 | 这是你的新工作:定义目标、验证器、预算和护栏 |
一层套一层的完整谱系(每层包住前一层,而不是取代):
写好一句话
管好模型看到的一切
建好 Agent 的运行环境
设计驱动一切的循环
🧰 设计一个好循环的六个抓手
"提示词决定一切"——2026 年的共识是瓶颈已经转移:工具质量、验证器、停止规则和上下文卫生,比措辞更影响成败。
深入一层:这些真实产品各自怎么"工程"这个循环?
- Claude Code:上下文快满时自动
compact(把历史压成摘要);子代理(subagent)隔离大任务;hooks 在循环关键节点插入确定性检查。 - Cursor:危险命令进审批队列(人工门禁);后台 Agent 跑长任务;规则文件(AGENTS.md / rules)持久注入项目约定——这正是"仓库记得"的实践。
- Codex CLI:沙箱内执行 + 网络默认隔离,把"失败得便宜"做到系统层。
- 你正在读的这个页面:就是 Cursor 的 agent loop 产物——检索资料(工具)→ 写文件(工具)→ 浏览器验证(工具)→ 修正,循环直到通过。是的,这很元(meta)。
- Agent = 模型 + 工具 + while 循环;停止条件是"模型不再开单"。
- 内循环(产品内置的 agent loop)与外循环(你设计的工作系统)是两层。
- Loop Engineering 六抓手:可验证目标、验证器、预算护栏、上下文管理、外部状态、人工门禁。
- 失败信息喂回循环,模型能自我纠错——错误处理是设计出来的,不是运气。
📚 本章延伸
🔌 MCP:AI 应用的 USB-C 接口
Model Context Protocol · 让"能力"以标准方式插进任何 Agent
🤯 它解决什么痛:M × N 的集成爆炸
没有标准时:3 个 AI 应用要接 4 个系统(GitHub、数据库、Slack、文件系统),就得写 3 × 4 = 12 套各不相同的胶水代码。有了统一协议:应用实现一次客户端、系统实现一次服务端,3 + 4 = 7 份标准实现,互相即插即用。点开关直观感受一下:
2024 年 11 月 25 日 Anthropic 开源了 MCP;不到一年,OpenAI、Google、Microsoft 相继采纳;2025 年 12 月它被捐给 Linux Foundation 旗下新成立的 Agentic AI Foundation,正式成为中立的行业标准——生态里已有超过 1 万个公开 MCP Server。"AI 应用的 USB-C"从比喻变成了现实。
🏛 三个角色:Host / Client / Server
点击图中任何一个部件,看它的职责说明:
Streamable HTTP ⇄ 1 Client
: 1 Server
🧱 Server 提供的三种原语:谁做主是精髓
MCP 不只是"工具的搬运工"。Server 能暴露三类东西,官方设计的精髓在于每类东西由谁做主:
| 原语 | 是什么 | 谁决定用它 | 类比 |
|---|---|---|---|
| Tools 工具 | 可执行的动作:查数据库、发消息、跑命令 | 模型做主(模型看描述自己决定调) | POST 接口 |
| Resources 资源 | 只读的上下文数据:文件内容、表结构、日志 | 应用做主(宿主决定注入哪些) | GET 接口 |
| Prompts 提示模板 | 预制的高质量提示词/工作流 | 用户做主(如斜杠命令手动触发) | 快捷指令 |
反向也有原语:Server 可以向 Client 请求 LLM 补全(Sampling)、向用户追问输入(Elicitation)。了解即可——注意 2026-07-28 新版规范已将 Sampling、Roots、Logging 标记为废弃(deprecated)。
📡 底层长什么样:一次完整的连接与调用
MCP 底层是 JSON-RPC 2.0 消息,跑在两种标准传输上:stdio(本地子进程,走标准输入输出)或 Streamable HTTP(远程服务)。点击播放,看 Cursor 连接一个天气 Server 的完整过程:
{"jsonrpc":"2.0","id":1,"method":"initialize","params":{
"protocolVersion":"2025-11-25",
"clientInfo":{"name":"cursor","version":"2.x"},
"capabilities":{}}}{"jsonrpc":"2.0","id":1,"result":{
"protocolVersion":"2025-11-25",
"serverInfo":{"name":"weather-mcp","version":"1.0.0"},
"capabilities":{"tools":{}}}}{"jsonrpc":"2.0","id":2,"method":"tools/list"}{"jsonrpc":"2.0","id":2,"result":{"tools":[{
"name":"get_weather",
"description":"查询指定城市当前天气",
"inputSchema":{"type":"object",
"properties":{"city":{"type":"string"}},
"required":["city"]}}]}}{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{
"name":"get_weather",
"arguments":{"city":"上海"}}}{"jsonrpc":"2.0","id":3,"result":{
"content":[{"type":"text","text":"上海:多云 29°C,湿度 78%"}],
"isError":false}}tools/list 拿到的清单翻译成第 1 章那种工具菜单喂给模型;模型照常输出 tool_calls;宿主发现这张单属于某个 MCP Server,就转发 tools/call。MCP 管的是"工具从哪来、怎么接",不是"模型怎么调"——它是应用层的标准化,Agent Loop 一切照旧。
📅 时间线:从一家之言到行业标准
"MCP 只能给 Claude 用?"——不。它是开放标准,ChatGPT、Gemini、Cursor、VS Code 都支持。
"MCP 就是 RAG?"——不。RAG 是检索策略,MCP 是连接协议;MCP Server 可以提供检索工具,但两者不是一回事。
安全一句话:第三方 Server 的工具描述和返回内容都会进入模型上下文,可能夹带恶意指令(提示注入)——装 Server 要像装浏览器插件一样只用可信来源。
- MCP 把 M×N 集成爆炸变成 M+N 标准实现,是应用层协议(JSON-RPC 2.0)。
- 角色:Host(应用)→ Client(接线员,1:1)→ Server(能力方)。
- 三原语三主人:Tools 模型做主 / Resources 应用做主 / Prompts 用户做主。
- 生命周期:initialize 握手 → tools/list 列菜单 → tools/call 调用;传输走 stdio 或 Streamable HTTP。
- 2025-12 起由 Linux Foundation 旗下 AAIF 中立治理,已是事实标准。
📚 本章延伸
🛠 MCP Server:30 行代码接入所有 Agent
写几个带好注释的函数,SDK 帮你把它们变成协议上的标准插件
👨💻 完整代码:一个天气 Server 的四种打开方式
from mcp.server.fastmcp import FastMCP
# 创建 Server,名字会在宿主的工具列表里展示
mcp = FastMCP("weather")
@mcp.tool()
def get_weather(city: str) -> str:
"""查询指定城市的当前天气。city 为中文城市名,如:上海"""
# 演示用模拟数据;真实场景换成 HTTP 调用气象 API
data = {"北京": "晴 32°C", "上海": "多云 29°C", "深圳": "雷阵雨 27°C"}
return data.get(city, f"未收录城市:{city}")
@mcp.tool()
def get_air_quality(city: str) -> str:
"""查询指定城市的空气质量指数(AQI)"""
data = {"北京": "AQI 87 良", "上海": "AQI 42 优", "深圳": "AQI 35 优"}
return data.get(city, f"未收录城市:{city}")
if __name__ == "__main__":
mcp.run() # 默认 stdio 传输:宿主把它当子进程拉起来注意:函数签名 + 类型注解 + docstring 会被 SDK 自动转成 tools/list 里的 name / description / inputSchema——第 1 章说"描述是隐形提示词",在这里 docstring 就是那个提示词。
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
const server = new McpServer({ name: "weather", version: "1.0.0" });
// 用 zod 声明参数 Schema,SDK 自动转为 JSON Schema
server.registerTool("get_weather",
{
title: "天气查询",
description: "查询指定城市的当前天气",
inputSchema: { city: z.string().describe("中文城市名,如:上海") }
},
async ({ city }) => {
const data: Record<string, string> =
{ "北京": "晴 32°C", "上海": "多云 29°C", "深圳": "雷阵雨 27°C" };
return { content: [{ type: "text", text: data[city] ?? `未收录:${city}` }] };
}
);
await server.connect(new StdioServerTransport());{
"mcpServers": {
"weather": {
"command": "uv",
"args": ["run", "python", "/绝对路径/server.py"]
}
}
}保存后到 Cursor 设置 → MCP 里能看到绿灯与工具列表;之后在对话里问"上海天气如何",Agent 会自己决定调它(Tools 是模型做主的,还记得吗)。
{
"mcpServers": {
"weather": {
"command": "uv",
"args": ["run", "python", "/绝对路径/server.py"]
}
}
}同一份 Server 代码,零修改换个宿主继续用——这就是"写一次,处处插"。
🔬 上手感受:迷你 Inspector
官方提供了可视化调试器 MCP Inspector(npx @modelcontextprotocol/inspector),连上你的 Server 就能手动点工具、看原始消息。下面是一个网页版迷你复刻——连接上面那个天气 Server,亲手发一次 tools/call:
试试选"拉萨"——Server 返回"未收录城市"。注意这不是协议错误(isError 为 false),而是一条对模型友好的业务信息:真实 Agent 拿到它会换个方式继续,而不是崩溃。这正是"错误信息要可行动"的设计。
📐 把工具写好的六条军规
search_orders 好过 orders;get_weather 好过 weather_api_v2_call。模型按名字和描述选工具。uv add "mcp[cli]" 装 SDK → ② 写函数加 @mcp.tool() → ③ uv run mcp dev server.py 用 Inspector 自测 → ④ 写进宿主的 mcp.json。另外:先搜官方 servers 仓库和 Registry,能用现成的绝不自己写——文件系统、GitHub、数据库这些都有高质量现成品。
- SDK 把函数签名 + docstring自动变成协议上的 name / description / inputSchema。
- 调试三板斧:MCP Inspector → 宿主配置 mcp.json → 真实对话验证。
- 工具设计军规:动词命名、描述写"何时用"、参数精简、返回友好、错误可行动、只读优先。
- 一份 Server,多个宿主复用——这就是标准化的复利。
📚 本章延伸
🏗 Agent 主流架构与 Multi-Agent
单个循环是原子,架构决定原子怎么组合成分子——直到组合成一支"智能体军团"
⚖️ 先立地基:Workflow 还是 Agent?
Anthropic 在《Building Effective Agents》里给出了业界沿用至今的经典辨析——两者都是"agentic system",但由谁决定下一步完全不同:
| Workflow 工作流 | Agent 智能体 | |
|---|---|---|
| 下一步由谁定 | 代码预先编排好固定路径,LLM 只是路径上的加工节点 | 模型在循环里自主决定调什么工具、走哪条路 |
| 优势 | 可预测、可调试、便宜、延迟低 | 能处理"路径无法预先画出来"的开放任务 |
| 代价 | 灵活性差,路径外的情况就傻眼 | 更贵、更慢、结果方差大,需要护栏与验证器 |
| 典型例子 | 「翻译 → 校对 → 格式化」流水线 | Cursor 修 bug、Claude Code 做重构 |
🎛 六种主流架构图鉴
前五种是 Workflow(路径代码定),最后一种是 Agent(路径模型定)。点左侧切换,每种都配了数据流向图和"什么时候用":
写大纲→ 🚧 门检
大纲合格?→ LLM 2
写正文→ LLM 3
润色翻译→ 📤 输出
判断类别→
现场拆解 & 派活→
汇总裁决→ 📤 输出
打分 + 给修改意见→
🕸 Multi-Agent:什么时候一个大脑不够用?
把编排者-工作者里的"工作者"换成完整的 Agent(各带自己的循环、工具和上下文窗口),就得到了多智能体系统。它的价值不玄学,就三条:
但 2025 年业界发生过一场著名的"路线之争",两篇文章至今都值得读:
深入一层:真实产品里的 Multi-Agent 长什么样?
- Claude Code 子代理与 Dynamic Workflows:
.claude/agents/里用 markdown 定义专职子代理(自带系统提示、工具白名单);2026 年的 Dynamic Workflows 更进一步——主代理现场写编排代码,调度成百个并行子代理做大规模迁移。 - Cursor:后台 Agent 在独立 worktree 里并行跑长任务;best-of-N 模式让多个代理各给一版方案再择优——"并行尝试"正是低耦合甜区。
- OpenAI Agents SDK(handoffs):代理间"交接棒"模式——分诊代理把对话连同上下文移交给专科代理,源自 Swarm 实验项目。
- LangGraph / AutoGen / CrewAI:把编排显式建模成图 / 对话 / 角色团队的三种框架流派。
- A2A 协议 / Agent Card:跨组织、跨框架的对等协作与能力发现——见本章对比表;雷达卡作速查。
- 你眼前的例子:本页在制作时,作者(Cursor Agent)就曾被分叉出一个子代理在后台继续验证页面——主对话上下文毫发无损。
🤝 MCP × A2A × Agent Card:互补,不是替代
knowledge_chat),保留 MCP;先治理上下文边界。A2A 留给跨团队、长任务、独立部署与能力发现。| 场景 | MCP | A2A | 举一反三 |
|---|---|---|---|
| 外层调用知识查询能力 | 适合 | 过重 | 像调工具,不像对等社交 |
| 工具 schema、参数、结构化结果 | 核心 | 不是重点 | 继承 function calling 心智 |
| 能力发现 | tools/list | Agent Card | 菜单 vs 名片 |
| Agent 间任务委托 | 弱 | 核心 | 手 vs 社交 |
| 长任务、取消、恢复、推送 | 需另建 | 原生 | 短请求 vs Task 生命周期 |
| 跨团队 / 跨框架 / 跨供应商 | 有限 | 更适合 | 同宿主工具 vs 对等 Agent |
.well-known/agent-card.json):名字、描述、版本、端点 URL、capabilities、skills、安全方案。对方凭名片发现“你会什么、怎么连、如何认证”。它不等于本地 SKILL.md——后者是宿主内渐进披露手册;前者是跨 Agent 发现入口。
外层 Agent
└─ MCP knowledge_chat
└─ 内层知识库 Agent
└─ 内部检索、HSCode、合规等工具
推荐演进(不是替换):
外层 Agent
├─ MCP:短请求、确定性工具、知识问答
└─ A2A:长任务、异步协作、独立 Agent 委托
知识库 Agent
└─ MCP:内部检索和业务工具
conversation_id 改名叫 A2A 的 contextId,你仍要自己决定:鞋子和玻璃杯是否同一主题、哪些追问可复用、/new 如何切断、外层 receipt 与完整答案如何去重、长期记忆如何裁剪。协议换皮 ≠ 上下文治理完成。未来若引入 A2A,应用 opaque knowledge_thread_id 映射,不要继续暴露数据库整数 ID。
- 先问"下一步由谁定":代码定 = Workflow(提示链/路由/并行化/编排者-工作者/评估器-优化器),模型定 = Agent。
- 升级路线:单次调用 → Workflow → 单 Agent → Multi-Agent,每一级都用成本换灵活性,够用就停。
- Multi-Agent 三价值:上下文隔离、并行加速、专业分工;一票否决项:子任务强耦合、共享可变状态。
- 编排者-工作者是多代理主干;同宿主知识能力优先 MCP,跨组织对等协作再上 A2A + Agent Card。
- Agent Card 是公开名片;本地 Skill 是宿主内手册——发现对象不同,不要混用。
📚 本章延伸
🎒 Skill:把能力做成可组合的分层手册
不是超长提示词,而是节省上下文的分层执行系统
SKILL.md。references/、scripts/、assets/ 都是按需添加的可选资源,不是必需项。把 Skill 理解成:
- description 是路由规则——告诉 Agent“做什么、什么时候触发”;
- SKILL.md 正文 是操作手册——命中后才加载的流程与判断;
- references / scripts / assets 是第三级资源——某个分支才需要时再读、再跑、再复制。
📦 最小形态 vs 推荐结构
my-skill/
└── SKILL.md
my-skill/
├── SKILL.md
├── agents/openai.yaml
├── scripts/
├── references/
└── assets/
SKILL.md 是操作手册,references 是资料库,scripts 是工具箱,assets 是原材料,Skill 仓库是把这些能力组合起来的工作系统。🚦 三级加载:如何省上下文
🧭 内容该放哪里?动手分类
先判断,再看解释。这是写好 Skill 最关键的肌肉记忆:
🗂 五种常见形态
🏭 Skill 仓库是一条生产线
单个 Skill 是能力模块;Skill 仓库是可组合的工作系统。典型工程生产线:
| 关系类型 | 例子 | 挂回本页主线 |
|---|---|---|
| 调用关系 | implement 使用 tdd | 像 Host 调用多个 MCP Client:主流程编排,子能力复用 |
| 前后阶段 | to-spec → to-tickets | 像 Agent Loop 的轮次:先收敛规格,再进入实现循环 |
| 共享知识 | 多个 Skill 共用 codebase-design | 像 AGENTS.md:共享词汇常驻,重型能力按需做成 Skill |
- 最小 Skill = 独立目录 + SKILL.md;其余都是可选。
- 三级加载:description 路由 → 正文流程 → 按需资料/脚本/素材。
- 放置原则:每次必走的步骤进正文;分支知识进 references;稳定程序进 scripts;产出模板进 assets。
- Skill 仓库通过调用、阶段、共享词汇三种关系组成生产线。
📚 本章延伸
📡 2026 前沿概念雷达
推特时间线上最火的热词,逐个放回技术栈的正确位置
下面 12 张卡片覆盖了近期(截至 2026-07-08)讨论度最高的概念。点分类筛选,点卡片展开细节——每张卡都标注了它与本页主线的关系,方便你"挂"到已有的知识树上:
为什么安全团队兴奋:J-lens 能读出模型"没说出口的想法"——包括它是否意识到自己正在被评估。红队实验中,关闭"评估感知"相关模式后,模型的越轨行为(如勒索场景)明显上升,说明部分安全分数依赖"模型知道自己在考试"。Anthropic 谨慎强调:这是功能性访问的证据,不是主观体验(现象意识)的证明。
怎么分辨成色:李飞飞的分类——渲染器(比画质,易商品化)/ 模拟器(守物理,是机器人训练基座)/ 规划器(面向行动);行业照妖镜是 sim-to-real:在生成世界里训出的策略,放到真实世界还灵不灵。
.claude/agents/ 定义专职子代理(自带系统提示与工具白名单);Cursor 有后台 Agent 与并行 worktree。适用于深度搜索、日志分析、依赖审计这类"中间过程不值得进主上下文"的任务。2026 年的进化版是 Claude Code Dynamic Workflows:主代理现场写编排代码,调度成百个并行子代理。
.well-known/agent-card.json):声明名字、版本、端点、capabilities、skills、认证方式;对方凭名片发现能力、协商任务、异步协作。Card 里的 skills 描述“我会什么任务”;这与本地宿主 SKILL.md 不是同一层。2025-04 由 Google 发布,随后捐入 Linux Foundation。一句话:MCP 是 Agent 的手,A2A 是 Agent 的社交,Agent Card 是社交名片。
- 热词定位五层法:模型内部(J-Space)/ 新范式(世界模型、RL 环境)/ 工程标准(AGENTS.md、Skills、A2A)/ 编排与产品(子代理、Computer Use、记忆、治理)/ 文化现象(Vibe Coding)。
- J-Space:Claude 内部自发涌现的"特权工作区",可解释性与安全审计的里程碑,不是产品。
- 世界模型:学环境的物理因果而非下一个词,是物理世界 Agent 的练功房,与 LLM Agent 互补。
- MCP 管工具接入,A2A 管智能体社交;AGENTS.md 常驻,Skills 按需——都是"分层"思想。
📚 本章延伸
🧩 全景串联 + 通关自测
把五块拼图合成一张图,再用一套综合题验证你真的懂了
🗺 一张图看懂全部关系
当你在 Cursor 里说"帮我查下上海天气然后写进 README",发生的完整链路:
(第 5 章你写的那个)
🔑 五个概念的一句话定位(背下来就能给别人讲)
| 概念 | 层次 | 一句话定位 |
|---|---|---|
| ReAct | 思想 | 回答"为什么":推理与行动交替,用观察修正方向,Agent 行为的元模式。 |
| Tool / Function Calling | 机制 | 回答"模型怎么表达要做事":结构化申请单(tool_calls),执行权在运行时。 |
| Agent Loop | 运行时 | 回答"怎么跑起来":while 循环驱动"思考→执行→观察"直到自然停止。 |
| Loop Engineering | 工程学 | 回答"怎么跑得稳":验证器、停止条件、预算护栏、上下文管理、外部状态、人工门禁。 |
| MCP / MCP Server | 标准接口 | 回答"能力从哪里插进来":Host–Client–Server 协议,写一次 Server 处处可用。 |
| Multi-Agent | 组织学 | 回答"一个大脑不够怎么办":编排者-工作者拆任务、子代理隔离上下文。 |
| A2A / Agent Card | 协作协议 | 回答"独立 Agent 如何发现并协作":名片发现、任务委托、长任务生命周期;与 MCP 互补而非替代。 |
| Skill | 能力封装 | 回答"可复用流程怎么分层":description 路由,正文给手册,references/scripts/assets 按需加载。 |
| 世界模型 / J-Space | 前沿雷达 | 回答"更远的地方是什么":一个给物理世界的 Agent 造练功房,一个看进模型脑内的工作区。 |
🎓 通关综合测验
五道综合题,考察的是概念之间的关系而非孤立定义——这才是真懂的标志:
🛤 接下来动手:真实 Demo 实践路线图
知识只有过手才算数。按顺序做,每完成一项点一下(进度会保存):
npx @modelcontextprotocol/inspector 连上任意 Server,亲眼确认 initialize → tools/list → tools/call 和 Demo 7 一模一样。