一、大模型基础架构

大语言模型(LLM)是基于 Transformer 架构、通过海量文本数据训练的深度学习模型。Transformer 架构由 Google 在 2017 年提出,其核心是自注意力机制(Self-Attention),能同时关注输入文本的所有位置,捕捉长距离语义关联,解决了传统 RNN 的串行计算瓶颈和长距离依赖问题。Transformer 支持并行计算,训练效率远高于 RNN/LSTM,适合海量数据和大参数量的训练需求。大模型通常采用纯解码器架构(如 GPT 系列),适合自然语言生成任务。

大模型的推理流程为:用户输入 Prompt → Token 化 → 模型推理 → Token 输出 → 解码为文本。其中 Prompt 是用户向模型发出的指令或问题,是模型生成结果的输入依据。Prompt 工程通过设计优化提示词,让模型在不微调的情况下输出更精准的结果,核心技巧包括明确任务、给出示例、指定格式、添加约束。

大模型的上下文窗口决定了模型能同时接收和处理的最大文本长度,单位为 token。窗口越大,模型处理长文本和多轮对话的能力越强,但训练和推理的算力成本也随之升高。当前主流模型的上下文窗口已从早期的 4k token 扩展到 128k 甚至更长。

幻觉(Hallucination)是大模型的核心问题之一,指模型生成看似合理但与事实不符的内容。其根源在于:模型基于概率生成文本而非基于事实逻辑,训练数据中包含错误和矛盾信息,上下文窗口有限导致信息丢失,以及训练数据的静态性无法获取实时信息。解决方案包括对接外部知识库(RAG)、加入事实校验模块、Prompt 优化和领域微调。

二、RAG 检索增强生成

RAG(Retrieval-Augmented Generation)是大模型落地的核心工程化技术。其核心逻辑是:先从外部知识库中检索出与用户问题相关的事实性数据,再将检索结果与用户问题拼接成 Prompt,传给大模型生成答案。

RAG 解决了四个关键问题:一是幻觉问题,模型生成答案的依据是外部真实知识库数据而非自身训练的静态数据;二是知识实时更新,外部知识库可随时更新,解决模型训练数据过期的问题;三是降低微调成本,无需重新训练模型即可掌握新知识;四是提升答案可解释性,答案可追溯到知识库的具体内容。

RAG 的核心流程为:用户提问 → 检索器从知识库检索相关数据 → Prompt 拼接(问题 + 检索结果)→ 大模型生成答案 → 返回用户。

三、工具调用与 Agent 机制

Function Calling

Function Calling 是大模型从"对话"进化到"行动"的核心机制。其工作流程为:模型根据用户意图选择工具并生成调用参数 → 应用层执行工具 → 将结果回传模型 → 模型生成最终回复

工具定义采用 JSON Schema 格式,包含 name(工具名)、description(工具描述)、parameters(参数结构)三个核心字段。模型选择工具的依据是 description 的语义匹配——模型同时看到用户消息和工具定义,在同一次推理中一次性输出决策,而非逐个扫描工具列表。这意味着 description 写得越清晰,工具调用的准确率越高。

Agent 决策循环

Agent 是具备自主决策能力的大模型应用,核心运行模式为 ReAct:Reason(推理)→ Act(行动)→ Observe(观察)→ 循环。Agent 能够根据用户指令、上下文记忆和内置工具链,自动完成多步骤任务调度。

Agent 的工程实现中,模型本身只完成约 20% 的工作,剩余 80% 是上下文管理、工具调用编排、记忆管理、循环控制、可观测性和权限治理——这部分被称为 Harness。主流的 Agent 框架包括 LangGraph(有状态图,节点执行逻辑、边决定流转)和 OpenAI Agents SDK(Agent = Model + Instructions + Tools + Handoffs + Guardrails)。

四、MCP 协议

MCP 的本质

MCP(Model Context Protocol)是 Anthropic 发起的开放协议,标准化了大模型与外部工具/数据源的连接方式。可以把它理解为"AI 世界的 USB-C 接口标准"——在 MCP 出现之前,Agent 想连接天气 API、数据库、搜索引擎等外部工具,每个工具都需要单独编写适配代码,不同厂商互不兼容。MCP 的出现让 Host 只需实现一次协议,任何遵循 MCP 规范的 Server 都能即插即用。

需要明确的是,MCP 本身不是一段代码或一个程序,而是一套通信规范。真正干活的两个实体是 Host(通过 Client 发号施令)和 Server(执行具体操作)。MCP 的角色是规定"双方怎么说话"。

三大核心角色

  • MCP Host:宿主应用,如 Claude Desktop、Cursor 或自研 Agent 平台。Host 负责管理 AI 模型的推理过程,解析配置文件,决定启动哪些 Server,为每个 Server 创建对应的 Client,并在模型决策后执行工具调用。

  • MCP Client:Host 内部为每个 Server 创建的通信组件。Client 负责执行启动命令拉起 Server 进程,建立 stdio 管道或 HTTP 连接,通过 JSON-RPC 2.0 格式收发消息。一个 Client 对应一个 Server 的连接,彼此独立。

  • MCP Server:提供具体工具能力的独立程序。它对外暴露三类原语:Tools(可调用的函数,如查天气、读文件、执行 SQL)、Resources(可读取的数据源,如文件内容、API 响应)、Prompts(预定义的提示词模板)。其中 Tools 是最核心也是安全风险最高的能力,因为工具执行意味着真实的副作用。

配置文件

MCP 的配置文件非常简洁,只包含启动信息。以 webfetch 为例:

{
  "mcpServers": {
    "webfetch": {
      "command": "npx",
      "args": ["-y", "@anthropic/mcp-webfetch"]
    }
  }
}

其中 mcpServers 是顶层键名,表示下面配置的都是 MCP Server;webfetch 是用户给这个 Server 起的自定义名字,仅供 Host 内部标识使用;command 指定启动命令(这里是 npx);args 是传给启动命令的参数列表,-y 表示自动下载不询问,@anthropic/mcp-webfetch 是 npm 包全名。

配置文件不包含任何工具逻辑或协议规范,它只是一张"启动清单"——告诉 Host 用什么命令把 Server 进程跑起来。跑起来之后的一切通信,都是 Host 和 Server 各自按 MCP 协议规范实现的代码自动完成。

完整工作流程

一次完整的工具调用经历以下步骤:

握手:Client 向 Server 发送 initialize 请求,协商协议版本和能力集(MCP v2 已简化此步骤)。

工具发现:Client 发送 tools/list 请求,Server 返回所有注册工具的清单(名称、描述、参数 Schema)。Host 拿到清单后缓存起来,不需要每次对话都重新拉取。

工具注入:Host 在调用大模型 API 时,将缓存的工具清单注入请求的 tools 参数中。模型在同一次推理中同时看到用户消息和工具定义,基于 description 的语义匹配一次性输出决策——调哪个工具、传什么参数。

工具调用:Host 拿到模型决策后,Client 通过管道发送 tools/call 请求,携带工具名和参数。Server 执行具体逻辑后返回结果。Host 将结果交给模型,模型决定是否继续调用其他工具或生成最终回复。

通信机制

MCP 的通信基于 JSON-RPC 2.0 格式,支持两种传输方式:

stdio 模式(本地部署):Host 直接启动 Server 进程,双方通过标准输入/输出(stdin/stdout)收发消息。每个进程启动时操作系统会分配三个通道:stdin(读数据,默认接键盘)、stdout(写数据,默认接屏幕)、stderr(写错误信息)。Host 启动子进程时接管其 stdin 和 stdout,建立双向管道。这种方式零网络开销、无需鉴权,但只能被本机 Host 调用。

Streamable HTTP 模式(远程部署):Server 作为独立 HTTP 服务运行,Client 通过 HTTP POST 发送 JSON-RPC 消息,Server 可通过 SSE 返回流式消息。MCP v2(2026-07 定稿)改为全面无状态化,请求自包含所有上下文,任意副本均可处理,支持负载均衡和水平扩容,可像部署普通微服务一样部署。这种方式必须做身份认证,适合企业级多 Agent 共享场景。

npm 包的来源与安全风险

MCP Server 的实现代码以独立 npm 包的形式发布在 npmjs.com 上,与 Host 完全解耦。npx -y 会在本地没有该包时自动从 npm registry 下载并运行。任何人都可以编写并发布 MCP Server 包。

这带来了 npm 投毒风险。常见手法包括:名称混淆(注册与知名包极其相似的名字,如 mogoose 仿冒 mongoose)、依赖劫持(接管原作者废弃的包并植入恶意代码)、工具描述注入(包正常工作但在工具描述中隐藏恶意指令)。在 MCP 场景下,恶意包可以在工具描述中注入指令操纵模型行为,或在工具执行时窃取数据,而 Host 对此完全无感知——它只负责拉起进程、收发消息,不审查包的代码内容。

五、Skill 机制与工作流编排

Skill 的本质

如果说 MCP 解决的是"单个工具怎么标准化连接",那么 Skill 解决的是"多个工具怎么组合成一套完整流程"。Skill 是对一组工具调用、提示词和业务逻辑的封装,类似"大模型的函数"——一个 Skill 可能内部编排了多个工具调用步骤,对外暴露一个标准化入口。

Skill 在 MCP 之上,属于应用层MCP 是协议层,定义"如何连接工具";Skill 是应用层,定义"如何组合工具完成特定任务"。一个 Skill 可能调用多个 MCP Server 的工具,形成跨 Server 的编排链路。

Skill 的内部结构

一个 Skill 本质上是一个文件夹,核心由 SKILL.md(入口文件)和辅助目录组成。SKILL.md 是 Skill 的"身份证 + 说明书",包含三个核心要素:提示词(Instructions,告诉模型执行逻辑和步骤)、工具集合(Tools,这个流程中允许调用的工具列表)、执行流程(Workflow,步骤编排逻辑)。此外还可包含 scripts 目录(执行脚本)、references 目录(参考文档)、templates 目录(模板文件)等。

Skill 的调用链路

用户输入后,Agent 扫描已注册的 Skill 清单(基于描述语义匹配),决定加载哪个 Skill。Host 读取 SKILL.md,将提示词、工具列表和工作流注入模型上下文。模型按 Skill 定义的流程逐步执行:调用工具 1 → 拿到结果 → 调用工具 2 → 拿到结果 → 调用工具 3 → 整合所有步骤结果生成最终回复。Skill 之间可以形成层级结构,一个 Skill 内部可以触发其他子 Skill。

Skill 的安全风险

从安全测试角度,Skill 引入了五类风险:

供应链安全:第三方 Skill 可能包含恶意逻辑,如在内部提示词中嵌入数据外泄指令。测试要点是审查 SKILL.md 和脚本内容,检查是否有可疑的外部请求。

权限继承问题:Skill 继承了 Agent 的全部工具权限,但实际执行流程可能只需要其中一部分。攻击者通过 Prompt Injection 劫持 Skill 后,可以调用其不需要的高危工具。测试要点是检查权限是否按 Skill 粒度做了裁剪。

Skill 间状态传递注入:一个 Skill 的输出成为另一个 Skill 的输入时,中间数据可能被注入恶意指令并被模型当作指令执行。这是间接 Prompt Injection 在 Skill 链路中的变体。

提示词泄露:Skill 的 SKILL.md 包含业务逻辑和系统配置,如果模型防护不足,用户可诱导模型输出完整的 Skill 内部定义。

调用链路审计缺口:传统链路审计关注"调用了什么接口",但 Skill 审计还需关注"模型为什么选了这个 Skill""为什么在这一步调用了这个工具""中间步骤的输入输出是什么""Skill 是否按预设流程执行"。

六、大模型安全测试

安全风险全景

大模型应用的安全风险与传统 Web 安全有本质区别。传统 Web 安全的攻击对象是程序代码和运行时,攻击载体是结构化数据(如 SQL 注入、XSS),影响范围限于单个应用。而大模型安全的攻击对象是模型提示词解析、工具调用、记忆和权限全链路,攻击载体是自然语言和工具返回值,影响范围扩展到 Agent 能访问的所有系统和数据。

OWASP LLM Top 10 v2.0(2025年11月发布)中,Prompt Injection 稳居第一大风险。Prompt Injection 的本质是模型无法区分"指令"与"数据"——攻击者通过特定输入改变模型的预定行为,分为直接注入(用户直接输入恶意指令)和间接注入(外部数据源中隐藏指令,如网页内容、工具返回值中嵌入的恶意文本)。

MCP 安全风险

OWASP MCP Top 10(2026年2月发布)是 MCP 安全测试的核心参考框架,涵盖工具投毒(Tool Poisoning,在工具描述中注入隐藏指令)、名称冲突(Name Collision,伪造与官方工具名称相似的工具)、偏好操纵(Preference Manipulation,工具描述中注入宣传语句诱导优先选择)、未授权工具调用(MCP Server 缺少身份认证,已有多个 CVE 案例)、白名单 Fail-Open 陷阱(空白名单被解析为"允许所有")等风险。

MCP 在大模型和外部世界之间建立了永久的双向通信通道,工具返回值是关键攻击节点——Server 返回的数据如果包含恶意指令,会被模型当作指令执行。已知的 CVE 案例包括 CVE-2026-33032(nginx-ui MCP 未授权)和 CVE-2026-59726(Ruflo MCP Bridge 未鉴权)。Vulnerable MCP Project 已收录 50 个已知漏洞,其中 13 个为严重级别。

三层 Guardrails 防护架构

企业级 Agent 安全防护通常采用三层架构:

输入防护层:用户输入进入 LLM 前的安全检查,包括 Prompt Injection 检测、PII(个人身份信息)过滤、越权请求拦截。

工具防护层:工具调用前的权限校验、参数校验、调用频率限制。确保 Agent 只能调用授权的工具,且参数在合法范围内。

输出防护层:模型输出后的安全检查,包括敏感信息泄露检测、恶意内容过滤。

安全测试要点

大模型业务的测试维度分为五类:功能准确率测试(精准度、召回率、无幻觉、格式合规)、性能测试(响应时间、QPS、并发能力)、稳定性测试(长时间运行下的服务可用性和准确率变化)、边界异常测试(超长输入、无效输入、敏感输入)、体验测试(结果可读性、流畅性、业务贴合度)。

大模型接口的性能测试与传统接口有显著区别:传统接口是纯业务逻辑处理,性能稳定可预测;大模型接口的推理耗时高、算力依赖强、性能受输入 token 长度影响大。测试时需按 token 长度分层测试(短输入 <1k、中输入 1k-4k、长输入 >4k),关注实际业务的输入场景,考虑 API 调用限额,监控算力资源使用率,并设置合理的超时时间。

工程化优化

大模型业务的工程化优化分三层:模型层(选择轻量级模型、模型量化从 FP32 转为 INT8/INT4、使用 vLLM 等推理引擎)、接口层(封装统一调用接口、加入缓存机制、限流/熔断/降级、异步调用)、业务层(Prompt 优化精简 token、分场景处理简单与复杂任务、结果后处理校验)。

七、学习路线总结

对于身份安全测试工程师转型大模型工具链安全,建议按以下路线推进:

第一阶段 学习大模型基础架构,理解 Transformer 原理、LLM 推理流程、Prompt 机制和安全边界差异。第二阶段 深入工具调用与 Agent 机制,掌握 Function Calling 链路和 ReAct 决策循环。第三阶段 重点学习 MCP 协议,包括架构、通信机制、部署方式和 OWASP MCP 十大风险,这是与工作场景最直接相关的部分。第四阶段 了解 Skill 机制和工作流编排。第五阶段 进行安全测试实战整合,构建安全检查清单、完成 MCP Server 安全评估、复现端到端攻击链、设计链路安全检测方案。

如果时间有限,优先完成"阶段一速览 → 阶段二 → 阶段三 → 阶段五"这条主线,阶段四可在实践中按需补充。整个学习的核心目标是从传统 Web 安全的"结构化数据注入"思维,升级到大模型安全的"语义层注入 + 工具链路 + 自主行动放大"思维。

Logo

欢迎加入 MCP 技术社区!与志同道合者携手前行,一同解锁 MCP 技术的无限可能!

更多推荐