AI Agent是如何使用工具的:Tools、MCP、CLI、Skills四种机制深度解析

AI Agent是如何使用工具的:Tools、MCP、CLI、Skills 四种机制深度解析

如果说大模型是AI Agent的大脑」,那么工具调用系统就是 Agent 的「双手」。没有工具的Agent,就像一个被关小黑屋的聪明人,空有一堆想法却无法落地。今天咱们基于nanobot开源项目的源码分析,深入解析AI Agent的四种主流工具调用机制。

一、Tools:最基础的内置工具系统

什么是 Tools?

Tools 是 Agent 最原生的能力,直接注册到 ToolRegistry,每次调用大模型时都会通过 `tools` 参数完整传递。这样大模型就可以根据实际需求,调用对应的工具。

工作原理

# Tool 基类定义
class Tool(ABC):
    @property
    @abstractmethod
    def name(self) -> str: ...        # 工具名,如 "exec"
    
    @property
    @abstractmethod
    def description(self) -> str: ... # 一句话描述
    
    @property
    @abstractmethod
    def parameters(self) -> dict: ... # JSON Schema 参数定义
    
    @abstractmethod
    async def execute(self, **kwargs): ...  # 执行逻辑

实际示例:`exec` 工具的完整定义

@tool_parameters(
    tool_parameters_schema(
        command=StringSchema("The shell command to execute"),
        working_dir=StringSchema("Optional working directory"),
        timeout=IntegerSchema(
            60,
            description="Timeout in seconds. Increase for long-running commands",
            minimum=1,
            maximum=600,
        ),
    )
)
class ExecTool(Tool):
    name = "exec"
    description = "Execute a shell command and return its output. Use for tests, builds, package commands, git operations."
    
    async def execute(self, command, working_dir=None, timeout=60, **kwargs):
        # 安全检查:防止路径穿越、内网访问
        guard_error = self._guard_command(command, working_dir)
        if guard_error:
            return guard_error
        
        # 异步执行子进程
        process = await asyncio.create_subprocess_shell(
            command,
            cwd=working_dir,
            stdout=asyncio.subprocess.PIPE,
            stderr=asyncio.subprocess.PIPE,
        )
        
        try:
            stdout, stderr = await asyncio.wait_for(
                process.communicate(),
                timeout=timeout,
            )
        except asyncio.TimeoutError:
            await process.kill()
            return f"Error: Command timed out after {timeout} seconds"
        
        return stdout.decode() + stderr.decode() + f"\nExit code: {process.returncode}"

大模型看到的 Tool 定义

每次调用 LLM 时,OpenAI 协议会传输这样的 JSON:

{
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "exec",
        "description": "Execute a shell command and return its output...",
        "parameters": {
          "type": "object",
          "properties": {
            "command": {
              "type": "string",
              "description": "The shell command to execute"
            },
            "working_dir": {
              "type": "string",
              "description": "Optional working directory"
            },
            "timeout": {
              "type": "integer",
              "minimum": 1,
              "maximum": 600
            }
          },
          "required": ["command"]
        }
      }
    },
    // ... 其他工具
  ]
}

典型 Tools 清单

工具名 功能 典型调用
exec 执行 Shell 命令 exec(command="git status")
read_file 读取文件内容 read_file(path="src/main.py")
write_file 写入文件 write_file(path="README.md", content="# Project")
grep 全局搜索 grep(pattern="TODO", path="src/")
apply_patch 应用代码补丁 apply_patch(diff="diff --git ...")
web_search 联网搜索 web_search(query="Python 3.12 release notes")

关键特征

✅ 每次都传递:所有注册的 Tool 每次都会传给大模型
✅ 强类型约束:通过 JSON Schema 严格校验参数
✅ 统一入口:所有调用都经过 `ToolRegistry.execute()`
❌ 扩展性有限:太多 Tool 会撑爆上下文窗口

二、MCP:远程工具协议(Model Context Protocol)

什么是 MCP?

MCP 是一个开放协议,允许 Agent 连接到远程服务器提供的工具,就像调用本地工具一样。

工作原理

MCP同样是注册到ToolRegistry,每次调用大模型时都会通过 `tools` 参数完整传递。这样大模型就可以根据实际需求,调用对应的MCP。ToolRegistry通过MCP Tool Wrapper,实现MCP工具的调用。

┌─────────────────────────────────────────────────────┐
│ 大模型                                               │
│  prompt: "打开 bing.com 并截图首页"                   │
└───────┬─────────────────────────────────────────────┘
        │
        ▼ 大模型决定调用:mcp_browser_navigate(url="https://bing.com")
┌─────────────────────────────────────────────────────┐
│ ToolRegistry                                        │
│   └─ MCP Tool Wrapper(动态生成)                   │
│      name: mcp_browser_navigate                     │
│      description: Navigate to a URL with browser    │
│      parameters: {url: string}                      │
└───────┬───────────────────────────────────────────────┘
        │
        ▼ STDIO / HTTP 传输调用请求
┌─────────────────────────────────────────────────────┐
│ MCP Server(本地 Node.js 进程)                     │
│   └─ 真正控制 Playwright/Puppeteer 浏览器           │
│      → 访问 URL                                     │
│      → 截图                                          │
│      → 返回 base64 图片                             │
└─────────────────────────────────────────────────────┘

MCP示例:Playwright MCP Server

MCP Server 暴露的工具列表:

MCP 工具名 功能
browser_navigate 导航到指定 URL
browser_click 点击页面元素
browser_evaluate 执行 JavaScript
browser_screenshot 截图
browser_pdf 导出 PDF

Agent 调用时的实际工具名(自动加前缀):

mcp_browser_navigate
mcp_browser_click
mcp_browser_evaluate
mcp_browser_screenshot

完整调用示例:

用户:帮我打开 bing.com 并截一张首页的图
    ↓
[1] 大模型看到 Tool 列表中有 mcp_browser_navigate
    ↓
[2] 调用工具:
    mcp_browser_navigate(url="https://www.bing.com")
    ↓
[3] MCP Server 控制浏览器访问,返回:"已导航到 bing.com,页面标题是 Bing"
    ↓
[4] 大模型继续调用:
    mcp_browser_screenshot(full_page=true)
    ↓
[5] 返回 base64 图片
    ↓
[6] 大模型:"已完成截图,这是 bing.com 首页" + 显示图片

MCP 的巧妙之处

1. 工具名自动生成:`mcp_{server_name}_{tool_name}`
2. Schema 自动转换:MCP 定义自动转成 OpenAI Function Schema
3. 支持资源和提示:不仅是工具,还可以是数据源和 Prompt 模板

为什么 MCP 很重要?

MCP 把「工具」从代码级的扩展,变成了服务级的扩展。
任何人都可以用任何语言写一个 MCP Server,Agent 立刻就能用它的所有能力 — 无需修改 Agent 一行代码。

三、CLI APP:最巧妙的混合形态

什么是 CLI APP?

CLI APP 是 NanoBot 最精妙的设计之一,它通过 「统一工具 + 动态生成 Skill + 运行时提示」 的三重组合,实现了零成本扩展数百个外部应用。

四层架构

CLI APP统一通过run_cli_app注册到ToolRegistry,这个工具注册时会列出全部已安装的APP列表,每次调用大模型时都会通过 `tools` 参数进行传递,这样大模型知道有哪些安装的CLI APP。
同时CLI APP在安装时会主动生成skill,skill也会附在提示词中。这样,当大模型准备用一个skill时,就会首先找到run_cli_app注册的工具,通过run_cli_app工具执行对应的命令,做到了安全控制。

┌─────────────────────────────────────────────────────────┐
│ 【1】统一入口:run_cli_app 工具                          │
│     只有这一个 Tool 注册到 ToolRegistry                  │
│     description 动态列出已安装的 APP 列表                 │
└──────────────────┬──────────────────────────────────────┘
                   │
┌──────────────────▼──────────────────────────────────────┐
│ 【2】CLI-Anything Registry(远程目录)                   │
│     维护数百个可用 CLI APP 的元数据:安装命令、入口点等   │
└──────────────────┬──────────────────────────────────────┘
                   │
┌──────────────────▼──────────────────────────────────────┐
│ 【3】自动生成 Skill                                      │
│     安装 APP 时,自动在 workspace/skills/ 下生成 SKILL.md│
│     包含详细用法、参数说明、最佳实践                      │
└──────────────────┬──────────────────────────────────────┘
                   │
┌──────────────────▼──────────────────────────────────────┐
│ 【4】Runtime Context 动态提示                            │
│     用户输入 @feishu 时,在消息末尾悄悄注入:              │
│     "CLI App Mention: @feishu,用 run_cli_app 调用它"    │
└─────────────────────────────────────────────────────────┘

完整调用链路示例

场景:用户想让 Agent 用飞书 CLI 导出今天的会议记录

Step 1:用户输入

用户:帮我用 @feishu 导出一下今天的会议记录

Step 2:Gateway 检测 @ 提及,注入 Runtime Context
用户消息实际变成了这样(用户看不到这部分):

帮我用 @feishu 导出一下今天的会议记录

[Runtime Context]
CLI App Mention: @feishu (installed; tool=run_cli_app;
entry_point=feishu; skill=skills/cli-app-feishu/SKILL.md).
Read the skill when useful, then run this app with run_cli_app;
do not bypass it with shell.
[/Runtime Context]

Step 3:大模型看到提示,决定先读 Skill

模型思考:
用户提到了 @feishu
Runtime Context 说这是一个已安装的 CLI APP
应该先用 read_file 读一下对应的 SKILL.md 了解用法

→ 调用工具:
read_file(path="~/.openclaw/workspace/skills/cli-app-feishu/SKILL.md")

Step 4:获取到 Skill 完整内容

Skill 内容示例:

name: cli-app-feishu
description: 使用飞书 CLI 与 Lark 套件交互

# Feishu CLI
使用此技能当用户要求操作飞书文档、表格、机器人、会议等。

## 常用命令

### 会议相关

# 列出会议
feishu meeting list [--start-date YYYY-MM-DD] [--end-date YYYY-MM-DD]

# 获取会议详情
feishu meeting get <meeting_id>

# 导出会议纪要
feishu meeting notes <meeting_id> --format json

### 优先使用 JSON 输出
所有命令支持 `--json` 参数,可以获得结构化的机器可读输出,优先使用此方式。

Step 5:大模型理解用法,调用 run_cli_app

模型思考:
现在我知道怎么用了
命令是 feishu meeting list --start-date 2026-06-16
加上 --json 获取结构化输出

→ 调用工具:
run_cli_app(
  name="feishu",
  args=["meeting", "list", "--start-date", "2026-06-16", "--json"]
)

Step 6:获取会议列表,整理输出

工具返回:

{
  "meetings": [
    {
      "id": "MSxY2ZkOWE",
      "topic": "产品周会",
      "start_time": "2026-06-16 10:00:00",
      "duration": 60,
      "attendees": ["张三", "李四"]
    },
    {
      "id": "MTdkNmFjYj",
      "topic": "技术方案评审",
      "start_time": "2026-06-16 14:00:00",
      "duration": 90,
      "attendees": ["王五", "赵六", "我"]
    }
  ]
}

大模型整理后回答用户:

今天你有两个会议:

📅 产品周会(10:00-11:00)
   参与人:张三、李四

📋 技术方案评审(14:00-15:30)
   参与人:王五、赵六、你

需要我帮你导出某个会议的详细纪要吗?

CLI APP 生态示例

当前 CLI-Anything 目录已经有上百个可用 APP:

分类 示例 APP 用途
办公协作 feishu, notion, obsidian 文档、笔记、协作
AI 工具 ollama, openai, stable-diffusion 本地模型、AI 生成
媒体处理 ffmpeg, gimp, inkscape 音视频、图像处理
开发工具 github, gitlab, docker Git 操作、容器管理
3D/CAD blender, freecad 3D 建模、CAD 设计
浏览器 playwright, chrome-cli 网页自动化

CLI APP 的设计智慧

设计决策 解决的问题
所有 APP 共用一个 run_cli_app 工具 避免几百个 APP 撑爆 Tool 列表
description 动态生成 模型只看到真正安装了的 APP
@ 提及触发运行时提示 模型注意力聚焦在用户想用的那个 APP
每个 APP 一个自动生成的 Skill 复杂用法不用占用常驻 Token

本质:CLI APP 系统是一个「延迟加载的 Tool 扩展机制」,在不增加任何常驻 Tool 的前提下,把 Agent 的能力边界扩展到了数百个外部应用。

CLI APP执行方式与安全设计

CLI APP通过argv数组执行,不走shell,这是极其重要的安全设计。

result = subprocess.run(
    [resolved, *clean_args],  # ← 传的是 list,不是字符串,不走shell
    cwd=str(cwd),
    capture_output=True,
    text=True,
    timeout=effective_timeout,
    env=os.environ.copy(),
    # 注意:没有 shell=True!
)

两种方式的对比:

# exec 工具(走 shell)
process = await asyncio.create_subprocess_shell(
    command,  # ← 字符串,走 shell 解释
    ...
)

# run_cli_app 工具(直接 execve)
result = subprocess.run(
    [resolved, *clean_args],  # ← 数组,直接系统调用
    ...
)

# 就算大模型被 prompt injection 攻击,想执行 `feishu; rm -rf /`,也会失败。**
# 因为:
1. `;` 分号是 shell 的语法
2. `run_cli_app` 不走 shell
3. 它会把 `meeting;` 当成一个**普通的参数字符串**传给 feishu 命令
4. feishu 会报错说「没有这个参数」
exec run_cli_app
执行方式 shell解释字符串
subprocess.run("feishu meeting list", shell=True)
直接argv调用
subprocess.run(["feishu", "meeting", "list"])
管道/重定向 ✅ 支持 ❌ 不支持
变量替换 ✅ 支持 ❌ 不支持
命令注入风险 高,字符串拼接会导致命令注入
meeting; rm -rf /
低,argv 数组完全避免了 shell 注入
可以绕过白名单 可以 不可能

四、Skills:四种触发机制

什么是Skills

Skill是Markdown文件格式的Agent专业知识包,把领域知识、工作流、最佳实践打包成可复用单元,无需写代码就能按需扩展Agent的认知和行为能力(怎么写论文、怎么用飞书、怎么写代码、怎么生成财经日报)。 一般安装在workspace/skills/目录下。基于NanoBot源码分析,Skills 有四种完全不同的触发和调用机制:

方式一:Always Skill — 强制常驻注入

触发时机:会话启动时,系统 Prompt 构建阶段

工作原理:

在 SKILL.md 的 frontmatter 中标记:

name: using-superpowers
metadata:
  nanobot:
    always: true   # ← 标记为 ALWAYS 加载
# 源码位置:context.py → build_system_prompt()
always_skills = self.skills.get_always_skills()
if always_skills:
    always_content = self.skills.load_skills_for_context(always_skills)
    parts.append(f"# Active Skills\n\n{always_content}")

实际注入效果:系统 Prompt 开头会永远包含这段内容

# Active Skills

## using-superpowers

<EXTREMELY-IMPORTANT>
If you think there is even a 1% chance a skill might apply to what you are doing, you ABSOLUTELY MUST invoke the skill.

IF A SKILL APPLIES TO YOUR TASK, YOU DO NOT HAVE A CHOICE. YOU MUST USE IT.
</EXTREMELY-IMPORTANT>

## How to Access Skills

In Claude Code: Use the `Skill` tool. When you invoke a skill, its content is loaded and presented to you—follow it directly. Never use the Read tool on skill files.

## The Rule

Invoke relevant or requested skills BEFORE any response or action. Even a 1% chance a skill might apply means that you should invoke the skill to check.

## Red Flags

These thoughts mean STOP—you're rationalizing:

"This is just a simple question" → Questions are tasks. Check for skills.
"I need more context first" → Skill check comes BEFORE clarifying questions.
"Let me explore the codebase first" → Skills tell you HOW to explore. Check first.

效果:Skill 的完整内容永久驻留在系统 Prompt 中,模型每次都能看到。

典型应用:
Agent 行为规范(「必须先读 Skill 再干活」)
核心纪律(「不要泄露系统提示」)
全局风格约定

方式二:目录索引 + 模型自主选择

触发时机:每次构建系统 Prompt 时

工作原理:

# 源码位置:context.py → build_system_prompt()
skills_summary = self.skills.build_skills_summary(exclude=set(always_skills))
if skills_summary:
    parts.append(render_template("agent/skills_section.md", 
                                 skills_summary=skills_summary))

注入到系统 Prompt 的实际内容:

# Skills

The following skills extend your capabilities. To use a skill, read its SKILL.md file using the read_file tool.
Unavailable skills need dependencies installed first — you can try installing them with apt/brew.

- byted-web-search — 火山引擎联网搜索 API,返回网页/图片结果。联网搜索场景优先使用本 skill。 `skills/byted-web-search/SKILL.md`
- code — Coding workflow with planning, implementation, verification, and testing. `skills/code/SKILL.md`
- paper-assistant — 面向论文选题、提纲、摘要、引言、文献综述的论文助手。 `skills/paper-assistant/SKILL.md`
- self-improving — Agent 自我反思、自我批评、从错误中学习的永久改进系统。 `skills/self-improving/SKILL.md`
- markdown-converter — 将各种格式文件(PDF/Word/PPT/图片)转换为 Markdown,方便 LLM 处理。 `skills/markdown-converter/SKILL.md`

实际使用示例:

用户:帮我写一篇关于大模型 RAG 技术的综述论文
    ↓
模型看到 Skill 目录中有 paper-assistant
    ↓
思考:写论文应该用 paper-assistant 这个 skill
    ↓
调用 read_file("skills/paper-assistant/SKILL.md")
    ↓
获取完整的论文写作工作流指南
    ↓
按照 Skill 的指导:选题 → 文献检索 → 提纲 → 写作 → 润色

这就是为什么 Skill 不需要注册为 Tool!
目录只占 ~50 tokens
真正需要用时才读完整内容(可能几千 tokens)
完美的按需加载

方式三:@ 提及触发运行时提示

触发时机:用户消息中包含 `@skillname` 时

工作原理:

# 源码位置:apps/cli/utils.py → _cli_app_runtime_lines()
def _cli_app_runtime_lines(text, metadata, workspace):
    mentions = CliAppManager(workspace).mentioned_installed_apps(text)
    return [
        f"CLI App Mention: @{item['name']} "
        f"(installed; tool={item['tool']}; skill={item['skill']}). "
        "Read the skill when useful, then run this app with run_cli_app."
        for item in mentions
    ]

注入位置:不是系统 Prompt,而是附加在用户消息末尾的「Runtime Context」区域。

实际示例:

用户输入:用 @ollama 跑一下 qwen2.5:7b 模型,测试一下推理速度
          ↑
          @ 提及被检测到

消息被悄悄加上:

[Runtime Context]
CLI App Mention: @ollama (installed; tool=run_cli_app;
entry_point=ollama; skill=skills/cli-app-ollama/SKILL.md).
Read the skill when useful, then run this app with run_cli_app;
do not bypass it with shell.
[/Runtime Context]

效果:
精确匹配用户意图
避免模型猜来猜去
直接告诉模型「该用哪个 Tool + 该读哪个 Skill」

方式四:外部系统显式指定

触发时机

通过 Agent 调用参数、Gateway 插件、Session Metadata 等方式动态指定

NanoBot 中的实际实现

def build_messages(
    self,
    history: list[dict[str, Any]],
    current_message: str,
    skill_names: list[str] | None = None,  # ← 外部传入要加载的 Skill
    ...
) -> list[dict[str, Any]]:

def build_system_prompt(
    self,
    skill_names: list[str] | None = None,  # ← 外部指定的 Skill 列表
    ...
):
    # Always Skill 先被加载
    always_skills = self.skills.get_always_skills()
    if always_skills:
        always_content = self.skills.load_skills_for_context(always_skills)
        parts.append(f"# Active Skills\n\n{always_content}")
    
    # 外部指定的 Skill 被额外注入
    if skill_names:
        specified_content = self.skills.load_skills_for_context(skill_names)
        if specified_content:
            parts.append(f"# Specified Skills\n\n{specified_content}")

调用时传入

# 通过 OpenClaw Gateway 调用时指定要预加载的 Skill
response = agent.chat(
    message="帮我用飞书导出会议纪要",
    # ↓ 外部显式指定
    skill_names=["cli-app-feishu", "using-superpowers"],
    session_id="..."
)

典型场景
工作流编排系统在特定步骤指定要用的 Skil,例如「导出步骤必须加载 feishu Skill」
Gateway 插件根据当前用户身份、渠道动态注入特定 Skill
多 Agent 协作时,父 Agent 告诉子 Agent「你这次任务需要用到这些 Skill」

几种方式的区别

方式 触发方 强制性
方式一(Always) 系统标记 全局永久强制
方式二(目录索引) 大模型自主选择 可选
方式三(@提及) 用户输入触发 本次对话推荐
方式四(显式指定) 外部系统强制 本次调用必须加载

五、四种机制对比总表

机制 注册位置 加载时机 典型例子 扩展性 典型 Token 成本
Tools ToolRegistry 每次都传 exec, read_file 低(~几十个) 高(1-2k)
MCP 动态注册到 ToolRegistry 连接后可用 浏览器控制、数据库查询 中(每个 Server 几十个) 中(几百)
CLI APP 统一 run_cli_app + 自动生成 Skill @ 提及或按需读取 飞书、Ollama、Obsidian 极高(数百个) 极低(只有目录索引)
Skills 文件系统,不注册 Always 或按需读取 论文助手、编码规范、工作流 无限 极低(真正需要时才读)

六、为什么要搞这么复杂?

核心矛盾

大模型的上下文窗口是稀缺资源,但我们又想让 Agent 拥有无限扩展的能力。

分层策略

层级 用途 Token 成本
Tools 最核心、最常用的能力 高(每次都传)
MCP 某个领域的一组扩展能力 中(连接后常驻)
CLI APP 成百上千的外部应用 低(只有目录索引)
Skills 各种专业知识、工作流、最佳实践 极低(真正需要时才读)

答案总结

不是所有能力都需要成为 Tool。
高频刚需 → 做 Tool
领域扩展 → 做 MCP
外部应用 → 做 CLI APP
知识、流程、规范 → 做 Skill

四种机制各司其职,共同构成了 AI Agent 的「无限能力宇宙」。

结语

AI Agent 的工具系统远不止 `function_call` 那么简单。从 Tools 到 MCP 到 CLI APP 再到 Skills,我们看到的是一条清晰的演进路径:从「让 Agent 能做事」到「让 Agent 会做事」。未来最强大的 Agent,不会是工具最多的那个,而是最懂怎么用好工具的那个。

构建可靠的Skill触发机制

构建可靠的Skill触发机制

Skill触发机制

在大模型应用开发中,我们常常过度关注Prompt编写和模型效果,却忽略了一个更底层的问题:Skill(工具/能力)应该在什么时候、以什么方式被触发?

一个成熟的 AI Agent 系统,绝不应该把所有压力都交给 LLM 去“猜”。如果触发机制设计不好,要么上下文爆炸导致成本失控,要么意图误判导致用户体验灾难。

本文将系统性拆解Skill触发的完整生命周期,从事件源头到执行管控,为你提供一套可落地的架构设计参考。

一、触发源:谁在发起请求?

一切始于“事件”。我们将触发源分为三类:用户交互、系统调度 和 外部事件。

1. 用户交互

这是最直接的入口。

• 自然语言输入:用户说“帮我订张票”。
• 会话上下文:多轮对话的延续,例如用户接着上一句问“那取消呢?”。

2. 系统调度

这是自动化能力的核心,也是最容易产生复杂逻辑的地方。

• Hook 触发:监听生命周期。例如“对话开始时自动加载用户画像”、“任务失败时触发告警”。
• Cron 触发:定时任务。例如“每天早上 9 点生成数据日报”。
• Agent 协作:多 Agent 架构中,Planner Agent 调用 Executor Agent。
• Meta Skill 递归:Skill 调用 Skill,形成链式反应(例如“部署”技能调用“测试”技能)。

3. 外部事件

连接现实世界的桥梁。

• Webhook:GitHub Push、支付回调。
• 队列消息:异步任务消费。
• 状态变更:数据库更新、文件上传完成。

二、决策与路由:选对 Skill 是关键

有了事件,下一步是决定“用哪个 Skill”。这是整个架构的大脑。

1. 前置路由(Pre-LLM Router)

为了省 Token、降延迟,在部分场景下可以考虑不用 LLM。

• 黑白名单:简单粗暴地禁用或推荐。
• 字符/正则匹配:如“帮我查天气”直接命中天气 Skill。
• 向量检索:基于语义相似度,从海量 Skill 库中召回候选。
• 条件断言:基于状态码、阈值(如 CPU > 80% 触发扩容)。
• 模态匹配:多模态场景下,看到图片自动路由到识图 Skill,看到 PDF 自动路由到解析 Skill。

2. 显式路由(Resolved Invocation)

用户或系统已经明确指定了目标。

• /command、@skill、UI 按钮点击。
• API 调用直接携带 skill_id。

注意:显式路由不应关心 Prompt 注入细节,那是下一层的事。

3. LLM 路由(LLM-based Resolver)

当意图模糊时,交给大模型裁决。

• 全量匹配:把所有 Skill 塞进 Prompt。不推荐,仅限玩具项目。
• 启发式匹配(主流):只注入 Skill 的 描述(Description),让 LLM 选名字,再加载详情。
• 混合模式:核心 Skill 常驻 Prompt,长尾 Skill 按需加载。

4. 隐式与兜底

• 隐式路由:没命中任何规则,LLM 自由发挥。仅限低风险只读场景。
• 未命中处理:拒绝执行、引导澄清或转人工。

三、注入策略:上下文管理的艺术

选对了 Skill,还要考虑怎么把它放进上下文(Context)。这是成本控制的核心。

策略 适用场景 说明
全量注入 Skill 极少 包含 Instructions、Examples、Tool Spec
精准加载 显式调用 只加载必要的 Schema
摘要+懒加载 大规模系统 先读描述,命中后再 Fetch 详情
常驻注入 核心高频 固定在 System Prompt 中(需严格限制数量)

红线:所有策略必须遵守 Token Budget(上下文窗口约束)。

四、执行形态:不仅是函数调用

Skill 的执行方式决定了系统的复杂度。

• 即时执行(Atomic):无状态调用,用完即走(如查天气)。
• 确认式执行:高风险操作(如转账、删库),必须用户 Confirm。
• 工作流执行(Stateful):代码评审、发布流水线、多轮审批,涉及状态机。
• 异步任务:图像识别、PDF 解析、大数据计算,需要队列和回调。
• 递归与协作:复杂的自动化任务,涉及多 Agent 协同。

五、管控机制:工程化落地的保障

没有管控,就没有生产级系统。

1. 权限与作用域

• 鉴权:租户隔离(Tenant Isolation),用户 A 不能调用用户 B 的私有 Skill。
• 风险等级:标记 read_only、mutates_data,限制高危触发。

2. 冲突消解

• 互斥组:代码生成不能同时用 GitHub Copilot 和内部私有模型。
• 优先级与抢占:安全风控 Skill 可以随时中断当前执行(Preemption)。
• 去重与节流:防止 Webhook 抖动导致重复执行。

3. 参数与幂等

• 参数绑定:来源可以是 LLM 提取、用户表单或外部 Payload。
• 幂等性:使用 Idempotency Key 确保重试不会造成副作用(如重复扣款)。

4. 可观测性

• 触发追踪(Trace):记录为什么选了这个 Skill(Reasoning)。
• 诊断事件:记录 candidate_list(召回了谁)、selected_reason(为什么选它)、rejected_by_policy(谁被拦了)。

总结

一个健壮的 Skill 触发系统,应该是分层的:

1. 快路径(Fast Path):规则、正则、显式调用 —— 快、准、省。
2. 慢路径(Slow Path):LLM 路由、向量检索 —— 智能、灵活。
3. 安全网(Safety Net):权限、熔断、降级 —— 稳。

不要试图用LLM解决所有路由问题,也不要试图让所有Skill都活在Prompt里。分离触发源、路由逻辑与执行策略,你的Agent才会真正从Demo走向生产。

AI Agent基础架构解析

AI Agent基础架构解析

AIAgent.webp

本文将从架构视角系统拆解AI Agent的核心模块,完整呈现AI Agent基础能力:

一、基础运行时:AI Agent的内核底座

Platform Runtime 是AI Agent的底层基石,对应传统操作系统的内核基础服务,负责提供配置、环境、日志、敏感信息等通用基础能力,保障Agent稳定、可配置、可观测地运行。

1.1 配置管理

配置是Agent运行的“参数面板”,AI Agent采用分层配置架构,兼顾灵活性与统一性:
分层配置:遵循“默认配置 → 全局配置 → 会话级配置 → 任务级配置”的优先级覆盖机制,不同层级的配置可以按需叠加,既保证全局管控能力,又支持单任务的个性化调优。
热更新:支持配置的动态生效,无需重启Agent进程即可调整模型参数、工具权限、限流规则等,满足生产环境的动态运维需求。

1.2 环境变量与启动引导

运行时环境的一致性是Agent可复现运行的前提:
运行时注入:支持通过环境变量、配置文件、启动参数等多渠道注入运行时信息,适配容器化、本地、云端等不同部署环境。
启动校验:进程启动时自动执行依赖检查、配置合法性校验、模型连通性测试、工具可用性探测,提前发现环境问题,避免运行时异常。
健康检查(Health Check):提供标准健康探针,支持存活探测与就绪探测,可无缝接入K8s等容器编排平台,实现故障自动重启与流量调度。

1.3 敏感信息管理

针对AK/SK、Token、密钥等敏感凭据,AI Agent提供统一的敏感信息管理能力,避免硬编码与明文泄露:
支持与密钥管理服务(KMS)集成,敏感信息加密存储,运行时按需解密注入。
凭据与Agent代码、配置分离,不同权限的Agent只能访问授权范围内的凭据,落地最小权限原则。

1.4 日志管理

全链路可观测性是生产级Agent的必备能力:
日志分级:支持DEBUG、INFO、WARN、ERROR、FATAL多级日志控制,可按需调整输出粒度。
日志存储:支持本地文件、ELK、Loki等多种存储后端,统一日志格式,支持全链路trace_id追踪。
日志脱敏:内置敏感信息脱敏规则,自动对日志中的密钥、手机号、身份证号等信息进行掩码处理,满足合规要求。

二、智能体循环:Agent 的核心调度引擎

Agent Loop 是AI Agent的“CPU调度器”,是智能体“感知-规划-行动-反馈”闭环的核心载体,决定了Agent任务的执行流程与控制能力。

2.1 Turn 生命周期

一次完整的用户交互对应一个Turn,其执行流程遵循标准化的生命周期:

input → pre-hooks → plan → tool-call loop → finish → post-hooks
  1. input:接收用户输入、事件触发或任务指令,作为本轮循环的起点。
  2. pre-hooks:前置钩子切面,可在模型推理前执行输入校验、内容审核、上下文注入、权限校验等逻辑,是扩展能力的核心切入点。
  3. plan:大模型基于当前上下文与可用能力,进行任务规划,决定下一步行动。
  4. tool-call loop:工具调用子循环,模型生成工具调用指令,执行引擎执行工具并将结果回灌上下文,模型再基于结果进行下一轮决策,如此往复。为防止无限循环,系统会设置单次循环tool call最大次数阈值,超出后强制终止。
  5. finish:模型判定任务完成,生成最终回复,结束本轮推理。
  6. post-hooks:后置钩子切面,可执行结果审计、记忆持久化、指标上报、后续任务编排等收尾逻辑。

2.2 执行控制

很多时候,任务的可控性比自主性更重要。AI Agent提供完整的执行控制能力:
中断与恢复:支持任务的挂起与断点恢复,可保存当前执行现场(上下文、工具状态、进度),在中断后从断点继续执行。
任务取消:支持主动取消运行中的任务,立即终止模型推理与工具执行,释放资源。
任务超时:为每个任务设置整体超时时间与单轮工具调用超时时间,避免长任务阻塞资源。
进程退出:支持优雅退出机制,收到退出信号后保存现场、释放资源、完成收尾工作后再终止进程,避免状态损坏。

三、大模型接入层:统一的模型驱动抽象

LLM Layer 是AI Agent的“驱动层”,向下适配不同厂商、不同形态的大模型,向上提供统一的调用接口,屏蔽底层模型差异,让上层业务逻辑与具体模型解耦。

3.1 多厂商支持

AI Agent 构建了一套标准化的模型适配框架,实现“一次开发,多模型运行”:
标准协议兼容:原生兼容OpenAI协议、Claude协议,支持所有遵循这两类协议的模型服务,同时支持本地部署的开源模型接入。
统一能力适配:对文本补全(completion)、对话(chat)、工具调用(tool_call)三类核心能力进行统一抽象,无论底层模型原生是否支持,都通过适配层提供一致的调用体验。
模型参数统一:对temperature、max_tokens、response_format、thinking模式等通用参数进行标准化封装,同时保留模型专属参数的扩展能力。
认证与代理管理:统一管理各厂商的AK/SK、OAuth认证信息,支持代理(Proxy)配置,满足企业网络环境下的模型访问需求。

3.2 多模态支持

AI Agent 不局限于文本交互,支持全模态的输入输出能力:
支持文字、图片、语音(TTS/STT)等多模态信息的输入与输出,让Agent具备视觉、听觉感知能力。
支持文件作为输入,可直接解析文档、表格、代码文件等多种格式,将文件内容转化为模型可理解的上下文。

3.3 Prompt 工程体系

Prompt是Agent与大模型交互的“指令语言”,AI Agent提供系统化的Prompt工程能力:
System Prompt / Role Prompt:支持分层的角色设定,可配置全局人设、Agent专属角色、任务级指令,实现灵活的人格与能力设定。
Tool Calling Schema:自动将注册的工具转化为对应模型格式的工具定义Schema,无需手动编写适配代码。
Fallback 机制:当模型无法正确生成工具调用格式时,提供降级处理逻辑,比如通过自然语言解析、重试、切换模型等方式保障任务继续执行,提升系统鲁棒性。

四、会话与记忆:智能体的状态管理系统

如果说Agent Loop是Agent的“思考过程”,那么会话与记忆就是Agent的“大脑记忆”,负责管理Agent的状态、历史与知识,是智能体具备连续性与成长性的核心。

4.1 会话管理

会话是Agent与用户交互的上下文容器,对应传统OS的“进程”概念:
会话生命周期:管理会话的创建、激活、挂起、归档、销毁全生命周期,支持长时会话与临时会话两种模式。
会话归属:每个会话绑定唯一的用户与Agent实例,支持多用户、多Agent的并发隔离。
会话隔离:不同会话之间的上下文、记忆、工具状态完全隔离,避免信息串扰。
会话存储:支持内存、数据库、文件等多种存储介质,可按需选择持久化策略,满足会话持久化与历史回溯需求。

4.2 上下文管理

上下文是模型推理的直接输入,其质量与长度直接影响Agent的表现:
Prompt模板化:将系统提示、角色设定、历史消息、工具定义等内容模板化,支持动态变量注入,保证Prompt结构的一致性与可维护性。
上下文优化:当上下文长度接近模型窗口上限时,自动执行压缩、摘要、丢弃等优化策略,在保留关键信息的前提下控制上下文长度,保障推理效率。

4.3 记忆管理

AI Agent 构建了分层记忆体系,模拟人类的记忆机制,让Agent具备持续学习与经验沉淀能力:
灵魂文件:定义Agent的核心人格、底层价值观、核心能力边界,是Agent的“自我认知”,分为SOUL(底层灵魂)、Agent(角色设定)、Me(自我认知)三个层级。
短期记忆(Working Memory):即当前会话的上下文,对应人类的工作记忆,容量有限,用于当前任务的推理。
长期记忆(LTM):持久化存储的历史交互、经验总结、关键事实,跨会话生效,对应人类的长期记忆。
Dream(记忆提炼):定期对历史交互进行离线提炼,从大量对话中抽取关键知识、经验教训、行为模式,沉淀为结构化的长期记忆,类似人类睡眠时的记忆整理。
知识库(RAG):对接外部知识库,通过检索增强生成的方式,让Agent可以调用外部专业知识,解决长尾问题。

五、工具与执行:智能体的行动能力底座

工具是Agent与真实世界交互的“手脚”,工具与执行模块是AI Agent的“系统调用层”,负责管理所有可执行能力,并提供安全、可控的执行环境。

5.1 工具注册表

AI Agent 提供统一的工具注册中心,所有工具(内置工具、MCP工具、CLI工具、Skill)都在此注册与管理:
工具元数据管理:名称、描述、参数Schema、权限要求、执行后端等信息统一维护。
工具发现与路由:Agent运行时可动态查询可用工具,根据权限与场景自动筛选可调用的工具集合。

5.2 内置工具集

AI Agent 内置了丰富的基础工具,覆盖Agent日常执行的核心场景:
文件系统类:目录操作、文件读写、文件内容搜索、批量处理等。
网络类:网络搜索、网页内容获取、文件下载等。
执行类:系统命令执行、异步长任务执行、代码沙箱执行等。
开发类:GitHub仓库操作、代码版本管理等。

5.3 MCP 协议支持

MCP(Model Context Protocol)是行业正在形成的标准化工具协议,AI Agent原生支持MCP,实现工具生态的互联互通:
MCP工具注册:可快速接入第三方MCP Server,自动同步其工具列表与定义。
MCP统一调用:将MCP工具与内置工具统一纳管,对上层Agent Loop透明,无需区分工具来源。

5.4 CLI 工具体系

针对命令行类工具,AI Agent提供专门的CLI工具管理能力:
CLI工具注册与标准化封装,将零散的命令行工具转化为可被模型调用的标准化工具。
CLI技能仓库:提供可复用的CLI技能包,支持检索、安装、版本管理,实现CLI能力的开箱即用。

5.5 Skill 技能体系

Skill是更高阶的、面向特定场景的复合能力包,比单一工具更复杂,包含多步操作与领域知识:
Skill规范:定义标准的Skill格式,包含manifest(元数据声明)、execute(执行逻辑)、依赖声明等。
Skill命中策略:针对不同规模的技能库,提供多种命中方式:
全量注入Prompt:技能数量少时,将所有技能描述全部注入上下文,由模型自主选择。
元技能引导法:工作开始前,先由模型判断哪些技能可能有用,再按需加载对应技能。
触发词前置匹配:通过关键词快速匹配技能,实现低延迟触发。
向量相似度匹配:技能数量庞大时,通过向量检索匹配最相关的技能,精准召回。
Skill仓库:提供中心化的技能市场,支持技能的发布、检索、安装、版本管理,构建可复用的能力生态。

5.6 定时任务与编排

支持基于Cron的定时任务能力,可实现Agent的自主周期性工作:
任务编排:支持配置定时触发的Agent任务,定义执行周期、触发条件、任务参数。
重试策略:任务执行失败时,可按配置的重试次数、间隔、退避策略自动重试,保障任务成功率。

5.7 工具执行层管控

执行安全是工具能力的底线,AI Agent对所有工具执行进行统一管控:
多执行后端:支持local(本地执行)、microvm(轻量虚拟机)、docker(容器沙箱)、remote worker(远程工作节点)多种执行后端,可根据安全等级灵活选择。
资源配额:对每个工具执行设置CPU、内存、磁盘、执行时长的配额限制,防止恶意或异常工具耗尽系统资源。
工作目录隔离:每个Agent、每个会话都有独立的工作目录,禁止越权访问其他目录的文件。
输入Schema校验:工具执行前自动校验输入参数是否符合Schema定义,拦截非法输入。
执行审计日志:所有工具调用的参数、结果、耗时、调用者都完整记录,支持事后审计与追溯。

六、扩展与集成:连接内外的交互接口

AI Agent 提供丰富的扩展与集成能力,支持业务侧自定义逻辑,也支持对接各类外部渠道与交互界面。

6.1 钩子回调(Hook)

Hook是AI Agent的扩展机制,类似传统OS的系统钩子,允许开发者在不修改核心代码的情况下插入自定义逻辑:
切面管理:覆盖Turn生命周期的各个关键节点(输入、推理前、工具调用前、工具调用后、输出、错误等),提供标准化的切面扩展点。
失败策略:支持自定义失败处理钩子,可配置重试、降级、告警、人工介入等多种失败处理逻辑。

6.2 消息总线(MsgBus)

消息总线是AI Agent内部的事件通信机制,实现各模块之间的解耦与异步协作:
事件类型:定义标准化的事件类型,包括会话事件、任务事件、工具事件、模型事件、安全事件等。
订阅模型:支持发布-订阅模式,各模块可订阅感兴趣的事件,事件发布后自动推送给所有订阅者。
事件路由:支持基于事件类型、来源、优先级的路由策略,可实现事件的过滤、转换、转发。

6.3 Channel 渠道集成

Channel是Agent与外部用户交互的通道,AI Agent内置多渠道适配能力:
原生支持WebSocket实时通信渠道,满足Web端、客户端的实时交互需求。
内置飞书、钉钉、企业微信等主流办公IM渠道的适配,可快速将Agent部署到企业办公场景。

6.4 UI 集成方案

AI Agent 提供多形态的UI集成支持,适配不同的使用场景:
TUI:终端交互界面,适合开发者本地调试与命令行场景使用。
WebUI:Web端交互界面,可快速部署为网页应用,面向终端用户。
Desktop APP:桌面客户端,支持Windows、macOS、Linux,提供本地化的Agent体验。
Mobile APP:移动端适配,支持iOS与Android,实现随身的智能助手。

七、安全防护:项目落地的安全底线

安全是Agent从Demo走向生产的核心门槛,AI Agent将安全作为原生设计,构建了全链路的安全防护体系。

7.1 边界隔离

通过多层沙箱机制,为Agent的执行建立牢固的安全边界:
沙箱技术:支持container容器、seccomp系统调用过滤、landlock文件系统限制等多种沙箱技术,层层递进限制Agent的操作权限。
多维度边界管控:从路径访问、网络访问、进程创建三个维度设置严格边界,禁止Agent越权访问未授权的文件、网络地址与系统资源。

7.2 身份与权限

建立完整的身份认证与权限授权体系,实现全链路的权限管控:
AuthN(认证):统一的身份认证体系,确认用户、Agent、工具的真实身份。
AuthZ(授权):三级权限管控模型:
user → agent:用户可使用哪些Agent
agent → tool:Agent可调用哪些工具
tool → resource:工具可访问哪些资源
敏感操作人工确认(Human-in-the-loop):对于高危操作(如删除文件、执行生产环境命令、调用付费接口等),强制触发人工审批流程,只有用户确认后才可执行,从机制上避免Agent误操作带来的风险。

7.3 可用性与防护

保障Agent服务的稳定可用,抵御滥用与攻击:
CORS / WS Origin校验:严格校验跨域请求与WebSocket连接的来源,防止恶意页面调用Agent服务。
限流与并发控制:支持按用户、按Agent、按接口维度的限流,控制并发数与请求频率,防止资源被耗尽。
反滥用防护:识别异常调用模式,拦截恶意请求与滥用行为,保障服务的公平性与稳定性。

八、高级能力:面向复杂场景的进阶特性

除了基础能力之外,AI Agent还提供一系列高级特性,支撑复杂企业场景与大规模Agent部署。

8.1 Token计费与模型路由

Token计费:精确统计每个用户、每个会话、每个任务的Token消耗,对接不同模型的计费标准,实现成本的精细化核算。
智能模型路由:根据任务类型、复杂度、成本要求、性能要求,自动选择最合适的模型,在效果与成本之间取得最优平衡。

8.2 Token归因分析

对Token消耗进行细粒度的归因分析,明确Token消耗在系统提示、历史对话、工具定义、工具结果等不同部分的占比,为Prompt优化、上下文压缩、成本管控提供数据支撑。

8.3 Sub Agent 子代理

支持Agent的层级化架构,主Agent可以创建并调度Sub Agent,将复杂任务拆解为子任务,分发给不同的子Agent并行或串行执行,最后汇总结果。这种模式可以大幅提升复杂任务的处理能力与专业度。

8.4 多Agent协作

支持多个对等Agent之间的协作,通过消息总线与协作协议,实现任务分工、信息共享、协同决策,模拟团队协作模式,解决单Agent无法覆盖的复杂业务场景。

8.5 工作流编排

提供可视化或声明式的工作流编排能力,可将复杂的业务流程定义为标准化的工作流,由Agent按流程执行,降低Agent执行的不确定性,提升业务流程的可控性与可预测性。

8.6 自主规划与反思

赋予Agent更强的自主认知能力:
自主规划:面对复杂目标时,Agent可以自主拆解任务、制定计划、动态调整路径。
反思机制:任务执行完成后,Agent可对执行过程进行复盘反思,总结经验教训,优化后续的执行策略,实现自我迭代。

结语

本文只是分析了AI Agent最基础的架构,很多OpenClaw、Hermes的优秀特性尚未来得及展开讨论。对于AI Agent,你有什么好的想法吗?欢迎留言讨论:)。

大模型中转站中间人攻击解析与防御

大模型中转站中间人攻击解析与防御

在当下AI全民普及的时代,大语言模型(LLM)、AI编程助手、智能Agent已深度融入企业研发、自动化运维、个人办公全场景。GPT、Claude、Gemini等顶级模型能力强大,但官方API普遍存在收费昂贵、网络访问受限、调用门槛高等问题。

在此背景下,各类第三方大模型中转服务快速崛起。它们以低价普惠、免特殊网络、全模型聚合、高速稳定为宣传卖点,用极低的使用成本、极简的操作界面,吸引了海量个人开发者、中小企业用户。

便利与低价的背后,是绝大多数用户忽略的致命安全隐患。在使用第三方中转站时,本质是在无条件信任一个完全不受自己掌控的中间人。不同于普通的网络服务中转,大模型中转站拥有对用户请求、模型响应的完整读写、篡改、伪造、截留权限。

这也让大模型中转站中间人攻击(LLM MITM)从理论风险,变成当下AI安全领域最普遍、隐蔽性最高、破坏力最强的现实威胁。它早已突破传统网络窃听范畴,升级为语义层投毒、业务层渗透、系统层控权的复合型高级攻击。

当我们为了便利和低成本,将所有Prompt、代码、商业数据、系统指令全权交付给第三方中间层时,交出的不仅是使用权限,更是企业与个人的全部安全防线。

一、先聊一个经济问题:中转站点是如何赚钱的?

(一)薅LLM厂商羊毛
各大LLM厂商,会有各种各样的优惠方式,比如新账号送token、七天免费试用、教育账号免费等等。
很多中转站点会用软件自动注册大量此类账号,整合token资源,提供给国内开发者使用。
由于是自动注册,账号注册成本很低,很多账号都是月抛、周抛、甚至日抛。
由于是薅羊毛,token价格十分低,算下来甚至比国内大模型都便宜。

(二)信用卡盗刷
有小部分站点甚至会批量申请信用卡,用于虚拟账号申请,快速刷爆且不还款(单张金额很小)。得到的token再卖给国内客户,两头赚钱。

(三)用户余额
大量用户小额充值后用不完、弃号流失,剩余额度无法提现、无法结转,平台直接沉淀用户充值余额,形成无成本被动收益。

(四)模型注水
用户付费勾选 GPT、Claude、Gemini等高端模型,中转站后台静默路由到低成本开源模型。成本相差巨大,却全额收取高端模型费用(大型中转站这方面比较克制)。

(五)多级分销
进一步聚合上游中转站,靠差价盈利(提升单价、吞掉优惠等),上下游都有得赚。

(六)全量用户数据倒卖
留存用户所有对话记录(可能是源码、商业方案、隐私数据、密钥凭证等),批量打包售卖。【可怕的是,今天不卖不代表明天也不卖】

(七)恶意投毒控权黑产牟利
通过代码投毒、Agent 远程命令执行攻击,植入恶意脚本。一旦落地执行,可劫持服务器算力挖矿、窃取企业资产、植入持久化后门、内网渗透控权,将用户服务器变为「肉鸡」牟利。【可怕的是,今天不做不代表明天也不做】

二、攻击原理:大模型中转站为何是天然的攻击者?

想要理解所有风险,首先要厘清核心本质:正规官方直连是点对点加密通信,而第三方中转站直接修改了通信链路,天然适配中间人攻击。这不是漏洞,而是中转站服务的固有架构特性。

传统HTTPS加密、防火墙防护在此场景下完全被穿透。用户与官方模型的加密链路会在中转站服务器处终结,拆分为两段独立加密链路:用户→中转站、中转站→官方API。所有双向交互数据,都会在中转站服务器以明文形式暴露,中转站运营者可无限制查看、修改、截留、滥用数据。

完整数据传输链路:

用户->明文请求->中转站服务器->可篡改请求/降级模型->官方模型 API->原始模型数据->中转站服务器->伪造/篡改响应->用户

在这套链路中,几乎没有任何低成本技术手段,可以约束中转站的行为。这也是隐私窃取、模型欺诈、代码投毒、远程命令执行等所有攻击的底层根源。

三、四大核心致命威胁:从数据泄露到服务器沦陷
恶意大模型中转站的攻击手段已形成完整的递进式体系,从基础的隐私收割、商业欺诈,到高阶的代码投毒、智能体控权,全方位覆盖个人开发、企业研发、AI自动化场景,层层击穿安全防线。

1. 隐私裸奔:全量交互数据无差别泄露
这是最基础、最普遍、也最容易被轻视的风险。中转站服务器会完整记录用户每一次提问、每一段代码、每一条模型回复,所有交互内容无加密、无防护、无隐私保障。

核心风险场景全覆盖:
研发数据泄露:开发者输入的未上线源码、项目架构、接口逻辑、调试配置、开发方案被完整留存;
商业机密泄露:企业战略规划、运营数据、客户资料、技术方案、核心业务逻辑被批量收录;
权限凭证窃取:用户API Key、身份令牌、服务器环境变量、数据库密钥等核心凭证被抓取盗用;
数据灰色牟利:海量对话数据被用于私自训练模型、构建用户画像,甚至在黑市批量售卖。

更严峻的现实问题是:绝大多数中转站的隐私政策模糊不清,甚至无任何隐私声明,更难进行有效的管控。用户无法验证数据是否被清理、是否被第三方调取、是否被二次利用,所有隐私安全完全失控。

2. 模型调包欺诈:高价付费,低配收割
这是中转站行业最普遍的商业作恶手段,依托用户无法校验后端真实模型的信息差实现低成本套利,隐蔽性极高,极难被用户察觉。

用户付费订阅GPT、Claude、Gemini等高价旗舰模型,本意是获取高阶推理、高精度输出能力,但恶意中转站可随意路由请求:将高端模型请求强制转发至低成本开源模型,成本相差巨大,却依旧收取旗舰模型费用。

为进一步提升欺骗性,精明的中转站会采用选择性替换策略:简单问答、文案创作等低难度任务使用廉价模型,复杂推理、代码开发、算法设计等高难度任务使用真实旗舰模型,最大化套利的同时,让用户完全察觉不到异常。

这类欺诈难以排查的核心原因:大模型输出具备天然随机性,同一问题多次回答本就存在差异。用户很难区分输出质量下滑,是模型本身的随机误差,还是被中转站调包降级导致,长期高价付费却收获劣质服务,极易引发业务出错、项目Bug频发等隐性损失。

3. 代码投毒:闭环式隐形攻击,渗透生产环境
对于开发者与企业研发团队,这是破坏力最大、危害最深远的核心攻击手段。在Cursor、Cline、Continue等AI编程工具深度集成IDE的当下,恶意中转站可精准篡改模型输出,打造「代码投毒+虚假审查洗白」的完美攻击闭环,让恶意后门永久潜伏在生产环境。

完整闭环攻击流程拆解:
1)正常业务请求:开发者通过AI编程工具发送开发需求,例如「编写Express.js用户认证模块」「生成后端接口逻辑」;
2)中转站正常转发:中转站将用户请求转发至官方大模型,获取干净、合规、功能完整的原始业务代码;
3)恶意篡改投毒:中转站在不影响核心业务逻辑的前提下,悄悄嵌入伪装性极强的恶意代码片段,植入远程脚本执行指令;
4)用户落地使用:恶意代码混在正常逻辑中,肉眼难以识别,被开发者直接集成至项目代码库;
5)生产环境触发攻击:项目部署上线后,恶意代码自动初始化执行,主动访问攻击者控制的恶意域名,远程拉取脚本并落地运行;
6)虚假审查洗白兜底:开发者使用同一中转站进行AI代码审查时,中转站直接伪造「审查通过、无安全漏洞」的结果,彻底打消用户安全顾虑,让后门顺利绕过CI/CD自动化防线。

这类恶意命令落地后,可实现窃取服务器密钥、建立反向Shell、内网渗透、算力挖矿、数据库数据劫持、服务后门持久化等高危操作,对生产环境造成毁灭性打击。

当代码生成、代码审查依赖同一被劫持中转站时,便形成绝对安全闭环骗局,普通人工排查与常规自动化扫描完全失效,恶意代码可长期潜伏在企业核心项目中。

4. Agent远程命令执行:智能体沦为黑客提线木偶

随着Openclaw、Hermes等智能体普及,AI不再局限于被动问答,已具备主动命令执行、文件操作、API调用、自动化运维等高权限能力,这也让中转站中间人攻击的危害升级至灾难性级别。

恶意中转站可直接篡改大模型返回给Agent的思维链、决策逻辑与工具调用参数,绕过用户所有权限限制与指令约束,强制智能体执行任意高危系统命令,全程自动化、无需用户任何手动操作。

攻击着可以利用模型强大的上下文感知能力,自动识别项目框架、运行环境、业务流程,针对性注入适配的恶意Payload;通过Prompt Injection将恶意指令伪装成系统提示、工具调用规范;将恶意操作融入正常工作流,完美规避人工排查与日志审计。

一旦运行Agent的设备拥有云服务器、数据库、内网访问权限,攻击者可直接接管全部资源,实现内网横向移动、服务器提权、核心数据批量窃取、业务篡改等高危操作,导致整套研发、生产环境彻底沦陷。

四、攻击面全景可视化:风险等级与隐蔽性汇总
各类中转站攻击覆盖AI全场景,风险危害、隐蔽性、影响范围各不相同,全景汇总如下,可直观识别各类风险优先级:

攻击类型 目标场景 危害程度 隐蔽性
隐私窃取 所有AI对话、文案、咨询、日常交互场景 极高
模型替换调包 付费API调用、高精度推理、复杂分析场景 极高
代码投毒 AI编程、项目开发、脚本生成、功能迭代 极高 极高
审查劫持洗白 AI代码安全审查、漏洞检测、上线预审 极高 极高
远程命令执行(RCE) AI智能体、自动化运维、批量任务工具 灾难性 极高
响应操纵误导 数据查询、业务决策、方案推演、风险评估 中~高 极高

五、核心难点:为什么传统安全手段几乎无法防御?

很多用户存在认知误区:认为HTTPS加密、防火墙、系统权限管控可以规避中转站风险。事实上,大模型中间人攻击具备独特的绕过特性,传统安全防御体系对其完全无效,这也是该类攻击最可怕的核心原因:

1. 传输加密彻底失效:TLS/SSL加密仅作用于两段独立链路,会在中转站服务器终结,所有数据在中间节点明文展示,加密只能防外部窃听,完全无法阻止中转站自身的窃取与篡改。

2. 无任何响应校验手段:大模型输出具备非确定性、随机性,没有固定哈希值、固定输出模板,无法像校验文件、接口数据一样验证回复是否为模型原始输出,篡改行为无任何技术校验方式。

3. 用户感知无限趋近于零:攻击者仅植入少量恶意代码、替换一条远程链接,完全不影响核心业务功能,测试环境无任何异常表现,肉眼、常规工具均无法排查。

4. 绕过模型原生安全机制:官方模型的安全对齐、内容审核、风险过滤,仅能防护模型原生输出内容,无法抵御中间层的人工篡改,形成「源头安全、传输沦陷」的致命安全盲区。

5. 人工审查不现实:以大模型编码为例,大模型输出代码的速度十分快,人工审核根本不可能。以Agent申请命令行执行权限为例,没有人可以长期的等在那里,仔细审查Agent的每一次命令执行,然后点击同意或拒绝。

六、安全防御:企业全落地指南
面对全方位、高隐蔽、高危害的中转站中间人攻击,无需彻底摒弃AI工具,但必须彻底放弃「默认可信」的侥幸心理。结合企业研发场景,搭建分层、可落地的零信任防御体系,兼顾AI效率与业务安全。

1. 优先官方直连,从源头切断攻击面
无论第三方中转站多么低价、便捷、功能丰富,官方API直连永远是安全最优解。OpenAI、Anthropic、谷歌等原生官方渠道,以及Azure、字节、阿里、腾讯等具备合规资质、安全审计的企业级模型服务,拥有完善的数据隐私政策、权限管控、日志溯源、风险预警机制。省下的小额API成本,远不足以抵消一次安全事故带来的源码泄露、服务器沦陷、商业机密外泄损失。

2. 自建私有化中转站,掌控中间层全权限
若企业存在多模型聚合、统一接口、统一计费、批量管理的需求,坚决杜绝使用公共第三方中转站。可基于LiteLLM、One API等成熟开源方案自建私有化中转站服务,将中间转发链路部署在自身可控的服务器与内网环境中,完全掌控数据传输、日志留存、访问权限,从架构层面消除外部中间人劫持风险。

3. 多重代码审计,杜绝单一AI链路信任
彻底摒弃对AI自动审查的绝对信任,建立「工具扫描+人工复核+交叉验证」的三重校验机制:所有AI生成的业务代码、脚本文件,必须重点核查网络请求、系统命令、文件操作、未知第三方依赖等高风险逻辑;采用静态安全工具自动扫描Payload;代码生成与代码审查使用不同AI服务交叉验证,避免单一链路被劫持洗白;在CI/CD流水线强制加入安全扫描、依赖审计、远程请求拦截校验,杜绝带毒代码上线。

4. Agent最小权限隔离,极致缩小攻击面
严格遵循最小权限原则(PoLP)管控AI智能体:禁止Agent配置无限制系统命令执行、外网访问、内网横向权限;对所有工具指令、网络请求配置白名单过滤机制;通过Docker容器、独立沙箱部署Agent运行环境,隔离文件系统、服务器权限、内网资源;全程记录Agent行为日志,实时监控异常远程请求、批量命令执行行为,及时发现劫持攻击。

5. 模型真伪校验,规避商业欺诈
通过模型专属特征开展常态化校验:利用不同型号模型独有的知识库、推理能力、输出风格、格式规范做交叉测试;若出现输出质量、逻辑严谨度、回复风格突然异常波动,大概率存在模型调包替换风险,需立即排查中转站链路,避免长期被低价收割。

6. 敏感数据场景隔离,杜绝外传泄露
明确场景边界,严格区分风险等级:核心业务代码、涉密算法、商业机密、用户隐私、密钥凭证、服务器配置等敏感数据,严禁通过任何第三方中转站传输、处理;高敏感研发场景,优先采用本地私有化部署开源大模型,实现数据不出内网、不出本地,从物理层面杜绝泄露与篡改风险。

七、给个人用户的建议:AI便利,绝不以安全为代价
1. 如果有条件,优先使用官方模型(多数人是能负担官方模型的价格的,不要贪小便宜吃大亏)
2. 如果实在要用中转服务,尽量用规模最大的几家
3. 充值的时候,尽量少充一些,用完再充值
4. 你的隐私很值钱,中转服务尽量不要涉及个人隐私、不要涉及各类机密
5. 用于生产的代码,代码编写和Review,要用不同的服务提供商,一些开源静态分析软件效果也不错
6. 如果用中转服务,Agent一定要限制在沙盒中

大模型“岗前特训”:大模型微调(LLM Fine-tuning)

大模型“岗前特训”:大模型微调(LLM Fine-tuning)

如今大模型已经全面走入产业落地场景,从智能客服、行业知识库到专属AI助手,几乎所有垂直场景的大模型应用,都绕不开一个核心环节——模型微调。

很多人都有疑惑:明明可以用提示词(Prompt)、RAG检索就能让大模型适配业务,为什么还要费力做微调?事实上,Prompt存在能力上限、泛化性差、人工成本高的问题,RAG只能解决外部知识补充问题,无法改变模型的底层生成逻辑、风格习惯和领域认知。而微调,是让通用大模型真正变成「行业专属模型」的核心手段。

本文将从零拆解大模型微调的核心逻辑,详解传统微调与当下主流的各类高效微调技术,帮你快速了解不同微调方案的差异、优缺点和适用场景,掌握工程落地选型思路。

一、什么是大模型微调?

1.1 核心定义

大模型的训练分为两个核心阶段:预训练和微调。

预训练是大模型在海量通用文本数据上完成的基础学习,目的是掌握通用语言能力、语法逻辑、基础常识,形成通用基座模型;而微调(Fine-Tuning),是在预训练模型的基础上,使用小规模、高质量的领域专属数据,对模型参数进行小幅迭代优化的过程。

简单来说:预训练是让模型“博学”,微调是让模型“专精”。微调的本质是在成熟预训练基座的基础上,使用小规模、高质量的领域专属数据,对模型参数做定向塑造与小幅迭代优化,无需从零学习语言规律与世界知识,仅针对目标任务做方向性调整。微调不会颠覆模型的通用能力,只会针对性强化模型在特定场景的表现,修正模型幻觉、输出不规范、领域知识缺失等问题。

1.2 为什么必须做微调?

通用大模型存在天然的落地短板,而微调是打通通用模型到业务落地的最优解之一。预训练让模型成为“通晓万物的通才”,但无法适配企业专属业务场景,而微调的核心价值,就是将模型从通用通才塑造成行业专才。

核心目标分为三点:

注入领域知识:补齐医疗、法律、金融、工业等垂直领域的专业术语、业务逻辑、行业规则,解决通用模型专业度不足的问题;

对齐行为偏好:规范模型输出语气、风格、格式,贴合企业品牌调性、固定回复模板与业务输出规范,解决输出不可控问题;

提升任务精度:在信息抽取、文本分类、代码生成、问答推理等具体任务上,大幅超越通用模型的基础效果,提升业务准确率。

具体落地痛点如下:

领域适配不足:通用模型对医疗、法律、金融、工业等垂直领域的专业术语、业务逻辑认知薄弱,回答精准度低;

输出不可控:通用模型输出风格自由、格式混乱,无法满足企业标准化、结构化的输出要求;

Prompt 瓶颈明显:复杂业务场景下,超长Prompt冗余严重,推理成本高、效果不稳定,无法适配批量自动化场景;

规避模型幻觉:通过领域数据微调,让模型建立真实、准确的行业知识体系,减少虚构内容;

低成本定制化:相比从头预训练千亿级模型,微调仅需少量数据和算力,即可快速产出专属模型。

1.3 预训练 vs 微调 vs 提示工程

预训练:训练全量参数、海量通用数据、极高算力成本、塑造模型基础能力;

微调:训练部分/少量参数、少量领域数据、低算力成本、定制场景能力;

提示工程:不训练任何参数、纯人工指令引导、零算力成本、临时效果优化。

二、传统微调:全量微调(Full Fine-Tuning)

在参数高效微调技术普及之前,全量微调是主流方案,也是最基础的微调方式。

2.1 核心原理

加载完整的预训练大模型,解冻模型所有参数,使用领域数据集对模型全部权重进行反向传播更新,训练完成后得到全新的模型权重。

2.2 优缺点分析

优势:

理论效果上限最高,能最大限度改写模型能力,深度适配复杂业务场景,效果最贴合训练数据分布。

短板:

算力成本极高:千亿参数模型全量微调需要数十张高端计算显卡,普通企业和个人完全无法承担;

数据需求大:参数体量巨大,少量数据微调极易过拟合;

灾难性遗忘:全量参数更新容易覆盖模型原有的通用知识,导致基础能力退化;

部署成本高:每个场景需要保存完整模型权重,多场景定制需要存储多个完整大模型,资源冗余严重。

2.3 适用场景

仅适用于大厂极致性能优化、模型二次预训练、通用能力大幅迭代等场景,普通业务落地几乎不会使用。

三、主流技术:参数高效微调(PEFT)

为了解决全量微调的高成本问题,PEFT(Parameter-Efficient Fine-Tuning,参数高效微调)技术应运而生。核心思路统一:冻结预训练模型97%以上的原始参数,仅训练少量新增参数或部分参数,以极低的算力、数据、存储成本,逼近全量微调的效果。

目前工业界主流的PEFT技术分为三大流派:提示调优流派、适配器流派、参数增量流派,下面逐一拆解核心原理、优劣与场景。

3.1 提示调优流派:Prompt Tuning / P-Tuning / Prefix Tuning

这类技术的核心灵感来自提示工程,不修改模型主体权重,通过引入可学习的软提示向量替代人工Prompt,让模型适配任务。

1)Prompt Tuning

最简轻量的微调方案,仅在模型输入的词嵌入层,插入少量可训练的虚拟Token(软提示),模型主体参数完全冻结,仅优化这部分虚拟向量。

优点:参数量极少(仅占总参数0.05%左右)、算力需求极低、训练速度极快;

缺点:仅作用于输入层,对模型深层注意力机制影响有限,复杂任务效果一般;

适用:简单分类、短文本匹配等轻量自然语言理解任务。

2)P-Tuning

针对Prompt Tuning的优化,不再使用固定虚拟Token,而是通过连续可学习的向量表征拟合最优提示,解决离散Prompt无法优化的问题,增强了模型对上下文的理解能力。

优化点:适配中文场景效果更优,在语义理解、对话任务上表现优于原生Prompt Tuning。

3)Prefix Tuning

提示调优流派的最强方案,专门针对文本生成任务优化。不再局限于输入层,而是在Transformer每一层的注意力模块前,插入可训练的前缀KV向量,引导模型生成逻辑。

优点:深度影响模型每一层注意力机制,生成任务效果极佳,适配摘要、对话、文案创作等场景;可迁移性强,前缀向量可适配不同规模模型。

缺点:前缀Token会占用序列长度,长文本任务下会压缩有效输入长度。

3.2 适配器流派:Adapter Tuning

最早的高效微调技术,核心思路是“插层微调”。在Transformer每一层的注意力层、前馈网络层之后,插入小型瓶颈适配器网络,冻结原始模型权重,仅训练新增的适配器参数。

优点:适配性极强,几乎兼容所有Transformer模型,效果稳定;

缺点:新增网络会增加前向推理计算量,带来轻微推理延迟,参数量高于Prompt系列微调;

适用:多模态任务、复杂分类、跨领域适配场景。

3.3 参数增量流派:LoRA/QLoRA/DoRA/IA3(当前主流)

这是目前工业落地最常用的微调流派,不插入额外网络、不占用序列长度,通过低秩矩阵、权重缩放等方式,实现极致高效微调,兼顾效果与推理速度。

1)LoRA(Low-Rank Adaptation)

在传统全量微调中,模型是在预训练好的原始权重的基础上,直接加上一整套全新的调整量,从而改变所有参数。

LoRA 的核心创新在于,它不再去动那个庞大的原始矩阵,而是把这个调整量拆解为两个极小的矩阵相乘。具体来说,就是把原本巨大的调整任务,压缩进一个极小的特征空间里来完成。这里的“秩”是一个关键数字,它远小于原始模型的尺寸,通常只取个位或双位数。

这意味着,大模型在适配新任务时,完全没必要修改所有的神经元连接,只需要在这个微小的“快捷通道”里进行微调即可。这种限制模型改动范围的做法,反而成了一种天然的约束,让模型没法“乱学”,这就是 LoRA 不容易过拟合的重要原因。

2)QLoRA

LoRA的极致轻量化优化,核心是4-bit量化+LoRA微调,彻底打破了大模型微调的显存壁垒,实现24G显卡微调65B超大模型的极致效果,其显存优化核心来自两项关键技术:

关键技术1:NF4 量化编码
传统FP4普通4-bit量化对大模型权重适配性差、信息损耗高。而预训练大模型权重普遍服从标准正态分布 N(0,1),NF4(NormalFloat 4-bit)是专门针对正态分布数据优化的4-bit数据类型,能最大限度保留模型权重特征,实现近乎无损的极致量化压缩。

关键技术2:分页优化器(Paged Optimizer)
借鉴操作系统虚拟内存机制,当GPU显存不足时,自动将暂时闲置的优化器参数、梯度数据分页迁移至CPU内存,按需调度读写,大幅降低超大模型微调的OOM(显存溢出)风险,在极低显存设备上实现大模型微调。

核心特点与取舍:几乎无损精度,显存占用大幅降低,在极限优化配置下,24G消费级显卡即可微调65B级超大模型,彻底拉低大模型微调门槛。仅存在极轻微的量化精度损耗,在绝大多数业务场景可忽略不计,是个人、小团队微调超大模型的首选方案,目前开源落地普及率最高。

3)DoRA/EDoRA

新一代LoRA优化技术,核心思路是将模型权重拆解为「幅度+方向」,仅用低秩矩阵学习权重方向,固定权重幅度,解决传统LoRA收敛慢、稳定性不足的问题。EDoRA进一步通过SVD初始化加速收敛,微调效果和稳定性优于原生LoRA。

4)IA3

极简轻量化微调方案,无需新增矩阵,仅通过3组可学习的缩放向量,调整注意力机制的激活值,参数量比LoRA更低,显存占用极小。适合算力极度受限、简单场景的快速微调。

3.4 轻量微调流派:BitFit

最简单的微调方式,仅训练模型的偏置项(Bias)参数,其余权重全部冻结。参数量极低、训练极速、算力消耗极小,但能力上限有限,仅适合简单场景的轻微风格适配与任务微调。

四、特殊微调:指令微调(Instruction Tuning)

在全量微调、PEFT微调之外,指令微调是大模型落地对话与任务场景的核心训练范式,不属于具体微调算法,而是一套通用训练逻辑,也是通用“文本续写模型”转向“智能AI助手”的关键。

原生预训练大模型的核心能力是文本续写,只会根据上文内容顺延生成文本,无法理解和遵从人类指令。而真实业务场景大多是「指令-输入-输出」的交互形式,比如总结文案、翻译文本、信息抽取、答疑解惑。

指令微调的核心逻辑:构建海量、高质量的指令格式数据集,统一遵循「用户指令+输入内容+标准答案」结构训练模型,让模型习得理解指令、拆解任务、按要求输出的能力。经过指令微调后,模型会从单纯的文本续写器,转变为可落地的任务型AI助手。

目前行业主流的 InstructGPT、Alpaca、Vicuna 等开源可用对话模型,全部依托指令微调范式完成能力升级,是所有对话类、任务类微调的基础。

五、微调关键技术

5.1 SFT 训练目标函数与Masking

在监督微调(SFT)阶段,业界通用的评分标准是交叉熵损失。其中有一个关键操作十分重要——指令掩码(Instruction Masking),这直接决定了模型微调后是“真懂”还是“假懂”。

背后的逻辑其实很简单:我们训练模型,是为了让它学会“看着问题写出答案”,而不是为了教它“背诵题目”。

因此,在处理数据时,我们会做一个特殊处理:把属于“指令(Prompt)”部分的标签直接屏蔽掉(通常标记为-100)。这样一来,损失函数在计算误差时,就会自动跳过这部分,只专注于计算“答案”部分的准确度。

如果少了这一步,模型就会学歪,误以为自己的任务就是复读机。结果就是:训练出来的模型特别爱复述你的输入,或者不断重复你说过的话,根本没法自己动脑筋生成新内容。

5.2 对齐微调:RLHF完整流程与DPO工程优势

大模型偏好对齐(RLHF)阶段,传统PPO算法训练成本高、稳定性极差,而DPO作为新一代对齐方案,堪称工程级优化奇迹,目前已成为工业界首选。

完成SFT指令微调后,模型已经可以执行各类任务,但输出结果可能存在不贴合人类偏好、逻辑生硬、安全性低、优劣混杂的问题。想要模型“不仅能做事,还能做得好”,就需要人类偏好对齐,工业界主流方案为传统RLHF与轻量化DPO。

1. 传统RLHF(人类反馈强化学习)完整三步流程

RLHF是经典的大模型对齐方案,依赖人工反馈数据完成模型价值观与偏好优化,分为三个核心阶段:

第一阶段:监督微调(SFT):依托高质量指令数据集做基础微调,让模型掌握基础的指令遵循与任务生成能力;

第二阶段:训练奖励模型(RM):人工对模型多组输出做优劣排序,基于排序数据训练专属奖励模型,让模型学会判断“优质回答”和“劣质回答”;

第三阶段:强化学习优化(PPO):以奖励模型的打分为优化目标,通过PPO强化学习算法迭代主模型,最大化优质输出概率,对齐人类偏好。

2. PPO核心痛点

整套流程繁琐、需要维护四套模型(策略、价值、奖励、参考)、算力成本极高、训练极易不稳定,且容易出现Reward Hack(模型欺骗奖励模型)问题。

3. DPO工程级优化价

DPO(直接偏好优化)彻底简化RLHF流程,无需单独训练奖励模型、无需复杂强化学习迭代,直接将人类偏好数据转化为二分类损失任务。训练速度是PPO的10倍以上,算力成本极低、收敛稳定,是目前中小团队对齐模型的首选方案。

传统PPO痛点:需要同步维护策略模型、价值模型、奖励模型、参考模型四个模型,算力消耗极大;同时奖励模型容易被模型“欺骗”(Reward Hack),训练波动大、极易不收敛。

DPO核心优势与数学原理:DPO摒弃了独立奖励模型,将奖励函数隐式融入偏好数据集(优质回答/劣质回答对比数据),将复杂的强化学习问题转化为简单的二分类损失问题,训练效率大幅提升。

工程价值:DPO无需优势估计、无需多模型联动,训练速度是PPO的10倍以上,稳定性极强、算力成本极低,是目前轻量化模型对齐的最优解。

5.3 工程陷阱:灾难性遗忘防御方案

微调最常见的负面问题就是灾难性遗忘:模型适配了垂直领域新能力,却丢失了预训练习得的通用能力,比如微调金融问答后,丧失日常对话、基础常识能力。工业界有两套成熟防御方案:

1. 数据混合配比策略
禁止单一领域数据训练!在垂直领域微调数据中,强制混入 10%~30% 通用指令数据(Alpaca、FLAN等通用数据集),在学习新领域知识的同时,保留模型通用能力。同时可搭配Replay Buffer机制,定期回放通用样本,固化基础能力。

2. 模型平均融合(Model Soup)
通过多组超参数(学习率、批次大小)独立训练同一基座模型,得到3~5个最优权重检查点,对所有权重进行加权平均融合。最终融合模型的泛化能力、稳定性、鲁棒性均优于单一最优模型,有效规避单一训练的权重偏置问题。

5.4 长文本微调:位置编码与显存优化

常规基座模型大多适配4k/8k短上下文,微调32k/128k超长文本时,会出现位置编码失效、短文本能力退化、显存溢出等问题,核心解决方案如下:

1. NTK-Aware 位置缩放
大模型RoPE旋转位置编码基于频率计算,直接拉伸序列长度会破坏高频位置特征,导致模型性能暴跌。工程通用做法:微调长文本场景时,修改 rope_theta 参数(常规10k调整至100k),或采用Dynamic NTK动态插值,让模型平滑适配超长序列,兼顾长短文本性能。

2. Flash Attention 2 强制开启
现代大模型微调的必备配置,不仅能加速训练,更能极致优化显存。通过IO感知核函数重构,将传统注意力 O(N^2) 的显存复杂度,降低至 O(N),是超长文本微调、大批次训练的核心保障。

5.5 关键准则

大模型微调有一句核心铁律:数据质量 > 数据数量。相比于堆砌海量低质量数据,几百到几千条标注规范、高质量的样本,往往能让模型效果实现质的提升,同时大幅降低过拟合风险。

1. 数据核心标准

多样性:数据集需要覆盖目标任务的常规场景、边界场景、特殊案例,避免模型适配单一场景、泛化性差;

一致性:全程统一标注标准、输出风格、格式规范,避免矛盾样本混淆模型学习逻辑;

场景适配性:训练数据的输入输出格式、交互逻辑,必须和线上推理落地场景完全一致。

2. 学习率匹配原则

微调学习率远低于预训练阶段,过高会颠覆预训练能力、引发灾难性遗忘,过低会导致收敛缓慢、训练无效。工业通用标准:

全参数微调:1e-5 ~ 5e-5,小幅迭代权重,保留通用能力;

LoRA等高效微调:1e-4 ~ 3e-4,可适度放大,兼顾收敛速度与稳定性。

3. 数据量与微调方案匹配

少量数据(几百条):优先QLoRA、Prompt Tuning等轻量PEFT方案,最大限度规避过拟合;

中等数据(几千~几万条):LoRA为最优性价比选择,效果与成本均衡;

海量数据(十万条以上):可尝试全量微调,充分挖掘模型性能上限。

4. 全程评估机制

通用能力评估:在标准基准测试集验证模型基础能力,防止常识、语言理解能力退化;

业务能力评估:在专属测试集验证领域精度、格式合规性、任务准确率;

人工抽样评估:校验生成流畅度、风格统一性、幻觉概率与安全性。

六、微调技术对比与选型

1、微调技术横向对比

微调技术 参数量占比 推理延迟 核心优势 适用场景
全量微调 100% 效果上限最高 大厂极致优化、二次预训练
Prompt Tuning ≈0.05% 极致轻量、训练最快 简单文本分类、语义匹配
Prefix Tuning 0.1%-1% 轻微序列损耗 生成任务效果优异 对话、摘要、文案生成
Adapter Tuning 1%-3% 轻微延迟 适配性强、效果稳定 多模态、复杂分类
LoRA/QLoRA 0.05%-1% 效果、速度、成本均衡最优 绝大多数垂直业务落地(首选)
IA3/BitFit <0.1% 算力需求极低 简单场景快速适配

2、技术选型

业务场景与条件 最优微调方案
显存有限、消费级显卡快速实验 QLoRA
少量高质量数据、追求极致性价比 LoRA
需要模型严格遵循固定指令、输出格式标准化 指令微调 + LoRA
需要对齐人类价值观、优化回答优劣偏好 SFT + DPO(优先)/ RLHF(极致效果)
数据充足、算力充裕、追求模型极致性能 全参数微调
多业务场景、需要灵活切换模型能力 基座模型 + 多组LoRA适配器热插拔
简单分类、语义匹配等轻量任务 Prompt Tuning / BitFit
多模态、跨领域复杂适配任务 Adapter Tuning

七、MoE稀疏模型专属微调方案

随着DeepSeek等MoE(混合专家)稀疏大模型普及,传统稠密模型微调方案不再适用,MoE微调核心难点在于门控网络失衡、专家负载不均,专属优化策略如下:

1. 解决路由熵崩塌:Router Z-loss
MoE模型微调时,门控路由网络容易出现熵崩塌问题,所有输入Token都会集中流向少数几个热门专家,大部分专家处于闲置状态,丧失稀疏模型多专家并行的核心优势。工程解决方案:添加路由辅助损失(Router Z-loss),强制平衡各专家负载,保证稀疏结构有效性。

2. 专家差异化微调策略
禁止全量微调所有专家参数!通用基座专家已习得海量通用知识,盲目微调会破坏模型基础能力。最优方案:冻结通用基础专家,仅微调新增领域专家与门控路由网络,既保留模型通用能力,又实现领域适配,最大程度保留MoE稀疏特性。

八、微调流程与技术栈

1、微调流程示例

数据准备:采集领域数据、清洗去重、标准化格式、划分训练集/验证集(微调核心是数据质量,少量高质量数据优于海量垃圾数据);

方案选型:根据场景选择微调方案(通用业务首选LoRA/QLoRA,生成任务可选Prefix Tuning,简单场景选BitFit);

参数配置:设置学习率、批次、迭代次数、秩值(LoRA)等超参数,规避过拟合;

训练微调:冻结基座模型,训练少量适配参数,监控损失值变化;

评估部署:对比微调前后效果、修正幻觉、优化输出格式,合并权重后上线部署。

2、微调技术栈示例

技术层级 主流选型 核心备注
基座模型 Qwen 开源场景这两款模型综合性能最优
量化工具 bitsandbytes 原生支持NF4量化,是QLoRA微调的标配工具
微调框架 Axolotl / LLaMA Factory Axolotl配置灵活、适配场景广;LLaMA Factory可视化UI友好,上手门槛低
算法库 peft + trl Hugging Face官方标准库,支持所有主流PEFT算法、DPO/PPO对齐
分布式训练 DeepSpeed ZeRO Stage 2/3 多卡训练必备,Stage3可极致切分优化器参数,大幅降低多卡显存压力
训练监控 Weights & Biases (W&B) 实时监控Loss曲线、梯度变化、学习率走势,提前预判过拟合与不收敛问题

九、总结

大模型微调看似具备完整的数学理论与技术体系,但真实产业落地中,是高度依赖经验调优的实验工程。其中学习率、数据质量、方案匹配度是决定训练成败的三大核心关键,不同微调方案的最优超参数、训练逻辑差异极大。

业界并不存在通用万能的微调方案,脱离场景谈技术优劣毫无意义。无论是传统全量微调、主流PEFT高效微调,还是指令对齐、MoE专属微调,所有技术的核心目标始终一致:在可控的算力与数据成本内,让模型适配专属业务场景,规避缺陷、提升落地效果。

对于绝大多数开发者与企业落地场景而言,无需盲目追新,优先吃透LoRA、QLoRA、DPO等成熟方案,严格把控数据质量,搭建完整的训练评估体系,就可以完成99%的垂直领域模型定制需求。希望在不远的未来,有更加优秀的方案,可以更好的解决当下需要模型微调才能解决的问题,期待!

大模型“瘦身术”:大模型量化(LLM Quantization)

大模型“瘦身术”:大模型量化(LLM Quantization)

过去几年,大语言模型凭借超强的理解、生成与推理能力,彻底引爆了AI行业。但强大能力的背后,是大模型难以回避的“三高痛点”:高算力消耗、高显存占用、高推理延迟。动辄数十亿、上百亿参数的大模型,看似智能无比,却极度依赖高端服务器、旗舰显卡,普通用户的电脑、手机根本无法运行。

想要打破算力壁垒,让大模型走出实验室、走进普通设备,就必须用到大模型领域的核心轻量化技术——模型量化(LLM Quantization)。它堪称大模型的“瘦身术”和“万能压缩包”,是解决AI低成本部署、终端落地的关键技术。今天我们来介绍一下大模型量化技术。

一、到底什么是大模型量化?

对于开发人员,可以把大模型量化,理解为四大名著为不同人群进行版本改编的过程:
四大名著精装合订本(FP32)
四大名著平装版(FP16)
四大名著青少年简化版(INT8)
四大名著儿童版(INT4)
四大名著幼儿绘本(INT2)

简单来说,大模型量化是一项核心的模型压缩与推理加速技术,核心逻辑极其简单:将大模型原生的高精度参数,转换为低精度参数,在几乎不损耗模型核心能力的前提下,实现模型瘦身、提速、降本,大幅降低部署门槛。

从技术层面来看,量化本质是线性数值映射过程:将模型权重中连续、大范围的高精度浮点数值,映射为低位宽的离散整数数值,用更少的二进制位存储单组参数,在可控误差范围内完成模型压缩。

我们可以通过直观的显存对照表,清晰看到不同精度的压缩差距(以70B参数大模型为例):

精度格式 单参数占用空间 70B模型显存预估
FP32(全精度) 4 字节 ≈280GB
FP16/BF16(半精度) 2 字节 ≈140GB
INT8(8位量化) 1 字节 ≈70GB
INT4(4位量化) 0.5 字节 ≈35GB

从数据可以直观看出,将模型从FP16压缩至INT4,显存占用直接缩减至原来的四分之一。对应体积换算也十分清晰:FP32(32位全精度)压缩为INT8(8位),模型体积、显存占用缩小4倍;压缩至INT4(4位)则直接缩小8倍。这就是量化的硬核价值,也是百亿级大模型能够在普通消费级设备上流畅运行的核心原因。

二、量化原理:精度与效率的博弈
大模型训练完成后,所有权重参数都是连续的浮点数,数值范围零散、精度极高,但存储和计算成本巨大。

量化的核心逻辑只有两步:
1. 映射压缩:将大范围、高精度的浮点数值,映射到有限范围的低精度整数空间,用更少的二进制位表示一个参数;
2. 反向还原:模型推理时,再将低精度数值反向映射回近似的高精度数值,完成计算输出。

行业主流的基础量化方式为均匀对称线性量化,逻辑清晰且可落地:通过缩放因子(scale)将浮点权重区间通过仿射变换映射到整数区间,推理时再反向还原。部分进阶方案会增加零点(zero-point)偏移量,形成非对称量化,适配数值分布不均的权重场景。

举个极简实操案例:
假设模型权重原始范围为 [-1.0, 1.0],需要量化为INT8(取值区间 -128~127):
缩放因子 = 1.0 / 127 ≈ 0.00787
原始权重 0.53 → 量化计算:round(0.53 ÷ 0.00787) = 67
反量化还原:67 × 0.00787 = 0.527
最终误差仅0.003,几乎不会影响模型输出效果。

这也印证了量化的核心逻辑:误差可控、精度够用、性价比极高。整个量化过程的核心是效率与性能的取舍博弈,主动舍弃无感知的精度冗余,换取存储、算力、速度的全方位提升。

当然,量化并非可以无限制压缩,存在明确的技术瓶颈与落地挑战。过度压缩会引发严重的精度损耗问题:一方面会造成模型灾难性遗忘,丢失基础逻辑能力,生成内容错乱无序;另一方面,模型中存在少量数值极值的关键权重(离群值),若压缩过程中无法精准保护,会导致模型整体质量断崖式下跌。因此,量化的本质是精度与效率的动态博弈,必须把握平衡。

三、常见量化位宽与格式
日常部署中,大家常听到的4-bit、8-bit、GGUF等名词,是量化的核心位宽与格式,不同规格适配不同场景,梯度清晰、各司其职,新手可直接对照选型:

FP32(全精度):模型原始32位浮点数精度,无任何精度损失、效果最优,但体积最大、推理速度最慢,仅用于模型训练和极致精度的专业场景,基本不用于落地部署。

FP16/BF16(半精度):主流训练基准精度,将32位参数压缩为16位,体积减半、速度翻倍,精度损耗极低,是高端显卡高精度部署的基础选择。

INT8(8位整数量化):高性价比通用方案,体积压缩4倍,推理速度大幅提升,精度下降微乎其微,几乎无感损耗,适配绝大多数桌面、服务器常规部署场景。

INT4(4位整数量化):个人本地部署主流首选,体积直接缩小8倍,显存占用极低。仅存在轻微精度损耗(困惑度小幅上升),日常对话、内容创作、轻量化推理完全感知不到差距。

INT2(2位整数量化):极致压缩方案,体积最小、推理速度最快,但精度损耗明显,易出现逻辑错乱,仅用于极限性能测试,不适合常规使用。

GGUF(模型格式):很多人容易误解为量化算法,实则是专为CPU本地推理优化的通用模型格式,适配llama.cpp等主流本地部署框架,是目前个人用户下载、使用量化模型的核心格式。

以主流Llama系列模型为例,行业通用量化等级有明确的选型参考:Q8_0接近无损、质量最优但体积偏大;Q4_K_M是黄金平衡版本,兼顾模型效果和体积速度,适配绝大多数普通用户;Q2_K为极致压缩版本,质量损失显著,仅用于极限测试。

四、量化的完整分类

1. 按量化时机分类(核心落地区分)
该分类方式决定了量化的成本、精度上限与适用场景,是日常部署中最常用的区分标准:

PTQ 训练后量化(新手主流首选)
在模型完全训练完成后直接执行量化压缩,无需重新训练、无需额外数据集,具备操作简单、落地成本低、速度快的优势,是个人本地部署、快速测试的核心方案。GPTQ、AWQ、SmoothQuant、bitsandbytes等主流算法均属于PTQ体系,仅在极致压缩场景下会产生轻微精度损耗。

QAT 量化感知训练(工业级高精度方案)
在模型训练阶段提前模拟量化误差,让模型主动适配低精度数值特性,从根源上抵消压缩带来的精度损失,最终模型稳定性、效果最优。缺点是需要大量算力、标注数据和训练时长,成本较高,仅适用于企业级高精度落地场景。

QAF 量化感知微调(性价比折中方案)
介于PTQ和QAT之间的轻量化优化方案,对已量化的模型进行小幅参数微调,高效弥补压缩带来的精度缺陷。其中QLoRA是典型代表,通过4-bit量化+LoRA低秩微调的组合方式,实现了低资源、低成本的大模型微调,广受开发者青睐。

2. 按量化粒度分类(决定精度精细度)
量化粒度指「多少个模型参数共享一组缩放因子和零点参数」,粒度越精细,量化精度越高,但存储与计算开销也会相应增加,行业主流粒度分为三类:

Per-tensor(全局粒度):整个模型张量共享同一组参数,压缩率最高、开销最低,但精度最为粗糙,仅适用于对效果要求极低的简易场景。

Per-channel(通道粒度):每个输出通道独立配置量化参数,精度大幅提升,平衡了效果与开销,是目前商用模型部署的主流标准。

Per-group(分组粒度):将单个通道的参数细分为多个小组(常见128元素一组),在精度和存储开销之间实现最优平衡,GPTQ、AWQ等主流高精度量化算法均采用该粒度方案。

五、主流量化算法对比
不同量化算法的核心思路、精度表现、适配场景差异较大,为方便精准选型,下面汇总了行业主流方案的核心特性,覆盖个人部署、服务端推理、模型微调等全场景:

量化方法 类型 典型精度 核心思想 适用场景
GPTQ PTQ 3/4-bit 逐列量化+二阶Hessian误差补偿,最小化精度损失 单卡推理、极致压缩场景
AWQ PTQ 4-bit 识别并保护核心权重通道,仅压缩次要参数 通用推理,平衡质量与速度
GGUF 模型格式,非量化算法 2-8 bit 适配CPU/GPU混合推理,轻量化格式优化 个人设备、苹果硅芯片部署
SmoothQuant PTQ W8A8 平滑激活值离群值,解决量化误差暴涨问题 服务端高吞吐推理
QLoRA QAF 4-bit+LoRA 量化压缩+低秩参数高效微调 低资源微调大模型
bitsandbytes PTQ 8/4-bit 动态分位量化,适配HuggingFace生态 快速实验、快速部署

在表格基础上,重点介绍两款普及率最高的核心算法:

GPTQ:目前最通用的后训练量化方案,适配绝大多数开源大模型。核心亮点是基于二阶Hessian矩阵信息逐层量化,每压缩一组权重后,会微调其余未量化权重补偿误差,最大限度保留模型精度,在INT4低精度下依然能实现优质效果,适配单卡极致压缩推理场景。

AWQ(激活感知量化):针对性优化的进阶方案。其核心洞察是模型权重并非同等重要,仅约1%的核心权重主导模型输出效果。算法会精准识别并保留这类关键权重的高精度,仅压缩次要冗余参数,相比传统GPTQ,在低精度场景下的模型稳定性和细节表现更优,适合通用场景落地。

六、量化的三大核心收益

1. 大幅降低显存占用(核心收益)
模型显存占用核心计算公式:模型显存 ≈ 参数量 × 每个参数占用的字节数(实际显存占用还包括KV Cache和临时激活值,通常比纯权重显存还要大),量化的压缩效果可以通过真实案例直观体现。以70B(700亿参数)大模型为例:FP16半精度模式下,显存占用高达140GB,需要两张A100高端服务器显卡才能勉强运行;经过INT4量化后,显存占用直接降至35GB,一张消费级RTX 4090显卡即可流畅推理。量化彻底解决了大模型“显存爆炸”的核心痛点。

2. 显著提升推理速度
计算机整数运算的算力开销,远低于高精度浮点运算。尤其在搭载Tensor Core的NVIDIA新款GPU上,INT8/INT4低精度计算优势极致放大,量化后的模型,在支持低精度计算的硬件上推理速度可提升30%-100%,对话响应、内容生成更流畅,无卡顿延迟。

3. 全面降低部署门槛,拓宽应用场景
量化彻底打破了大模型对高端服务器、专业显卡的依赖,让百亿级大模型可以在轻薄本、普通台式机、手机、树莓派等边缘设备运行。同时模型体积大幅缩小,硬盘、内存占用更低,设备运行功耗显著下降,适配云端、终端、嵌入式设备等全场景落地。

七、量化的精度损耗:到底会损失多少能力?
很多人担心量化会“降级AI智商”,其实精度损耗有明确的规律和阈值,以LLaMA系列模型基准测试结果为例,不同量化精度的性能保留率清晰可见:
INT8量化:保留99%-100%原始性能,几乎无损,专业场景也可放心使用

INT4(AWQ/GPTQ):在大多数通用任务上保留 90%-95% 性能,简单任务几乎无感

INT3量化:保留80%–90%性能,部分场景可感知效果下降

INT2量化:性能损失过大,几乎无实用价值,目前主要用于理论研究

同时量化损耗存在三大核心规律,能帮我们更科学选型:

1. 模型越大,量化损耗越小:70B大模型量化到INT4的效果,优于7B小模型同精度量化。大模型参数冗余更高,可轻松吸收量化微小误差。

2. 权重比激活值更耐量化:模型权重是静态固定数值,分布稳定;推理时的动态激活值容易出现极端离群值,更容易产生误差,因此W4A16量化方案稳定性更强。

3. 任务敏感度差异极大:普通对话、文本摘要、内容创作对量化不敏感;数学推理、代码生成、精密逻辑计算对精度要求高,不建议过度量化。

基于以上规律,我们可以总结出科学的量化选型原则:按需压缩、平衡取舍。日常闲聊、内容创作等轻量化场景,优先选择Q4_K_M(INT4)版本,性价比最高;代码生成、数学推理、专业文案创作等高精度场景,推荐INT8/Q8_0精度;极致专业、无损耗需求的场景,直接使用FP16/BF16半精度即可。

八、新手实战选型指南:不同设备怎么选量化模型?
很多新手部署最纠结的问题就是「自己的设备该选什么量化版本」,这里整理了适配不同硬件的实操选型方案,直接对照使用即可:

24G显存(RTX4090等旗舰显卡):优先Q8_0或FP16精度的13B模型,精度、速度、体验拉满,无明显损耗。

12G显存(3060/4060 Ti等主流显卡):首选Q4_K_M版本的7B/13B模型,兼顾稳定性和轻量化,适配日常全场景使用。

8G入门显存:推荐Q4精度的7B小参数模型,可搭配层卸载技术缓解显存压力,流畅运行基础功能。

纯CPU/无独立显卡设备:通过llama.cpp框架加载Q4/Q5精度模型,依靠内存完成轻量化推理,满足基础使用需求。

九、主流量化部署工具
目前量化技术生态已高度成熟,各类框架适配不同设备和场景,开箱即用,无需复杂开发:

llama.cpp + GGUF:个人用户首选,极致适配CPU、苹果硅芯片,支持2-8bit全精度量化部署,轻量化、无门槛。

vLLM:服务端高吞吐神器,原生支持AWQ、GPTQ、FP8等主流量化格式,推理速度拉满。

TensorRT-LLM:NVIDIA官方推理引擎,深度适配N卡,针对INT4/INT8/FP8量化做硬件级加速。

bitsandbytes + Transformers:最简部署方案,依托HuggingFace生态,几行代码即可实现4/8bit量化加载与推理。

MLC-LLM:跨平台神器,支持手机、浏览器、嵌入式边缘设备的量化模型部署。

十、量化技术展望
量化技术仍在快速迭代,不断打破精度与效率的边界,目前四大前沿方向值得关注:

FP8 成为新基线:新一代NVIDIA H100等架构原生支持FP8计算,兼顾接近FP16的高精度,同时推理吞吐量翻倍,逐步替代FP16成为训练、推理主流精度。

MX浮点量化(FP4):微软提出的Microscaling格式,通过细粒度共享指数位,实现4-bit浮点量化,适配新一代AI硬件,未来潜力巨大。

1-bit极致量化(BitNet):彻底颠覆传统量化,仅用{-1,0,1}三值权重训练模型,推理矩阵乘法退化为加减法,速度实现数量级提升,尚在研究层面,暂无成熟落地。

自适应混合精度量化:摒弃全局统一精度模式,根据模型每层的误差敏感度,动态分配比特数,敏感层高精度、冗余层极致压缩,进一步突破性价比上限。

总而言之,大模型量化绝非简单的文件有损压缩,而是一套平衡模型精度、推理速度、硬件成本的系统工程。它精准剔除模型中的精度冗余,完整保留核心智能能力,彻底打破了大模型的硬件壁垒,让动辄百亿参数的AI巨无霸走出实验室和云端服务器,成功扎根手机、电脑、车载、智能家居等各类终端设备,真正实现了AI从云端走向终端的全民普及。

如今量化工具链已高度成熟、开箱即用,落地门槛大幅降低,是每一位AI从业者和爱好者的必备技能。与此同时,FP8基线量化、FP4浮点量化、1-bit极致量化、混合精度自适应量化等前沿技术持续迭代,不断突破精度与效率的边界。未来,大模型将彻底摆脱硬件束缚,以更轻量化、高效率、高精度的形态实现全域落地。后续我会更新量化实操教程、多方案效果实测对比、本地完整部署流程,感兴趣可以持续关注!

Transformer是如何工作的(以GPT2为例)

Transformer是如何工作的(以GPT2为例)

脱离模型直接聊Transformer会感觉很空,本文以GPT-2为例(base版,768维维度、12层Transformer、12头自注意力),介绍一下其训练和推理的核心逻辑,以及推理时的具体执行流程。

一、GPT-2训练时数据处理步骤

训练的核心目标是让模型通过海量文本,自主学习语义、语法和逻辑,最终优化所有可训练参数,全程围绕“前向传播计算损失→反向传播更新参数”循环迭代,具体步骤如下:

步骤1:文本输入与Token化处理
1. 输入原始文本(一段话),例如“猫坐在柔软的垫子上”;
2. 采用BPE(字节对编码)算法进行子词切分,将文本拆分为模型可识别的最小语言单元(Token),避免单个汉字/单词的局限,平衡词汇量与表达能力,例如切分为[“猫”, “坐在”, “柔软”, “的”, “垫子”, “上”];
3. 通过模型内置的词汇表(Vocab),将每个Token映射为唯一的整数ID(如[1001, 2005, 3010, 4002, 5008, 6003]),这是模型能够识别的“数字语言”。

步骤2:嵌入层与位置编码处理
1. 初始化嵌入矩阵(形状为[词汇表大小×768]),训练初期该矩阵为随机小数值,与后续所有模型参数同步参与训练;
2. 根据Token ID,从嵌入矩阵中“查表”,取出每个Token对应的768维向量(即Token嵌入),此时的向量初期无语义,后续通过训练逐步承载语义信息;
3. 加入位置编码(同样为随机初始化后可训练的矩阵),给每个Token的向量添加位置信息,让模型区分Token在句子中的先后顺序(Transformer本身不具备位置感知能力);
4. 最终得到形状为[Token数量×768]的矩阵,作为12层Transformer的初始输入。

步骤3:12层Transformer逐层前向计算

每一层Transformer的处理逻辑完全一致,均遵循“前置归一化→多头自注意力→融合投影→残差连接→前置归一化→FFN前馈网络→残差连接”的流程,具体如下:

1. 前置归一化(LayerNorm):对本层输入的向量进行数值校准,将所有Token的向量分布调整为统一标准(均值、方差固定),避免数值波动影响训练稳定性;
2. 多头自注意力计算:将输入向量分别通过本层独立随机初始化的Wq、Wk、Wv权重矩阵,生成查询(Q)、键(K)、值(V)向量;将Q、K、V按头切分为12份(768维,12头,每头64维),每头独立计算Token间的关联分数(Q与K的点积,缩放后通过Softmax归一化得到注意力权重),再用权重与V进行加权求和,得到单头输出;
3. 多头融合投影:将12个头的输出按列拼接,得到[Token数量×768]的矩阵,再通过本层独立的Wo权重矩阵进行融合投影(这里就是把12个头合成1个头,否则12个头之间就没关系了),打破头与头的孤立性,混合全局特征;
4. 第一次残差连接:将本层的初始输入(未经过注意力计算的向量)与注意力融合后的输出相加,保留原始底层信息,同时为梯度反向传播提供直通通路,避免梯度消失;
5. 第二次前置归一化:对残差连接后的向量再次进行数值校准,为后续FFN计算做准备;
6. FFN前馈网络计算:通过两层线性变换(768维→3072维升维,再3072维→768维降维,通过缩放可以让模型不要太多的关注细节)+ GELU非线性激活,对每个Token的向量进行深度加工,筛选冗余细节、提炼关键语义特征(词与词之间不交互,仅单独提纯);
7. 第二次残差连接:将FFN的输入与FFN的输出相加,避免过度加工丢失核心特征,得到本层的最终输出;
8. 重复上述7个步骤,将第1层的输出作为第2层的输入,依次经过12层Transformer的加工,得到最终的特征矩阵。

步骤4:损失计算与反向传播
1. 输出层处理:将12层Transformer的最终输出,通过线性投影映射到词汇表维度,得到每个Token对应的下一个可能Token的概率分布;
2. 计算损失(Loss):以“预测下一个Token”为目标,对比模型预测的概率分布与文本的真实Token,计算全局唯一的损失值(损失越大,预测越不准);
3. 反向传播更新参数:通过链式法则,将损失值从输出层反向逐层传递,穿透12层Transformer的所有权重(Wq、Wk、Wv、Wo、FFN权重),一直传递到最开头的嵌入矩阵和位置编码矩阵;
4. 优化器迭代:通过Adam优化器,根据反向传播得到的梯度,微调所有可训练参数(包括嵌入矩阵、各层权重、位置编码),降低损失值;
5. 循环迭代:重复步骤1-4,用海量文本持续训练,直到损失值趋于稳定,模型能够准确预测下一个Token,此时嵌入矩阵的向量已具备语义(相似Token的向量距离相近),各层权重也已学会最优的特征提取逻辑。

一些细节
1. 所有可训练参数(嵌入矩阵、各层Wq/Wk/Wv/Wo、FFN权重、位置编码)均为随机初始化,同步参与反向传播更新;
2. 可复用同领域、同词表的预训练嵌入矩阵,大幅提升训练速度,减少“从零学习语义”的算力消耗;
3. 在GPT-2的12层Transformer中,浅层侧重学习语法、局部搭配,深层侧重学习语义、逻辑推理,均为训练中自动分化形成,无需人工设计;
4. 在GPT-2中,每一头侧重什么并不是人为设计的,而是通过训练自动生成的;
5. 先分别乘Wq、Wk、Wv,再拆分为12个头;先将12个头合并为1个头,再乘Wo;
6. 嵌入矩阵是大模型的一部分,也是通过训练,接收到反向反馈,逐步修正得到的;
7. 词嵌入矩阵和位置嵌入矩阵,也都是随机初始化,然后逐步训练出来的;模型支持的上下文越大,位置嵌入矩阵会不断变长;

二、GPT-2推理时训练步骤

推理的核心目标是利用训练好的模型参数,根据输入的文本(提示词),逐步生成符合语义、逻辑的后续文本,全程只有前向传播,无反向传播和参数更新,具体步骤如下:

步骤1:输入处理
1. 输入推理提示词(一段话),例如“猫坐在柔软的垫子上,它”;
2. 对提示词进行Token化处理(BPE切分→Token ID映射),得到与训练时格式一致的Token ID序列;
3. 从训练好的嵌入矩阵中,根据Token ID取出对应的768维向量,加入训练好的位置编码,得到[Token数量×768]的初始输入矩阵。

步骤2:12层Transformer逐层前向计算
1. 将初始输入矩阵依次传入12层Transformer,每层均执行“前置归一化→多头自注意力→Wo融合→残差连接→前置归一化→FFN→残差连接”的流程,全程使用训练好的固定参数(嵌入矩阵、各层权重、位置编码均不改变),最终得到提示词对应的特征矩阵。

步骤3:Token生成
1. 将12层Transformer的最终输出,通过输出层线性投影,映射到词汇表维度,得到当前最后一个Token对应的下一个Token的概率分布;
2. 按概率筛选(通常取概率最高的Token,或通过采样策略筛选),得到下一个Token的ID,再将其映射为对应的文字(例如筛选出“很”,此时提示词变为“猫坐在柔软的垫子上,它很”);
3. 迭代生成:将新生成的Token ID加入原有的Token ID序列,重新执行步骤2-3,重复该过程,直到生成预设长度的文本,或遇到结束符(EOS),停止生成。

一些细节
1. 推理时仅执行前向传播,速度远快于训练(推理时无需计算损失,也不会更新任何参数,所有权重均为训练好的最优值,仅做特征提取和概率预测)。
2. 推理时,选用不同的tempture,其实就是选用TopX的高概率token,进行随机挑选,从而输出会不完全一致,并影响后续token输出;
3. 生成的文本质量,直接依赖训练时的参数优化效果(嵌入矩阵的语义准确性、各层权重的特征提取能力),所以高水平的语料特别重要,很多时候是宁缺毋滥;
4. 为保证生成的逻辑性,推理时会使用掩码机制,确保模型生成当前Token时,无法看到后续未生成的Token(单向因果掩码);
5. 在生成一个token后,会将这个token补充到本轮输入的末尾,作为下一轮的输入,预测下一个token;
6. 当大模型反馈100个汉字,意味着返回了120~150个token(1 个汉字 ≈ 1.2~1.5 个 Token),也就是进行了120~150次推理,所以服务商需要大量高端计算显卡,支持大模型的运算;
7. 所以当25年初DeepSeek靠压缩注意力(大幅降低注意力计算开销)+ MoE稀疏激活(只计算少部分参数)+ KV量化缓存(大幅降低显存用量)+ 推测解码(一次生成多个token,预测成功保留,大幅提升推理效率)等方法,让推理成本大幅降低,着实让业绩震惊了一把;

从Prompt到Context再到Harness:Agent工程的三次跃迁


从Prompt到Context再到Harness:Agent工程的三次跃迁

如果AI Agent是一辆车,那大模型是发动机,Prompt Engineering是方向盘,Context Engineering是导航软件,Harness Engineering是整车的质量工程。相互配合,最终才能顺利达目的地。

引言:为什么AI Agent好像总在“瞎忙”?

2023年,我们沉迷于寻找“完美提示词”,将大量精力投入措辞打磨,试图用一句精准指令撬动大模型的潜在能力。

2024年,我们全力钻研 RAG、记忆系统与长上下文管理,拼命破解模型幻觉与知识盲区的痛点。

2025–2026年,越来越多研发团队发现:即便把提示词优化到极致、把上下文信息补全,AI Agent 在真实业务场景中依然频繁“翻车”,难以稳定落地并创造实际价值。

行业数据给出了残酷的答案:AI Agent 的整体失败率约为20%,长链路复杂任务的失败率更是突破50%;MIT一项针对企业生成式AI的研究显示,约95%的大型企业试点项目,最终未能带来可衡量的商业回报。

问题的核心,从来不是模型不够聪明、参数不够庞大,而是我们始终缺乏一套系统化、可管控、可复用的工程方法,来驾驭这股强大却难以预测的智能力量。

一、Agent工程的三次跃迁

纵观Agent工程的发展历程,已完成三次范式跃迁:从Prompt Engineering(提示工程),到Context Engineering(上下文工程),再到如今引领行业方向的Harness Engineering(驾驭工程)。每一次跃迁,都是对AI工程化的一次升维,更是对“如何让AI真正服务于业务”这一核心问题的深度探索。

二、第一次跃迁:Prompt Engineering(2023–2024)—— 写“咒语”的艺术

核心命题:如何问对问题?

Prompt Engineering是Agent工程的第一代范式,也是大模型走向大众化与工程化的起点。ChatGPT横空出世后,整个行业都在聚焦同一件事:如何“问对问题”,才能让模型稳定输出符合预期的结果。

这一阶段,开发者通过设定角色、补充Few-shot示例、嵌入思维链(CoT)、明确输出格式与约束条件,构建起一套基础指令体系,以此引导模型高效完成任务。比如:

你是资深 Python 工程师,请帮我重构以下代码。
要求:
1. 遵循 PEP8 规范
2. 添加类型注解
3. 处理边界情况

能力边界与瓶颈
Prompt Engineering的核心信念是:只要Prompt写得足够好,模型就能给出理想答案。它将大模型视为一个可通过自然语言驱动的黑盒,所有优化都集中在单次输入文本上,快速降低了大模型的使用门槛,在内容生成、翻译、简单问答等轻量化场景中迅速普及。

但随着任务复杂度不断提升,其天花板很快显现:

1、任务复杂度受限
单轮任务表现尚可,多步骤、长链路任务极易跑偏、出错,难以形成连贯输出

2、缺乏私有知识
仅依赖模型预训练数据,无法接入企业内部业务信息、私有知识库,实用性受限

4、无记忆能力
无状态交互模式,无法记住历史对话偏好、任务进度,多轮对话体验差

5、高度脆弱性
提示词措辞的微小变化,就可能导致模型输出准确率大幅波动,稳定性不足

5、无实际执行能力
仅能输出文本内容,无法调用外部工具、执行具体操作,难以落地实际业务

当然,Prompt Engineering并非完全是“玄学”。发展后期,行业也逐步形成了模板库、评估指标等标准化方法,并出现了 Prompt Tuning等轻量微调技术,为后续上下文工程的发展奠定了基础。PromptBase等平台的兴起,也印证了它的商业价值,但同时也暴露了其可复制性差、难以规模化落地的根本短板。

Prompt Engineering解决的是“说什么、怎么说”的问题,但无法解决“做什么、怎么做”的核心诉求,因此只能作为轻量化应用的基础方案,难以支撑复杂业务场景。

三、第二次跃迁:Context Engineering(2025)—— 信息编排与管理的艺术

核心命题:给模型看什么、记什么?

随着Claude、Gemini等主流模型将上下文窗口推至百万token级别,行业重心从“怎么问”转向“带什么信息进场”,Context Engineering逐渐成为Agent工程的主流范式。

它的核心,是为大模型建立一套完善的信息供给与记忆体系,打破预训练知识的边界,让模型能够感知外部环境、调用工具能力、保留交互状态。其核心组件主要包括三大模块:

1. RAG(检索增强生成):接入私有知识库与向量库,实时检索最新、最精准的信息,有效解决模型幻觉与知识滞后问题。

2. Tools(工具调用):封装 API、代码执行、数据查询等实用能力,让 AI 从“只会说”真正走向“会动手做事”。

3. Memory(记忆系统):区分短期对话记忆与长期用户记忆,支持多轮连贯任务,让交互更具连贯性与个性化。

典型架构为:

用户查询 → 检索模块 → 相关性排序 → 上下文组装 → LLM 推理 → 输出格式化
              ↑_________知识库/历史记忆/工具定义_________|

Context Engineering 显著提升了 Agent 的综合能力,但也带来了新的系统复杂性,新的问题随之浮现:

1、Context Rot(上下文腐化)
上下文 token 数量越多,模型对中间关键信息的注意力越分散,容易忽略核心需求。

2、信息噪声
无关信息混入上下文,会干扰模型判断,导致输出偏离任务目标,降低执行效率。

3、工具滥用/错用
模型可能随意调用工具、传递错误参数,不仅无法解决问题,还可能引发系统风险。

4、行为不可控
缺乏硬性约束机制,模型可能跳过既定规则、越权操作,甚至陷入死循环,导致任务停滞。

5、错误累积
长链路任务中,一步操作失误会不断累积,最终导致整个任务彻底失败,难以回溯与修正。

为应对这些问题,行业逐步发展出上下文压缩、动态检索优先级、记忆分层等优化技术,在控制token成本的同时,有效提升了信息的有效性。但即便如此,Context Engineering依然只能解决“知道什么”的问题,无法保证“做得稳、不出错”,难以支撑生产级高可靠业务场景。

Context Engineering解决的是“看什么、记什么”的信息供给问题,但无法解决“怎么跑、跑多稳”的系统可靠性问题,仍不足以支撑生产级高可靠场景的落地需求。

四、第三次跃迁:Harness Engineering(2026)—— 系统构建与驾驭的艺术

核心命题:如何让系统可靠地自主运行?

2026 年初,Mitchell Hashimoto正式提出Harness Engineering概念,短短数周内便被OpenAI、Martin Fowler等行业权威广泛采纳,迅速成为 Agent 工程的新一代主导范式。

“Harness”意为缰绳、马具,在AI体系中,它特指围绕 Agent 构建的一整套运行环境、约束机制与治理体系。OpenAI对其给出了明确定义:不优化模型本身,而是优化模型运行的外部环境,通过系统性设计,让 Agent 在可控、可靠、合规的框架内高效执行任务。

其核心哲学是:Humans steer, agents execute(人类掌舵,智能体执行)。

为什么需要Harness?

实验数据直观地展现了Harness Engineering的核心价值:

1、同一模型(Claude Opus 4.5)在不同 Harness 配置下,任务成功率可从 2% 提升至 12%,差距高达 6 倍。

2、相同任务场景下,无 Harness 时 Agent 成功率仅为 42%,加入完善的 Harness 体系后,成功率飙升至 78%。

3、LangChain 仅优化 Harness 配置,便让编码 Agent 在 Terminal Bench 2.0 中的表现从 52.8% 提升至 66.5%,成效显著。

同时,Anthropic 总结出 Agent 三大典型失效模式,而这也正是 Harness Engineering 要解决的核心问题:

1、试图一步到位,过度消耗上下文资源,导致关键信息被覆盖。

2、过早宣布任务胜利,忽略未完成的细节的部分,导致任务成果不完整。

3、无验证执行操作,错误不断累积,最终导致任务彻底失败且无法回溯。

Harness Engineering 的核心支柱

综合 OpenAI、Anthropic 及行业实践经验,Harness 体系主要由四大核心支柱构成:

1、动态上下文管理(Context Engineering)
搭建持续迭代的活态知识库,保障信息时效性与准确性;采用按需检索机制,实现渐进式信息披露,避免上下文冗余;注入动态可观测性数据,让系统运行状态可追踪、可分析。

2、架构约束体系(Architectural Constraints)
引入确定性代码检查(Linter)与严格类型校验,规避语法与逻辑错误;建立分层依赖管理与CI强制阻断机制,保障系统稳定性与可维护性;嵌入业务规范与合规要求硬约束,确保Agent行为合法合规。

3、闭环反馈机制(Feedback Loop)
构建Agent间相互审核机制,交叉校验执行结果,降低错误率;部署自动化测试与效果校验流程,实现执行质量实时管控;建立错误回传与自我修正机制,及时复盘问题、优化执行逻辑。

4、系统熵管理(Garbage Collection)
实施文档漂移检测,及时发现并修正知识偏差;开展违规行为常态化巡检,防范系统运行风险;定期清理技术债务,保障系统长期高效、稳定运行。

在实际落地过程中,Harness 还承担了多智能体编排、成本护栏、权限控制、与MLOps(机器学习运维)融合等关键职能,让整个Agent系统具备可观测、可审计、可收敛的特性,而非放任Agent自由生长、无序执行。

如何使用Harness:从“教AI思考”到“给AI流程”

以代码调试Agent为例,两种不同工程范式的落地效果差异显著:

传统方式(Prompt + Context):
1、撰写冗长指令,试图教Agent一步步排查问题
2、向模型塞入全量日志与代码库,导致上下文冗余
3、最终结果:Agent思路混乱、钻牛角尖,甚至越修越错,无法解决实际问题

Harness 方式:
1、错误分类器 → 判定错误类型、过滤无效噪声
2、日志提取器 → 精准抽取关键错误信息,减少冗余
3、代码定位器 → 快速锁定可疑代码范围,提升效率
4、修复生成器 → 生成针对性补丁,确保合规性
5、测试验证器 → 自动校验修复效果,失败则回环重试

可以看到,Harness Engineering解决的是“怎么跑、跑多稳”的可靠性问题,让 AI 从不可控的“玩具”,真正转变为可规模化落地的可靠协作者,标志着 AI 开发正式从“炼丹式调优”走向标准化、工程化的现代软件工程。

五、三层范式的关系:包含而非取代

Prompt、Context、Harness 三种工程范式,并非相互替代的关系,而是层层包含、逐级升级的架构关系:

局限 具体表现
任务复杂度受限 单轮任务表现尚可,多步骤、长链路任务极易跑偏、出错,难以形成连贯输出
缺乏私有知识 仅依赖模型预训练数据,无法接入企业内部业务信息、私有知识库,实用性受限
无记忆能力 无状态交互模式,无法记住历史对话偏好、任务进度,多轮对话体验差
高度脆弱性 提示词措辞的微小变化,就可能导致模型输出准确率大幅波动,稳定性不足
无实际执行能力 仅能输出文本内容,无法调用外部工具、执行具体操作,难以落地实际业务

简单来说:
Harness 体系中,离不开 Context 提供的信息支撑
Context 体系中,离不开高质量 Prompt 的引导作用

三次跃迁的本质,是工程重心的不断上移——从“调优指令”到“管理信息”,再到“管控整个系统”,逐步实现 AI Agent 的规模化、可靠化落地。

六、工程价值的迁移

1、Prompt 时代
核心价值在于“解锁模型基础能力”,高度依赖工程师个人技巧,优化经验难以复制,规模化价值有限。

2、Context 时代
核心价值在于“构建数据基础设施”,工作内容接近传统数据工程,重点在于信息的梳理、检索与供给。

3、Harness 时代
核心价值在于“系统架构设计与风险治理”,考验工程师的软件工程能力、系统思维与风险管控意识。

七、落地建议:分阶段适配你的项目

结合不同项目的场景需求与资源现状,建议分三个阶段逐步落地 Agent 工程范式,避免盲目跟风、一步到位:

阶段一:单点突破(Prompt)
适合简单内容生成、翻译、基础问答等轻量化场景,重点建设 Prompt 模板库与示例库,规范指令格式,快速解锁模型基础能力,降低使用门槛。

阶段二:能力建设(Context)
适合需要接入私有知识、支持多轮对话、调用基础工具的场景,重点搭建 RAG 检索体系与记忆系统,解决模型幻觉与知识滞后问题,提升 Agent 的实用性。

阶段三:系统治理(Harness)
适合生产级应用、敏感业务场景、高可靠要求的项目,重点建设以下核心能力:
1、架构约束与规范,明确 Agent 行为边界
2、自动化反馈与测试闭环,及时发现并修正错误
3、可观测与监控体系,实时掌握系统运行状态
4、安全护栏与人工介入点,降低业务风险
5、熵清理与技术债务管理,保障系统长期稳定运行

落地避坑
1、不要跳过 Context 阶段直接硬上 Harness,缺乏信息支撑的 Harness 只会成为空架子,无法发挥实际价值。
2、不要一开始就追求完美 Harness 体系,建议从小型约束与简单反馈循环开始,逐步迭代优化,降低落地难度。
3、不要迷信 AI 完全自治,关键业务节点必须保留“人在回路”,避免因 Agent 失控引发重大风险。

八、结语:范式演进背后的不变核心

Agent 工程的三次跃迁,本质上是一条清晰的进化路线:从优化指令,到管理信息,再到构建可控系统。

每一次跃迁,都源于模型能力突破了旧范式的上限,同时也暴露出更深层次的工程化问题——从“不会用”到“用不好”,再到“用不稳”,行业的探索始终围绕“让 AI 真正服务于业务”这一核心目标。

但无论技术如何迭代、范式如何升级,有一件事始终不会被自动化取代:深刻理解你要解决的问题。

最好的Prompt,源于对任务本质的精准把握;最好的Context,源于对业务信息流的深刻理解;最好的Harness,源于对系统失败模式的全面认知。

工具在变,范式在变,但清晰的问题意识、严谨的工程思维、对风险的敏锐判断,永远是优秀 AI 工程师的核心竞争力,也是Agent工程能够持续创造价值的根本所在。

九、参考资源
Harness Engineering: Leveraging Codex in an Agent-First World – OpenAI
Harness Engineering – Martin Fowler
The Third Evolution: Why Harness Engineering Replaced Prompting in 2026 – Epsilla
The Rise of AI Harness Engineering – Cobus Greyling
Anthropic Agent 可靠性工程实践白皮书
Pinecone Context Compression 技术文档
LangChain Harness & 多智能体编排实践

Karpathy LLM Wiki【转载】

2026年4月,前OpenAI创始成员Andrej Karpathy提出了一种新的个人知识管理新范式,核心是让大语言模型(LLM)充当 “知识编译器”,将零散原始资料(文章、论文、笔记等)自动生成结构化、可持久化、能复利增长的 Markdown 维基知识库。

它采用 Raw Sources(原始资料)、Wiki(LLM 生成的结构化知识库)、Schema(规范配置)三层架构,区别于传统 RAG 的 “运行时检索”,LLM Wiki 提前处理知识并持续维护更新,形成高密度互联的知识图谱(交叉引用的 Markdown Wiki),人类仅负责资料收集与判断,大幅降低知识维护成本。

原文地址:karpathy/llm-wiki.md

Karpathy LLM Wiki

A pattern for building personal knowledge bases using LLMs.

This is an idea file, it is designed to be copy pasted to your own LLM Agent (e.g. OpenAI Codex, Claude Code, OpenCode / Pi, or etc.). Its goal is to communicate the high level idea, but your agent will build out the specifics in collaboration with you.

The core idea

Most people’s experience with LLMs and documents looks like RAG: you upload a collection of files, the LLM retrieves relevant chunks at query time, and generates an answer. This works, but the LLM is rediscovering knowledge from scratch on every question. There’s no accumulation. Ask a subtle question that requires synthesizing five documents, and the LLM has to find and piece together the relevant fragments every time. Nothing is built up. NotebookLM, ChatGPT file uploads, and most RAG systems work this way.

The idea here is different. Instead of just retrieving from raw documents at query time, the LLM incrementally builds and maintains a persistent wiki — a structured, interlinked collection of markdown files that sits between you and the raw sources. When you add a new source, the LLM doesn’t just index it for later retrieval. It reads it, extracts the key information, and integrates it into the existing wiki — updating entity pages, revising topic summaries, noting where new data contradicts old claims, strengthening or challenging the evolving synthesis. The knowledge is compiled once and then kept current, not re-derived on every query.

This is the key difference: the wiki is a persistent, compounding artifact. The cross-references are already there. The contradictions have already been flagged. The synthesis already reflects everything you’ve read. The wiki keeps getting richer with every source you add and every question you ask.

You never (or rarely) write the wiki yourself — the LLM writes and maintains all of it. You’re in charge of sourcing, exploration, and asking the right questions. The LLM does all the grunt work — the summarizing, cross-referencing, filing, and bookkeeping that makes a knowledge base actually useful over time. In practice, I have the LLM agent open on one side and Obsidian open on the other. The LLM makes edits based on our conversation, and I browse the results in real time — following links, checking the graph view, reading the updated pages. Obsidian is the IDE; the LLM is the programmer; the wiki is the codebase.

This can apply to a lot of different contexts. A few examples:

  • Personal: tracking your own goals, health, psychology, self-improvement — filing journal entries, articles, podcast notes, and building up a structured picture of yourself over time.
  • Research: going deep on a topic over weeks or months — reading papers, articles, reports, and incrementally building a comprehensive wiki with an evolving thesis.
  • Reading a book: filing each chapter as you go, building out pages for characters, themes, plot threads, and how they connect. By the end you have a rich companion wiki. Think of fan wikis like Tolkien Gateway — thousands of interlinked pages covering characters, places, events, languages, built by a community of volunteers over years. You could build something like that personally as you read, with the LLM doing all the cross-referencing and maintenance.
  • Business/team: an internal wiki maintained by LLMs, fed by Slack threads, meeting transcripts, project documents, customer calls. Possibly with humans in the loop reviewing updates. The wiki stays current because the LLM does the maintenance that no one on the team wants to do.
  • Competitive analysis, due diligence, trip planning, course notes, hobby deep-dives — anything where you’re accumulating knowledge over time and want it organized rather than scattered.

Architecture

There are three layers:

Raw sources — your curated collection of source documents. Articles, papers, images, data files. These are immutable — the LLM reads from them but never modifies them. This is your source of truth.

The wiki — a directory of LLM-generated markdown files. Summaries, entity pages, concept pages, comparisons, an overview, a synthesis. The LLM owns this layer entirely. It creates pages, updates them when new sources arrive, maintains cross-references, and keeps everything consistent. You read it; the LLM writes it.

The schema — a document (e.g. CLAUDE.md for Claude Code or AGENTS.md for Codex) that tells the LLM how the wiki is structured, what the conventions are, and what workflows to follow when ingesting sources, answering questions, or maintaining the wiki. This is the key configuration file — it’s what makes the LLM a disciplined wiki maintainer rather than a generic chatbot. You and the LLM co-evolve this over time as you figure out what works for your domain.

Operations

Ingest. You drop a new source into the raw collection and tell the LLM to process it. An example flow: the LLM reads the source, discusses key takeaways with you, writes a summary page in the wiki, updates the index, updates relevant entity and concept pages across the wiki, and appends an entry to the log. A single source might touch 10-15 wiki pages. Personally I prefer to ingest sources one at a time and stay involved — I read the summaries, check the updates, and guide the LLM on what to emphasize. But you could also batch-ingest many sources at once with less supervision. It’s up to you to develop the workflow that fits your style and document it in the schema for future sessions.

Query. You ask questions against the wiki. The LLM searches for relevant pages, reads them, and synthesizes an answer with citations. Answers can take different forms depending on the question — a markdown page, a comparison table, a slide deck (Marp), a chart (matplotlib), a canvas. The important insight: good answers can be filed back into the wiki as new pages. A comparison you asked for, an analysis, a connection you discovered — these are valuable and shouldn’t disappear into chat history. This way your explorations compound in the knowledge base just like ingested sources do.

Lint. Periodically, ask the LLM to health-check the wiki. Look for: contradictions between pages, stale claims that newer sources have superseded, orphan pages with no inbound links, important concepts mentioned but lacking their own page, missing cross-references, data gaps that could be filled with a web search. The LLM is good at suggesting new questions to investigate and new sources to look for. This keeps the wiki healthy as it grows.

Indexing and logging

Two special files help the LLM (and you) navigate the wiki as it grows. They serve different purposes:

index.md is content-oriented. It’s a catalog of everything in the wiki — each page listed with a link, a one-line summary, and optionally metadata like date or source count. Organized by category (entities, concepts, sources, etc.). The LLM updates it on every ingest. When answering a query, the LLM reads the index first to find relevant pages, then drills into them. This works surprisingly well at moderate scale (~100 sources, ~hundreds of pages) and avoids the need for embedding-based RAG infrastructure.

log.md is chronological. It’s an append-only record of what happened and when — ingests, queries, lint passes. A useful tip: if each entry starts with a consistent prefix (e.g. ## [2026-04-02] ingest | Article Title), the log becomes parseable with simple unix tools — grep "^## \[" log.md | tail -5 gives you the last 5 entries. The log gives you a timeline of the wiki’s evolution and helps the LLM understand what’s been done recently.

Optional: CLI tools

At some point you may want to build small tools that help the LLM operate on the wiki more efficiently. A search engine over the wiki pages is the most obvious one — at small scale the index file is enough, but as the wiki grows you want proper search. qmd is a good option: it’s a local search engine for markdown files with hybrid BM25/vector search and LLM re-ranking, all on-device. It has both a CLI (so the LLM can shell out to it) and an MCP server (so the LLM can use it as a native tool). You could also build something simpler yourself — the LLM can help you vibe-code a naive search script as the need arises.

Tips and tricks

  • Obsidian Web Clipper is a browser extension that converts web articles to markdown. Very useful for quickly getting sources into your raw collection.
  • Download images locally. In Obsidian Settings → Files and links, set “Attachment folder path” to a fixed directory (e.g. raw/assets/). Then in Settings → Hotkeys, search for “Download” to find “Download attachments for current file” and bind it to a hotkey (e.g. Ctrl+Shift+D). After clipping an article, hit the hotkey and all images get downloaded to local disk. This is optional but useful — it lets the LLM view and reference images directly instead of relying on URLs that may break. Note that LLMs can’t natively read markdown with inline images in one pass — the workaround is to have the LLM read the text first, then view some or all of the referenced images separately to gain additional context. It’s a bit clunky but works well enough.
  • Obsidian’s graph view is the best way to see the shape of your wiki — what’s connected to what, which pages are hubs, which are orphans.
  • Marp is a markdown-based slide deck format. Obsidian has a plugin for it. Useful for generating presentations directly from wiki content.
  • Dataview is an Obsidian plugin that runs queries over page frontmatter. If your LLM adds YAML frontmatter to wiki pages (tags, dates, source counts), Dataview can generate dynamic tables and lists.
  • The wiki is just a git repo of markdown files. You get version history, branching, and collaboration for free.

Why this works

The tedious part of maintaining a knowledge base is not the reading or the thinking — it’s the bookkeeping. Updating cross-references, keeping summaries current, noting when new data contradicts old claims, maintaining consistency across dozens of pages. Humans abandon wikis because the maintenance burden grows faster than the value. LLMs don’t get bored, don’t forget to update a cross-reference, and can touch 15 files in one pass. The wiki stays maintained because the cost of maintenance is near zero.

The human’s job is to curate sources, direct the analysis, ask good questions, and think about what it all means. The LLM’s job is everything else.

The idea is related in spirit to Vannevar Bush’s Memex (1945) — a personal, curated knowledge store with associative trails between documents. Bush’s vision was closer to this than to what the web became: private, actively curated, with the connections between documents as valuable as the documents themselves. The part he couldn’t solve was who does the maintenance. The LLM handles that.

Note

This document is intentionally abstract. It describes the idea, not a specific implementation. The exact directory structure, the schema conventions, the page formats, the tooling — all of that will depend on your domain, your preferences, and your LLM of choice. Everything mentioned above is optional and modular — pick what’s useful, ignore what isn’t. For example: your sources might be text-only, so you don’t need image handling at all. Your wiki might be small enough that the index file is all you need, no search engine required. You might not care about slide decks and just want markdown pages. You might want a completely different set of output formats. The right way to use this is to share it with your LLM agent and work together to instantiate a version that fits your needs. The document’s only job is to communicate the pattern. Your LLM can figure out the rest.

2026年主流氛围编程工具对比

VibeCoding

2026年主流氛围编程(Vibe Coding)工具对比

一、工具分类

分类 核心特征 代表厂商
AI原生IDE 从零构建、深度AI集成、多文件Agent Cursor、Windsurf、Google Antigravity、Trae
终端/CLI Agent 命令行交互、自主任务执行 Claude Code、OpenAI Codex CLI、Gemini CLI、Open Code
IDE插件生态 依附现有IDE、即插即用 GitHub Copilot、Gemini Code Assist、Amazon Q、JetBrains AI Assistant
云端开发环境 浏览器内全栈开发 Replit Agent、GitHub Codespaces、Bolt.new、Google AI Studio
AI原型工具 AI辅助原型设计、可视化交互、多端适配、设计与开发联动 Figma、Pencil、Stitch、Lovable、v0

二、AI原生IDE

产品 技术基础 核心模型 定价(不准) 差异化优势 适用场景
Cursor VS Code分支 GPT、Claude、Gemini $20/月起 最强代码库理解(5万+行)、Composer多文件编辑、Agent自主迭代、支持多语言实时调试 大型全栈项目、专业开发团队、复杂系统开发
Windsurf VS Code分支 多模型(GPT、Claude、Gemini) $15/月起(低于Cursor) 性价比优先、Cascade工作流、轻量占用、支持离线模式 预算敏感团队、快速原型、中小型项目开发
Google Antigravity VS Code分支 Gemini 预览期免费,正式版$18/月起 Agent优先架构、生成任务列表/浏览器录制、深度集成Google云服务 Google生态用户、实验性项目、云原生开发
Trae(国内版) VS Code分支 doubao-2.0-pro、doubao-2.0-code 免费 字节跳动自研,适配中文开发场景、轻量化Agent协作、与字节系工具无缝集成 国内开发者、中文需求场景、字节生态用户、中小型项目
Trae(国际版) VS Code分支 GPT、Claude 专业版$15/月起 适配海外开发场景、多语言实时翻译、深度集成海外云服务(AWS、Google Cloud)、支持跨区域协作 海外开发者、跨区域团队、依赖海外模型的开发场景

使用建议>>>

  • 大型项目:Cursor

  • 国内开发者:Trae系列

三、终端Agent

产品 厂商 技术栈 开源 核心模型 定价(不准) 差异化
Claude Code Anthropic Node.js ❌,但源码刚泄露 Claude $20/月 深度推理、自主规划、200K上下文、支持复杂命令组合执行
OpenAI Codex CLI OpenAI Rust ✅ Apache 2.0 GPT API计费($0.002/1K token) 极速性能、精细控制、自定义Slash命令、可二次开发集成
Gemini CLI Google Go语言开发 ✅ Apache 2.0 Gemini 1K请求/天免费(超出后$0.0015/1K token) 1M token上下文、预算友好、深度集成Google云命令、轻量无依赖
Open Code 开源社区 TypeScript、Bun运行时 ✅ MIT许可证 多模型适配(Claude、GPT、Gemini等75+种LLM) 完全免费(仅需承担模型API费用) 终端原生TUI界面、主副Agent协作、Self-Healing自愈机制、20+内置工具、支持插件扩展,无供应商锁定风险,可本地部署

使用建议>>>

  • 复杂业务逻辑:Claude Code、OpenAI Codex CLI、Gemini CLI

  • 开源自主可控:Open Code

四、IDE插件生态

产品 厂商 核心模型 免费额度(不准) 定价(不准) 核心优势 适用场景
GitHub Copilot Microsoft/OpenAI GPT、Claude 2K/月(代码补全token) $10-19/月(个人-企业) GitHub深度集成、企业合规、市场占有率52%、支持多IDE适配(VS Code、JetBrains) GitHub生态、企业标准化、多IDE协同开发团队
Gemini Code Assist Google Gemini 180K/月 个人版$15/月,企业定制 免费额度最高、1M token上下文、MCP原生支持、适配主流IDE 成本敏感、大型代码库、多IDE用户
Amazon Q Developer AWS Titan、Nova 14天免费试用 $19/月 AWS服务深度集成、代码转换、安全扫描、支持AWS资源快速生成 AWS原生应用、云开发、AWS生态团队
JetBrains AI Assistant JetBrains GPT、Claude、Gemini 无限本地补全(联网功能需付费) $196/年(含JetBrains全家桶部分权益) 原生JetBrains集成、.aiignore隐私控制、Junie Agent、代码重构建议 JetBrains IDE重度用户、Java/Python等语言开发者

使用建议>>>

  • 建议:根据开发生态进行选择即可

五、云端开发环境

产品 核心能力 定价(不准) 关键更新 适用场景
Google AI Studio 谷歌官方云端开发环境,深度集成Gemini系列模型,支持应用快速生成、调试、部署一体化,内置丰富模板 免费版(基础功能,含Gemini免费额度)、企业版$20/月起 Gemini深度集成,优化应用生成效率,支持多端适配(网页、移动端),新增团队协作功能 Google生态用户、依赖Gemini模型的开发场景、快速应用原型、企业级轻量应用开发
OpenAI Playground 浏览器端Prompt调试与代码生成平台,深度集成OpenAI系列模型,支持示例代码、简单应用逻辑快速生成,可调试Prompt参数、导出代码与API,无需本地配置环境 无固定免费额度,按API token计费($0.002/1K token左右) 新增多模型适配(GPT),优化代码生成精度,支持一键导出多语言代码(JS、Python等),强化与OpenAI生态工具(Copilot、Codex CLI)联动 文本示例代码开发、灵活自定义逻辑场景、非Google生态应用原型、Prompt调试优化
Anthropic Console Anthropic官方云端Prompt调试平台,专注复杂逻辑代码生成,支持长上下文交互,可生成生产级示例代码全链路代码,支持代码导出与API对接 个人版免费额度充足(日常开发够用),企业版定制计费 Claude深度集成,提升复杂示例代码逻辑生成能力,优化代码注释完整性,支持多轮Prompt迭代调试,强化团队共享功能 复杂示例代码开发、长逻辑需求描述、高质量代码生成、需要生产级代码落地的场景
GitHub Codespaces 云端VS Code+Copilot、代码实时同步、团队共享开发环境、自定义容器配置 $4/月起(按使用时长计费) 深度Copilot集成、支持自定义开发环境模板、与GitHub仓库无缝联动 GitHub生态、团队协作、跨设备开发、标准化开发环境需求
Bolt.new 浏览器端轻量开发环境,AI快速生成前端应用、支持React/Vue等框架,一键部署,无需配置环境 免费版(基础功能)、专业版$10/月起 新增多框架适配(React、Vue),强化AI代码优化与漏洞检测,支持一键同步至GitHub 前端开发者、快速原型验证、小型前端应用开发、无需本地配置环境的场景
Replit Agent 浏览器内全栈开发、200分钟自主工作、自测试、团队协作共享、移动端适配 免费+付费 tiers(付费版$7/月起) 支持构建其他Agent、Design Mode 2分钟出设计、Fast Build模式、多语言容器支持 初学者、快速原型、教育场景、跨设备开发、小型团队协作

使用建议>>>

  • 推荐:Google AI Studio
  • 前端:Bolt.new

六、AI原型工具

产品 厂商 核心模型 定价(不准) 核心优势 关键更新 适用场景
Figma Figma Inc. GPT、Figma自研AI模型 免费版(基础功能)、专业版$12/月/人、企业版$45/月/人 云端协同、AIprompt编辑设计(支持批量修改、多端适配)、可视化交互原型、无缝衔接前端开发、海量社区组件库,可将自然语言描述转化为可交互原型,设计与开发在同一工作空间完成,无需切换工具 新增Alpha版Prompt to Edit功能,支持选中图层通过文字提示批量编辑、生成明暗模式变体、快速缩放适配多端,支持连接后端预览真实数据交互效果 产品设计团队、全栈开发协作、UI/UX设计、多端原型开发、企业级设计协同
Pencil Pencil Team 多模型适配(GPT、Claude) 完全免费、开源(Apache 2.0许可证) 轻量无依赖、支持离线开发、AI快速生成原型草图、拖拽式交互设计、可导出多种格式(PNG、PDF、HTML),适配主流系统,无需复杂安装,新手可快速上手 优化AI草图生成精度,新增多语言支持,强化与VS Code、Figma的联动能力,支持原型一键导出至开发工具 学生、独立开发者、小型团队、预算有限场景、离线原型设计、快速草图迭代
Stitch 开源社区 多模型适配(GPT、Gemini、Claude) 免费版(基础功能)、专业版$15/月/人 AI极速生成复杂UI界面与前端代码,支持提示词+图像输入快速生成原型,拖拽式组件编辑、多端实时预览,无供应商锁定风险,可与主流开发工具无缝集成 提升原型转代码效率,新增AI交互逻辑自动生成,支持复杂业务场景的原型设计,强化团队协作共享功能 全栈开发者、快速原型验证、中小型项目UI/UX开发、设计与开发联动场景
Lovable Lovable团队 GPT、Gemini 免费版(基础功能)、专业版$12/月/人 零代码/低代码结合,支持上传截图或语音描述生成应用,自动解析设计逻辑,AI实时调试,可拖拽修改样式、绑定域名一键发布,支持接入数据库和API,语音指令集成后台服务 优化web抠图解析技术,提升设计逻辑识别精度,新增多端适配(网页、小程序),强化与Superbase等后台服务的集成能力,开发效率提升60% 初创企业、非技术人员、快速验证MVP、中小型应用开发,无需专业编码能力
v0 Vercel团队 GPT、Claude 免费版(基础功能,限3个项目)、专业版$18/月/人 专注前端应用生成,支持自然语言描述生成React/Vue组件,一键部署至Vercel,与主流前端工具无缝衔接,代码可编辑性强,支持复杂UI交互生成 新增组件库扩展功能,优化代码生成质量,支持自定义主题与样式,强化团队协作与版本控制,适配Next.js 15框架 前端开发者、React/Vue项目开发、快速生成前端界面、需部署至Vercel的场景

使用建议>>>

  • 不差钱:Figma或Stitch

  • 低预算:Pencil

  • 前端:v0

  • 非技术人员:Lovable

七、使用风险提示与最佳实践

氛围编程工具虽能显著提升开发效率,但在实际使用中仍存在一定风险,需遵循科学使用方法,确保代码质量、可维护性和安全性,避免因过度依赖工具导致问题。

1. 核心使用风险

  • 代码质量隐患:AI生成的代码可能存在性能瓶颈、逻辑漏洞或编码不规范问题,尤其在复杂业务场景下,无法完全替代人工编写和审查,易出现“能运行但不优”的情况。

  • 维护难度增加:非技术人员仅依靠AI生成应用,后期遇到功能升级、逻辑报错等复杂问题时,因不理解代码逻辑,难以自主修复,会大幅增加维护成本。

  • 过度依赖风险:开发者长期过度依赖AI工具,会弱化自身编码能力、逻辑思维和问题排查能力,难以应对复杂编码场景和突发故障,长期来看会导致技术能力退化。

2. 最佳实践

  • 严格代码审查:AI生成代码后必须进行人工审查,重点校验逻辑完整性、性能优化空间和编码规范性,杜绝未审核代码直接上线,必要时结合代码扫描工具(如SonarQube)排查潜在漏洞。

  • 明确使用边界:区分AI工具的适用场景,简单重复性编码(如通用工具类、基础语法实现)可依赖AI,核心业务逻辑、安全敏感代码(如支付、权限控制、数据加密)需人工主导编写,避免AI生成代码存在逻辑漏洞。

  • 平衡工具依赖与能力提升:将AI工具作为效率辅助,而非替代自身编码能力,定期进行纯人工编码练习,重点提升复杂场景下的问题排查、逻辑设计能力,避免过度依赖导致技术能力退化。

  • 强化隐私与合规管理:企业使用时需关闭工具的数据上传功能,优先选择支持本地部署、数据隔离的工具;针对金融、国防等强合规行业,需选择通过相关合规认证的工具,确保数据安全与行业合规要求匹配。

  • 团队能力同步提升:定期组织团队培训,规范AI工具的使用流程,分享AI生成代码的优化技巧,引导团队成员合理利用工具,同时注重自身技术能力的提升,实现工具效率与个人能力的双向提升。

PS:
文中的价格和免费额度等信息,会频繁变化,无法保证准确