# Amemo Save Memo

> Amemo Save Memo

- Skill: `leoyeai-openclaw-master-skills/amemo-save-memo` (Agent Skill)
- Install (CLI): `npx skillmds@latest add leoyeai-openclaw-master-skills/amemo-save-memo`
- Raw SKILL.md: https://api.skillmd.com/api/skills/leoyeai-openclaw-master-skills/amemo-save-memo/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: LeoYeAI (https://skillmd.com/u/leoyeai-openclaw-master-skills)
- Updated: 2026-09-10
- Page: https://skillmd.com/skills/leoyeai-openclaw-master-skills/amemo-save-memo

---


# amemo-save-memo — 保存备忘录

---

## 接口信息

| 属性 | 值 |
|:-----|:---|
| **路由** | `POST https://skill.amemo.cn/save-memo` |
| **Bean** | `MemoBean` |
| **Content-Type** | `application/json` |

---

## 请求参数

> ⚠️ 服务端要求所有字段必须存在。`userToken`、`memoTitle`、`memoContent` 必填且有值，`memoId` 可选但字段必须存在。

| 参数 | 类型 | 必填 | 说明 |
|:-----|:----:|:----:|:-----|
| `userToken` | str | ✅ | 用户登录凭证 |
| `memoId` | str | — | 备忘录 ID（新建传 `null`，更新时传入已有 ID） |
| `memoTitle` | str | ✅ | 备忘录标题（不能为空） |
| `memoContent` | str | ✅ | 备忘录内容（不能为空） |

---

## 请求示例

```bash
# 新建备忘录
curl -X POST https://skill.amemo.cn/save-memo \
  -H "Content-Type: application/json" \
  -d '{
    "userToken": "<token>",
    "memoId": null,
    "memoTitle": "开会记录",
    "memoContent": "讨论了Q2计划"
  }'

# 更新备忘录（传入已有 memoId）
curl -X POST https://skill.amemo.cn/save-memo \
  -H "Content-Type: application/json" \
  -d '{
    "userToken": "<token>",
    "memoId": "123456",
    "memoTitle": "开会记录",
    "memoContent": "更新了内容"
  }'
```

---

## 响应示例

```json
{
  "code": 200,
  "desc": "success",
  "data": {
    "memoId": "abc123"
  }
}
```

## 响应解析

| 字段 | 类型 | 说明 |
|:-----|:----:|:-----|
| `code` | int | 状态码，200 表示成功 |
| `desc` | str | 状态描述 |
| `data.memoId` | str | 保存成功后返回的备忘录 ID，**必须提取并保存到当前对话上下文 `lastMemoId`，用于后续更新操作** |

---

## 注意事项

> 📌 **字段要求**：所有字段必须存在，即使不传值也要传 `null`
>
> 📝 **新建 vs 更新**：新建时 `memoId` 传 `null`，更新时传入已有 memoId
>
> 🔐 **认证要求**：必须携带有效的 userToken

---

## 执行流程（由主模块调度）

### 内容提取规则

**触发词去除规则：** 从用户消息中移除"帮我记一下/保存笔记/记下这一条/记录笔记/保存备忘"等触发词，保留核心内容。

| 用户输入 | userContent |
|:---------|:------------|
| `"帮我记一下这家火锅店味道很不错"` | `"这家火锅店味道很不错"` |
| `"保存笔记：今天开会讨论了Q2计划"` | `"今天开会讨论了Q2计划"` |

> **说明：**
> - `userContent`：用户上一条消息去除触发词后的核心内容
> - `aiContent`：AI 助手上一条回复（完整保留）
> - 如果去除触发词后内容为空，则使用完整的用户消息作为 userContent

---

### 新建 vs 更新模式判断

**判断逻辑：**

```
1. 当前对话上下文中是否存在 lastMemoId？
   ├── 不存在 → 【新建模式】，跳到步骤 5
   └── 存在 → 进入意图指向判断

2. 意图指向判断（当 lastMemoId 存在时）：
   • 用户当前消息是否对刚才保存的内容提出改动要求
   • 当前消息内容是否与 lastMemoTitle 主题相关
   └── 判断结果：
       ├── 指向刚才的笔记 → 【更新模式】，携带 lastMemoId
       └── 是全新内容 → 【新建模式】，清除 lastMemoId
```

---

### 意图指向判断规则

#### 更新类信号词（指向刚才的笔记，将修改后的内容替换原文）

| 信号词 | 示例 |
|:-------|:-----|
| 补充 | `"补充一下刚才的笔记"` |
| 加上 | `"再加上XXX"` |
| 修改 | `"修改为XXX"` |
| 更新 | `"更新一下笔记"` |
| 还有 | `"还有一点要补充"` |
| 另外 | `"另外还需要记录"` |
| 补充说明 | `"补充说明一下"` |
| 遗漏 | `"刚才漏了一条"` |
| 忘了 | `"忘了说XXX"` |
| 换成 | `"把XXX换成YYY"` |
| 改成 | `"改成XXX"` |

#### 新建类信号（创建新笔记）

| 信号词 | 示例 |
|:-------|:-----|
| 新笔记 | `"保存一条新笔记"` |
| 另一个 | `"再记一个XXX"` |
| 主题明显不同 | 上一个是"旅行攻略"，现在说"做饭" |

#### 模糊场景处理

当无法明确判断时：
- 用户消息与 `lastMemoTitle` 主题明显不同 → 新建
- 用户消息与 `lastMemoTitle` 主题相关，且包含更新信号 → 更新
- 用户消息主题相关但无明确信号 → 询问用户确认

```
🤔 您是想：
• 更新刚才的笔记「{lastMemoTitle}」
• 还是保存为一条新笔记？
```

---

### 笔记内容整理

| 模式 | memoContent 格式 |
|:-----|:----------------|
| 新建模式 | `"{userContent}\n\n【AI】\n{aiContent}"` |
| 更新模式 | `"{修改后的完整内容}"` |

> 更新模式：将用户改动后的完整对话内容作为新内容，直接替换原始笔记内容

---

### 标题生成规则

1. 提取用户消息中最核心的名词/动词
2. 限制在 20 字以内
3. 去除：助词、语气词、疑问词
4. 更新模式下保留 `lastMemoTitle`

| 用户输入 | 生成标题 |
|:---------|:---------|
| `"感冒了应该吃什么药"` | `"感冒用药建议"` |
| `"帮我记一下今天开会的内容"` | `"今日开会记录"` |
| `"红烧肉怎么做才好吃"` | `"红烧肉做法"` |

---

### 执行步骤汇总

```
1. 识别触发词（保存笔记/记下/记录）
    ↓
2. 检查 userToken 是否存在
    ├── 无 token → 引导登录流程
    ↓
3. 提取对话内容（userContent + aiContent）
    ↓
4. 判断新建还是更新
    ├── 新建模式：memoId = null
    └── 更新模式：memoId = lastMemoId
    ↓
5. 整理笔记内容
    ↓
6. 生成 memoTitle
    ↓
7. 调用 POST /save-memo 接口
    ↓
8. 保存返回的 memoId 到当前对话上下文（lastMemoId）
    ↓
9. 返回结果
```

---

## 回复模板

### 新建成功

```
✅ 已保存笔记：「{memoTitle}」
```

### 更新成功

```
✅ 已更新笔记：「{memoTitle}」（内容已替换）
```

### 失败

```
❌ 保存失败，请重试
```

---

## 对话上下文维护

### 需维护的状态（当前对话期间有效）

| 字段 | 说明 |
|:-----|:-----|
| `lastMemoId` | 最近一次保存的笔记 ID |
| `lastMemoTitle` | 最近一次保存的笔记标题 |
| `lastTaskId` | 最近一次保存的任务 ID |

### 追踪时机

- 每次调用 `amemo-save-memo` 成功后，提取 memoId 并更新 `lastMemoId`
- 用户切换到完全不同的话题时，自动清除 `lastMemoId` 和 `lastTaskId`

