API 接入
更新时间:2026-05-25
在 REST API 模式下,您可以在自己的流程中主动决定什么时候读记忆、什么时候写记忆,以及如何使用记忆结果。所有接口通过 HTTPS 调用,使用 HTTP Bearer Token 认证。
认证方式
在请求头中携带 API Key:
Plain Text
1Authorization: Bearer <your-api-key>
2Content-Type: application/json
文件上传接口使用 multipart/form-data。
核心接口
1. Bank 管理
| 方法 | 接口路径 | 用途 |
|---|---|---|
| GET | /banks |
列出当前 API Key 可访问的 Bank |
| POST | /banks |
创建或初始化 Bank,请求体为 { bank_id } |
2. Retain 存储记忆
| 方法 | 接口路径 | 用途 |
|---|---|---|
| POST | /memories/retain |
同步写入文本内容,适合小批量或需要立即得到结果的场景 |
| POST | /memories/retain_async |
异步写入文本内容,适合较大文本或批量数据,返回后台操作信息 |
| POST | /files/retain |
上传一个或多个文件并异步写入记忆,表单字段 files 为文件列表,request 为 JSON 字符串 |
Retain 请求字段
| 字段 | 类型 | 说明 |
|---|---|---|
bank_id |
string | 目标 Bank,也兼容 agent_id |
items |
array | 要写入的内容列表,每项至少包含 content |
items[].content |
string | 自然语言文本,建议保留完整上下文 |
items[].timestamp |
string | 事件发生时间,建议使用 ISO 8601 格式;传 "unset" 表示无时间信息 |
items[].context |
string | 内容来源或场景,如 support chat、code review、meeting notes |
items[].document_id |
string | 稳定文档 ID,便于更新而非重复写入 |
items[].update_mode |
string | 同名 document_id 的处理方式:replace(默认,删除旧内容后重新处理)或 append(追加新内容到已有文档) |
items[].tags |
string[] | 范围标签,用于后续检索和多租户隔离 |
items[].metadata |
object | 来源系统、外部 ID 等附加信息 |
items[].observation_scopes |
string | 观察聚合粒度:combined(默认,按全部标签聚合)、per_tag(按每个标签独立聚合)、all_combinations(按所有标签组合聚合)、custom(自定义标签组合) |
document_tags |
string[] | 应用到文档级别的标签 |
文件上传字段
| 字段 | 类型 | 说明 |
|---|---|---|
files |
file[] | 一个或多个上传文件,字段名必须是 files |
request |
string | JSON 字符串,至少包含 bank_id,可包含 document_id、tags、context 等信息 |
3. Recall 检索记忆
| 方法 | 接口路径 | 用途 |
|---|---|---|
| POST | /recall |
按自然语言查询检索相关记忆,适合 Agent 回复前注入上下文 |
Recall 请求字段
| 字段 | 类型 | 说明 |
|---|---|---|
bank_id |
string | 目标 Bank。未传时部分部署会使用 default,不建议依赖默认值 |
query |
string | 自然语言查询(必填,最多 500 tokens) |
budget |
string | 检索强度:low(快速查找)、mid(日常推荐)、high(深度检索),默认 mid |
max_tokens |
number | 限制返回上下文大小,默认 4096 |
types |
string[] | 按事实类型过滤:world(客观事实)、experience(经验事实)、observation(观察) |
tags |
string[] | 只检索匹配标签的记忆 |
tags_match |
string | 标签匹配方式:any(默认,含无标签)、any_strict(排除无标签)、all、all_strict |
query_timestamp |
string | 把查询锚定到指定时间点,ISO 8601 格式 |
include |
object | 可包含 entities(默认开启)、chunks(返回原始分块)、source_facts(返回观察的来源事实)等扩展信息 |
trace |
boolean | 返回检索追踪信息,便于调试 |
Recall 响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
results |
array | 按相关性排序的记忆列表,每项包含 id、text、type、context、tags、entities、occurred_start、occurred_end、mentioned_at、document_id 等 |
source_facts |
object | 仅当 include.source_facts 开启时返回,以事实 ID 为键的来源事实字典 |
chunks |
object | 仅当 include.chunks 开启时返回,以分块 ID 为键的原始文本字典 |
trace |
object | 仅当 trace: true 时返回,包含每阶段的耗时和检索细节 |
4. Reflect 智能推理
| 方法 | 接口路径 | 用途 |
|---|---|---|
| POST | /reflect |
基于记忆生成综合回答,适合总结、判断、画像和状态分析 |
Reflect 请求字段
| 字段 | 类型 | 说明 |
|---|---|---|
bank_id |
string | 目标 Bank |
query |
string | 需要推理回答的问题(必填) |
budget |
string | 推理搜索强度:low(默认,浅层快速)、mid(多源核查)、high(深度探索),默认 low |
max_tokens |
number | 限制回答长度,默认 4096 |
context |
string | 为推理提供情境信息,影响推理方向 |
response_schema |
object | JSON Schema 对象,传入后返回结构化输出(structured_output 字段),适用于程序化处理 |
include_facts |
boolean | 返回回答依据的事实(based_on 字段) |
include_tool_calls |
boolean | 返回内部检索步骤,便于调试 |
tags |
string[] | 限定 Reflect 可访问的记忆范围 |
tags_match |
string | 标签匹配方式,与 Recall 一致 |
fact_types |
string[] | 限制事实类型:world、experience、observation |
exclude_mental_models |
boolean | 跳过心智模型,强制从事实和观察推理 |
Reflect 响应字段
| 字段 | 类型 | 说明 |
|---|---|---|
text |
string | 综合回答文本(Markdown 格式);使用 response_schema 时为空 |
structured_output |
object | 仅当传入 response_schema 时返回,按 Schema 解析的结构化结果 |
based_on |
object | 仅当 include_facts: true 时返回,包含 memories、mental_models、directives 三个列表 |
usage |
object | 本次推理的 Token 用量:input_tokens、output_tokens、total_tokens |
trace |
object | 仅当 include_tool_calls: true 时返回,包含完整的推理步骤日志 |
5. 查询与管理数据
| 方法 | 接口路径 | 用途 |
|---|---|---|
| GET | /list?bank_id=... |
分页列出记忆,可按 type、q、limit、offset 过滤 |
| GET | /documents?bank_id=... |
列出导入文档 |
| GET | /entities?bank_id=... |
列出实体 |
| GET | /entities/graph?bank_id=... |
获取实体共现图 |
| GET | /operations/{bankId} |
查看异步任务,支持 status、type、limit、offset |
| DELETE | /operations/{bankId}?operation_id=... |
取消待处理任务 |
请求示例
Retain 存储文本记忆
Bash
1curl "$MEMORY_API_BASE_URL/memories/retain" \
2 -H "Authorization: Bearer $MEMORY_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bank_id": "'"$MEMORY_BANK_ID"'",
6 "items": [
7 {
8 "content": "用户偏好使用 TypeScript、React 和 Tailwind 构建前端页面。",
9 "context": "project onboarding",
10 "document_id": "onboarding-session-001",
11 "timestamp": "2026-05-12T10:00:00+08:00",
12 "tags": ["user:demo", "project:frontend"]
13 }
14 ]
15 }'
Retain 追加内容到已有文档
Bash
1curl "$MEMORY_API_BASE_URL/memories/retain" \
2 -H "Authorization: Bearer $MEMORY_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bank_id": "'"$MEMORY_BANK_ID"'",
6 "items": [
7 {
8 "content": "新增讨论:团队决定将状态管理从 Redux 迁移到 Zustand。",
9 "document_id": "onboarding-session-001",
10 "update_mode": "append",
11 "tags": ["user:demo", "project:frontend"]
12 }
13 ]
14 }'
Retain 上传文件写入记忆
Bash
1curl "$MEMORY_API_BASE_URL/files/retain" \
2 -H "Authorization: Bearer $MEMORY_API_KEY" \
3 -F 'request={
4 "bank_id":"'"$MEMORY_BANK_ID"'",
5 "document_id":"product-guide-001",
6 "tags":["project:docs"]
7 }' \
8 -F "files=@./product-guide.md;type=text/markdown"
Recall 检索相关记忆
Bash
1curl "$MEMORY_API_BASE_URL/recall" \
2 -H "Authorization: Bearer $MEMORY_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bank_id": "'"$MEMORY_BANK_ID"'",
6 "query": "这个用户偏好的前端技术栈是什么?",
7 "budget": "mid",
8 "tags": ["user:demo"],
9 "tags_match": "all_strict",
10 "max_tokens": 1200,
11 "trace": true
12 }'
Recall JavaScript 示例
Javascript
1const apiBaseUrl = process.env.MEMORY_API_BASE_URL;
2const memoryKey = process.env.MEMORY_API_KEY;
3const bankId = process.env.MEMORY_BANK_ID;
4
5async function recallUserContext(userMessage) {
6 const response = await fetch(`${apiBaseUrl}/recall`, {
7 method: "POST",
8 headers: {
9 "Authorization": `Bearer ${memoryKey}`,
10 "Content-Type": "application/json",
11 },
12 body: JSON.stringify({
13 bank_id: bankId,
14 query: userMessage,
15 budget: "mid",
16 tags: ["user:demo"],
17 tags_match: "all_strict",
18 }),
19 });
20
21 if (!response.ok) {
22 throw new Error(`Recall failed: ${response.status}`);
23 }
24
25 return response.json();
26}
Recall Python 示例
Python
1import os
2import requests
3
4api_base_url = os.environ["MEMORY_API_BASE_URL"]
5api_key = os.environ["MEMORY_API_KEY"]
6bank_id = os.environ["MEMORY_BANK_ID"]
7
8resp = requests.post(
9 f"{api_base_url}/recall",
10 headers={
11 "Authorization": f"Bearer {api_key}",
12 "Content-Type": "application/json",
13 },
14 json={
15 "bank_id": bank_id,
16 "query": "这个用户最近在做什么项目?",
17 "budget": "mid",
18 "tags": ["user:demo"],
19 "tags_match": "all_strict",
20 },
21 timeout=30,
22)
23
24resp.raise_for_status()
25print(resp.json())
Reflect 智能推理
Bash
1curl "$MEMORY_API_BASE_URL/reflect" \
2 -H "Authorization: Bearer $MEMORY_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bank_id": "'"$MEMORY_BANK_ID"'",
6 "query": "请总结这个用户的工程偏好,并给出接下来生成代码时应遵循的建议。",
7 "budget": "mid",
8 "include_facts": true,
9 "tags": ["user:demo"],
10 "tags_match": "all_strict"
11 }'
Reflect 结构化输出
Bash
1curl "$MEMORY_API_BASE_URL/reflect" \
2 -H "Authorization: Bearer $MEMORY_API_KEY" \
3 -H "Content-Type: application/json" \
4 -d '{
5 "bank_id": "'"$MEMORY_BANK_ID"'",
6 "query": "这个用户适合使用什么前端框架?",
7 "budget": "low",
8 "response_schema": {
9 "type": "object",
10 "properties": {
11 "recommendation": {"type": "string"},
12 "confidence": {"type": "string", "enum": ["low", "medium", "high"]},
13 "reasons": {"type": "array", "items": {"type": "string"}}
14 },
15 "required": ["recommendation", "confidence", "reasons"]
16 }
17 }'
评价此篇文章
