# 记忆
记忆由会话提交或显式提取生成,存储在用户记忆命名空间中,并可通过内容、文件系统和检索 API 使用。
## 内置记忆类型
| 分类 | 位置 | 说明 |
|------|------|------|
| profile | `user/memories/profile.md` | 用户个人信息 |
| preferences | `user/memories/preferences/` | 按主题分类的用户偏好 |
| entities | `user/memories/entities/` | 重要实体(人物、项目等) |
| events | `user/memories/events/` | 重要事件 |
| identity | `user/memories/identity.md` | 助手身份与自我介绍 |
| soul | `user/memories/soul.md` | 助手原则、边界、风格和连续性 |
| cases | `user/memories/cases/` | 可训练、可评估的任务案例 |
| trajectories | `user/memories/trajectories/` | 可复用的操作契约 |
| experiences | `user/memories/experiences/` | 可复用的执行经验 |
| tools | `user/memories/tools/` | 工具使用经验与最佳实践 |
| skills | `user/memories/skills/` | 技能执行经验与工作流策略 |
以上是当前启用的内置类型;部署可以通过自定义记忆模板扩展或覆盖。
---
## API 参考
### recall()
> **已弃用**:`/api/v1/search/recall` 现在只是 [`/api/v1/search/search` 的 `mode="context"`](06-retrieval.md#searchmodecontext) 之上的轻量预设,自身不再包含独立的组装逻辑。新接入请直接使用 context 面;v1 字段别名仅在本端点保留,将在下一个 minor 版本移除。响应会带上 `Deprecation: true` 头。
按记忆类型分别检索,并在预算内组合成可直接注入 Agent 上下文的记忆块。相对 context 面,`/recall` 会叠加 `purpose="coding"`、兼容 v1 的 `score_threshold=0.1`、带 `session_id` 时 `dedup_turns=5`、`query_expansion="auto"`。Coding Agent 插件会显式发送 `score_threshold=0.35`;公共 `/recall` 默认值仍为 `0.1`,避免相同请求在升级后静默减少结果。省略 `quotas` 时沿用 v1 的分桶默认值(`events=10, entities=10, preferences=3, experiences=0`);显式传 `"quotas": null` 才改用 `purpose` 预设配比。
**v1 字段折叠**
| v1 字段 | 折叠为 | 说明 |
|---------|--------|------|
| `max_chars` | `max_tokens = max_chars / 4` | `6500` → `1625`;显式传 `max_tokens` 时以后者为准 |
| `min_score` | `score_threshold` | 都未提供时取兼容 v1 的默认值 `0.1` |
| `render: true` | 不钉档位 | 默认行为:各类别取自己的默认档 |
| `render: false` | 只返回 `entries`,`rendered` 为空 | |
| `render: "compact"` | `detail="abstract"` | 原型期的紧凑模式;把所有类别钉在摘要档 |
| v1 `quotas` 键 | 叠加在 v1 分桶默认值之上 | 键名未变;只传一部分键时其余桶保留默认值 |
context 面的参数(`max_tokens`、`detail`、`dedup_turns`、`session_id`、`query_expansion`、`exclude_uris`、`purpose`、`rewrite`、`rewrite_max_bullets`)在本端点同样接受,便于插件在尚未升级的部署上平滑过渡。
**HTTP API**
```http
POST /api/v1/search/recall
Content-Type: application/json
```
```bash
curl -X POST http://localhost:1933/api/v1/search/recall \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENVIKING_API_KEY" \
-d '{
"query":"OpenViking API 文档偏好",
"quotas":{"events":5,"entities":5,"preferences":3,"experiences":2},
"max_chars":6500,
"peer_scope":"all"
}'
```
**MCP**
```text
recall(
query="OpenViking API 文档偏好",
quotas={"events": 5, "entities": 5, "preferences": 3, "experiences": 2},
max_chars=6500,
peer_scope="all"
)
```
**响应**
响应形状与 context 面一致(entries 扁平化、`rendered` 为扁平 XML):
```json
{
"status": "ok",
"result": {
"entries": [
{
"uri": "viking://user/default/memories/preferences/api-docs.md",
"category": "preferences",
"score": 0.82,
"detail": "full",
"text": "用户偏好在 API 文档中同时提供 HTTP、SDK 和 CLI 示例。",
"origin": "self"
}
],
"rendered": "\n用户偏好在 API 文档中同时提供 HTTP、SDK 和 CLI 示例。\n",
"digest": "",
"stats": {
"quotas": {"events": 5, "entities": 5, "preferences": 3, "experiences": 2},
"candidates": 4,
"returned": 1,
"dropped": 0,
"max_tokens": 1625,
"used_tokens": 96,
"tier_counts": {"full": 1},
"peer_scope": "all",
"origins": {"actor_peer": 0, "self": 1, "other_peer": 0},
"deprecated": {
"endpoint": "/api/v1/search/recall",
"successor": "/api/v1/search/search",
"successor_body": {"mode": "context"},
"aliases_used": ["max_chars"]
}
}
}
}
```
字段含义见 [检索 - search(mode="context")](06-retrieval.md#searchmodecontext)。相对 v1 的形状变化:`type` → `category`、`mode` → `detail`、`content`/`summary` → `text`,`rendered` 由三层嵌套改为扁平 `` 标签,`rank` 不再返回。
公共 Python、TypeScript、Go SDK 和 `ov` CLI 当前尚未封装该端点,因此本节只展示 HTTP Tab,并补充实际存在的 MCP 调用。
## 相关文档
- [会话](05-sessions.md) - commit 与 extract
- [检索](06-retrieval.md) - 搜索记忆
- [内容](12-content.md) - 读取记忆内容