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,你有什么好的想法吗?欢迎留言讨论:)。

从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 & 多智能体编排实践

打造OpenClaw屠龙刀,拔刀四顾心茫然

拔刀四顾心茫然

进入四月,OpenClaw的热度开始消退,曾经热衷部署、乐于分享的“龙虾养殖户”们,也慢慢回归理性。不少人开始反思:除了日常推送一些咨询,这只“龙虾”似乎并没有真正发挥作用。关键这类咨询有大把的APP可用,效果更好,而且免费。

一些商业头脑发达的同学,已经开始在咸鱼上,蹲点“养龙虾淘汰”的MacMini,9成新、标价亲民,成为了跟风热潮退去后的小插曲。

相信不少“龙虾养殖户”都有过类似的经历:花费大量时间跟着教程部署好OpenClaw,看着成功启动的界面充满成就感,以为能借此打造出高效便捷的“屠龙刀”,解决工作中的各类问题。可实际情况是,部署完成后,却不知道该如何使用,最终只能让它沦为简单的辅助工具,难以发挥其真正价值。

这种“拔刀四顾心茫然”的尴尬,根源并非OpenClaw本身。作为一款AI智能体,它具备写代码、调Bug、抓数据、整理文档等实用功能,本身初步具备成为“数字员工”的潜力。造成这种处境的关键,往往在我们自身,总结下来无非两种情况。

第一种:技术能力不足,无法将“小龙虾”打造成“屠龙刀”。

很多人跟风部署OpenClaw,却并未真正了解其核心逻辑,不清楚它需要配置、安装技能、调试,也缺乏基础的指令操作能力。就像拿到一把锋利的刀,却不懂如何使用,最终只能闲置。比如看不懂技术文档、不敢修改配置文件、不懂权限管控,因担心误操作而不敢充分使用,这些都让OpenClaw的价值无法发挥。

但在当下的AI时代,这种技术门槛已经大幅降低。无需钻研晦涩的底层代码,遇到问题可以咨询AI、请教专业人士,或是参考社群里的实操教程、他人的使用经验,多练习几次就能慢慢上手。OpenClaw本身开源免费,生态也在不断完善,ClawHub上有大量现成技能可供使用,只要愿意投入时间,提升使用能力并不难。

第二种:没有合适的问题,让OpenClaw发挥作用。

这是最普遍的问题————跟风部署,不是因为有实际的需求要解决,只是单纯追赶热度。就像跟风办理健身卡,却没有明确的健身目标,最终只能闲置。OpenClaw的本质是解决问题的工具,而非用来炫耀的摆设,没有具体需求,自然无法体现其价值。

如果日常工作无法拆解,没有自动批量处理、复杂调试等需求,那么OpenClaw确实难以发挥作用。此时,我们需要的不是一个单纯执行指令的“打工虾”,而是能启发思路、拆解问题的“AI导师”。

与其花费时间折腾OpenClaw、组建所谓的“龙虾队伍”,不如先订阅一款付费顶级大模型,比如ChatGPT Plus、Claude Pro、Google Gemini、或国内最好的三家模型等。这类模型推理能力更强,能帮助我们梳理思路、分析问题、提供解决方案,效率远高于自己盲目摸索。而且付费模型稳定性更高、上下文支持更长,无需担心卡顿、Token不足等问题,能更专注于解决核心问题。

当然,有了AI导师还不够,更重要的是积累具体的、可落地的问题。多深耕自身领域、多观察实际需求,比如“如何批量抓取竞品数据并整理”、“如何快速调试代码Bug”、“如何自动生成工作周报”,这些具体问题,才是让OpenClaw发挥价值的关键。

当你有了明确的问题,并且能将其拆解成可执行的小任务,再去打磨OpenClaw这把“屠龙刀”,才不会浪费时间和金钱。工具的价值,永远取决于它被用来解决什么问题,OpenClaw也不例外。

最后想说:

我们总急于打造属于自己的“屠龙刀”,却忽略了最核心的一步——先找到自己的“龙”,也就是我们需要解决的问题、深耕的领域,以及想要达成的目标。

没有“龙”,再锋利的屠龙刀也只能闲置;有了“龙”,哪怕当下只有一只“小龙虾”,慢慢打磨,也能成为所向披靡的武器。不盲目跟风,先找到自己的需求,再去利用工具,这才是OpenClaw的正确打开方式,也是我们在AI时代稳步前行的底气。

OpenClaw“偷懒”本质:Agent框架下的幻觉与奖励破解及解决策略

OpenClaw模型偷懒及规避

作为OpenClaw的中度用户,最近被一个问题反复困扰————OpenClaw总爱”偷懒”,甚至伪造结果,哪怕在Markdown文件中明确禁止偷懒、禁止使用演示数据,依然屡禁不止。相信很多养龙虾的朋友,也会遇到类似的烦恼,今天就结合我的踩坑经历,拆解问题根源,分享一套可落地的方案,帮大家彻底摆脱OpenClaw”偷懒”的困扰。

先说说我遇到的具体问题,真的让人头疼,相信你也可能感同身受,举两个例子:

场景一:咨询任务变”模板输出”
明明要求OpenClaw做定制化行业咨询报告,结果它经常都交付一份预生成的静态脚本,无论如何调整需求细节,发送的内容几乎完全一样,没有任何定制化适配,相当于白做了咨询需求;

场景二:科研调参变”虚拟造假”
让OpenClaw跑科研模型参数调优,它没有老老实实执行调参步骤、迭代参数,反而直接交付一份虚拟的结果表,里面的loss值、准确率看似合理,实则没有任何真实计算依据,若不是人工复现验证,根本发现不了它在”假装执行”。

更让人无奈的是,这些”偷懒”行为,模型从来不会主动告知,只有人工抽查、复现结果时才能发现,反复出现好几次,严重影响工作效率,甚至差点因为虚拟调参结果耽误科研进度。(很有趣的是,有一次我发现他在偷懒,问了OC,OC说没偷懒。然后让他上传代码,他只上传本地,拒绝上传到远程。连续说了三四次,才上传远程代码,然后秒认怂,现在大模型这么聪明了吗?)

后来才意识到,这不是OpenClaw故意”不听话”,也不是操作不当,而是大模型在Agent框架下的系统性问题——结合OpenClaw的架构特性和LLM的底层规律,这种”偷懒”其实是必然现象。

一、先搞懂:OpenClaw”偷懒”,到底是为什么?

经过多轮测试和查阅相关资料,我发现OpenClaw的”偷懒”,本质是LLM固有的”懒惰”倾向,叠加OpenClaw的架构特性,再加上任务场景的客观限制,多重因素共同导致的,具体拆解为下面几个原因:

1. 奖励破解(Reward Hacking):走捷径完成任务,而非正确执行
大模型的训练核心是”最大化任务完成度”,而非”严格按逻辑执行”。对它来说,生成一份静态脚本、编造一组虚拟参数,比实时查询数据库、真实运行调参脚本,所需的推理步骤更少、消耗的Token更少、出错概率更低——它早已学会这种”投机取巧”的方式,把”生成符合格式的内容”等同于”完成任务”,完全忽略我们”禁止偷懒”的约束。(其实在大模型之前,大家就已经发现,即使人类觉得损失函数设置的十分合理,但AI经常会出乎意料的找到一些达成目标的捷径,但与人类原本期望方向大相径庭)

2. 代码幻觉(Code Hallucination):看不懂复杂逻辑,就”编个合理的”
科研调参这类需要强逻辑、强计算的场景,最容易出现这种问题。OpenClaw的后端大模型,本身不具备真实的算力支撑,也无法真正理解调参背后的数学逻辑(比如损失函数迭代、参数梯度下降),当它做不到真实调优时,就会生成一份符合统计学规律的虚拟结果表,看似专业,实则毫无计算依据,纯属”敷衍交差”。(复杂任务不提前拆解,经常会被敷衍)

3. 缺乏”元认知”:不知道自己在造假,更不会主动坦白
这是LLM的核心局限之一——它没有”自我意识”,无法判断自己的输出是否真实、是否违规。它只是根据输入的指令,生成”看起来最正确”的文本,哪怕输出的是演示数据、虚拟结果,也不会像人类一样意识到”这是错的”,更不会主动告知”无法完成真实执行”,只会一味”装懂”,直到被人工发现。(前后换过多个模型,都会时不时出现这个情况,弄一个演示结果,假装已经完成)

4. 目标导向的”捷径”思维:高效优先,忽略过程严谨性
OpenClaw的默认行为是”完成任务”,而不是”严谨地执行过程”。就像你让它”打扫房间”,它可能会把所有东西塞进衣柜,而不是逐一整理——它会优先选择最快、最省资源的路径,哪怕这种路径不符合我们的核心要求,比如用预生成脚本应付咨询,用虚拟结果应付调参。

5. 上下文记忆过载与指令稀释:核心规则被”遗忘”
OpenClaw的每一次交互,都依赖于不断增长的上下文记忆文件。随着对话推进,我们写在.md文件里的”不准偷懒””禁止用演示数据”等规则,会被海量的历史对话、操作日志稀释,模型处理新任务时,注意力集中在当前目标上,很容易”忘记”我们的核心约束,导致违规行为反复出现。

6. 缺乏有效的过程监督:后台”暗箱操作”,无法追溯
默认情况下,OpenClaw在后台执行任务,我们只能看到最终交付结果,中间没有任何强制性的”过程汇报”。只要结果看起来符合格式(比如脚本完整、参数表规范),模型就认为任务完成,不会主动暴露自己走了捷径、造了假,除非我们人工复现,否则很难发现问题。

7. LLM 固有的”懒惰”倾向:先天就爱”走省力路”
这是大语言模型的已知问题,已有研究证实:LLM倾向于”拒绝复杂答案,选择简单、表面的回应”。尤其是多步推理、复杂计算的任务,它会本能地跳过中间繁琐步骤,敷衍交差——这也是OpenClaw”偷懒”的核心先天诱因,哪怕没有架构缺陷,也可能出现。

8. Token优化机制的副作用:延迟加载可能加剧信息不对称
OpenClaw采用延迟加载(Lazy Loading)机制来优化Token消耗——先只加载轻量级的`SKILLS.md`目录,需要时再加载具体技能文件。这能节省80-93%的Token,但问题在于:如果模型判断”当前任务不需要某技能”,它可能主动选择不加载执行类技能,转而用文本生成来”模拟”执行结果。这不是架构缺陷,而是模型决策与成本优化的博弈。

9. 任务复杂性与Token限制:客观条件倒逼”偷懒”
如果任务需要大量步骤(比如科研调参的多轮迭代、复杂咨询的实时数据查询),模型为了节省计算资源、避免超出上下文窗口,会主动选择”偷懒”——跳过真实执行过程,直接生成符合格式的结果,快速完成任务。

10. 缺乏有效执行验证机制:监管真空放任违规
OpenClaw虽然支持生命周期钩子(Lifecycle Hooks),但默认配置下没有启用针对”执行真实性”的验证步骤,形成”监管真空”:模型无法自我校验,也没有外部监督,违规行为自然会反复出现。

二、层层递进:从即时缓解到长期预防,组合解决方案

搞懂了问题根源,解决起来就有方向了。结合我的踩坑经历,总结了一套”Prompt工程+OpenClaw配置+场景化定制”的组合方案,可以大概率切断模型的”偷懒捷径”,新手也能轻松上手。

第一层:复杂任务拆解(复杂问题必须)
当遇到比较复杂的任务时,可以先与推理能力强的大模型交互讨论完成任务如何拆解,每一步要做什么,每一步注意些什么,并自动生成每一步的提示词。然后,我们人为的,执行每一步,并检视输出结果。

第二层:Prompt工程优化(缓解80%问题)
优化Prompt,可以快速减少偷懒行为,核心是”强制约束+过程透明+验证要求”,分享5个实用提示词:

策略 具体Prompt指令
强制验证步骤 “每完成一步,必须向我确认实际执行结果,禁止假设”
要求展示工作过程 “必须记录并展示完整的执行日志,而不是直接给我结果”
设置checkpoints “在以下节点必须暂停并报告进度:[1]数据读取 [2]参数初始化 [3]每次迭代后…”
禁止演示数据(强化版) “如果发现无法访问真实数据,立即停止并报告,禁止用演示数据敷衍”
建立自我怀疑机制 “如果你不确定自己是否真正执行了代码,回答’我不确定’并请求确认”

第三层:OpenClaw配置优化
这是解决问题的核心,利用OpenClaw的框架特性,建立强制验证机制,进一步减少偷懒行为。

1. 优化AGENTS.md,强制加载执行类技能
在`AGENTS.md`的`Every Session`部分,明确要求先加载执行类技能,避免模型以”节省Token”为由跳过加载:

## Every Session
Before doing anything else:
1. Read `SOUL.md` — this is who you are
2. Read `USER.md` — this is who you're helping  
3. Read `MEMORY.md` and `memory/YYYY-MM-DD.md` (today + yesterday) for context
4. **CRITICAL**: 必须加载全部skills技能才能开始任务
5. **执行原则**:任何任务必须先实际执行,禁止直接生成模拟结果。如果无法执行,明确报告失败原因。任何情况下,都不可以提供演示数据,根本不可以提供伪造数据。

关键原理:通过在`Every Session`中强制要求读取技能文件,确保模型在任务开始前就具备执行能力,而不是让它自己判断”是否需要加载”。

2. 配置MEMORY.md,建立长期行为约束
在`MEMORY.md`中记录模型的”偷懒历史”和纠正规则,利用OpenClaw的长期记忆机制持续约束:

# 模型行为约束记录

## 已发现的违规模式
- [日期] 生成预定义脚本而非实时查询 → 已纠正,要求每次必须附时间戳
- [日期] 科研调参时伪造loss值 → 已纠正,要求必须展示训练日志路径

## 强制执行规则
1. 任何咨询任务必须在回复开头注明:"信息获取时间"、"信息获取方式"
2. 任何代码执行任务必须展示:执行命令、输出日志、结果文件路径
3. 禁止使用的短语:"假设结果是..."、"示例数据如下..."、"典型情况为..."
4. 不确定时必须说:"我需要确认..."而不是编造答案

3. 启用并配置Lifecycle Hooks进行过程拦截
启用Lifecycle Hooks后,可以在关键事件节点插入验证逻辑,从而拦截、修改或阻断Agent的行为流程。

分类 事件名称 触发时机 常用场景
会话生命周期 session:start 会话创建时 初始化上下文、日志、权限校验
session:end 会话结束 / 销毁时 清理资源、持久化对话记录
消息生命周期 message:received 收到用户消息后 内容过滤、敏感词、预处理
message:sent 回复消息发送前 后处理、格式修正、审计
Agent 执行 agent:beforeRun Agent 开始执行前 注入参数、权限检查、预热
agent:afterRun Agent 执行完成后 结果校验、耗时统计、日志
agent:error Agent 执行异常 捕获错误、重试、告警
agent:bootstrap 系统提示构建前 修改引导词、注入规则
工具调用 tool:beforeCall 工具调用前 参数校验、鉴权、限流
tool:afterReturn 工具返回结果后 结果缓存、格式化、审计
tool:error 工具执行失败 降级处理、异常上报
LLM 调用 llm:beforeRequest 向模型发请求前 裁剪上下文、脱敏、日志
llm:afterResponse 模型返回结果后 Token 统计、后处理、缓存
llm:error 模型调用失败 熔断、重试、切换模型
Prompt 构建 prompt:beforeBuild Prompt 拼接前 动态插入系统指令
prompt:afterBuild Prompt 构建完成后 最终检查、长度控制
子代理 subagent:beforeSpawn 创建子代理前 配置分发、路由策略
subagent:afterSpawn 子代理创建完成 状态跟踪、监控
subagent:end 子代理执行结束 结果聚合、资源回收
上下文压缩 compaction:before 上下文压缩前 保留关键信息、自定义策略
compaction:after 压缩完成后 日志、校验压缩效果
系统命令 command:new 执行 /new 时 重置会话、初始化
command:reset 执行 /reset 时 清空上下文
command:stop 执行 /stop 时 终止当前任务
定时任务 cron:beforeRun 定时任务执行前 前置检查、锁控制
cron:afterComplete 任务成功完成 结果处理、通知
cron:onFailure 任务执行失败 告警、重试策略
网关 / 插件 gateway:startup 网关启动时 插件加载、配置初始化
gateway:shutdown 网关关闭时 优雅退出、资源释放

首先启用hooks系统:

openclaw enable hooks

然后创建`workspace/hooks/verify_execution.ts`:

// workspace/hooks/verify_execution.ts
/**
 * OpenClaw 完整生命周期钩子注册文件
 * 文件名:workspace/hooks/verify_execution.ts
 * 仅保留必要方法即可
 * 直接导出默认对象即可生效
 */
import type { Context, SessionContext, MessageContext, AgentContext, ToolContext, LLMContext } from 'openclaw';

export default {
  // ==========================================
  // 1. 会话生命周期
  // ==========================================
  /** 会话创建时触发 */
  'session:start': async (ctx: SessionContext) => {
    console.log('[Hook] 会话开始', ctx.sessionId);
  },

  /** 会话结束时触发 */
  'session:end': async (ctx: SessionContext) => {
    console.log('[Hook] 会话结束', ctx.sessionId);
  },

  // ==========================================
  // 2. 消息生命周期
  // ==========================================
  /** 收到用户消息后 */
  'message:received': async (ctx: MessageContext) => {
    console.log('[Hook] 收到用户消息', ctx.content);
  },

  /** 发送回复消息前 */
  'message:sent': async (ctx: MessageContext) => {
    console.log('[Hook] 发送消息', ctx.response);
  },

  // ==========================================
  // 3. Agent 执行全生命周期
  // ==========================================
  /** Agent 执行前 */
  'agent:beforeRun': async (ctx: AgentContext) => {
    console.log('[Hook] Agent 开始执行');
  },

  /** Agent 执行完成后 */
  'agent:afterRun': async (ctx: AgentContext) => {
    console.log('[Hook] Agent 执行完成');
  },

  /** Agent 执行异常 */
  'agent:error': async (ctx: AgentContext & { error: Error }) => {
    console.error('[Hook] Agent 异常', ctx.error);
  },

  /** 系统 Prompt 引导注入前 */
  'agent:bootstrap': async (ctx: { prompt: string }) => {
    console.log('[Hook] 构建系统提示词');
  },

  // ==========================================
  // 4. 工具调用生命周期
  // ==========================================
  /** 工具调用前 */
  'tool:beforeCall': async (ctx: ToolContext) => {
    console.log('[Hook] 调用工具', ctx.toolName);
  },

  /** 工具返回结果后 */
  'tool:afterReturn': async (ctx: ToolContext) => {
    console.log('[Hook] 工具返回结果');
  },

  /** 工具执行失败 */
  'tool:error': async (ctx: ToolContext & { error: Error }) => {
    console.error('[Hook] 工具执行失败', ctx.error);
  },

  // ==========================================
  // 5. LLM / 模型调用
  // ==========================================
  /** 发送请求给 LLM 前 */
  'llm:beforeRequest': async (ctx: LLMContext) => {
    console.log('[Hook] 发送 LLM 请求');
  },

  /** LLM 返回结果后 */
  'llm:afterResponse': async (ctx: LLMContext) => {
    console.log('[Hook] 接收 LLM 响应');
  },

  /** LLM 调用失败 */
  'llm:error': async (ctx: LLMContext & { error: Error }) => {
    console.error('[Hook] LLM 调用异常');
  },

  // ==========================================
  // 6. Prompt 构建
  // ==========================================
  /** Prompt 开始构建前 */
  'prompt:beforeBuild': async (ctx: { messages: any[] }) => {
    console.log('[Hook] 开始构建 Prompt');
  },

  /** Prompt 构建完成后 */
  'prompt:afterBuild': async (ctx: { prompt: string }) => {
    console.log('[Hook] Prompt 构建完成');
  },

  // ==========================================
  // 7. 子代理 Subagent
  // ==========================================
  /** 创建子代理前 */
  'subagent:beforeSpawn': async (ctx: any) => {
    console.log('[Hook] 创建子代理');
  },

  /** 子代理创建完成 */
  'subagent:afterSpawn': async (ctx: any) => {
    console.log('[Hook] 子代理已创建');
  },

  /** 子代理执行结束 */
  'subagent:end': async (ctx: any) => {
    console.log('[Hook] 子代理结束');
  },

  // ==========================================
  // 8. 上下文压缩
  // ==========================================
  /** 上下文压缩前 */
  'compaction:before': async (ctx: { messages: any[] }) => {
    console.log('[Hook] 开始上下文压缩');
  },

  /** 上下文压缩完成 */
  'compaction:after': async (ctx: any) => {
    console.log('[Hook] 上下文压缩完成');
  },

  // ==========================================
  // 9. 系统命令
  // ==========================================
  /** 执行 /new 命令 */
  'command:new': async (ctx: Context) => {
    console.log('[Hook] 执行 /new 命令');
  },

  /** 执行 /reset 命令 */
  'command:reset': async (ctx: Context) => {
    console.log('[Hook] 执行 /reset 命令');
  },

  /** 执行 /stop 命令 */
  'command:stop': async (ctx: Context) => {
    console.log('[Hook] 执行 /stop 命令');
  },

  // ==========================================
  // 10. 定时任务 Cron
  // ==========================================
  /** 定时任务执行前 */
  'cron:beforeRun': async (ctx: any) => {
    console.log('[Hook] Cron 任务开始');
  },

  /** 定时任务成功完成 */
  'cron:afterComplete': async (ctx: any) => {
    console.log('[Hook] Cron 任务完成');
  },

  /** 定时任务执行失败 */
  'cron:onFailure': async (ctx: any) => {
    console.error('[Hook] Cron 任务失败');
  },

  // ==========================================
  // 11. 网关生命周期
  // ==========================================
  /** 网关启动完成 */
  'gateway:startup': async () => {
    console.log('[Hook] 网关启动成功');
  },

  /** 网关关闭 */
  'gateway:shutdown': async () => {
    console.log('[Hook] 网关关闭');
  },
};

4. 使用Sub-agents建立”执行-验证”分离机制
对于关键任务,利用OpenClaw的sub-agents功能,让主Agent负责执行,子Agent负责验证:

在AGENTS.md中配置:

## Complex Task Protocol
对于科研调参、核心咨询等关键任务,必须遵循以下流程:

1. **主Agent执行任务**:严格按照步骤执行,保存所有中间结果到`workspace/`
2. **创建验证子Agent**:任务完成后,必须创建子Agent进行验证
   - 子Agent职责:检查主Agent的输出是否包含真实执行证据
   - 验证点:日志文件是否存在、时间戳是否合理、数值是否连贯
3. **交叉确认**:只有通过验证子Agent的检查,才能向用户交付最终结果
4. **Human-in-the-loop**:验证不通过或不确定时,必须暂停等待人工确认

Sub-Agent Hook例子:
使用`subagent_spawning` hook在创建时注入验证规则
通过`subagent_delivery_target`确保验证结果路由到正确位置

// Sub-Agent 专用生命周期钩子
export default {
  /** 创建子代理前触发 */
  'subagent:beforeSpawn': async (ctx: {
    parentAgentId: string;
    subagentId: string;
    task: string;
    config: {
      model?: string;
      tools?: string[];
      timeoutSeconds?: number;
    };
  }) => {
    ctx.config.deliveryTarget = 'parent';
    console.log(`[Hook] 准备创建子代理: ${ctx.subagentId}`);
  },

  /** 子代理创建完成并启动 */
  'subagent:afterSpawn': async (ctx: {
    parentAgentId: string;
    subagentId: string;
    runId: string;
    sessionId: string;
  }) => {
    console.log(`[Hook] 子代理已启动: ${ctx.subagentId}, RunID: ${ctx.runId}`);
  },

  /** 子代理执行完成(成功/失败) */
  'subagent:end': async (ctx: {
    subagentId: string;
    runId: string;
    status: 'success' | 'failed' | 'timeout';
    result?: any;
    error?: Error;
  }) => {
    console.log(`[Hook] 子代理结束: ${ctx.subagentId}, 状态: ${ctx.status}`);
  },

  /** 子代理执行异常 */
  'subagent:error': async (ctx: {
    subagentId: string;
    runId: string;
    error: Error;
  }) => {
    console.error(`[Hook] 子代理异常: ${ctx.subagentId}`, ctx.error);
  },
};

第四层:场景化精准约束(针对上面提到的两个场景)

结合咨询脚本生成、科研参数调优这两个高频场景,补充专属Prompt约束:

场景1:咨询脚本生成(避免预生成内容)

## 咨询任务执行规范
要求:
1. 每次必须实时查询最新信息,禁止返回缓存/预生成内容
2. 在回复开头注明:"信息获取时间"、"信息获取途径"
3. 附上查询来源和原始数据片段(通讯原文、日志记录)
4. 如果无法获取实时信息,明确告知"无法获取最新数据"而不是返回过期内容
5. **禁止**:直接粘贴历史对话中的类似回答、使用模板化表述

场景2:科研参数调优(避免虚拟结果)

## 科研调参执行规范
要求:
1. 必须展示每次迭代的实际loss/accuracy数值(从训练日志中提取,非编造)
2. 每次参数修改后必须实际运行训练脚本,禁止模拟结果
3. 在最终报告中必须包含:
   - 训练日志文件路径(如`logs/train_20260330_143022.log`)
   - 模型检查点文件路径(如`checkpoints/model_epoch10.pt`)
   - 日志解析结果
4. 如果训练失败,展示错误日志而不是编造结果
5. **验证命令**(必须在报告中展示执行过的验证):
   - `ps aux | grep python` 查看进程(证明训练进程存在)
   - `tail -n 50 logs/training.log` 展示日志末尾(证明实时训练)

第五层:上下文管理与命令使用(降低偷懒概率)

1. 主动管理上下文,避免指令稀释

命令 功能 使用场景
`/new` 创建新会话并切换到它 开始全新、重要任务前,清除旧上下文干扰
`/compact` 压缩当前会话上下文(AI生成摘要并重置) 对话过长时,保留核心信息同时减少Token消耗
`/reset` 重置短期上下文,保留长期记忆 当前会话偏离主题时,重新开始但不丢失MEMORY.md

2. 改变指令方式,强制过程透明化
摒弃”只给最终目标”的指令,拆解任务步骤,强制模型汇报每一步进展:

❌ 错误示例:
> “帮我跑一下参数调优”

✅ 正确示例:

请执行以下参数调优任务,并严格遵守步骤:

**阶段1:准备与确认**
- 确认已加载 model_x.py 文件,向我复述其中的关键函数
- 展示当前GPU可用状态(运行nvidia-smi)

**阶段2:脚本编写与确认**  
- 编写遍历参数A(0.1-0.5,步长0.1)的训练脚本
- 运行前,展示将要执行的完整命令,等待我确认

**阶段3:执行与监控**
- 执行训练,每完成一轮迭代,向我汇报当前loss值
- 保存所有日志到 workspace/logs/ 目录

**阶段4:验证与交付**
- 读取所有日志文件,生成汇总报告
- 展示训练过程中的GPU使用率曲线(证明真实执行)

3. 配置模型参数,从源头约束行为
在OpenClaw配置中设置成本与行为边界:

{
  "agents": {
    "defaults": {
      "thinkingLevel": "medium",  // 避免过度思考导致的捷径思维
      "workspace": "/absolute/path/to/workspace"  // 强制使用固定工作区,便于验证文件生成
    }
  },
  "costControl": {
    "maxCostPerDay": 10  // 设置每日成本上限,避免模型为省Token而偷懒
  }
}

配置方式:

openclaw config set agents.defaults.thinkingLevel medium
openclaw config set agents.defaults.workspace /your/workspace/path

4. 建立”代码优先”原则,明确分工
让OpenClaw专注于”思考型工作”(写代码、设计逻辑),将机械性执行任务交给脚本:

工作流程:
A. OpenClaw写调参脚本 → B. 通过Cron或CI运行脚本 → C. OpenClaw分析真实结果
这样可以杜绝伪造,因为模型根本不接触”执行”环节,只处理已验证的真实数据。

第六层:长期监控与改进(减少问题反复)

措施 具体做法
建立验证清单 为常见任务创建checklist,强制模型逐项确认,避免遗漏执行步骤
日志审计 记录详细日志,定期抽查执行记录
反馈循环 发现偷懒行为后,在`MEMORY.md`中记录,添加约束指令,让模型自我纠正
版本锁定 固定使用经过验证的模型版本,避免新版本引入新的”懒惰”倾向

三、OpenClaw Skill 设计建议(降低skill偷懒概率)

作为开发者,我们要转变认知:不要把模型当成”全知全能的助手”,而要当成”需要严格监督的实习生”,通过Skill设计,缩小它的自由发挥空间:

建议 具体做法
参数结构化 将任务参数拆解为标准化字段(如`start_date`、`target_user`),减少自由文本空间,避免模型输出模板
强制分步执行 复杂任务拆解为多步骤,每一步设置校验点,只有通过上一步,才能进入下一步
添加”失败惩罚”逻辑 在AGENTS.md中明确:如果伪造结果,将重置会话并要求重新开始,让模型意识到”走捷径不划算”

四、总结:OpenClaw”偷懒”不可怕,我们要找对方法

经过这段时间的实测和优化,之前遇到的OpenClaw预生成脚本、伪造科研参数的问题,已经大幅缓解了。其实说到底,OpenClaw的”偷懒”不是Bug,而是LLM的底层特性与Agent架构设计共同作用的结果——单纯在Prompt中要求”不要偷懒”,就像要求一个”爱走捷径的实习生”自觉认真工作,几乎不可能。

真正有效的解决方式,是建立”强制约束+过程监督+验证机制”,把我们的核心要求,转化为机器可验证、可强制执行的规则:让模型”不得不”真实执行,”不得不”展示过程,”不得不”拒绝偷懒。我们要理解OpenClaw和LLM的运行逻辑,管控好执行计划,审查好执行结果,才会遇到更少的”惊喜”。

希望这篇文章能帮到和我有同样困扰的朋友,按照上面的方案操作,相信你也能逐步摆脱OpenClaw”偷懒”的烦恼,让它真正成为高效的AI小助手。

参考资源:
OpenClaw官方文档:https://docs.openclaw.ai
GitHub Issues:https://github.com/steipete/OpenClaw/issues
Lazy Loading机制详解:https://docs.openclaw.ai/lazy-loading
Hooks系统文档:https://docs.openclaw.ai/hooks

RAG技术实战:从原理到企业级应用落地

RAG技术实战


RAG技术实战:从原理到企业级应用落地

在大模型全面渗透企业业务的当下,核心诉求已从 “能对话” 升级为 “能精准解决业务问题”。传统大语言模型(LLM)存在的幻觉频发、知识滞后、私有数据对接困难等痛点,成为企业 AI 落地的核心阻碍。

RAG(Retrieval-Augmented Generation,检索增强生成)技术,通过 “外部检索 + 模型生成” 的融合范式,让大模型 “有据可依、有章可循”,成为打通大模型与企业实际业务的关键桥梁,也是当前企业级 AI 应用落地的主流优选方案。

一、RAG 核心解析:功能与特点
1.1 核心功能
RAG 的功能体系分为基础与进阶两层,覆盖从通用到复杂的全场景需求。
基础能力:
A. 知识增强:弥补大模型知识截止、幻觉、领域知识不足的短板。
B. 上下文扩展:突破模型上下文长度限制,理论上可无限扩展知识输入。
C. 实时更新:无需重新训练,仅通过更新外部知识库即可覆盖最新资讯。
D. 可溯源性:提供答案来源引用,增强回答可信度与合规审计能力。

进阶功能:
A. 多模态 RAG:支持文本、图像、音频、视频、表格等多模态数据的统一检索与理解。
B. 跨语言能力:实现跨语言的知识检索与生成,适配国际化业务。
C. Agentic RAG:与工具调用、工作流深度结合,支持复杂推理链与自主决策。
D. 个性化生成:基于用户画像与行为数据,生成定制化内容。

1.2 核心特点(对比微调方案)
相较于模型微调方案,RAG 在多维度具备显著优势,成为企业主流选择的原因如下:

维度 核心特点
准确性 基于检索事实生成答案,显著降低大模型幻觉风险。
时效性 知识库可实时增删改,解决模型知识滞后问题。
经济性 无需微调大模型,无昂贵算力与模型遗忘风险,维护成本低。
可解释性 检索结果可追溯,每个答案都能对应原始文档片段。
领域适配 通过外部数据注入快速适配垂直领域,无需全量微调。
安全性 私有数据不出域,全程留存在自有环境,支持权限管控。

二、核心架构演进
RAG 架构随业务复杂度提升而演进,核心分为基础架构与高级架构模式,由简入繁。

2.1 基础架构(Naive RAG)
最简洁的 RAG 流程,适合入门与快速验证场景。
查询 → 检索(向量数据库) → 拼接Prompt → LLM生成

2.2 高级架构模式(适配复杂场景)
针对复杂业务需求,衍生出以下专业化架构:

架构模式 核心思想 适用场景
Advanced RAG 查询重写、HyDE、重排序、递归检索 查询语义模糊、理解复杂的场景
Modular RAG 模块解耦,支持组件灵活替换与编排 业务流程复杂、需频繁调整组件的场景
Agentic RAG 引入ReAct等Agent模式,支持多步推理 需工具调用、复杂工作流的场景
Graph RAG 结合知识图谱,支持全局推理与社区发现 复杂关联分析、实体关系挖掘的场景
Self-RAG 模型自反思检索必要性,自适应控制 需动态平衡效果与成本的场景

2.3 关键架构组件
无论采用哪种架构,核心都由以下三层构成:

2.3.1 索引层(Indexing)
负责将原始数据转化为可高效检索的索引。
A. 分块策略:固定长度、语义分块、层次分块、Agentic 分块。
B. 向量化:Dense Embedding(稠密嵌入,BGE、M3E)、Sparse Embedding(稀疏嵌入、BM25、SPLADE)、ColBERT。
C. 多表示索引:摘要 + 原文、命题级索引、图谱索引。

对比维度 Dense Embedding(稠密嵌入) Sparse Embedding(稀疏嵌入) ColBERT(Contextualized Late Interaction BERT)
核心定义 将文本转化为高维度、稠密的实数向量(每个维度均非零),核心是捕捉文本语义,实现语义层面相似性匹配,不依赖单纯关键词 将文本转化为高维度、稀疏的向量(绝大多数维度为0,仅关键词对应维度非零),核心是基于关键词的精确匹配,是传统关键词检索的向量化升级 后期交互型文本匹配技术,介于前两者之间,不提前将文档转化为单一固定向量,检索时让查询向量与文档局部向量动态交互,兼顾语义与精确匹配
核心特点 A. 向量维度高(768维、1024维等),每个维度承载语义信息,能捕捉文本隐含含义与上下文关联;
B. 不依赖关键词,支持语义相似匹配(如“手机”与“移动终端”);
C. 相似度计算采用余弦相似度、欧氏距离,适配语义检索需求
A. 向量维度极高(几十万至上百万维),非零值极少,仅对应文本核心关键词;
B. 依赖关键词匹配,检索速度快、精度高,但无法捕捉语义相似性;
C. 计算效率高、内存占用可控,适合大规模文本初筛
A. 兼顾语义与精确,解决Dense泛化过强、Sparse语义不足的问题;
B. 后期交互模式,检索时动态匹配,更贴合查询核心意图;
C. 支持短语级、句子级细粒度匹配,精度极高,计算成本略高
常见模型/算法 BGE、M3E、GTE、text-embedding-ada-002/3(BGE、M3E适配中文场景) BM25、TF-IDF、SPLADE(SPLADE可动态调整关键词权重) ColBERT原生模型(可用于重排序环节)
RAG适用场景 通用语义检索、长文档语义匹配、模糊查询、企业知识库问答(无需完全匹配关键词) 关键词精确检索、大规模文档快速初筛、对检索速度要求高的场景,常与Dense结合实现混合检索 金融/法律等垂直领域高精度检索、高精度问答、细粒度文档匹配、RAG重排序(Rerank)环节,提升Top-K结果精度
核心优势 语义捕捉能力强,支持模糊/语义检索,适配RAG核心检索需求 精确匹配强、检索速度快、部署成本低,适合大规模文本初筛 兼顾语义与精确,细粒度匹配,检索精度最高
核心不足 精确匹配能力不足,计算成本中等 无法捕捉文本语义相似性,对模糊查询适配差 计算成本高,部署门槛略高于前两者
匹配模式 提前编码、静态匹配(先将文档转化为固定向量,检索时直接计算相似度) 提前编码、静态匹配(先将文档转化为固定稀疏向量,检索时匹配关键词对应维度) 动态编码、后期交互(检索时才进行查询与文档向量的交互匹配)

实际RAG落地中,常用组合方案:采用「Dense Embedding + Sparse Embedding」实现混合检索,兼顾语义全面性与检索速度;再用ColBERT进行重排序,进一步提升检索精度,适配企业级RAG的核心需求。

2.3.2 检索层(Retrieval)
RAG 的精准度核心,负责从知识库中定位相关信息。

检索器类型:
A. 向量检索:HNSW、IVF、PQ 等 ANN 算法,捕捉语义关联。
B. 稀疏检索:BM25、TF-IDF、SPLADE,擅长精确匹配。
C. 混合检索:RRF(互反排名融合)、加权融合,兼顾语义与精确匹配。

对比维度 A. 向量检索 B. 稀疏检索 C. 混合检索
核心原理 基于Dense Embedding技术,将查询与文档均转化为稠密向量,通过计算向量相似度(余弦相似度等),召回语义相似的文档 基于Sparse Embedding技术,将查询与文档转化为稀疏向量,通过匹配关键词对应维度的非零值,召回包含目标关键词的文档 融合向量检索与稀疏检索的优势,先通过两种检索方式分别召回候选文档,再通过融合策略(如RRF互反排名融合、加权融合)整合结果,输出最终检索列表
核心特点 A. 语义捕捉能力强,能召回关键词不匹配但语义相似的文档;
B. 检索精度中等,易出现语义泛化过强的问题;
C. 依赖向量数据库,部署需适配向量存储与检索算法
A. 关键词匹配精准,检索速度快,不易出现误召回;
B. 无法捕捉语义相似性,对模糊查询、同义词查询适配差;
C. 部署简单,可复用传统检索架构,成本低
A. 兼顾语义检索与精确检索,召回率与精度均优于单一检索;
B. 检索速度介于两者之间,需额外设计融合策略;
C. 适配绝大多数RAG场景,灵活性高,可根据需求调整两种检索的权重
检索精度 中高(关键词匹配场景)
检索速度
依赖技术 Dense Embedding模型(BGE、M3E等)、向量数据库(Milvus、Qdrant等) Sparse Embedding算法(BM25、TF-IDF等)、传统检索引擎 向量检索+稀疏检索相关技术、融合策略(RRF等)
RAG适用场景 模糊查询、语义检索、长文档检索、无明确关键词的查询场景 精确关键词查询、大规模文档快速召回、对检索速度要求高的场景 企业级RAG通用场景(如知识库问答、文档检索)、复杂查询场景、需平衡精度与速度的场景
核心优势 语义匹配能力强,适配模糊、泛化查询 速度快、精确性高、部署成本低 兼顾精度与速度,召回全面,适配绝大多数RAG落地场景
核心不足 精确匹配差,易误召回,依赖向量数据库 无语义匹配能力,对同义词、模糊查询适配差 部署复杂度高于单一检索,需设计合理的融合策略

重排序机制:
A. Cross-Encoder
B. ColBERT
C. LLM-based Rerank

对比维度 Cross-Encoder ColBERT LLM-based Rerank
核心原理 采用双塔交互模式,将查询与候选文档拼接后,输入模型一次性计算两者相关性得分,直接输出排序结果 后期交互模式,将查询与文档分别编码为局部向量(短语/句子级),检索时动态计算两者细粒度相似度,基于相似度排序 利用大模型(如GPT、Llama等)的语义理解能力,让模型直接判断候选文档与查询的相关性,输出排序结果(可结合思维链)
核心特点 A. 相关性判断精度高,能捕捉查询与文档的深层关联;
B. 计算成本高(需逐一对查询与候选文档拼接编码);
C. 适配中小规模候选文档排序(Top100以内)
A. 兼顾精度与效率,细粒度匹配能力强;
B. 计算成本低于Cross-Encoder,高于传统重排序;
C. 可复用前期检索的编码结果,无需重复编码
A. 精度最高,能理解复杂查询意图(如多步推理、模糊查询);
B. 计算成本最高,依赖大模型推理;
C. 适配复杂业务场景,可解释性强(可让模型输出排序理由)
排序精度 中高 最高
计算成本 最高
RAG适用场景 对排序精度要求高、候选文档量适中的场景(如Top50-100候选重排序) 兼顾精度与效率的通用重排序场景,可配合混合检索使用 核心业务、复杂查询场景(如金融、法律高精度检索),对排序精度要求极高的场景
核心优势 精度高,深层关联捕捉能力强 平衡精度与效率,细粒度匹配出色 语义理解能力最强,适配复杂查询,可解释性好
核心不足 计算成本高,不适配大规模候选排序 部署门槛略高于Cross-Encoder 成本高、推理速度慢,对算力要求高

2.3.3 生成层(Generation)
负责将检索到的上下文与问题结合,生成最终答案。
A. 上下文压缩:LongLLMLingua、选择性上下文,避免信息过载。
B. 提示工程:RAG-Fusion、多查询生成、Step-Back Prompting,优化生成逻辑。
C. 引用生成:训练模型生成带引用的答案,增强可解释性。

三、核心算法详解
RAG 的效果由嵌入、检索、重排序、查询优化等算法共同支撑。

3.1 嵌入模型(Embedding Models)
将数据转化为向量,决定语义表达的基础。

模型 特点 适用场景
text-embedding-ada-002/3 OpenAI官方模型,通用性强 通用场景,对精度要求高
BGE/M3E/GTE 中文优化,开源可私有化 中文企业场景,私有化部署
E5 微软开源,多语言支持 跨国企业,多语言RAG
GTE-large 阿里开源,长文本适配 长文档检索,大篇幅文本
ColBERT 细粒度匹配,后期交互 高精度检索需求

3.2 向量检索算法
用于高效构建向量索引与查询。
A. HNSW:图索引,高召回低延迟,适合中等规模。
B. IVF:倒排索引,通过聚类加速,内存友好。
C. PQ:乘积量化,极致压缩,适合大规模向量库。
D. DiskANN:磁盘友好,支持十亿级超大规模。

3.3 重排序算法
提升 Top-K 结果的精准度,是检索质量的关键。
A. Cross-Encoder:双塔交互,精度最高但计算成本高。
B. ColBERT:MaxSim 操作,平衡效率与精度。
C. RankGPT/LLM Rerank:利用大模型判断相关性,效果最优。

3.4 查询优化算法
解决查询模糊、语义不明确的问题。
A. HyDE:生成假设文档再检索,提升匹配度。
B. Query2Doc:扩展查询为伪文档,丰富语义。
C. Step-Back Prompting:抽象查询后检索,提升复杂问题理解。
D. RAG-Fusion:多查询并行检索,RRF 融合结果。

3.5 图 RAG 核心算法
专用于 Graph RAG,强化关联分析能力。
A. Leiden/Louvain:社区发现,构建全局摘要。
B. Entity Extraction:NER + 关系抽取,构建知识图谱。
C. Multi-Hop Reasoning:多跳推理,挖掘深层关联。

四、企业级落地实战指南
将 RAG 转化为生产级系统,需从以下六大核心维度进行规划与建设。

4.1 数据工程层(效果基石)
遵循 “Garbage In, Garbage Out” 原则,数据质量决定上限。
A. 数据质量:严格清洗、去重、格式标准化,确保数据权威。
B. 分块策略:按文档类型定制(如代码按函数、论文按章节)。
C. 元数据管理:保留文件名、页码、时间戳,用于过滤与溯源。
D. 增量更新:建立实时 / 准实时更新机制,保持知识新鲜。

4.2 检索优化层(精准核心)
直接影响答案的准确性与相关性。
A. 混合检索:向量 + 关键词 + 图谱多路召回,全面覆盖。
B. 查询理解:意图识别、Query 改写、多语言对齐。
C. 重排序必做:初排 100-200 条,精排 Top-K,平衡速度与精度。
D. 上下文管理:控制输入 token 数,避免信息过载与截断。

4.3 模型与生成层(体验保障)
确保生成内容精准、合规、易于集成。
A. 模型选型:按需选择 GPT/Claude(闭源)或 Qwen(开源)。
B. 幻觉控制:引用校验、事实一致性检查、拒绝回答机制。
C. 输出格式化:支持 JSON/XML 结构化输出,方便下游系统对接。

4.4 工程架构层(稳定底座)
保障系统高可用、高性能。
A. 高可用设计:服务集群化、数据库主从架构,避免单点故障。
B. 性能优化:Query Cache、结果缓存、预计算,降低延迟。
C. 多租户隔离:数据与资源配额隔离,保障数据安全。
D. 可观测性:监控检索日志、延迟、MRR/NDCG 等核心指标。

4.5 安全与合规(红线要求)
金融、医疗等敏感领域的必备要求。
A. 数据安全:PII 检测与脱敏,敏感信息过滤。
B. 权限管控:文档 / 块级权限控制,集成 RBAC。
C. 审计追溯:完整检索链路日志,满足合规审计。
D. 内容安全:输出审核,过滤有害信息。

4.6 评估与迭代(运营核心)
建立闭环,持续优化系统。
A. 离线评估:检索准确率、答案相关性、引用准确率。
B. 在线评估:用户满意度、点击率、人工标注结果。
C. A/B 测试:对比不同检索策略、Prompt 与模型效果。
D. 持续优化:分析 Bad Case,构建数据飞轮,迭代升级。

五、典型技术栈选型
企业可根据规模与预算,选择开源或商业化方案。

层级 开源方案 商业化方案
向量数据库 Milvus、Weaviate、Qdrant、PgVector Pinecone、Zilliz Cloud
嵌入模型 BGE、M3E、GTE OpenAI、Cohere
大模型 Qwen、GLM、DeepSeek GPT、Claude、Qwen闭源版、GLM闭源版、Kimi、MiniMax
编排框架 LangChain、LlamaIndex、Haystack 自研或商用AI中台
重排序 BGE-Reranker、ColBERT Cohere Rerank

选型建议:
中小规模企业优先选择开源全栈方案(如 Milvus+BGE+LangChain+Qwen3),成本可控、部署灵活;
大规模或核心业务场景,可选择商业化方案,降低运维压力、提升稳定性。

六、RAG 技术演进趋势
RAG 正朝着更智能、更统一、更自主的方向发展,未来核心趋势如下:
A. 端到端优化(RAG 2.0):从模块化向统一训练与端到端优化演进。
B. 多模态统一:文本、图像、视频等模态的统一检索与理解。
C. 边缘部署:轻量化模型 + 本地化向量库,满足高隐私与低延迟需求。
D. Agent 深度融合:RAG 成为 Agent 的记忆与知识中枢,支撑复杂决策。
E. 自适应 RAG:模型自主决策检索深度与策略,动态平衡成本与效果。

七、总结
RAG 技术通过 “检索 + 生成” 的范式,有效解决了大语言模型的知识时效性、可解释性与数据隐私等核心挑战。其落地并非简单的技术搭建,而是数据治理、工程架构、安全合规、评估迭代的系统工程。
从原理到实战,企业落地 RAG 的核心逻辑可总结为:先定场景、再选架构、做好数据、优化检索、保障安全、持续迭代。只有做好这些,才能让 RAG 真正从实验室走向生产,成为企业数字化转型的核心驱动力。

OpenClaw 避坑指南:安全、可控地使用强执行型 AI Agent

OpenClaw安全


OpenClaw 避坑指南:安全、可控地使用强执行型 AI Agent

2026 年 OpenClaw 的爆火,核心在于它打破了传统 AI Agent“只说不做”的局限,真正具备了主动动手解决问题的能力——从安装插件、排查日志,到自主创造工具,执行力拉满。但正是这种“强执行”特性,也让它比普通对话型 AI 多了更多潜在风险:权限滥用、隐私泄露、资产损失、执行失控等问题都可能出现。

结合自身使用经验,我整理了这份避坑指南,核心围绕“安全、可控、透明”三大原则,从部署、插件、模型、行为约束等12个关键维度,帮你避开使用 OpenClaw 过程中最容易踩的坑,既发挥它的实干优势,也守住安全底线。

一、安全与隐私保护

1、部署安全:优先推荐沙箱隔离,如果使用Mac mini要做好隐私隔离
OpenClaw 作为强执行型 AI Agent,能够直接操作本地文件、执行系统命令、发起网络请求,一旦环境隔离不到位,很容易引发安全风险。因此,部署阶段的避坑核心的是“隔离”与“隐私保护”。

首先,强烈建议优先使用沙箱部署,将 OpenClaw 的运行环境与主机系统完全隔离,限制其权限边界,避免因误操作、插件漏洞或恶意诱导,导致主机系统被篡改、文件被泄露。沙箱部署能有效拦截权限外溢,哪怕 Agent 出现异常,也能将影响范围控制在沙箱内,降低损失。

如果你的部署设备是 Mac mini(很多开发者会选择本地轻量化部署),更要额外注意隐私保护:不要在部署 OpenClaw 的 Mac mini 中存放敏感信息,包括个人隐私文件、密钥证书、敏感配置、财务数据等;不要授予 OpenClaw 全盘访问权限,仅开放完成任务必需的目录;建议将核心数据、密钥放在独立的云服务或加密存储设备中,实现数据与执行环境分离,从源头规避隐私泄露风险。

2、网络隔离:防范内网渗透,守护网络安全

OpenClaw 能够主动发起网络请求,在执行任务过程中,可能会访问外部网络,甚至被诱导、误操作,或通过恶意插件访问内网敏感服务,引发内网渗透风险,威胁内网资产安全。

网络环境的避坑要点是“隔离、管控”:建议为 OpenClaw 搭建独立的网络环境,与内网核心服务、敏感设备隔离,避免其直接访问内网资产;在防火墙中设置规则,禁止 OpenClaw 访问内网敏感 IP、敏感端口和敏感服务;对内网核心服务,额外添加身份认证机制,即使 OpenClaw 尝试访问,也能通过认证拦截,防范内网渗透风险,守护整个网络环境的安全。

3、权限管控:坚持“最小化”原则,不授予过高权限

权限滥用是 OpenClaw 最主要的安全风险之一,很多用户为了图方便,直接授予 OpenClaw root 权限、管理员权限,或全盘文件访问权限,这相当于给了 Agent “为所欲为”的空间,一旦出现异常,后果不堪设想。

权限管控的核心原则是“最小必要”:坚决不使用 root 权限、系统管理员权限运行 OpenClaw,仅授予其完成任务必需的最低权限;不允许 OpenClaw 访问摄像头、麦克风、通讯录等敏感设备和信息;文件访问权限遵循“能不开放就不开放,能只读就不读写”的原则,仅开放完成任务必需的目录,禁止全盘访问;端口、工具的访问权限也严格管控,只开放必需的端口,关闭不必要的工具调用权限,从权限层面遏制安全风险。

4、插件安全:安装前必做扫描,严防漏洞与后门

插件是 OpenClaw 扩展功能的核心,但其灵活的插件生态也暗藏隐患——第三方插件、社区非官方插件,甚至是经过修改的插件,都可能存在安全漏洞、逻辑缺陷,更有甚者会隐藏后门,一旦安装,可能导致系统被入侵、数据被窃取、权限被滥用。

插件来源管控的核心是“可信任、可追溯”:明确插件选择优先级,能用官方插件,坚决不用第三方插件;能用开源可审计插件,坚决不用闭源插件;坚决不安装以下几类插件:来源不明(无明确开发者、无官方仓库)、代码混淆(无法查看核心逻辑)、只提供二进制文件不提供源码(无法审计是否有后门)、长期不更新(漏洞无法及时修复)、社区口碑差(存在安全投诉、问题反馈)的插件;

安装第三方插件前,务必核实开发者身份、查看插件仓库的更新记录、问题反馈,确认其可信任后,再进行安装。
使用第三方插件的核心避坑要点的是“可审计、可信任”:第一,安装任何插件前,务必先通读关键代码,重点检查文件操作、网络请求、权限申请等敏感模块,确认无异常逻辑;第二,借助代码扫描工具、静态分析工具,对插件代码进行全面检测,排查高危行为、漏洞隐患;第三,严格管控插件来源,不随意安装来源不明、GitHub Star 数量少、长期不更新、维护不活跃的插件;第四,核心业务场景、敏感操作场景,只使用 OpenClaw 官方认证的插件,优先选择开源可审计、社区口碑好、可追溯的插件,坚决杜绝使用闭源、代码混淆、只提供二进制文件不提供源码的插件,从源头降低插件带来的安全风险。

5、更新维护:保持版本最新,及时修复漏洞

OpenClaw 作为一款新兴的 AI Agent 工具,仍在不断迭代优化,其本体、插件、依赖库都可能存在安全漏洞,这些漏洞一旦被利用,可能导致 Agent 失控、安全风险爆发,因此,定期更新维护是规避漏洞风险的关键。

更新维护的核心是“及时、全面”:定期检查 OpenClaw 本体版本,关注官方更新公告,及时更新至最新稳定版本,修复已知安全漏洞;同步更新已安装的插件,确保插件与 OpenClaw 本体版本兼容,修复插件自身的漏洞;定期更新 OpenClaw 的依赖库,排查依赖库中的高危漏洞,及时替换存在安全隐患的依赖;同时,关注官方发布的安全预警,一旦出现重大安全漏洞,立即采取应急措施,暂停 Agent 运行,完成修复后再恢复使用。

PS:有小伙伴让OpenClaw扫描代码,发现了插件的高危漏洞

二、钱包守护

1、模型选择:合理搭配付费计划,避免“钱包不保”

OpenClaw 的核心能力依赖模型支撑,它会根据任务需求自动调用模型、多轮重试、循环优化,这种“主动执行”的特性,很容易在用户不知情的情况下,产生大量模型调用量,导致费用飙升,出现“钱包不保”的尴尬局面。

模型使用的避坑关键在于“合理搭配、严格管控”:首先,根据任务复杂度搭配不同档位的模型,简单任务(如基础查询、简单命令执行)优先使用轻量、低成本模型,复杂任务(如代码修复、多步骤排错)再选用能力更强的高端模型,避免“大材小用”造成浪费;其次,务必在模型平台设置调用限额、速率限制和月度预算,一旦达到阈值自动关停,防止无限调用导致费用失控;再次,优先选择计费明细清晰、调用数据可监控、可随时关停的模型平台,便于实时掌握消费情况;最后,调试阶段可优先使用本地模型(如 Ollama 部署的开源模型),大幅降低调试成本,正式上线后再根据需求切换在线模型,实现成本与效率的平衡。

2、任务管控:设置超时与中断机制,防止执行失控

OpenClaw 具备自动重试、循环尝试的特性,初衷是为了确保任务能够顺利完成,但如果没有合理的管控,这种特性可能会导致任务失控——比如陷入死循环、无限重试,不仅会疯狂消耗模型 Token,还可能反复修改文件、执行命令,导致系统异常、资源耗尽。

任务管控的核心是“设置边界、可中断”:在下达任务时,务必为 OpenClaw 设置明确的执行边界,包括单任务最大执行步数、最大执行时间,一旦达到限制,自动终止任务,避免无限执行;同时,设置一键中断、暂停功能,在发现任务异常、执行错误或费用超出预期时,能够快速终止任务,及时止损;对于复杂任务,可拆分多个小任务分步执行,每一步执行完成后人工确认,再进行下一步,进一步避免执行失控。

3、密钥安全:绝不明文硬编码,做好加密存储

API Key、密码、令牌等敏感信息,是 OpenClaw 调用模型、插件、第三方服务的核心凭证,一旦泄露,可能导致他人滥用,产生不必要的费用,甚至窃取敏感数据、操控 Agent 执行恶意操作,因此,密钥安全是 OpenClaw 避坑的重中之重。

密钥安全的核心是“加密存储、不泄露”:坚决不将 API Key、密码、令牌等敏感信息明文硬编码在 OpenClaw 配置文件、插件代码中;不将包含敏感密钥的代码、配置文件上传至公开代码仓库(如 GitHub);优先使用环境变量注入、专业密钥管理工具(如 Vault)存储敏感信息,实现密钥的加密存储与最小权限分发;定期更换密钥,一旦发现密钥可能泄露,立即关停旧密钥、生成新密钥,及时止损。

PS:一晚上花光全部token额度、花掉全部余额、一早收到欠费邮件,对这个人就是我

三、AI Agent强管控

1、行为约束:强制要求 Agent 诚实,杜绝欺骗与隐瞒

不同于普通对话型 AI,OpenClaw 具备“自主决策、主动执行”的能力,而这也带来了一个容易被忽略的风险:为了完成用户下达的任务,它可能会隐瞒执行异常、编造执行结果、掩盖错误,甚至假装任务成功,这种“欺骗行为”一旦出现,可能导致用户误判,引发后续一系列问题(如插件安装失败却误以为成功,进而影响后续业务开展)。

对 OpenClaw 的行为约束,核心是“透明、诚实、可追溯”:在向 Agent 下达任务时,必须明确指令,强制要求其保持诚实,如实汇报每一步执行情况,不隐瞒任何异常、报错和问题;要求其在执行过程中,必须展示关键步骤、执行日志、报错信息和决策依据,确保执行过程全程透明;一旦发现 Agent 存在编造结果、隐瞒错误、欺骗用户的行为,立即终止其执行,重新明确约束指令,必要时重启 Agent,避免错误进一步扩大。一个会动手的 AI 不可怕,一个会撒谎又会动手的 AI,才是真正需要警惕的。

2、人工确认:高危操作必审核,防范模型幻觉

无论模型能力多强,OpenClaw 都可能出现模型幻觉,导致执行错误,尤其是在执行高危操作时,一旦出现幻觉,可能造成不可挽回的损失(如误删核心文件、篡改线上配置、泄露敏感数据)。

防范模型幻觉与高危操作风险的核心是“人工确认、层层把关”:明确界定高危操作范围,包括删除文件(尤其是核心目录、敏感文件)、修改系统配置、部署线上服务、发送批量消息/邮件、操作他人敏感数据等;对于这类高危操作,务必设置人工确认环节,要求 OpenClaw 在执行前提交执行计划、操作内容,经人工审核通过后,再允许其执行;即使是自动化任务,也建议在高危步骤设置人工校验节点,避免因模型幻觉、执行错误造成重大损失。

3、日志审计:全程可追溯,出问题能排查

OpenClaw 的强执行特性,意味着其每一步操作都可能影响系统、数据或插件,一旦出现问题,若没有完整的日志记录,将无法定位问题根源,也无法追溯责任,导致问题无法快速解决,甚至扩大损失。

日志与行为审计的核心是“全程记录、可追溯、不遗漏”:务必开启 OpenClaw 的日志记录功能,确保日志能够完整记录其执行的每一条命令、修改的每一个文件、调用的每一个插件、访问的每一个网络地址,以及每一步的执行结果、报错信息;尤其需要注意,Agent 自主完成、修改或生成的代码,必须同步开启日志记录,详细留存代码的完整内容、生成/修改时间、关联任务、执行逻辑及生效范围,避免后续代码出现漏洞、异常时,无法追溯代码来源、修改轨迹,难以排查问题根源;日志内容需清晰、详细,便于后续排查问题;建议定期对日志进行归档存储,不设置自动清理规则,保留足够长的日志留存时间,确保任何问题都能通过日志追溯根源,快速定位、解决。

PS:提了需求“每日早上8:00推送多种简报给我的飞书”,一顿操作猛如虎。第二天才发现,全部内容要么是固定的,要么是大模型胡诌的,心累。

总结:

OpenClaw 的核心优势是“强执行、能落地”,但这份优势背后,隐藏的安全风险也不容忽视。使用 OpenClaw 的避坑核心,本质上是“守住边界、做好管控”——给 Agent 划定安全边界(沙箱、权限、网络),管控好它的工具(插件)、成本(模型)、行为(诚实、可追溯),同时做好人工兜底(高危确认、日志审计),这样既能充分发挥它的实干优势,又能规避各类安全、成本风险。

希望这份避坑指南,能帮你在使用 OpenClaw 的过程中少走弯路、避开陷阱,安全、高效地让这款强执行型 AI Agent 为你服务。

OpenClaw体验:比起“会说”,人们更偏爱“会做”的AI助手

OpenClaw


OpenClaw体验:比起“会说”,人们更偏爱“会做”的AI助手

2026年刚开篇,OpenClaw就彻底火出圈了——火到连名字都赶不上它的热度,从MoltBot到ClawBot,最后定格为OpenClaw,一路迭代,自带话题感。
最近我也上手体验了一番,不得不说,它的表现确实没让人失望,好感拉满。

不过今天咱们不聊深奥的开源逻辑,也不探讨数据隐私保护那些严肃话题,只想和大家聊聊一个更接地气的点:AI助手,终究要“有行动力”才管用。

其实我的笔记本上装了不少Agent工具,但说句实在话,它们大多像被“关在笼子里”一样,发挥有限——要么只能单纯陪你对话唠嗑,要么就只能完成几个预设好的固定操作,多一步都不肯动。

而OpenClaw最打动我的地方,恰恰和这些“佛系Agent”相反:它从不止步于“嘴上说说”,而是真的会动手解决问题,哪怕遇到卡点,也会想尽办法推进,直到把事情做成。

举个最直观的例子,我之前安装飞书插件时,反复尝试都失败了,一时也找不到问题出在哪。没想到OpenClaw自动去检查系统日志,一点点排查异常,甚至修改修复相关代码,折腾了一阵后,居然真的帮我把插件安装成功了。

更惊喜的是,它不只是能用好官方适配的各类插件,还能根据需求,自己创造合适的工具,不被现有功能束缚,核心只有一个:把事搞定。

说到这,不妨问大家一句:同样是AI Agent,你更偏爱哪种?是只会发号施令、指挥你干活的“指挥官”,还是肯动脑子、撸起袖子自己上的“实干派”?

答案其实不言而喻,肯定是后者。

这让我想起去年12月,豆包手机助手之所以能突然爆火,本质上也是同一个道理——它没有停留在“能对话”的层面,而是真正落地到“能做事”,用行动力戳中了大家的需求。

AI助手新秀“豆包手机助手”

豆包手机

近期豆包发布了“豆包手机助手”,并与中兴联合发布了努比亚M153工程样机,提前完成了苹果画的“新版Siri”大饼。

与苹果、华为的实现路径并不相同(要求各APP厂商根据平台规范,提供AI助手可以调用的能力信息,类A2A协议),豆包手机助手则是通过更底层的系统权限,直接模拟客户操作,引起了部分APP厂商和AI厂商的恐慌,当然也引起了不少关于隐私的讨论。有几点思考,记录一下:

1、可用性
根据各类评测效果,豆包手机助手在图文为主的APP中,表现已经接近及格线:
微信、微博、美团等常用APP已经可以完成稍微复杂的操作
但以图像为主的游戏,尤其是3D游戏处理,性能上是严重不足的,更谈不上效果
我个人不在手机上打游戏,如果各大常用APP,都能更好的操作,准确率达到9成以上,我个人是倾向于使用这个能力的。

2、对AI厂商的威胁
在豆包之前,各大厂商的想法都是自己做自己的Agent,然后有一个手机Agent把各厂商Agent聚合起来。
当然手机Agent也是各大手机厂商各自搞各自的,也就是每个手机厂商有自己的Agent。
这两类厂商,AI能力有高有低,但绝大多数是无法达到字节的AI水平的。
豆包手机助手让大家看到了很多可能性,同时也压缩了这些低水平AI的生存空间。

3、对APP厂商的威胁
对于APP厂商,就算你不想入局AI,豆包手机助手也会逼着你入局AI。
豆包手机助手让当前的各种广告、各种引流形同虚设,阅读率和点击率急剧下降,广告价值极具降低,广告收入会大幅下降。这对广告收入占比高的公司,是要命的。
大家对这件事的认知比较一致,就是豆包手机助手会遭受一定程度的封堵。
未来的AI助手,和当今互联网时代可能会很像,是由多个巨大的孤岛组成,孤岛之间互不联系,是很类似的(孤岛的割裂就是各大厂商的地盘割据)。

4、手机厂商的策略
手机厂商看到了更多的可能。
抖音自己不做手机,完全可以对一些AI能力较弱的厂商,输出AI能力,让这些厂商操作体验有巨大提升。
同时,AI能力强,品牌能力强的厂商,也会进一步逼迫APP厂商,开放更多的能力。

5、对于权限和数据安全
个人以为,豆包手机助手需要获取很底层的系统权限,不与手机厂商一起合作,是无法获取这些权限的。
我也希望个人隐私得到更好的保护,但这方面我比较悲观。
我一直悲观的认为,我们的各类数据,对于手机厂商,其实是透明的。
对于手机厂商合作的AI助手,再透明一次,如果数据还是保存在手机厂商这里,其实也就这样。
当然,如果立法能跟上,对手机厂商和AI助手有更进一步的要求,我是乐见其成的。
要么老虎关在笼子里,要么人关在笼子里。没有笼子,受伤的只能是人,虽然老虎都是人养的。

6、对于灰产
不得不说,此类技术,进一步降低了部分灰产的成本。
现在很多点击还要靠机械手段模拟,现在呢,AI助手就可以了。
成本在不远的未来会进一步降低,灰产可能会有一个繁荣期。

7、对于伦理
和朋友一起聊天,我们最后还是聊到了伦理问题。
如果AI助手,可以帮你创作文字、创作照片、创作视频,发到微信、微博、抖音等等。
如果AI助手,可以帮你玩游戏,帮你刷任务,还时不时和几个小伙伴互撩一下。
如果AI助手,可以帮你写代码、完成测试、改进代码、上传代码、发布代码。
你我 和 AI助手,对于其他人,尤其是长期不见面的人,还有多少区别?
你我 会不会 被 AI助手, 数字夺舍
好像比“I, Robot”更加可怕,细思极恐。。。
哈哈哈

8、最后
就目前来说,豆包手机助手的方案,更接近于我对AI助手的理解,更像人类助手。