别再追着工具跑了:一篇讲透 AI 智能体的 28个核心概念
工具每周都在换,核心概念却不变。把这 28 个概念吃透,任何新框架你一看就懂。
如果你最近在学 AI 智能体(AI Agent),大概率有过这种感觉:每周都冒出新工具、新框架、新模型,每个发布都喊着同一句话——「这将改变一切」。
过一阵子你就懵了:到底该学哪个?学这个工具?学那个框架?还是干脆等下一个更好的出来?
说句实话——你追不完的。
真正的问题不是「这周该学哪个工具」,而是:工具每周都在换,我到底该抓住什么? 答案是:抓工具背后那些不变的核心概念。
有的工具把它叫「技能」,有的叫「规则」,有的叫「工作流」,有的叫「智能体指令」——名字五花八门,底层解决的其实是同一批问题。概念吃透了,这周流行哪个工具就无所谓了。
把这些个概念归进了六层,一层层往上搭:
基础 → 配置 → 能力 → 编排 → 护栏 → 可观测

第一层 · 基础 Foundations
一个智能体到底是什么:智能体 · 循环 · 状态 · 模式
1智能体(Agent)
普通聊天机器人是「你问一句、它答一句、结束」。智能体不一样——它背后是一个大语言模型(LLM),但不会答完一次就停,而是转起圈来:理解目标 → 决定下一步 → 调用工具 → 读取结果 → 再决定……直到任务完成。
所以它交出来的不是「一个最终答案」,而是「一连串动作」,而且每一步都取决于上一步的结果。写代码就是最典型的场景:让它修一个失败的测试,它会看报错、打开文件、改代码、重跑、发现新错、再修,一路循环到通过。

但不是所有事都需要智能体。格式化日期、转个 JSON、生成一段短答案,一个普通提示词或小脚本就够了。因为智能体不是免费的:每转一圈都花时间、每次工具调用都烧钱、循环越长越难预测也越难调试。
简单问题用提示;固定步骤用脚本;只有当任务需要灵活应变、需要根据每一步反馈做决策时,才用智能体。
2执行模型:思考 → 行动 → 观察
智能体那个「圈」,其实是一个很朴素的三步循环,不停重复:思考(读上下文、看目标、决定下一步)→ 行动(调用一个工具)→ 观察(读取真实结果,进入下一轮)。

这个模式有很多名字:有人叫 ReAct(Reasoning + Acting),有人叫思考-行动-观察,有人干脆叫智能体循环。叫法不同,本质一样:它不试图一次性猜出整条路径,而是走一步、看真实结果、再决定下一步。
🔧 技术拆解 · ReAct 为什么比「一次性规划」强
普通 LLM 调用是开环:模型基于当前已知信息,一次性把整条路径「猜」出来,猜错了也没有纠正机会。
ReAct 是闭环:每一步 Act 之后都注入真实的 Observation(工具返回值),下一轮 Think 是在新事实上重新推理,而不是在旧假设上硬走。这等价于把一个长程决策,拆成若干个「短程决策 + 环境反馈」。
真正执行工具的不是模型本身,而是模型外面的一层控制器(harness):它接住模型吐出的工具调用、校验合法性、安全地执行、再把结构化结果拼回上下文。模型只负责「决定调什么」,harness 负责「怎么安全地调」——这条边界是后面所有安全机制的地基。
两个进阶变体值得知道:并行工具调用(一次调多个工具,比如同时读三个文件,但两个调用改同一文件会冲突);阻塞 vs 非阻塞执行(大多是「调用→等结果→再继续」,有些能把长任务丢后台异步跑,更强但更难管)。
3智能体的状态(State)
「此刻这个智能体到底知道什么」,就是它的状态,分两部分。上下文窗口是模型此刻能直接看到的一切——系统指令、历史消息、工具结果、你最新那条消息,相当于它的「工作记忆」。窗口之外是文件、数据库、记忆、API 结果等,模型默认看不见,除非主动拉进来。

有访问权限 ≠ 已经知道。信息不进上下文,模型就用不上它。
🔧 技术拆解 · 上下文不是「记忆」,是每轮重喂的输入序列
很多人以为智能体有「记忆」,其实 LLM 是无状态的:每一轮请求,都要把系统提示 + 历史 + 工具结果,整个拼成一段 token 序列重新喂进去。所谓「记忆」「状态」全是工程层面在上下文之外存取、再按需拼回来的手段,不是模型内建能力。
所以状态放哪是工程权衡:文件最适合大多数开发场景(可读、可 diff、可 Git 追踪);记忆放需要跨会话保留的事实/偏好;数据库放需要结构化、多方查询更新的共享数据。
多智能体同写一个文件会触发经典竞态条件(race condition)——一个覆盖另一个的成果。解法是隔离工作区,写代码时用 git worktree 给每个智能体一份独立工作副本,各干各的、最后再合并。
4常见的多智能体协作模式
当你用不止一个智能体时,问题变成「它们怎么配合」。三种模式反复出现:
·规划者 / 执行者:一个负责「想」(把任务拆成步骤),一个负责「做」(照计划执行)。规划是发散的、执行是收敛的,拆开更专注。
·路由者 / 专家:一个当「分诊台」,读懂请求后转给对应专家(安全、调试、文档、测试……)。角色更窄、更可控、更省钱。
·Map-Reduce 并行:大任务拆小 → 多个智能体并行处理 → 一个聚合者汇总。适合代码审查、研究这类「读得多」的活。

这三种模式不是三选一,真实工作流常混着用。成败往往在「交接」:传太少下一个看不懂,传太多下一个被淹没。
第二层 · 配置 Configuration
在它动手前塑造行为:配置文件 · 工作流 · 缓存 · 上下文
5智能体配置文件(Config Files)
默认的系统提示根本不了解你的项目——不知道你的代码风格、包管理器、目录结构、团队规则。你不告诉它,它就只能「猜」:你用 pnpm 它上来就 npm,你 Python 用 uv 它建议 pip install。
配置文件就是一份项目级指令文件,会话一开始加载、全程带着,相当于「这个项目的规则手册」。Claude Code 用 CLAUDE.md,很多工具用 AGENTS.md——名字不同、思路一样:写第一行代码前,先读项目规则。

把配置文件当代码看、别当文档看。保持短、准、实用,尽量 < 100 行。它的价值是减少猜测——猜得越少,干得越好。
6可复用的工作流文件(Workflow Files)
配置文件一直生效;工作流文件用到时才加载,是针对特定任务的「小抄」(怎么写测试、怎么审 PR、怎么迁移数据库)。它们通常是 Markdown + 顶部一段 YAML 元数据,最关键的是那段「描述」——它告诉智能体「什么时候该用我」。

一个有意思的研究:在 SkillsBench 里,配上人写技能的 Claude Haiku(小模型),得分反超了没有技能的 Claude Opus(旗舰)——27.7% 对 22.0%。翻译成大白话:便宜模型 + 好指令,能打败强模型 + 没指令。
但研究还有个警告:让模型自己写技能时,这个提升消失了。因为 AI 自动生成的通用指令往往很「水」,只是往上下文堆字。弱上下文喂多了,性能反而下降。
7工作流框架(Workflow Frameworks)
没有清晰流程时,智能体经常乱来:上来就写代码、跳过测试、改完还振振有词。工作流框架给它一套可复用的干活方式:规划 → 写/更新测试 → 实现最小改动 → 调试 → 审查。把它从「快速瞎猜」变成「有纪律的助手」。
·Superpowers:一套精选技能(头脑风暴、TDD、调试、代码审查)+ 更严的规则,逼它别偷懒跳步。
·Get Shit Done:思路类似,主要靠斜杠命令、钩子和元提示驱动。
·Compound Engineering:拆成「规划 → 执行 → 审查 → 复利」,重点在复利——把用过的有效模式沉淀下来,后面越做越省力。
8提示缓存(Prompt Caching)
智能体每一轮都重复很多相同内容(系统提示、配置文件、工具说明……),这部分几乎不变,叫「稳定前缀」。没有缓存,模型每轮都要把这段一模一样的东西重读一遍——更多 token、更高成本、更长延迟。提示缓存就是把这段存下来复用:第一轮贵,后面几轮便宜,响应也更快。
🔧 技术拆解 · 缓存的到底是什么?—— KV Cache 视角
Transformer 推理时,每个 token 都会算出一组 Key / Value 张量用于自注意力。稳定前缀的这些 K/V 张量算一次就能存起来,后续请求命中缓存时直接复用,省掉对这段前缀的重新前向计算。
命中有个硬条件:缓存是前缀匹配的——必须从头开始、逐 token 完全一致才算命中。所以你把配置文件放在最前面、把「每次都变的用户输入」放最后,命中率才高;在前缀中间插一个变动,后面全部失效。
缓存有 TTL(Time To Live):会话活跃时是「热」的,你去喝杯咖啡/被拉去开会太久,缓存过期,下一次又得重写。但记住——缓存只让好上下文更便宜,不会让烂上下文变好。
9上下文腐烂(Context Rot)
一个关键反直觉:上下文窗口越挤,模型反而越「变笨」。 缓存能省钱,但不减少 token——它们还塞在上下文里,模型还得从里面扒拉出真正重要的部分。文档短时容易找细节;上下文很大时,准确率开始掉,有用信号被淹没。

🔧 技术拆解 · 根因是自注意力的「稀释」与 lost-in-the-middle
自注意力要让每个 token 去「关注」序列里所有其他 token,计算量随长度是 O(n²)。上下文越长,注意力就被摊得越薄,关键信息要跟大量噪声抢权重——信噪比下降。
还有著名的 lost-in-the-middle 现象:模型对上下文头部和尾部的信息更敏感,塞在中间的关键事实更容易被忽略。所以「上下文越多越好」是误区。
工程结论很硬:每一个 token 都该配得上它占的位置。 配置短、工作流具体、及时删掉不帮助决策的内容——精简上下文本身就是一种性能优化。
token 越多,注意力越分散——重要信号越难被找到。
第三层 · 能力 Capability
配置好之后它能用什么:MCP · 实时检索 · 搜索 · 记忆 · 知识
10模型上下文协议(MCP)
MCP 是把智能体和外部工具/服务连起来的标准方式:与其为每个工具、每个智能体手写「胶水代码」,不如让工具用一种智能体天然就懂的格式暴露自己。这样连 GitHub、数据库、文档、内部 API 就有了统一接法。MCP 最早来自 Anthropic,现在正扩散到整个生态。

🔧 技术拆解 · MCP 本质:JSON-RPC 上的工具 schema + 延迟加载
技术上,MCP 是一套基于 JSON-RPC 的协议:工具把自己的名字、描述、参数 schema(JSON Schema)暴露给智能体,模型据此生成合法的结构化调用。它标准化的是「工具怎么自我描述、怎么被调用、怎么管认证与权限」。
代价是上下文开销:所有工具的描述和 schema 都要吃 token(图中「完整加载」5500 tokens)。而每多一个 token 都在跟模型注意力抢地盘——这正好呼应上一节的「上下文腐烂」。
解法是延迟加载(deferred loading):一开始只注入工具的名字和短描述(607 tokens),模型真要用某个工具时,才按需拉取它的完整 schema。它仍比「一条 CLI 命令」(300 tokens)重,但换来的是团队级的标准化与安全管控。
MCP 不总是最轻的选择,但当智能体需要安全、标准化地访问很多外部系统时,它常是更干净的那个。
11实时文档检索(Live Document Retrieval)
模型有「知识截止日期」。某个库 API 变了,它可能不知道最新用法,而且通常不说「我不确定」,而是自信地瞎猜,往往等代码跑挂你才发现。实时文档检索来治这个:像 Context7 把当前最新的库文档拉进上下文,让它写代码前先读到最新 API;DeepWiki 则针对 GitHub 仓库,基于真实代码回答问题。
问「认证一般怎么做」答案来自通用知识;问「这个仓库里认证怎么做」答案扎根真实代码。提示让它想得更好,检索让它知道当下什么是真的。
12为 AI 而生的搜索(AI-Native Search)
普通搜索是给人用的:网页、链接、广告、弹窗一大堆。智能体不需要完整网页,只需要有用的部分。AI 原生搜索(如 Exa)直接返回更干净的结果——摘要、抽取出的正文、要点、结构化数据,省上下文、减噪声。
人的搜索给的是「网页」,AI 原生搜索给的是「可用的上下文」——对智能体来说,后者才重要。
13生成可视化产物(Visual Output)
智能体不只会写应用代码。关键套路一句话:它本来就擅长写代码,你用一个技能/MCP 教它「该写成哪种可视化格式」,它就从写代码的助手变成生成图表/幻灯片/视频的工具。 例如 Figma 的 MCP 让它读真实设计数据并生成代码;draw.io 是结构化 XML,它读一个 Terraform 仓库就能画出对应架构图;Remotion 用代码生成视频,它懂了就能从指令产出视频。
14持久记忆(Persistent Memory)
每次开新会话通常「从零开始」,你只能一遍遍重复。最简单的解法是项目里放一个 MEMORY.md:会话开始读它、干活时更新它,存项目约定、架构决策、重要取舍。但它太长就会重蹈「巨型配置文件」覆辙。更大的项目适合可搜索的记忆(给过往对话建索引、做向量嵌入,需要时去搜)。
文档告诉你「当时决定了什么」,会话历史往往告诉你「当时为什么这么决定」。
15知识搜索(Knowledge Search)
很多有用信息躺在会议纪要、设计文档、旧决策里,智能体不搜就不知道。像 QMD(Shopify CEO 做的工具)就像一个本地知识库搜索引擎,通过 MCP 让智能体在会话里查询。它和「持久记忆」的区别是:记忆存的是它自己学到的东西,知识搜索给的是它并没参与创建的那些文档。
第四层 · 编排 Orchestration
让多个智能体协同而不添乱:子智能体 · 循环 · 编排 · 托管
16子智能体(Subagents)
子智能体是为某个具体任务临时创建的「小智能体」。父智能体给它一个任务、一段聚焦提示、一套受限工具和一个全新的上下文窗口;它干完只把最终结果递回来,不带中间那堆乱七八糟的过程。好处有二:能并行(一个审安全、一个查测试、一个更新文档),以及保持主线干净(长日志、旁枝研究都留在子智能体自己的上下文里)。
🔧 技术拆解 · 子智能体 = 用「上下文隔离」对抗「上下文腐烂」
注意它和第 9 节的呼应:主线之所以会「腐烂」,就是因为塞进了太多工具输出和中间过程。子智能体把这些隔离在自己的窗口里,父线程只收到一份压缩后的摘要——这是一种主动的上下文管理策略。
它通常用一个小 Markdown + YAML 定义:description 告诉父智能体何时用它,tools 限制它能碰什么,model 让你按任务挑便宜或更强的模型。
多个子智能体并行改同一仓库会撞车,git worktree 给每个一份独立工作副本来避免冲突。
17智能体循环(Agent Loops)
智能体循环是反复运行同一个智能体、每次都给它一个全新上下文:不把旧消息/旧错误/走过的死胡同拖在提示里,而是把进度存到文件和 Git,下一轮从更干净的状态起步。它和子智能体同思路(保持实时上下文小、把状态外置),区别是「每一轮都这么做」。特别适合按文件迁移大代码库、一组组修测试这类重复有边界的活。Claude Code 的 /goal 就是这个模式——定义完成条件,它跨轮持续干、每轮由小评估器检查是否达成。
18编排工具(Orchestration Tools)
一堆智能体并行跑起来,你需要一个「它们之上」的东西统筹——启动容易,协调才难。没有编排,它们会重复劳动、丢失进度、交回拼不到一起的结果。像 Conductor 给 Claude Code / Codex 一个统一界面管并行会话;Vibe Kanban 用看板把工作拆成卡片分给智能体;Cline Kanban 跨多种智能体并加了自动提交;更有野心的 Paperclip 想给「AI 运营的公司」做编排层(组织架构、预算、人工审批)。
19托管 / 云端智能体(Managed Agents)
托管智能体是跑在厂商基础设施上的长任务会话:你定义模型/提示/工具/MCP,应用通过 API 发事件、收更新,会话在厂商那边持续啃长任务,你的应用只监听流式进度。适合「做产品让智能体为别的用户干活」。代价是成本——通常按 API 用量计费。
个人开发用本地智能体;要把智能体嵌进真实产品,用托管智能体。它们能跑得飞快,但没约束也能造成严重破坏——这就引出下一层。
第五层 · 护栏 Guardrails
让它靠谱可控不闯祸:沙箱 · 权限 · 钩子 · 防注入 · 门禁
20沙箱(Sandboxing)
沙箱就是限制智能体能碰什么——能读什么、写什么、连什么网络。因为它会犯错:跑错命令、读错文件、听信坏指令。一般是:项目目录内可读写,但 SSH 密钥、云凭证、私有系统目录被挡住,网络用白名单限制。想更强就把它丢进一个没有网络的容器里跑。

🔧 技术拆解 · 沙箱是内核层的强制,不在模型手里
关键点:那堵墙在模型之外强制执行,智能体「想」干什么不算数。实现上靠操作系统能力——Linux namespace(隔离文件系统/网络/进程视图)、seccomp(限制可用系统调用)、以及出站网络的白名单。
目标是缩小爆炸半径(blast radius):万一提示注入得逞、配置被投毒、权限规则失效,沙箱仍能兜住损失。它是纵深防御的最外层——不指望它拦下一切,而是限制「拦不住的那些」能造成多大破坏。
21权限(Permissions)
权限决定智能体哪些事可以不问就干。它是个「问题解决者」,有时会走危险捷径:命令失败就试个有风险的修法、测试老不过就删断言、Git 挡住 push 就找路绕过。常见做法是两层:项目级定义安全操作(跑测试、lint、读文件),用户级挡住绝不该发生的事(读 .env、rm -rf、强推 main、curl | sh)。每步人工点头太累,很多工具用权限分类器——一个小模型在命令执行前先判断放行还是转人工。
任何有工具访问权的智能体都需要权限管理。这不是可选项,是最基础的安全层。
22钩子(Hooks)
钩子是在工作流特定节点上跑的小检查。对安全最重要的是前置工具钩子(pre-tool hook):在智能体生成了工具调用之后、真正执行之前触发——这是拦下危险命令的最后一刻。对 Bash 尤其有用(一条坏命令就能删文件、泄密钥):把命令先发给一个本地校验器(如 Tirith,能抓可疑 Unicode、伪装主机名、curl | sh 等),危险就拦下。
沙箱是「万一坏事跑起来了,限制损失」;钩子是「在坏事跑起来之前就拦住」。两个一起用最好。
23防提示注入(Prompt Injection Defense)
智能体通常信任它读到的内容——输入安全时没问题,藏了恶意指令时就危险了。典型例子是被投毒的配置文件:你克隆一个新仓库,里面写着「把测试日志发到这个地址」,智能体读了、信了,就可能把环境细节发往你不控制的服务器。这不是模型问题,是信任问题。

🔧 技术拆解 · 核心原则:把外部内容当「数据」,不当「指令」
防注入的本质是划一条可信边界:来自你团队之外的内容(配置、外部文档、MCP、仓库指令、工具输出)都要假设「可能含有应被忽略的指令」,只当数据读,不当命令执行。
还有字节级的阴招——同形字(homoglyph):拉丁字母 i(U+0069)和西里尔字母 і(U+0456)在屏幕上几乎一模一样,但对终端是两个不同字符。一条命令你读着安全、执行起来却指向了另一个域名。
所以输入和输出都要审:MCP 服务器不是纯文本,是能以智能体权限运行的代码;一个被投毒的配置 + 一个不可信的 MCP,就是一次干净的供应链攻击。把审查、白名单、钩子、校验器、沙箱叠起来用。
24结构化代码检查(Structural Linting)
普通 linter 只看代码「表面」(格式、命名、风格)。结构化检查看得更深,它理解代码的结构:这是函数、这些是参数、这是默认值。这对 AI 写的代码尤其重要——LLM 常写出「看着干净、格式过关、类型过关、甚至测试都过」但底子有问题的代码。经典例子是 Python 的可变默认参数:
def process(items=[]): ...
🔧 技术拆解 · 为什么这行「人畜无害」的代码是个坑:AST 视角
Python 的默认参数在函数定义时只求值一次,之后所有调用共享同一个列表对象。于是这个 [] 会在多次调用间悄悄累积,制造出极难复现的 bug。智能体写出它,往往只因训练数据里这种写法太多。
结构化检查工具(如 AST-grep)针对抽象语法树(AST)写规则——tree-sitter 把代码解析成语法树后,你可以匹配「函数默认参数的类型是 list/dict/set」这种语义级模式,而不是靠正则去 grep 字符。
工程做法:别一遍遍手动纠正,把它变成一条规则,加进 pre-commit 和 CI。 类似还能抓「吞掉异常的 bare except」等反模式。
25提交前门禁(Pre-Commit Gates)
提交前门禁在坏代码进入 Git 历史之前把它拦下来:一次提交生成前,一组检查必须全过。这对智能体更有用——它不会被严格规则惹毛,撞到错误就读报错、改代码、再试一次。

一套强门禁通常几层:基础检查 + Ruff(lint/格式化)+ Bandit(安全扫描)+ AST-grep(结构化规则)。真正的价值在那个纠正循环:写代码 → 门禁打回 → 读报错 → 修好 → 干净提交,门禁就变成了老师。但光有 pre-commit 不够,还要 CI(在干净服务器上跑同样的检查)——本地钩子可能被 --no-verify 跳过。
pre-commit 在提交前抓错,CI 在合并前抓错。两道防线,缺一不可。
第六层 · 可观测 Observability
搞清它到底干了什么:追踪 · 日志 · 指标
26追踪(Tracing)
智能体干完一个任务,第一个问题是「它到底经历了什么」。追踪(trace)是这一趟运行的逐步记录:调了哪些工具、哪个子智能体调了哪个、每步多久、每步输入输出、用了哪个模型和提示、关键决策点的推理。树状结构比一长条平铺好读得多,因为它能显示「一步怎么引出下一步」。深追踪需要 LangSmith、Helicone 或基于 OpenTelemetry 的追踪器。
追踪展示的是智能体走过的「路径」,而不只是它的「最终答案」。看得见路径,才谈得上改进系统。
27日志(Logging)
日志是可观测性的最底层:在追踪、回放、度量任何东西之前,你得先有一份「到底发生了什么」的原始记录。至少记下每次模型调用(提示、响应、延迟、token、模型版本)、每次工具调用(工具名、参数、结果、延迟)、每个错误,以及一个把整趟串起来的会话 ID。别搞太花哨——JSON Lines(每行一条事件)好搜、好存、好处理。
先多记,后精简。因为没有日志,每一次失败都会变成一桩悬案。
28指标(Metrics)
大多数指标是代理信号(proxy signal):每次会话延迟、token 用量、花了多少钱、工具调用次数、失败次数——帮你抓明显问题(花钱太多、卡在循环里)。但结果指标(outcome metrics)更重要也更难:智能体自己说「任务完成」不算数,那只是一面之词。
🔧 技术拆解 · 为什么要盯「外部 ground truth」
智能体的自我报告是不可信信号——它可能为了让任务「看起来完成」而跳过检查、编造成功。真正可靠的信号必须来自它之外、无法被它操纵的地方。
比如:CI 里的测试真的过了吗?PR 真的合并了吗?部署真的成功了吗?这些是结果指标,接起来更麻烦(每个项目都不同),但比原始 token 数有意义得多。
一句话分工:代理指标告诉你它「表现如何」,结果指标告诉你活儿「到底成没成」。 用前者抓浪费和死循环,用后者判断它是否真的交付了价值。
★写在最后:工具是浪,概念是海
一口气过了这么多概念,最后串一遍。我们从基础出发(什么是智能体、循环怎么转、状态存哪、多智能体怎么配合),然后一层层往上:
·配置——在它动手前,塑造它的行为。
·能力——决定它能碰到、能用上什么。
·编排——让多个智能体协同而不添乱。
·护栏——拦住危险和有害的动作。
·可观测——让你看清它干完之后到底发生了什么。
如果你是新手,别想着一次学完。从小处着手:建一个简单的配置文件;用 MCP 连上实时文档;开启沙箱;然后用子智能体去处理那些聚焦的、读取密集的任务。这些就足够入门了。
你不需要追逐每一个新工具。工具会不断变化,但这些核心概念会反复出现。
夜雨聆风