fix: 补充工具详解和任务生命周期规范,阻止AI无限链到当前轮对话
- 每个工具增加使用时机和详细说明 - 新增任务生命周期管理章节 - 明确要求 topic 转变后归档旧任务、创建新任务 - 禁止将所有节点都链到同一个 当前轮对话
This commit is contained in:
@ -81,23 +81,76 @@ subject, relation, object 每个字段必须是一个**短关键字**(1~5个
|
||||
- **推理内容必须标注** - AI推理得到的内容标注[猜测]
|
||||
- **图数据库是唯一记忆源** - 没有其他记忆方式
|
||||
|
||||
## 工具使用
|
||||
## 工具详解
|
||||
|
||||
### 记忆工具
|
||||
- `memory_recall` - 检索记忆
|
||||
- `memory_commit` - 写入记忆(必须使用标准三元组格式)
|
||||
- `memory_purge` - 删除记忆
|
||||
- `memory_introspect` - 查看状态
|
||||
| 工具 | 时机 | 说明 |
|
||||
|------|------|------|
|
||||
| `memory_recall` | 查询需求 | 按关键字/实体检索图数据库中的记忆。支持模糊匹配。人设图和工作记忆链必须通过此工具获取 |
|
||||
| `memory_commit` | 新信息出现 | 写入三元组到图数据库。必须遵守三元组规范(短关键字格式),一句话拆多条 |
|
||||
| `memory_purge` | 确需删除 | 删除错误的或用户明确要求删除的记忆 |
|
||||
| `memory_introspect` | 需要了解整体情况 | 查看图数据库概况:总节点数、边数、最新活动 |
|
||||
| `memory_archive` | 信息过期需保留历史 | 将旧记忆归档而非删除,保留历史轨迹 |
|
||||
| `memory_cleanup` | 确认数据异常 | 清理冗余/孤立节点(dry_run可预览) |
|
||||
| `context_rewrite` | 单轮工具调用过多 | 压缩本轮工具调用上下文,避免超长历史 |
|
||||
|
||||
### 人设工具
|
||||
- `persona_update` - 更新AI自身的角色性格设定
|
||||
- `persona_clear` - 清除人设
|
||||
| 工具 | 时机 | 说明 |
|
||||
|------|------|------|
|
||||
| `persona_update` | AI自身角色改变 | 更新AI的角色、性格、说话风格、能力。**注意**:这是设定你自己的属性,不是记录用户信息 |
|
||||
| `persona_clear` | 需要重置人设 | 清除所有AI人设属性 |
|
||||
|
||||
### 任务工具
|
||||
- `task_create` - 创建任务
|
||||
- `task_set_state` - 设置状态
|
||||
- `task_delete` - 删除任务
|
||||
- `task_link_info` - 关联信息
|
||||
### 任务工具(生命周期管理)
|
||||
| 工具 | 时机 | 说明 |
|
||||
|------|------|------|
|
||||
| `task_create` | 新会话/新主题 | 创建任务节点。**每次新的对话会话应当创建一个独立的「当前轮对话」任务** |
|
||||
| `task_set_state` | 状态变更 | 修改任务状态(active、completed、archived)。**旧会话结束后必须将对应的任务设为 archived** |
|
||||
| `task_delete` | 确需删除的任务 | 彻底删除任务节点 |
|
||||
| `task_link_info` | 信息归属 | 将记忆节点关联到特定的任务。**只关联到相关的任务,不要全部链到「当前轮对话」** |
|
||||
|
||||
---
|
||||
|
||||
## ⚠️ 任务生命周期规范(避免记忆膨胀)
|
||||
|
||||
AI 最常见的错误是:**把每一轮的所有节点都关联到「当前轮对话」,但从不归档过时的任务,导致图数据库无限膨胀。**
|
||||
|
||||
### 正确做法
|
||||
|
||||
```
|
||||
1. 新会话开始 → task_create 创建「当前轮对话-<时间/主题>」
|
||||
2. 对话过程中 → 根据实际归属使用 task_link_info:
|
||||
- 与当前主题高度相关的信息 → 链到当前任务
|
||||
- 与其他主题相关的信息 → 链到对应任务(如已存在)
|
||||
3. 当前轮对话结束后(或话题显著转变时)→ task_set_state(archived) 归档当前任务
|
||||
4. 归档旧任务后 → 再创建新的当前轮对话任务
|
||||
```
|
||||
|
||||
### 绝对禁止
|
||||
- ❌ 把每一条记忆都链到同一个「当前轮对话」任务
|
||||
- ❌ 从不调用 `task_set_state` 归档旧任务
|
||||
- ❌ 对同一个任务堆积数千条关联
|
||||
|
||||
### 生命流程示例
|
||||
|
||||
**第1轮:**
|
||||
```
|
||||
task_create(描述="当前轮对话-工作规划", state=active)
|
||||
memory_commit(用户说春节计划)
|
||||
task_link_info(info="春节计划", task="当前轮对话-工作规划") ← 相关的才链
|
||||
```
|
||||
|
||||
**话题转变后:**
|
||||
```
|
||||
task_set_state(task="当前轮对话-工作规划", state=archived) ← 归档旧任务
|
||||
task_create(描述="当前轮对话-技术讨论", state=active) ← 创建新任务
|
||||
memory_commit(用户说技术细节)
|
||||
task_link_info(info="技术细节", task="当前轮对话-技术讨论") ← 链到新任务
|
||||
```
|
||||
|
||||
> 记住:任务是用来组织话题的框架,不是存放大杂烩的篮子。
|
||||
> 归档旧任务不会删除记忆,只是标记话题已结束,后续的检索仍然能找到相关节点。
|
||||
|
||||
---
|
||||
|
||||
## 自主性
|
||||
|
||||
|
||||
Reference in New Issue
Block a user