nanobot 工作区的结构
注意——这一篇的内容基本完全来自于 AI,很可能有幻觉。nanobot和openclaw的工作区结构应该是类似的,但openclaw对历史的处理是滚动保存的,见仁见智吧。
一、工作区目录结构
1 | |
二、文件加载机制
自动加载文件(每次会话开始时):
- AGENTS.md → 助手行为准则
- SOUL.md → 角色设定(AI 是谁)
- USER.md → 用户偏好信息
- MEMORY.md → 长时记忆(重要事实)
- TOOLS.md → 工具使用说明
AI 手动加载文件(需要时读取):
- HISTORY.md → 通过 grep 或 exec 命令搜索历史
- 技能文件 → 需要时读取 SKILL.md 了解功能
- 会话文件 → 自动压缩时参考
HISTORY.md 会非常长——AI 会经常 append 它,因此 AI 基本只能通过 grep 命令来搜索它。AI 告诉我说 HISTORY.md 似乎没有分区或压缩机制……再看吧,反正不会全文读。
关于绘画内容压缩:
- 会话文件内容过大时会被压缩
- 压缩后重要信息提取到 HISTORY.md 和 MEMORY.md
三、记忆系统实现
三层记忆架构
1
2
3
4
5
6
7
8
9
10
11• 长时记忆(MEMORY.md):结构化事实,始终加载
用户偏好、项目上下文、重要关系
使用 edit_file/write_file 即时更新
• 短时记忆(HISTORY.md):事件日志,不自动加载
按时间顺序记录事件:[YYYY-MM-DD HH:MM]
通过搜索工具查找历史信息
• 即时记忆(会话文件):完整对话,自动管理
达到阈值时触发压缩
提取重要信息到 HISTORY.md 和 MEMORY.md记忆更新时机
- 用户提供重要信息 → 立即写入 MEMORY.md
- 完成任务或事件 → 可选记录到 HISTORY.md
- 会话文件过大 → 自动压缩,提取关键信息
四、Skill 系统详解
Skill 是什么?
1
2
3
4• 扩展助手能力的模块
• 包含:说明文档、脚本(可选)、示例(可选)
• 位于 skills/目录下的子目录
• 每个 skill 必须有 SKILL.md 文件作为入口Skill 加载机制
1
2
3
4
5
6
7
8
9
10
11
12
13
14• nanobot 在后台自动跟踪 skills/目录
• 启动时扫描所有子目录
• 为每个 skill 生成 XML 格式的"索引"
• 将索引作为系统指令插入到上下文开头
• 并且在 skills 下目录有文件更新时更新这个索引
示例索引:
<skills>
<skill available="true">
<name>roll-dice</name>
<description>A simple dice rolling skill...</description>
<location>路径/SKILL.md</location>
</skill>
</skills>Skill 发现规则:自动发现,增加、更新、删除 skill 时会直接反映到系统指令上,但我似乎尝试出来问题,就是为没有 YAML 头的 SKILL.md 增加 YAML 头,它不反映。这时候重启一下 nanobot 会解决。
Skill 元信息:Skill 的元信息来自于 SKILL.md 中的 YAML frontmatter,倘若缺乏这个 YAML 头,description 就会和 name 一致,对 AI 来说缺乏技能的元信息供参考了。
1
2
3
4
5--
name: skill-name # 技能名称(英文)
description: 功能描述 # 一句话描述功能
metadata: {"nanobot": {"emoji": "🎯", "category": "..."}}
--
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 协议 ,转载请注明出处!