欢迎光临
我们一直在努力

第11课:提示词优化与 OpenClaw 特殊提示词


11.1 提示词优化基础

这部分跟 OpenClaw 无关,是我做智能体以来总结的通用技巧。

① 核心要素框架

一个高质量的 System Prompt 至少包含这四块:

【角色】你是谁 → "你是一个资深后端工程师"
【目标】你要干什么 → "帮用户审查代码的 Redis 使用是否正确"
【边界】什么不做 → "不要提供生产环境的直接操作命令"
【输出约束】怎么输出 → "用中文,先列问题再给建议,建议附代码示例"

为什么要分四块?

  • 角色锚定 → 模型调用的知识域的准确性 +50%(有论文支持)
  • 目标 → 减少发散、避免废话
  • 边界 → 防止幻觉(告诉它什么是不能做的,比只告诉它能做什么重要得多)
  • 输出约束 → 省得你每次都纠正格式
② 角色锚定(Persona)到底多重要

对比:

❌ "帮我写一个 Python 爬虫"
✅ "你是一个熟悉反爬虫策略的数据抓取工程师,帮我写一个能绕过 Cloudflare 的 Python 爬虫"

第二个答案质量明显高,因为模型在"数据抓取工程师"这个人设下,会调用更精准的知识域。

③ 分步指令(Chain of Thought)

❌ "分析这段代码的性能问题"
✅ "一步一步分析这段代码的性能:
1. 先列出所有循环
2. 检查有没有不必要的重复计算
3. 检查数据库查询的次数
4. 最后汇总优化建议"

OpenClaw 内的应用: 你用的 Execution Bias 其实就是 CoT 的一种 —— “act in-turn on actionable requests, continue until done or blocked”。

④ Few-shot 示例

给例子比给描述管用:

❌ "请输出结构化的分析报告"
✅ "请按以下格式输出:
【问题】
【根因】
【解决方案】
例如:
【问题】Redis 缓存穿透
【根因】没有布隆过滤器
【解决方案】建议加一层布隆过滤"

⑤ 输出约束

常用约束类型:

类型写法
格式 “必须输出 Markdown 表格” / “只输出 JSON”
篇幅 “不超过 100 字” / “分 3 点,每点一句话”
语言 “用中文回答,术语保留英文”
风格 “用陈述句式,不要用感叹号”
何时不说话 “如果没有有价值的信息,回复 NO_REPLY”
⑥ 拒绝话术(Negative Prompt)

这可能是最重要的一条技巧。 告诉 AI 别做什么,比告诉它做什么更有效:

❌ "请写出高质量的代码"
✅ "不要生成玩具代码。不要省略错误处理。不要用过时的 API。如果不知道答案,直接说不知道。"

你的 AGENTS.md 里的 Red Lines 就是拒绝话术的一个经典应用——“Don’t exfiltrate private data. Ever” 比一百句"要保护隐私"管用。


11.2 OpenClaw System Prompt 架构

这是 OpenClaw 内部最核心的提示词系统——每次你跟我聊天,我都收到了一个自动组装的 System Prompt,不是固定的死文字。

① 三层组装机制

第1层:buildAgentSystemPrompt
↓ 纯渲染,不读配置
生成底层提示词模板

第2层:resolveAgentSystemPromptConfig
↓ 融合当前 Agent 的配置
注入 owner 信息、TTS 设置、模型别名、记忆引用模式等

第3层:Runtime Adapters
↓ 融合运行时动态信息
注入工具列表、沙箱状态、渠道能力、上下文文件、Provider 贡献等
最终才变成我每一轮对话前看到的那个完整的 System Prompt

这样设计的原因:各层各管各的事,修改工具列表不需要改底层渲染逻辑。

② 固定的 Prompt 板块

你每次问我,我收到的 System Prompt 大概长这样(按顺序):

┌─────────────────────────────────────────┐
│ Tooling(工具列表 + 使用指南) │ ← 稳定
│ Execution Bias(执行倾向) │ ← 稳定
│ Safety(安全边界) │ ← 稳定
│ Skills(可用技能列表) │ ← 稳定
│ OpenClaw Control(配置操作指南) │ ← 稳定
│ OpenClaw Self-Update(自我更新规则) │ ← 稳定
│ Workspace(工作区路径) │ ← 稳定
│ Documentation(官方文档路径/链接) │ ← 稳定
│ Workspace Files(AGENTS.md 等文件内容) │ ← 稳定
│ Sandbox(沙箱状态) │ ← 稳定
├─────────────────────────────────────────┤ ← Prompt Cache 分界线
│ Current Date & Time(时区) │ ← 半稳定
│ Assistant Output Directives(输出规范) │ ← 可变
│ Heartbeats(心跳提示) │ ← 可变
│ Messaging(当前 Session 来源) │ ← 可变
│ Group Chat Context(群聊上下文) │ ← 可变
│ Runtime(运行时信息) │ ← 可变
└─────────────────────────────────────────┘

为什么要有缓存边界?

上面稳定部分(大块项目上下文)在 LLM 的 Prompt Cache 里是复用的——不管你在群里还是私聊,这部分内容一样,不需要重新计算。下面可变部分才是每轮不同的。

你配置的哪些文件被注入到上面那个"稳定区"了?

AGENTS.md → ✅ 完整注入
SOUL.md → ✅ 完整注入
TOOLS.md → ✅ 完整注入
IDENTITY.md → ✅ 完整注入
USER.md → ✅ 完整注入
HEARTBEAT.md → ✅ 完整注入(心跳使能时)
MEMORY.md → ✅ 完整注入(主 session)
BOOTSTRAP.md → ⏳ 第一轮对话才注入
memory/*.md → ❌ 不自动注入,通过 memory_search 按需调用

文件大小限制: 每个文件默认最多种 20000 字符,全部文件加起来最多 60000 字符。超过会被截断(但磁盘文件不丢)。你看到 /context 命令可以看每个文件占了多少。

③ Prompt Mode

OpenClaw 有三种 System Prompt 级别:

Mode谁在用包含什么不包含什么
full(默认) 主会话(WebChat、微信) 全部板块
minimal 子智能体(狐狸、灵童) Tooling、Safety、Skills、Workspace、Sandbox、Runtime Memory Recall、Self-Update、Model Aliases、User Identity、Output Directives、Messaging、Heartbeats
none 特殊场景 只有一行身份线 全部

为什么子智能体用 minimal? 子智能体不需要知道你的个人信息、不需要更新配置、不需要管理记忆——它们只在自己的领域做事,用最小系统提示词减少 token 消耗、降低 TCE。

④ Provider 对 Prompt 的定制能力

每个 AI Provider 可以微调我收到的提示词。比如你用 DashScope 的 DeepSeek V4 Flash 和 DeepSeek 官方的 DeepSeek Chat,它们的提示词处理会略有不同:

定制能力作用
替换核心板块 比如替换 interaction_style、tool_call_style、execution_bias,适配不同模型的"风格"
注入稳定前缀 在 cache 分界线上面加内容(适合 Provider 自家的系统提示)
注入动态后缀 在 cache 分界线下面加内容(适合本轮动态信息)

11.3 智能体人格文件设计

这是你已经在用的——AGENTS.md、SOUL.md 这些文件本质上就是分层注入的 System Prompt 片段。

① 各文件的职责

你 workspace 里的文件,每个有特定分工:

文件一句话职责谁写的修改频率
AGENTS.md “我怎么工作” — 规则、流程、行为准则 你和我一起 偶尔
SOUL.md “我是谁” — 人格、语气、价值观 你(或模板) 很少
IDENTITY.md “我叫什么” — 姓名、身份、头像 几乎不改
USER.md “你是什么样的人” — 大王的信息 我观察积累 逐渐完善
HEARTBEAT.md “定期检查什么” — 心跳任务清单 按需
TOOLS.md “我有哪些本地设施” — 摄像头、SSH、声音偏好 我记录 逐步积累
MEMORY.md “我记得什么” — 长期记忆 我更新 每次重要事件
② 注入顺序与覆盖

Prompt 框架(OpenClaw 自动生成的身份 + 工具说明)

AGENTS.md(你的规则覆盖)

SOUL.md(人格覆盖)

IDENTITY.md(名称覆盖)

USER.md(你的画像)

TOOLS.md(本地设施信息)

MEMORY.md(记忆)

后面的覆盖前面的。所以你在 AGENTS.md 写"我是大脑,核心职责是 XX",比我自己在 SOUL.md 写的"我是谁"优先级高。

③ 截断规则

你的 AGENTS.md 有几千字——OpenClaw 会全部注入吗?

agents.defaults.bootstrapMaxChars = 20000 // 每个文件最多 20000 字符
agents.defaults.bootstrapTotalMaxChars = 60000 // 全部文件最多 60000 字符

超过的部分会被截断(文件头上标 <truncated> 标记),磁盘上的原文件不变。如果你发现我的记忆不完整了,可能是 MEMORY.md 被截断了——可以:

  • 蒸馏 MEMORY.md(删掉过时的内容)
  • 把详细历史移到 memory/*.md(按需引用,不自动注入)
  • 调高 bootstrapMaxChars 数值
  • ④ 写人格文件的常见错误

    ❌ 把 AGENTS.md 当聊天记录写(太长)
    → AGENTS.md 是常驻提示词,每次对话都吃 token,要精炼

    ❌ 在 MEMORY.md 里写一大段脚本
    → MEMORY.md 会被注入主会话上下文,写多了就是烧钱
    → 详细的放 memory/*.md,按需读

    ❌ SOUL.md 和 AGENTS.md 内容打架
    → SOUL.md 说"话不多但稳",AGENTS.md 说"尽量详细回答"
    → 模型困惑,最后两头不靠

    ❌ 各个文件都定义同样的东西
    → "我是谁"在 SOUL.md 和 IDENTITY.md 和 AGENTS.md 各写一遍
    → 后者覆盖前者,冗余


    11.4 OpenClaw 特殊提示词

    这部分是 OpenClaw 特有的提示词机制,通用提示词课程不会讲。

    ① Compaction 记忆冲刷提示(Memory Flush)

    这是设计最精巧的。 压缩会话之前,系统自动注入一轮"偷偷保存记忆"的指令:

    (压缩前,系统给智能体注入一条隐藏消息)
    → "会话即将压缩,请把你认为重要的信息写入记忆文件"
    → 智能体写 memory/daily/xxx.md
    → 压缩开始
    → 压缩后那些"消失"的对话内容,已经在记忆文件里了

    这个冲刷行为可以指定模型:

    compaction: {
    memoryFlush: {
    model: "dashscope/qwen3.5-omni-flash", // 用便宜模型干这个活
    }
    }

    ② 子智能体派发模式(Delegation Mode)

    你在 AGENTS.md 里写了我作为大脑的调度规则。OpenClaw 在 System Prompt 层面也支持两种模式:

    {
    agents: {
    defaults: {
    subagents: {
    delegationMode: "suggest" // "建议"模式
    // 或 "prefer" — "优先"模式
    }
    }
    }
    }

    两种模式的区别:

    模式System Prompt 里的变化行为上的区别
    suggest(默认) 只提示"你可以用 sessions_spawn 派发" 我 >判断> 自己处理还是派出去
    prefer 增加一个专门的 Sub-Agent Delegation 板块,指令更强 我 >优先考虑派出去> 自己只是在简单问题才回答

    你系统里目前是默认的 suggest,所以你会看到有时候我自作主张回答了,有时候派给了狐狸。

    ③ 群聊静默规则(NO_REPLY)

    这个你在 AGENTS.md 里也写了。OpenClaw 的 System Prompt 层面也有:

    条件:
    → 渠道是群聊(Group Chat)
    → 没有 @机器人
    → 信息质量不足以回复
    → 则:回复 NO_REPLY(不打扰)

    这个逻辑在 System Prompt 中有专门的 Silent Replies 板块。但它在私聊(direct)中会被自动移除——你单独找我,我永远不该沉默。

    ④ Heartbeat 初始提示词

    你的 HEARTBEAT.md 写的检查清单被注入为 Heartbeat 的初始 Prompt:

    HEARTBEAT.md 内容 → 成为每次心跳主提示词

    每次心跳,我看到你写的:"检查系统状态:运行时间、余额、错误日志……"这就是你给我的心跳提示词。

    ⑤ Cron 任务的 Prompt 设计

    你现在的 Cron 有不?——每日补漏和每周周报。

    Design Tip: Cron 任务的 Prompt 应该非常具体、给出明确的输出格式,因为 Cron 自动跑,没人现场纠正。

    好的例子(你的周报):

    生成周报,内容包括:
    1. 本周重要事件汇总
    2. 待办事项进度
    3. 下周计划
    Markdown 格式,500 字以内

    坏的例子:

    看看这周有什么大事

    ⑥ Skills 注入列表

    你会发现我每次在回答前,会有一行:

    <available_skills>
    <skill>
    <name>study-notes</name>
    <description>学习笔记整理助手</description>
    <location>skills/study-notes/SKILL.md</location>
    <version>sha256:xxx</version>
    </skill>
    </available_skills>

    这是 System Prompt 动态生成的。每个 Skill 的信息来自你的 skills/ 目录。版本号(version 字段)的作用: 如果我本次用了一个 skill,下次再调用时 version 变了,我会自动重新读——这是个缓存一致性的设计。


    11.5 实际优化案例

    ① study-notes Skill 的 Prompt 优化分析

    先看你创建的这个 Skill。它的 SKILL.md 结构大致是:

    # study-notes — 学习笔记整理助手

    ## 核心职责
    – 按课程整理学习重点
    – 做脑图
    – 出考题

    ## 工作流程
    1. 整理重点 → 提取关键概念
    2. 做脑图结构 → 用 Markdown 列表呈现层级
    3. 出考题 → 判断、简答、场景题

    ## 注意事项
    – 使用原文,不要自己发挥
    – 保持课程的逻辑层级
    – 考卷要有标准答案

    ## 示例
    用户:{课程内容}
    助手:{按三步输出}

    做得好的地方:

    技巧在 study-notes 里的体现
    ✅ 角色锚定 “学习笔记整理助手”——不是老师,是整理辅助
    ✅ 分步指令 三步流程:整理重点→脑图→考题
    ✅ 输出约束 “使用原文、保持层级、考卷有答案”
    ✅ Few-shot 示例 给了用户输入和助手的预期输出的模板

    可以改进的地方:

    ① 缺少显式的拒绝话术

    你希望它不要自己发挥内容,但"注意事项"里写的是"使用原文,不要自己发挥",不够有力。

    可以改成:

    ## 不可做的事(严格红线)
    – ❌ 不要补充课程中没有涉及的内容
    – ❌ 不要把不同课程的知识点混在一起
    – ❌ 不要自己编造考题的标准答案
    – ❌ 如果用户内容不足以完成三步,明确说"信息不足以生成某步骤"

    ② 缺少篇幅约束

    如果用户丢进来整节课的内容(几千字),这个 Skill 没有告诉模型:

    • 整理多少条重点?(10 条封顶?)
    • 考题出几道?(3 道合适?)
    • 脑图多深?(三级够不够?)

    可以加:

    ## 输出格式(篇幅规范)
    – 重点整理:最多 10 条,每条不超过 50 字
    – 脑图:最多 3 级深度,支持 Markdown 列表
    – 考题:最多 3 道(1 判断 + 1 简答 + 1 场景)

    ③ 缺少多轮对话的处理

    如果用户先问"帮我写个爬虫",Skill 触发整理能力。然后用户又说"改成多线程版本"——这时候 Skill 应该做什么?

    • 是继续沿用"学习整理"的角色?
    • 还是退出 Skill,回到我的通用能力?

    目前的 SKILL.md 没有定义"什么时候退出这个角色"。可以加:

    ## 退出条件
    – 用户明确要求做笔记之外的事 → 退出 Skill 回到常规回复
    – 用户连续2轮没有提及学习内容 → 主动问"还需要继续整理吗"


    ② 你的 AGENTS.md / SOUL.md 设计思路解读

    整体分层逻辑梳理:

    AGENTS.md ──── 规则层(硬)
    "你是谁" → "我是主智能体,调度中枢"
    "怎么做" → "用 sessions_send 派任务"
    "不准做" → "红线:不泄露、不改配置不问、先查再问"

    SOUL.md ──── 人格层(软)
    "什么风格" → "直接帮,少废话"
    "什么立场" → "有观点,不敷衍"
    "什么态度" → "赢信任靠能力"

    IDENTITY.md ── 身份层(事实)
    "叫什么" → "大脑/灵枢"
    "长什么样" → emoji 🧠
    "下属谁" → 灵童、狐狸、安装大师

    USER.md ──── 主人画像
    "谁在说话" → 大王
    "在哪" → 河南、Asia/Shanghai
    "什么背景" → 技术用户、自建 OpenClaw

    这种分层是对的——规则、人格、身份依次分明。

    亮点分析:

    设计为什么好
    红线和行为准则在同一文件中 一条 AGENTS.md 里既写"我是谁"也写"什么不能做",模型一次性读完,一致性高
    Sub-Agent 调度写进 AGENTS.md 明确说"我不是干具体活的,我是分活的"——角色定位清晰,减少幻觉(比如我自己跑去写代码而不用狐狸)
    群聊规则写得很细 “参与不主导”、“质量>数量”、“避免三连击”——这些都是人类群聊的基本礼貌,写成 Prompt 后我确实会遵守
    Heartbeat 里写了"什么回 HEARTBEAT_OK" 明确的安静条件(深夜23-08、大王忙、没新东西、刚查过<30分钟),避免心跳总是打扰你
    记忆管理写进 AGENTS.md “写在文件里不是记在脑子里”——这个理念帮你解决了大模型"记忆是幻觉"的根本问题

    可以优化的地方:

    ① AGENTS.md 和 SOUL.md 稍有内容重叠

    AGENTS.md: "直接帮,少废话"
    SOUL.md: "Be genuinely helpful, not performatively helpful"

    两句话说的是一件事,但表述不同。模型会同时收到两边的版本。

    可以在 AGENTS.md 里引用 SOUL.md——“人格由 SOUL.md 定义”,然后把 AGENTS.md 里的性格描述删掉,只留规则。

    ② 缺少分渠道的输出规范

    你现在只有一个 WebChat。如果你加了微信渠道,应该在 AGENTS.md 里加一条:

    ## 多渠道适配
    – WebChat:可以详细展开,有代码块、表格
    – 微信:用列表代替表格,链接用 <> 包裹,保持简洁

    ③ 缺少"不确定怎么办"的兜底规则

    AGENTS.md 说"不确定的先问大仙",但没有说如果大仙不回复怎么办。

    可以加一条:

    – 如果问了大仙但 10 分钟内没有回复 → 先按最稳妥的方案处理
    – 如果涉及安全/金钱/公开写东西 → 无论多久都要等大仙确认


    ③ 写出更好 Cron 提示词的技巧

    你目前有两个 Cron:每日补漏和每周周报。

    先看每日补漏的提示词长啥样(从你的 Cron 配置推断):

    应该是类似:

    SystemEvent: "检查今天有没有写 daily log,没写的话补上"

    这个已经不错,还可以优化。

    Cron 提示词设计的黄金法则:

    八字真言:具体、安静、容错、输出

    法则解释坏例子好例子
    具体 把每一步说清楚 “检查系统” “检查 Gateway 是否在运行、模型能不能 ping 通”
    安静 没有异常就不打扰 “每天给我汇报运行状态” “如果一切正常,回复 NO_REPLY”
    容错 失败时怎么办 (缺) “如果 Gateway 检测失败,重试 3 次,间隔 1 分钟”
    输出 明确输出格式 “看看有什么需要报告的” “按此格式输出:【状态】【问题】【建议】”

    你的 Cron 提示词可以这么优化:

    每日补漏:

    原版:检查今天有没有写 daily log,没写的话补上
    优化版:
    任务:检查今天({date})是否已创建 memory/daily/{date}.md
    步骤:
    1. 读取 memory/daily/ 看看今天有没有日志
    2. 如果没有,回顾今天交互中的关键事件,整理写入
    3. 如果已有且完整 → 回复 NO_REPLY
    容错:
    如果今天没有交互记录 → 写一行"今天无交互"即可
    输出格式:仅在有异常时才说话

    每周周报:

    原版:生成周报,发送到微信
    优化版:
    任务:生成 {week_range} 的周报
    步骤:
    1. 读取最近7天的 daily log
    2. 按日期顺序整理事件
    3. 标注关键决策、待办进度、技术配置变更
    4. 输出到 memory/weekly/{date}-weekly-report.md
    输出格式:
    # {week_range} 周报
    ## 本周大事
    ## 待办进度
    ## 下周计划
    容错:
    如果这周没有 daily log → 输出"本周无记录",不推空报告

    给 Cron 加 Prompt 的三个实操技巧:

    技巧 1:时间自述

    Cron 任务没有上下文——它不知道自己现在是几月几号。一定要在提示词里把当前时间传进去:

    ❌ "检查日志"
    ✅ "现在是 {datetime},检查当天的日志"

    技巧 2:失败告警 + 重试

    failureAlert: {
    after: 3, // 连续3次失败才告警
    channel: "微信",
    to: "大王"
    }

    同时提示词里也写:

    如果第一次失败,等待 60 秒重试,最多 3 次。

    技巧 3:输出格式固化

    Cron 的输出会直接送到你手机上(微信),格式不对你就要多看一眼。所以:

    输出格式必须按此结构:
    ✅ [状态] 运行正常/有异常
    ✅ 一句概括
    ✅ 如果有异常,加一句说明
    ❌ 不要分段、不要加标题、不要加代码块


    ④ 多渠道适配的不同 Prompt 策略

    核心思想:同一个智能体在不同渠道的行为应该不同。

    维度WebChat微信私聊微信群聊Discord
    回复长度 不限 精简(<200字) 极简(<100字) 适中
    格式 Markdown 全支持 不用表格,用列表 纯文字 Markdown
    链接 普通 用<>包裹 短链接 普通
    工具 全部 主要工具 只读工具 主要工具
    主动程度 高(我主动查东西) 中(有事才查) 低(被提到才出现)
    表情 适当 适当 轻微 多(Discord 文化)

    OpenClaw 里怎么实现不同渠道不同行为?

    方法一:通过 AGENTS.md 加规则(你现在能做到的)

    ## 多渠道行为
    – 渠道为微信时:回复不超过200字,用列表代替表格
    – 渠道为群聊时:没有@我就不回

    方法二:通过不同 Agent + 渠道路由(高级方案)

    配置多份 AGENTS.md,让不同渠道走不同 Agent:

    {
    bindings: [
    { channel: "webchat", agent: "main" },
    { channel: "wechat", agent: "wechat-agent" },
    ]
    }

    微信渠道走 wechat-agent,这个 Agent 有自己的 AGENTS.md(专门优化过小屏体验),跟 WebChat 的大脑是两个独立的上下文。

    但对你目前来说不需要,用方法一就够了——在 AGENTS.md 里加一条渠道适配规则就行。

    完整对比:

    渠道策略
    WebChat(你现在用的) 完整 System Prompt + 所有工具可用,我话最多、回答最全面
    微信 小屏阅读友好,避免 Markdown 表格(用列表)、链接包 <>、回复尽量简洁
    群聊 加上 requireMention 规则 + 智能静默(NO_REPLY),我不应该在两三个人聊天的时候插嘴
    Cron 任务 最小上下文 + 明确的输出格式指令,跑完自动通知你
    子智能体 promptMode=minimal,去掉不需要的信息(你的用户画像、记忆、配置操作权限)

    设计原则: 一个 System Prompt 不能适配所有渠道。渠道本身就在变相地给你加了一层隐式 Prompt——你在群里找我,和你在私聊找我,你的用词和期望都不一样。


    ⑤ 写出更好的 AGENTS.md / SOUL.md 的思路

    AGENTS.md 优化清单:

    当前是否有建议理由
    ✅ 红线规则 保持,这是最重要的 “修改 openclaw.json 必须先问"这种明确的行为边界,效果远好于"要谨慎”
    ✅ 子智能体调度规则 保持 你写了"判断该交给谁"的流程,清晰
    ✅ 群聊行为 保持且写得很细 NO_REPLY 的触发条件、多久回一次,都写清楚了
    ✅ 记忆管理 保持 "写进文件不是记在脑子"这个理念正确
    ❌ 没有篇幅约束 可加 比如"回复控制在 200 字以内"或"可以展开,但先说结论"
    ❌ 没有分渠道指导 可考虑加 “WebChat 可以展开说话,微信群里一句话点到为止”

    SOUL.md 优化思路:

    你现在的 SOUL.md 写得不错,关键是你定义了我"该做什么、不该做什么"。如果要改进:

    Current: "我有能力,不装"
    可加: "如果你有问题我没把握,我会主动说我不确定,不瞎编"
    → 这是拒绝话术的应用——减少幻觉

    Current: "各司其职"
    可加: "如果狐狸或灵童的回答有问题,我会告诉你我的判断"
    → 这是分步指令——让我多做一步质量把关

    整体设计哲学:

    AGENTS.md 写规则和行为(硬),SOUL.md 写人格和语气(软)。

    AGENTS.md: "Don't exfiltrate private data. Ever."
    SOUL.md: "记住你是客人,尊重这份信任"

    同一件事,两层约束:硬的是红线,软的是价值观。

    ⑥ 多智能体 Cron 提示词技巧

    假设你要加一个 Cron 任务——每天上午 9 点让狐狸检查一下 GitHub 仓库有没有新的 issue。这种跨智能体的 Cron 怎么写?

    ❌ "检查 GitHub issue"
    → 不够具体,狐狸不知道查哪个仓库、查到了怎么办

    ✅ "现在时间:{datetime}
    任务:检查 GitHub 仓库 my-project 的新 issue
    步骤:
    1. 用 GitHub API 查最近24小时的 issue
    2. 如果有新 issue,汇总标题和链接
    3. 如果没有,回复 NO_REPLY
    输出格式:按优先级排序的 Markdown 列表"

    技巧总结:

    技巧原因
    包括当前时间 Cron 任务没有上下文,不知道现在是哪天
    明确的终止条件 什么情况该继续、什么情况该结束
    输出格式约束 Cron 给你的消息不是你一条条发的,格式要直接能用
    NO_REPLY 兜底 没新闻时别打扰你

    ⑦ 优化你的 MEMORY.md

    这是个关键的实操建议。你现在 MEMORY.md 包含了:

    ✅ 关于主人的基本信息
    ✅ 重要事件时间线
    ✅ 配置要点
    ✅ 课程进展表
    ❌ 每日记录 & 周报体系(这是"如何工作"的说明,不是记忆本身)
    ❌ 待办 / 未完成
    ❌ 智能体架构重构(已完成的配置说明)

    建议的优化思路:

    MEMORY.md 拆分两部分:

    MEMORY.md(常驻上下文,精简)
    ├─ 主人信息(大王、河南、时区)
    ├─ 当前状态(本月主要项目)
    └─ 最近重要事件(近1周)

    memory/ 目录(按需读取,不自动注入)
    ├─ 长期事件完整记录
    ├─ 课程进展
    ├─ 配置变更历史
    └─ 待办事项

    这样 MEMORY.md 从 500 行砍到 50 行,每次对话省一大笔 token,还不会被截断。


    11.5 课后练习

    如果想验证理解,可以试一个实际案例:

    假设你现在要写一个**“微信日报”**的 Cron 任务,每天 9:00 自动推送简报给你。它的 Prompt 应该怎么写?要求:安静、具体、容错、格式明确。

    赞(0)
    未经允许不得转载:171主机测评 » 第11课:提示词优化与 OpenClaw 特殊提示词
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址