斯坦福大学 CS146S 课程笔记(2)

构建编程智能体 & MCP 协议

这讲拆解的是 Cursor、Claude Code、Windsurf 这些热门编程智能体背后的核心原理。


从零构建编程智能体

架构其实很简洁:

用户 → 客户端界面 (CLI/IDE) → 编排器 (Orchestrator) ⟷ LLM (Claude) 
                                    ↓
                              本地工具 (文件操作等)

编排器是核心循环——不断从用户获取输入,与 LLM 通信,在本地执行工具调用。

几个关键术语:

术语说明
System Prompt定义智能体核心行为和指令的系统提示词
User Prompt用户发出的具体指令
Assistant PromptLLM 返回的中间推理或工具调用请求

构建步骤:

  1. 读取终端输入,不断追加到对话上下文
  2. 告知 LLM 可用工具:Read_file, List_dir, Edit_file
  3. LLM 在合适时机主动请求调用工具
  4. 编排器在本地执行这些工具
  5. 把执行结果返回给 LLM 继续推理

"秘密武器"

slides 揭示了 Claude Code 等先进智能体的工程优化技巧:

技巧说明
前置上下文使用小巧且针对性强的提示词开头
系统提醒在各处插入 <system-reminder> 标签,防止模型在长对话中"漂移"
命令前缀提取解析特定的操作指令
派生子代理通过子代理处理特定任务,防止主代理的上下文窗口超载

MCP:解决集成噩梦

为什么需要 MCP?

问题是这样的:

但第三方 API 集成很痛苦。slides 展示了一个糟糕的 Twitter API 代码示例——参数模糊、文档不完整、错误响应含糊。每接入一个新 API 都需要大量适配工作。

更可怕的是 N × M 噩梦:多个 LLM 应用和多种外部 API(Twitter, Slack, Facebook...)之间的混乱连接。

MCP 的解决方案

把 M × N 简化为 M + N。

优势:统一接口(不用为每个集成重新实现身份验证、错误处理或限流)、JSON-RPC 强制统一输出格式。灵感来自 LSP(语言服务器协议),但支持更主动的代理式工作流。

架构

┌─────────────────────────────────────────────────────┐
│  Host (宿主)  - Cursor, Claude Desktop              │
│    │                                                 │
│    └── MCP Client (客户端)                          │
│           ├── 维护状态会话                           │
│           └── 列表工具 → 注入模型上下文               │
│                    │                                 │
│                    ▼                                 │
│           MCP Server (服务器)                        │
│           └── 轻量级工具包装器                        │
│                    │                                 │
│                    ▼                                 │
│              Tool (工具)                             │
│              └── 具体调用函数                         │
└─────────────────────────────────────────────────────┘

交互流程:

  1. 用户提问(比如"总结 Jack 发给我的邮件")
  2. Client 从 Server 获取工具能力列表
  3. 问题 + 工具定义发送给 LLM
  4. LLM 发出工具调用;Server 执行(访问 Gmail 等)
  5. 结果返回用户

传输协议支持 stdioSSE(Server-Sent Events)。

当前局限

问题说明
工具过载智能体处理过多工具时效率不高
上下文消耗API 调用会迅速消耗模型的上下文窗口
建议设计"AI 原生"的 API,而不是死板的传统 API

课程推荐论文: Mitigations


小结

这两份 slides 串起来就是一个完整的技术栈:

  1. 第一部分教你怎么从零构建一个基础的编程智能体
  2. 第二部分教你怎么用 MCP 协议赋予智能体标准化、可扩展的能力

这就是 Cursor、Claude Code、Windsurf 的核心技术架构。