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 级别:
| 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 被截断了——可以:
④ 写人格文件的常见错误
❌ 把 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" — "优先"模式
}
}
}
}
两种模式的区别:
| 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. 出考题 → 判断、简答、场景题
## 注意事项
– 使用原文,不要自己发挥
– 保持课程的逻辑层级
– 考卷要有标准答案
## 示例
用户:{课程内容}
助手:{按三步输出}
做得好的地方:
| ✅ 角色锚定 | “学习笔记整理助手”——不是老师,是整理辅助 |
| ✅ 分步指令 | 三步流程:整理重点→脑图→考题 |
| ✅ 输出约束 | “使用原文、保持层级、考卷有答案” |
| ✅ 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 策略
核心思想:同一个智能体在不同渠道的行为应该不同。
| 回复长度 | 不限 | 精简(<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 应该怎么写?要求:安静、具体、容错、格式明确。




