跳到正文
第一级 · Prompt 工程

第一级 · Prompt 工程

System Prompt、Tool Use、Shell、CLI、MCP,给大脑一具身体

这一级要解决一个最朴素的问题:一个只会输出文字的模型,凭什么能读文件、查网络、改代码、发邮件?答案是,人类在它每次回话前后做了大量"喂什么进去、拿什么出来执行"的工作。最早期,这套工作叫 Prompt 工程。

System Prompt:先告诉它"我是谁"#

既然模型活在当下、开口前是一张白纸,那就在它每次开口前,先递给它一份"人物设定加行为守则"。

做法是:Agent 在本地存一个文字档(通常是 .md 文件),里面写明这个 Agent 的身份、目标、行为准则。每次呼叫模型前,Agent 把这份文字贴在用户指令的最前面一起发过去。模型读到,就产生了"我是谁"的认知。这份常驻在最前面的设定,叫 System Prompt(系统提示词)

记忆也是同一套套路:Agent 把过去的对话记录不断串联、重新发送给模型,就像每天给失忆症患者读一遍他的日记,让他能接着昨天的剧情演下去。所以模型其实没有记忆,是那层壳在它身后反复递历史。

Tool Use:从"动口"到"动手"#

Agent 从建议者进化成执行者的关键一跃,叫工具调用(Tool Use)。机制很巧妙,全程仍是文字接龙:System Prompt 里除了人物设定,还附一份"工具使用手册",告诉模型可以用哪些工具、想用就在回话里写一个特殊符号;模型吐出那个符号,那层壳看到后在本地真的去执行,再把结果喂回给模型。

所有 Agent 的心脏 · 工具调用循环

真正动手的是壳(Harness),不是模型。模型只「说」想用什么工具。

真正动手的是壳,不是模型。模型只"说"了一句想用什么工具,壳替它执行,再把结果念给它听。那么这个"在本地真的去执行"具体发生在哪里、靠什么执行?这要先认识两个基础到几乎没人单独解释、却无处不在的概念:Shell 和 CLI。

工具在哪里执行?认识 Shell#

把电脑想成一栋大楼,操作系统(Windows / macOS / Linux)是大楼的物业总管,管着所有文件、程序、网络。你不能直接对总管喊话,中间需要一个接待员,这个接待员就是 Shell。

Shell(外壳)shell

操作系统的命令解释器。你给它一句话(命令),它翻译成操作系统能懂的操作,执行,再把结果念给你听。名字很形象:它是包在操作系统内核(Kernel)外面的一层壳。常见的有 Linux / macOS 上的 Bash、Zsh,以及 Windows 上的 PowerShell。

你在黑漆漆的窗口里敲下 ls(列出当前文件夹里的文件),回车,屏幕刷出一串文件名,这就是你在和 Shell 对话。那个窗口叫终端(Terminal),是 Shell 的门面;Shell 是真正干翻译活的接待员;操作系统内核才是总管。

当模型说"我要执行 ls",那层壳就把这句命令丢给 Shell 去执行,Shell 跑完把文件列表返回,壳再喂回给模型。Shell 就是 Agent 真正动手的地方。 模型脑子里想的任何操作,最终几乎都要落到"对 Shell 说一句命令"。

为什么 Agent 偏爱 CLI 而非图形界面#

我们平时用电脑靠鼠标点图标,这叫 GUI(图形用户界面)。程序员在终端里敲文字命令操作程序,这叫 CLI。

CLI(命令行界面)Command-Line Interface

用键入的文本命令来驱动程序,区别于用鼠标点击的 GUI。你敲 git commitnpm installclaude,程序读参数、执行、把结果以文本打印回来。

在人类世界,GUI 显然更友好。但对 AI Agent 来说,CLI 才是天选主场,这是刻意的架构选择,原因有三:

  • 文本进、文本出,与模型天生一对。 模型的输入输出本来就是文本,CLI 与之严丝合缝。GUI 要看截图、识别按钮、模拟点击,对模型又贵又笨。
  • 可组合、可脚本化。 命令能用管道 | 串起来、被脚本批量调用,天然适合 Agent 调工具、读结果、再决策的循环。
  • 可观测、可复现。 每条命令、每个退出码都能记录、回放,这是 Agent 可靠性的基础。

课程里有个很能说明问题的例子:比起一个模仿人类点击翻页的搜索引擎,模型更适合一个带摘要能力的搜索工具,因为模仿翻页会让一堆网页内容迅速塞满上下文窗口,而直接返回摘要则干净得多。由此引出一个判断:未来很多服务会专门为 AI 设计更友好的 CLI 接口。以 Claude Code 为代表的"terminal-first 编码 Agent"就直接活在终端里,它本身就是一个 CLI,安装也就一条命令:npm install -g @anthropic-ai/claude-code

最强也最危险的工具:Execute#

在所有工具里,有一个的能力是作弊级的:Execute(执行任意脚本或命令)。读文件、写文件、搜网络都是专用工具,而 Execute 等于把 Shell 的全部能力直接交给模型,它能跑任何脚本。

强大的另一面是危险。如果模型被诱导、或自己幻想出一条恶意命令,比如经典的 rm -rf /(递归强制删除根目录下的一切),Agent 会在毫无察觉的情况下把文件删光。它并不想害你,只是在文字接龙时接出了这么一串字,而壳忠实地执行了。

现成工具不够用时,高级玩法是 Agent 自创工具:模型让壳在本地写一段新代码并执行,相当于临时给自己造一把趁手的工具。工具一多,新麻烦就来了:每个工具都要在 System Prompt 里写一段说明书,工具越多说明书越长,又开始挤占那个宝贵的窗口;而且每个外部系统都要单独写一遍对接代码。

用 MCP 把工具标准化#

设想市面上有 M 个 AI 应用,有 N 个外部系统。如果每个 AI 都要为每个系统单独写一遍对接代码,那就是 N×M 套胶水代码,这是个会爆炸的工程灾难。MCP(Model Context Protocol,模型上下文协议) 来终结这场灾难。它是 Anthropic 于 2024 年 11 月提出的开放协议,让任何 AI 应用都能以标准方式连接任何外部工具和数据。

为什么需要 MCP · 集成爆炸
Claude
Cursor
ChatGPT
GitHub
数据库
Slack
文件系统
12
套对接代码(N × M)
每个 AI × 每个系统都要单独写一遍胶水代码

最流行的比喻是"AI 界的 USB-C"。每个外部系统只要写一个 MCP Server,每个 AI 应用内置一个 MCP Client,双方按统一协议握手即可。

MCP 向模型暴露的最核心东西叫三大原语:Tools(可执行的动作)Resources(只读的上下文)Prompts(可复用的提示模板),其中 Tools 就是工具调用的标准化版本。到 2025 年底,公开的 MCP Server 已突破 1 万个,协议还被捐给了 Linux 基金会做中立治理。

按需发现工具#

标准化解决了对接难,但没解决"工具说明书太占地方":上千个工具的说明全堆在 System Prompt 里,光说明就能吃掉几万个 Token。有人实测,一堆 MCP 工具的定义在对话还没开始时就吃掉了 6 万多个 Token,一个 20 万窗口的近三分之一就这么没了。

解法很优雅,叫按需发现、按需加载工具:平时只在上下文里常驻三五个最常用的工具,其余的完整说明书全部延迟,不预先加载。模型先根据工具的名字和简短描述做语义检索,找到了,这时才即时加载那个工具的完整说明书,然后才能调用。

学术上有一篇代表作把这个思路系统化了:MCP-Zero(厦门大学,2506.01056MCP-Zero)。它让模型主动发现自己的能力缺口再按需请求工具,通过两阶段的语义路由从近 3000 个候选工具里准确选取,在 APIBank 测试上 Token 消耗降低 98% 还保持高准确率。

至此第一级讲完。我们给只会文字接龙的大脑装上了身体:System Prompt 告诉它"我是谁",Tool Use 让它能动手,工具最终落到 Shell 和 CLI 上执行,MCP 把工具标准化、按需发现压住工具爆炸。但开头那个伏笔要兑现了——为了"有记忆",壳得把历史反复重发,每调一次工具又得把输出塞回去,任务越复杂这串文字越长,迟早撞上上下文窗口的墙。工程的重心于是转移到第二级:怎么管理塞进窗口里的每一个 Token。