如何更好使用 AI(从上下文治理到 MCP 协议)

发布于 2026-05-16 14:00 2019 字 11 min read

smile丶snow avatar

smile丶snow

大三/前端开发/百合汉化组成员/百合/偶尔也会做些动态壁纸

2026.03 - 至今
快手
前端开发实习生
2025.12 - 2026.03
北京蓝色光标数字传媒
前端开发实习生
深度解析 AI 使用s的四大治理手段、工具链范式演进以及 MCP 协议的底层逻辑,帮助开发者构建高效、安全的 AI 辅助研发工作流。

模块一:上下文治理 —— 解决 AI 的“失忆与注意力涣散”

大模型的底层逻辑是无状态特性的(Stateless),每次对话都会把历史记录打包成一个巨大的 JSON 数组全量发送。上下文越长,API 越贵,且 AI 越容易产生幻觉(忘记初始设定)。

为了保持 AI 的“绝对清醒”,工程上衍生出了以下四大治理手段:

1. Sub-agent 模式(物理隔离)

  • 痛点:遇到具体的细节 Bug 时,如果直接在主会话中让 AI 反复试错,这些“垃圾过程”会严重污染上下文,导致主 Agent 忘记全局架构设计。
  • 解法:主 Agent 充当架构师(保持上下文纯净);遇到 Bug,临时拉起一个 Sub-agent(修 Bug 专员)独立试错,成功后只把最终代码返回给主会话。
  • 💡 经典使用场景:你在开发 C 端阅读平台时,主 Agent 帮你搭好了 Nuxt 4 的整体架构。但在写立体书翻页效果时,CSS 3D 动画一直有透视错错乱的 Bug。此时千万别在主对话里来回贴报错代码,而是把这个独立的翻页组件单独发给一个 Sub-agent 去疯狂调优,调顺滑了,再把最终的组件代码合并回主干。

2. 对话分支与状态回溯 (Conversation Forking / Backtracking)

  • 痛点:在解决复杂问题时,AI 经常会给出错误的技术路线(比如引入了一个不兼容的库)。顺着这个路线聊下去,会引发更多连锁报错,导致整个对话陷入“疯狂补锅”的死胡同。
  • 解法:像 Git 回滚一样,在对话历史中找到“走偏前的那一条消息”,直接执行回溯(或者 Fork 出一个新分支)。此时不仅代码状态回到了过去,大模型的“脑子”(上下文记录)也被清除了那段失败的试错记忆。
  • 💡 经典使用场景:你遇到一个 SSR 水合报错 (Hydration Mismatch)。AI 建议你安装一个第三方 NPM 插件来解决,结果安完之后报了 10 个跨域相关的错,你们顺着这 10 个错又排查了 5 轮,越弄越乱。此时直接回退到 AI 提议装插件前的那句话,放弃这条错误路线,让 AI:“这个插件会引发更多问题,请提供一个纯原生的同构预取方案。”

3. /compact 摘要机制(状态压缩)

  • 痛点:历史对话过长面临 Token 溢出(滑动窗口直接截断会丢失早期设定的关键规范)。
  • 解法:利用大模型做“记忆快照”。将几十轮废话压缩成高密度的结构化文本,替换掉冗长的原始历史,既省 Token 又防偏题。
  • 💡 经典使用场景:项目开发了一周,当前的对话历史里堆满了你们关于数据库选型、早期表单交互方案的争论。现在你准备开始写核心逻辑了,直接使用 /compact,大模型会在后台把前面的长篇大论压缩成:“【当前状态】前端使用 Vue 3;【核心约定】严格校验类型,不可变数据更新;【下一步】开发文章渲染模块”。让 AI 甩掉历史包袱,轻装上阵。

4. 代码检索的演进(RAG 的局限与 AST 突围)

  • 痛点:传统的向量检索(RAG)靠“语义相似度”找代码极不靠谱,经常把带有相同单词的无关注释找出来,却漏掉了真正互相依赖的函数。
  • 解法:利用 AST(抽象语法树)与符号表检索(Symbol Search)进行精确的上下文提取,让 AI 像真正的编译器一样顺藤摸瓜找依赖。
  • 💡 经典使用场景:你在开发一个智能体平台,想让 AI 帮你修改 User 相关的状态逻辑。传统的 RAG 可能会找出所有写着 “user” 这个词的无用文件;而通过 ts-morph 等 AST 工具进行静态分析,系统能精确提取出你定义的 TypeScript 接口类型(Interface)、与之关联的全局状态树(Store)以及调用的 API 函数,将最精准的上下文喂给 AI,彻底消灭代码幻觉。

模块二:工具链范式演进(Toolchain Evolution)—— 如何让 AI 具备行动力

目前的研发效能工具链正在经历从“喂饭式”到“自主式”的演进,核心分为两大流派:

  • Skill + Bash(敏捷范式)
    • 本质:Prompt as Code。把高频开发场景沉淀为结构化的“技能卡片”。
    • 运作:不再给 AI 封装繁琐的读写函数,而是直接给它赋予 Bash(终端)权限。AI 像真实程序员一样,遇到问题自己敲 cat 读文件、grep 搜代码。效率极高,是目前 Cursor / Devin 等先进工具的主流玩法。
  • MCP 协议(重型防御)
    • 本质:Model Context Protocol,强类型、强定义的 API 边界。
    • 运作:人类必须手写具体的工具函数(如 query_db),并定义严格的入参 Schema。AI 只能在规定好的函数列表中选择调用,无法越界。

模块三:MCP 深度祛魅 —— 穿透黑盒看底层原理

虽然外界把 MCP 传得很神,但作为架构师,必须看透它的物理形态和生态定位。

1. 祛魅:它只是一个 Node.js 进程

MCP Server 听起来高大上,剥开来看,它就是一个常驻在后台的普通 Node.js / Python 脚本。它没有任何黑魔法,只是执行着普通的本地文件读写(fs.readFile)或数据库查询逻辑。

2. 底层原理与作用(AI 界的 USB 接口)

  • 原理:它是基于 JSON-RPC 2.0 规范设计的 C/S 架构。大模型客户端(如 Roo Code)通过标准输入输出(stdio)或 HTTP (SSE),向你的 Node 进程发送规定格式的 JSON 字符串指令;Node 进程处理完后,再以 JSON 格式将结果打印返回。
  • 作用:统一规范。以前给不同的 AI 写插件要适配不同接口,现在只要按 MCP 规范写一次本地服务,任何支持 MCP 的大模型“插上就能用”,极大降低了给 AI 写“外挂”成本。

3. 如何实现一个 MCP 服务器

通常不需要从零手写解析逻辑。在 Node.js 环境下,会直接引入官方的 @modelcontextprotocol/sdk(或 FastMCP 等轻量框架)。实例化 Server 后,调用 SDK 暴露的 API 去注册 Tool(定义函数名、入参 Schema 和执行逻辑),最后启动服务监听 stdio 即可。


模块四:安全边界与容错率 —— 为什么生产环境必须用 MCP?

既然 Bash 模式开发效率这么高,为什么在敏感场景或生产环境依然要用看似繁琐的 MCP?这取决于爆炸半径容错率的差异:

  • 本地开发环境(适合 Bash,极致提效)
    • 容错率极高:有 Git 作为“后悔药”(git reset --hard 瞬间恢复)。
    • 人在回路(Human-in-the-loop):危险操作前会有确认弹窗,人类的双眼是最后一道防线。
    • 爆炸半径小:哪怕 AI 产生幻觉执行了 rm -rf /,损失的也只是一台个人电脑的环境。
  • 线上生产环境(必须 MCP,极致安全)
    • 数据不可逆:真实的业务数据库被删改是灾难性的,无法简单撤销。
    • 无人值守:Agent 通常在后台异步运行,一旦产生幻觉(大模型的概率性缺陷),没有任何人能拦住它。
    • 爆炸半径极大:涉及全量用户资产 and 公司生命线。
    • MCP 的核心价值:用人类编写的、确定性的沙盒代码(权限校验、只读拦截),去兜底大模型概率性的危险行为。它是关住猛兽的那道防弹玻璃。