Memorax API 开发者文档
文档版本 0.1.0 · 发布日期 2026-11-06
通过 Add 保存用户消息,通过 Search 检索相关记忆,为应用提供持续的用户上下文。
快速开始
准备接入配置
准备具有 read 和 write 权限的 API Key,并使用官方 API 根地址 https://platform.memoraxai.com。
export MEMORAX_BASE_URL='https://platform.memoraxai.com'
export MEMORAX_API_KEY='YOUR_API_KEY'
示例可选择 cURL、Python 或 JavaScript。Python 使用 requests(pip install requests),JavaScript 使用 Node.js 18+ 并保存为 .mjs 文件。
添加记忆
POST /v1/memories/add
将开发约束写入代码记忆。提供 content_type=code、session_id 和 metadata.source=memorax-code。任务 ID 由服务端自动生成,无需传入;保存响应中的 data.task_id 以查询写入状态。
cURL
# metadata.source:当前代码场景必填,必须为 memorax-code;即将取消此必填要求。
# content_type:混合场景选 auto,办公类场景选 work。
curl --request POST "$MEMORAX_BASE_URL/v1/memories/add" \
--header "Authorization: Token $MEMORAX_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"user_id": "quickstart-user",
"async_mode": true,
"content_type": "code",
"mode": "default",
"session_id": "cedar-coding-session",
"metadata": {
"source": "memorax-code"
},
"messages": [
{
"role": "user",
"content": "Cedar 项目的回调模块已确定以下约束:自动投递总次数最多 3 次;重试复用同一个 event_id;使用唯一约束避免重复产生业务效果。",
"timestamp": -1
}
]
}'
Python
import os
import requests
base = os.environ["MEMORAX_BASE_URL"].rstrip("/")
headers = {"Authorization": "Token " + os.environ["MEMORAX_API_KEY"]}
payload = {'user_id': 'quickstart-user',
'async_mode': True,
'content_type': 'code', # content_type:混合场景选 auto,办公类场景选 work。
'mode': 'default',
'session_id': 'cedar-coding-session',
'metadata': {'source': 'memorax-code'}, # metadata.source:当前代码场景必填,必须为 memorax-code;即将取消此必填要求。
'messages': [{'role': 'user',
'content': 'Cedar 项目的回调模块已确定以下约束:自动投递总次数最多 3 次;重试复用同一个 '
'event_id;使用唯一约束避免重复产生业务效果。',
'timestamp': -1}]}
response = requests.post(base + "/v1/memories/add", headers=headers, json=payload, timeout=120)
response.raise_for_status()
print(response.json())
JavaScript
const base = process.env.MEMORAX_BASE_URL.replace(/\/$/, "");
const headers = { Authorization: `Token ${process.env.MEMORAX_API_KEY}` };
const payload = {
"user_id": "quickstart-user",
"async_mode": true,
"content_type": "code", // content_type:混合场景选 auto,办公类场景选 work。
"mode": "default",
"session_id": "cedar-coding-session",
"metadata": {
"source": "memorax-code" // metadata.source:当前代码场景必填,必须为 memorax-code;即将取消此必填要求。
},
"messages": [
{
"role": "user",
"content": "Cedar 项目的回调模块已确定以下约束:自动投递总次数最多 3 次;重试复用同一个 event_id;使用唯一约束避免重复产生业务效果。",
"timestamp": -1
}
]
};
const response = await fetch(`${base}/v1/memories/add`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify(payload),
signal: AbortSignal.timeout(120000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
响应示例 · HTTP 202
{
"success": true,
"data": {
"task_id": "22222222-2222-4222-8222-222222222222",
"status": "accepted",
"data": null,
"balances": []
},
"meta": {
"request_id": "request-demo",
"timestamp": "2026-11-06T00:00:00Z"
}
}
status=accepted 表示写入任务已受理,下一步查询该任务的处理结果。
查询写入状态
GET /v1/memories/add/status/{task_id}
将示例中的 TASK_ID 替换为上一步返回的 data.task_id,执行一次状态查询。
cURL
curl --request GET "$MEMORAX_BASE_URL/v1/memories/add/status/TASK_ID" \
--header "Authorization: Token $MEMORAX_API_KEY"
Python
import os
import requests
base = os.environ["MEMORAX_BASE_URL"].rstrip("/")
headers = {"Authorization": "Token " + os.environ["MEMORAX_API_KEY"]}
task_id = "TASK_ID" # 替换为 Add 返回的 data.task_id
response = requests.get(base + "/v1/memories/add/status/" + task_id, headers=headers, timeout=30)
response.raise_for_status()
print(response.json())
JavaScript
const base = process.env.MEMORAX_BASE_URL.replace(/\/$/, "");
const headers = { Authorization: `Token ${process.env.MEMORAX_API_KEY}` };
const taskId = "TASK_ID"; // 替换为 Add 返回的 data.task_id
const response = await fetch(`${base}/v1/memories/add/status/${encodeURIComponent(taskId)}`, {
headers,
signal: AbortSignal.timeout(30000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
响应示例 · HTTP 200
{
"task_id": "22222222-2222-4222-8222-222222222222",
"status": "success",
"phase": "done",
"memory": {
"total": 1
},
"error": null
}
| status | 含义 | 下一步 |
|---|---|---|
| processing | 正在处理 | 稍后手动再次查询。 |
| success | 写入成功 | 执行 Search。 |
| failed | 写入失败 | 查看 error,保留 task_id 排查。 |
检索记忆
POST /v1/memories/search
确认任务 success 后,使用与 Add 相同的 user_id,查询开发约束。
cURL
curl --request POST "$MEMORAX_BASE_URL/v1/memories/search" \
--header "Authorization: Token $MEMORAX_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"user_id": "quickstart-user",
"query": "实现 Cedar 回调模块时,重试次数和幂等处理需要遵守哪些约束?",
"mode": "fast",
"output_mode": "summary",
"top_k": 5
}'
Python
import os
import requests
base = os.environ["MEMORAX_BASE_URL"].rstrip("/")
headers = {"Authorization": "Token " + os.environ["MEMORAX_API_KEY"]}
payload = {'user_id': 'quickstart-user',
'query': '实现 Cedar 回调模块时,重试次数和幂等处理需要遵守哪些约束?',
'mode': 'fast',
'output_mode': 'summary',
'top_k': 5}
response = requests.post(base + "/v1/memories/search", headers=headers, json=payload, timeout=120)
response.raise_for_status()
print(response.json())
JavaScript
const base = process.env.MEMORAX_BASE_URL.replace(/\/$/, "");
const headers = { Authorization: `Token ${process.env.MEMORAX_API_KEY}` };
const payload = {
"user_id": "quickstart-user",
"query": "实现 Cedar 回调模块时,重试次数和幂等处理需要遵守哪些约束?",
"mode": "fast",
"output_mode": "summary",
"top_k": 5
};
const response = await fetch(`${base}/v1/memories/search`, {
method: "POST",
headers: { ...headers, "Content-Type": "application/json" },
body: JSON.stringify(payload),
signal: AbortSignal.timeout(120000),
});
if (!response.ok) throw new Error(`HTTP ${response.status}`);
console.log(await response.json());
响应示例 · HTTP 200
{
"success": true,
"data": {
"task_id": "33333333-3333-4333-8333-333333333333",
"status": "completed",
"data": [
{
"id": "memory-demo",
"memory": "Cedar 回调自动投递总次数最多 3 次,重试复用 event_id,并通过唯一约束保证幂等。",
"content_type": "code",
"user_id": "quickstart-user",
"created_at": "2026-11-06T00:00:00Z",
"updated_at": "2026-11-06T00:00:00Z"
}
],
"balances": []
},
"meta": {
"request_id": "request-demo",
"timestamp": "2026-11-06T00:00:00Z"
}
}
读取 data.data 中各项的 memory,即可将检索到的开发约束加入 Coding Agent 的上下文。空结果时检查 user_id、任务完成状态和查询条件。
以上响应为结构示例,任务 ID 和记忆内容以实际服务响应为准。详细字段见 Add 请求体、异步任务状态 和 Search 请求体。
地址与鉴权
MEMORAX_BASE_URL 使用官方地址 https://platform.memoraxai.com/,配置时不含末尾斜杠或 /v1。API Key 决定账户、项目与权限。user_id 可由调用方自定义,用于指定项目内的记忆主体;Add 与 Search 应使用相同的值。
export MEMORAX_BASE_URL='https://platform.memoraxai.com'
export MEMORAX_API_KEY='YOUR_API_KEY'
Authorization: Token YOUR_API_KEY
Content-Type: application/json
鉴权格式为 Authorization: Token YOUR_API_KEY。API Key 应保存在环境变量或服务端配置中。
请求和响应中的示例值均为合成数据。调用前替换示例密钥与业务数据。Add 需要 write 权限,Search 与任务状态查询需要 read 权限。
Add
POST /v1/memories/add
提交对话、代码内容或文档,生成用户可检索的记忆。默认异步返回任务 ID。请求体使用 application/json。
Add 调用示例
以下示例演示回调规则的写入与检索。Python 使用 requests,JavaScript 使用 Node.js 18+。
cURL
curl --request POST "$MEMORAX_BASE_URL/v1/memories/add" \
--header "Authorization: Token $MEMORAX_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"user_id": "demo-user",
"async_mode": true,
"messages": [
{
"role": "user",
"content": "Cedar 回调最多重试三次。",
"timestamp": -1
},
{
"role": "assistant",
"content": "已确认,会按此约束实现。",
"timestamp": -1
}
]
}'
Python
import os
import requests
base = os.environ["MEMORAX_BASE_URL"].rstrip("/")
payload = {
"user_id": "demo-user",
"async_mode": True,
"messages": [
{"role": "user", "content": "Cedar 回调最多重试三次。", "timestamp": -1},
{"role": "assistant", "content": "已确认,会按此约束实现。", "timestamp": -1},
],
}
response = requests.post(
base + "/v1/memories/add",
headers={"Authorization": "Token " + os.environ["MEMORAX_API_KEY"]},
json=payload,
timeout=120,
)
response.raise_for_status()
print(response.json())
JavaScript
// Node.js 18+,保存为 .mjs 后执行;密钥不应放在公开网页中。
const base = process.env.MEMORAX_BASE_URL.replace(/\/$/, "");
const payload = {
"user_id": "demo-user",
"async_mode": true,
"messages": [
{
"role": "user",
"content": "Cedar 回调最多重试三次。",
"timestamp": -1
},
{
"role": "assistant",
"content": "已确认,会按此约束实现。",
"timestamp": -1
}
]
};
const response = await fetch(`${base}/v1/memories/add`, {
method: "POST",
headers: {
Authorization: `Token ${process.env.MEMORAX_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
signal: AbortSignal.timeout(120000),
});
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`);
console.log(await response.json());
查看请求 JSON
{
"user_id": "demo-user",
"async_mode": true,
"messages": [
{
"role": "user",
"content": "Cedar 回调最多重试三次。",
"timestamp": -1
},
{
"role": "assistant",
"content": "已确认,会按此约束实现。",
"timestamp": -1
}
]
}
响应示例 · HTTP 202,任务已受理
以下为响应结构示例。
{
"success": true,
"data": {"task_id": "22222222-2222-4222-8222-222222222222", "status": "accepted", "data": null, "balances": []},
"meta": {"request_id": "request-demo", "timestamp": "2026-11-03T00:00:00Z"}
}
task_id 由服务端自动生成,无需在 Add 请求中传入。保存响应中的 data.task_id,查询任务 status=success 后再执行 Search。
Add 请求体
application/json。点击复合字段下的“展示属性”查看子字段。数组展开的是单个元素的结构。
user_id
string · 必填 · 至少 1 个字符
user_id 可由调用方自定义,用于指定这批记忆归属于哪个用户。建议使用业务系统内稳定的用户 ID,例如 demo-user。后续 Search 使用相同的值。账户与项目权限由 API Key 确定。
messages
Message[] · 普通消息写入时必填 · 模型默认 []
待处理的消息,按对话顺序排列。可以提交一条用户消息,也可以提交用户与助手的多轮对话。每项含 role、content 和 timestamp。具体结构可在下方展开。普通消息写入必须至少一项。
展示属性
字段值示例 · add.messages
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
[
{
"role": "user",
"content": "回调失败后最多重试 3 次。",
"timestamp": -1
}
]
role
string · 必填 · user / assistant
消息由用户还是助手发出。不接受 system/tool。
content
string / object[] · 必填
实际消息正文。纯文本须包含非空白字符。部件数组至少一项。下面展开文本、图片和文件部件。
展示属性
字段值示例 · add.messages[].content
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
[
{
"type": "input_text",
"text": "回调失败后最多重试 3 次。"
}
]
text / input_text · 文本部件
字段值示例 · add.messages[].content.text
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"type": "input_text",
"text": "回调失败后最多重试 3 次。"
}
type
string · 必填
使用 text。公开入口也接受 input_text 并归一化为 text。
text
string · 必填
实际文本,须包含非空白字符。
input_image · 视觉图片
图片 Base64 示例 · add.messages[].content.input_image
使用 image_url 传入带 MIME 类型前缀的 Base64 Data URL。下例为一张 1×1 像素的 PNG 图片,仅展示编码格式;使用时替换为实际图片的编码,并调整 caption。仅支持 Base64 Data URL,不支持 HTTP(S) 图片地址。
{
"type": "input_image",
"image_url": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAIAAACQd1PeAAAADElEQVR4nGP4//8/AAX+Av4N70a4AAAAAElFTkSuQmCC",
"detail": "auto",
"caption": "示例像素图片"
}
type
string · 必填
固定为 input_image。
image_url
string · 必填
仅接受带 MIME 类型前缀的 PNG/JPEG/WebP/GIF Base64 Data URL,例如 data:image/png;base64,...。字段名仍为 image_url,但不支持 HTTP(S) 图片地址;请勿传入不带 Data URL 前缀的纯 Base64 字符串。
detail
string · 可选 · 默认 auto
auto / low / high / original,传给视觉处理的细节提示,效果依模型能力。
caption
string · 可选 · 最多 4,000 字符
调用方提供的非空白图片描述。提供后跳过视觉描述生成。
file · 文件
上传新文件示例 · add.messages[].content.file
使用 file_data 传入带 MIME 类型前缀的 Base64 Data URL,并用 filename 提供带扩展名的文件名。下例编码对应文本 Retry up to 3 times.(末尾含换行)。请替换为实际文件的编码和文件名;本次上传不传 file_id。
{
"type": "file",
"file": {
"file_data": "data:text/plain;base64,UmV0cnkgdXAgdG8gMyB0aW1lcy4K",
"filename": "retry-rules.txt"
}
}
type
string · 必填
固定为 file。
file
object · 必填
提供已有文件引用或新文件数据。
展示属性
上传新文件示例 · add.messages[].content.file
使用 file_data 传入带 MIME 类型前缀的 Base64 Data URL,并用 filename 提供带扩展名的文件名。下例编码对应文本 Retry up to 3 times.(末尾含换行)。请替换为实际文件的编码和文件名;本次上传不传 file_id。
{
"file_data": "data:text/plain;base64,UmV0cnkgdXAgdG8gMyB0aW1lcy4K",
"filename": "retry-rules.txt"
}
file_id
UUID string · 与 file_data 二选一
引用已有文件。必须属于当前项目与 user_id。
file_data
string · 与 file_id 二选一
新文件 Base64 数据,可带 Data URL 前缀。提供此字段时必须给 filename。
filename
string · 新文件必填
包含扩展名的文件名,不含目录及控制字符,最多 255 字符。实际类型还受服务支持范围限制。
提交文件后,保存 Add 受理响应中的 data.task_id,使用 GET /v1/memories/add/status/{task_id} 查询处理状态。后续步骤见异步任务状态。
timestamp
integer · 必填
该消息发生的 13 位 Unix 毫秒时间,或 -1 表示未提供。每条消息均须包含该字段。
sender_id
string / null · 可选
发送者标识,补充 role。文件部件入口不支持此字段。
普通消息每条默认最多 12,000 字符。code/default 默认 128,000,以部署配置为准。图片、文件有独立限制,见本接口的附件说明。
async_mode
boolean · 可选 · 默认 true
控制调用方是否等待写入处理完成。true 返回 HTTP 202 和任务 ID,随后通过状态接口确认任务结果。false 在请求内等待处理,成功返回 HTTP 200。生产环境只允许 true。同步方式仅供允许它的非生产环境使用。
mode
string · 可选 · 默认 default
选择输入的处理方式。
| 值 | 作用 | 适用条件 |
|---|---|---|
default |
从输入中抽取并组织记忆。 | 普通对话、代码输入以及文档入口的默认方式。 |
raw |
按原始内容写入记忆。 | 适用于原始文本写入。 |
pre_summarized |
接收已经整理好的代码摘要。 | 仅 content_type=code。仍需代码会话与来源字段。 |
content_type
string · 可选 · 默认 auto · 枚举 code / work / auto / document
标明输入属于哪类内容,从而选择对应校验与处理流程。编码对话使用 code,当前还需 session_id 与 metadata.source="memorax-code"。metadata.source 的必填要求计划近期取消,取消前仍需传入。文档通过受支持的 Responses 风格文件内容部件传入,由入口确定类型。文档写入须同时提供相应文档内容。
work:用于工作效率类场景。
auto:用于场景混合或不确定具体场景的输入,由服务端自动判断内容类型。
memory_output_language
string · 可选 · 默认 zh · 枚举 zh / en
指定生成记忆的语言,zh 为中文,en 为英文。
agent_id
string / null · 可选 · 默认 null · 最多 255 字符
记录消息来自哪个 Agent,例如 coding-assistant。需要按 Agent 隔离检索结果时,在 Search 的 filters 中对同一值使用 eq。不填表示不指定这个来源标识。
app_id
string / null · 可选 · 默认 null · 最多 255 字符
记录产生消息的应用,例如 desktop-client。同一用户可能使用多个应用。调用方可以通过 Search 的 filters.app_id 条件限定其中一个应用的记忆。
session_id
string / null · 可选。代码写入必填 · 默认 null · 最多 255 字符
关联一次对话或编码会话。同一会话的多批写入应使用同一个 ID,之后可通过 Search 过滤该会话。同一会话可关联多次 Add。
metadata
object / null · 可选 · 默认 null
附带来源等扩展元数据。当前代码场景必须包含 {"source":"memorax-code"}。metadata.source 的必填要求计划近期取消,取消前仍需传入。其他业务属性应按部署约定使用。Search 可使用的过滤字段见 filters 的属性说明。
展示属性
字段值示例 · add.metadata
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"source": "memorax-code"
}
source
string · code 写入必填
当前代码场景必填,值必须为 memorax-code;此必填要求计划近期取消,取消前仍需传入。其余属性是部署约定的扩展元数据,不承诺任意键可搜索。
timestamp
integer / null · 可选 · 默认 null · 13 位 Unix 毫秒值或 -1
提供这次写入的请求级事件时间,合法时间会用于写入的 event_created_at 元数据。适合批量导入时标记事件发生时间,。-1 表示不提供该事件时间。每条 messages[] 的时间戳仍必须单独填写。
add_only
boolean / null · 可选 · 默认 null
控制常规记忆写入中抽取后的操作决策。true 跳过摘要与 Fact 的新增/更新/删除决策,仅按新增处理;false、省略或传 null 时执行操作决策。此参数不跳过内容抽取、向量计算等处理,不控制 Bucket(主题分组)更新,也不适用于 raw 写入。
code_extraction_instructions
string / null · 可选 · 最多 12,000 字符 · 仅用于 code + default
为代码记忆抽取提供额外指导,例如“优先保留已确认的兼容性约束与决策理由”。该字段用于指导抽取,消息正文通过 messages 提交。空白字符串归一化为 null。仅适用于 code/default 组合。
chunk
object / null · 可选 · 默认 null · 仅用于 code + default
说明本次提交属于客户端拆分后的哪一块,帮助保留分块来源关系。客户端须先自行分块。各分块由客户端分别提交。属性可在下方展开。
展示属性
代码分块属性
字段值示例 · add.chunk
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"group_id": "callback-session-001",
"index": 0,
"count": 2
}
group_id
string · 必填 · 最短字符数 1 · 最长字符数 512
标识同一批分块。同组各请求使用相同值。去除首尾空白后长度 1~512。
index
integer · 必填 · 最小值 0
当前块的位置,从 0 开始,必须小于 count。要求严格整数。
count
integer · 必填 · 最小值 2
这组分块的总数,至少 2。要求严格整数。
window_context
object[] · 可选 · 默认 []
为 Bucket 主题路由提供近期对话背景,帮助判断本次内容归到哪个主题。例如传入近期的 {"role":"user","content":"继续讨论回调重试"}。待写入内容应放在 messages。服务端保留末尾最多 50 项,再按 content 总字符预算 10,000 丢弃旧项。若只剩一个超长项,该项仍保留。
展示属性
字段值示例 · add.window_context
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
[
{
"role": "user",
"content": "我们刚才讨论了回调重试。"
}
]
自由对象数组,没有与 Message 相同的固定必填结构。常见约定为 role(发言方)和 content(文本)。这些属性用于提供近期对话背景。
Add 输入组合与附件限制
图片、文件与消息长度限制
图片通过 input_image 提交,仅支持 Base64 Data URL,不支持 HTTP(S) 图片地址。默认限制为每消息 4 张、每请求 8 张、单图 8 MiB、2,000 万像素、16 帧,以实际配置为准。input_image 支持 content_type="work" 或 "code",要求 mode="default"。代码场景仍需满足当前的 session_id 与 metadata.source 要求。结构化代码证据输入须单独提交。
file 每请求最多 10 个,只能在 user 消息中出现。文件输入支持 content_type="work" 或 "auto",要求 async_mode=true、mode="default",不支持 content_type="code",不支持 sender_id。同一请求的文件 ID 须唯一,已有 ID 必须属于当前项目与 user_id。图片输入使用 input_image 的 Base64 Data URL;此处 file 的限制适用于文档附件。
文件默认原始字节上限 20 MiB,可配置。filename 必须含支持的扩展名为pdf、doc、docx、ppt、pptx、xls、xlsx、xlsm、jpg、jpeg、png、bmp、gif、md、markdown、html、epub、mobi、rtf、txt。使用前须开通文件解析能力。解析结果通过任务状态接口查询。
代码写入示例
{
"user_id": "demo-user",
"content_type": "code",
"mode": "default",
"session_id": "coding-session-demo",
"metadata": {"source": "memorax-code"},
"messages": [{"role": "user", "timestamp": -1, "content": "重试必须复用 event_id;唯一约束负责避免重复扣款。"}]
}
pre_summarized 只能和 code 配合,仍需 session_id 与上述 metadata。该模式同时检查单条消息和归一化摘要总长度。
文件写入示例
{
"user_id": "demo-user",
"messages": [{"role": "user", "timestamp": -1, "content": [
{"type": "text", "text": "请读取这个示例文档。"},
{"type": "file", "file": {"filename": "cedar.txt", "file_data": "SGVsbG8gQ2VkYXI="}}
]}]
}
Add 响应 · 异步受理(202)
success
boolean · 可选 · 默认 true
接口成功标志。Add 的异步处理结果通过任务状态接口查询。
data
object · 必填
业务结果对象。展开查看本响应的具体结构。
展示属性
响应值示例 · add.response.accepted.data
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"task_id": "22222222-2222-4222-8222-222222222222",
"status": "accepted",
"data": null,
"balances": []
}
task_id
string · 必填
由服务端自动生成的任务 ID,调用方无需在 Add 请求中传入。例如 22222222-2222-4222-8222-222222222222。异步 Add 返回的 data.task_id 用于查询写入状态。
status
"accepted" · 必填
本响应的处理状态,允许值见类型说明。
data
null · 可选 · 默认 null
异步受理时没有完成结果,返回 null。请用 task_id 查询任务状态。
balances
object[] · 可选 · 默认 []
本次操作返回的配额/余额信息,可能为空。不表示记忆结果。
展示属性
响应值示例 · add.response.accepted.data.balances
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
[
{
"product_code": "memory_api",
"feature_code": "memory_write",
"spec_key": "count",
"quota_unit": "count",
"quota_limit": 1000,
"reserved": 1,
"consumed": 20,
"remaining": 979
}
]
product_code
memory_api / chat_api / knowledge_base · 必填
余额所属产品,例如 memory_api。
feature_code
memory_write / memory_search / chat_completion / knowledge_base · 必填
余额所属功能,如 memory_write 或 memory_search。
spec_key
count / storage / calls / tokens · 必填
配额维度,例如次数、存储、调用数或 token 数。与 quota_unit 一起理解。
quota_unit
string · 必填
配额计量单位,说明数值应按什么单位解读。
quota_limit
integer / null · 可选 · 默认 null
该维度的配额上限,可为空,null 表示该值未提供。
reserved
integer · 必填 · 最小值 0
已预占的额度,为非负值,单位由 quota_unit 指定。
consumed
integer · 必填 · 最小值 0
已经消耗的额度,非负。按 quota_unit 解读。
remaining
integer / null · 可选 · 默认 null
返回的剩余额度,可为空,null 表示该值未提供。
meta
object · 必填
请求追踪信息,用于排查本次接口调用。
展示属性
响应值示例 · add.response.accepted.meta
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"request_id": "66666666-6666-4666-8666-666666666666",
"timestamp": "2026-11-11T08:00:00Z"
}
request_id
string · 必填
本次 HTTP 请求的追踪标识,可关联服务端日志。
timestamp
string(date-time / ISO 8601 日期时间) · 必填
服务端生成响应的时间。
Add 响应 · 同步完成(200)
success
boolean · 可选 · 默认 true
接口成功标志。Add 的异步处理结果通过任务状态接口查询。
data
object · 必填
业务结果对象。展开查看本响应的具体结构。
展示属性
响应值示例 · add.response.completed.data
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"task_id": "22222222-2222-4222-8222-222222222222",
"status": "completed",
"data": [
{
"id": "55555555-5555-4555-8555-555555555555",
"event": "ADD",
"data": {
"memory": "回调失败后最多重试 3 次。"
}
}
],
"balances": []
}
task_id
string · 必填
由服务端自动生成的任务 ID,调用方无需在 Add 请求中传入。例如 22222222-2222-4222-8222-222222222222。异步 Add 返回的 data.task_id 用于查询写入状态。
status
"completed" · 必填
本响应的处理状态,允许值见类型说明。
data
object[] · 必填
本次同步写入产生的记忆变更事件数组。
展示属性
响应值示例 · add.response.completed.data.data
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
[
{
"id": "55555555-5555-4555-8555-555555555555",
"event": "ADD",
"data": {
"memory": "回调失败后最多重试 3 次。"
}
}
]
id
string · 必填
发生变更的记忆记录标识。
event
ADD / UPDATE / DELETE · 必填
变更动作包含 ADD 新增、UPDATE 更新、DELETE 删除。
data
object · 必填
该变更事件关联的记忆内容。
展示属性
响应值示例 · add.response.completed.data.data[].data
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"memory": "回调失败后最多重试 3 次。"
}
memory
string · 必填
可供调用方使用的记忆正文。
document_id
string / null · 可选 · 默认 null
文档事件对应的稳定文档 ID,普通记忆可不提供。
revision
integer / null · 可选 · 默认 null
文档事件对应的版本,供后续文档更新核对。
balances
object[] · 可选 · 默认 []
本次操作返回的配额/余额信息,可能为空。不表示记忆结果。
展示属性
响应值示例 · add.response.completed.data.balances
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
[
{
"product_code": "memory_api",
"feature_code": "memory_write",
"spec_key": "count",
"quota_unit": "count",
"quota_limit": 1000,
"reserved": 1,
"consumed": 20,
"remaining": 979
}
]
product_code
memory_api / chat_api / knowledge_base · 必填
余额所属产品,例如 memory_api。
feature_code
memory_write / memory_search / chat_completion / knowledge_base · 必填
余额所属功能,如 memory_write 或 memory_search。
spec_key
count / storage / calls / tokens · 必填
配额维度,例如次数、存储、调用数或 token 数。与 quota_unit 一起理解。
quota_unit
string · 必填
配额计量单位,说明数值应按什么单位解读。
quota_limit
integer / null · 可选 · 默认 null
该维度的配额上限,可为空,null 表示该值未提供。
reserved
integer · 必填 · 最小值 0
已预占的额度,为非负值,单位由 quota_unit 指定。
consumed
integer · 必填 · 最小值 0
已经消耗的额度,非负。按 quota_unit 解读。
remaining
integer / null · 可选 · 默认 null
返回的剩余额度,可为空,null 表示该值未提供。
meta
object · 必填
请求追踪信息,用于排查本次接口调用。
展示属性
响应值示例 · add.response.completed.meta
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"request_id": "66666666-6666-4666-8666-666666666666",
"timestamp": "2026-11-11T08:00:00Z"
}
request_id
string · 必填
本次 HTTP 请求的追踪标识,可关联服务端日志。
timestamp
string(date-time / ISO 8601 日期时间) · 必填
服务端生成响应的时间。
同步响应 JSON 示例
{
"success": true,
"data": {"task_id": "22222222-2222-4222-8222-222222222222", "status": "completed", "data": [{"id": "fact-demo", "event": "ADD", "data": {"memory": "Cedar 回调最多重试三次。"}}], "balances": []},
"meta": {"request_id": "request-demo", "timestamp": "2026-11-03T00:00:00Z"}
}
异步任务状态
GET /v1/memories/add/status/{task_id}
curl "$MEMORAX_BASE_URL/v1/memories/add/status/TASK_ID" \
--header "Authorization: Token $MEMORAX_API_KEY"
GET 成功响应直接返回任务对象。顶层 status 为 processing、success 或 failed,分别表示处理中、成功和失败。
{"task_id":"22222222-2222-4222-8222-222222222222","status":"success","phase":"done","memory":{"total":1},"error":null}
上方展示普通任务成功时的字段。处理中可包含 kind。文档处理任务还可提供 kind、parser_record_id、parser_task_id、document_type、attempts、files、received_at、created_at、updated_at、completed_at。files 逐文件给出解析状态等信息。多文件任务须检查所有文件的处理结果。普通任务状态默认保留 24 小时,可能根据服务容量提前清理。收到 404 时,应保存 task_id 并核查任务可见性和保留期限。
files[].status 表示单个文件的解析状态;文件解析成功不代表整个写入任务已完成。任务顶层 status=processing 时继续查询,status=failed 时查看错误;等待顶层 status=success 后再检索,并检查各文件的处理结果。保存目标文件的 files[].parser_id,用于 Search 的 document_ids。
文件状态示例 · files[] 中的一项
{
"parser_id": "22222222-2222-4222-8222-222222222222",
"file_index": 0,
"status": "success"
}
| 字段 | 作用 |
|---|---|
task_id |
查询的写入任务 ID,与 Add 返回值对应。 |
status |
processing 处理中、success 成功、failed 失败。以此判断是否到达终态。 |
phase |
当前处理阶段,成功示例为 done。用于区分正在解析还是其他阶段,不代替 status。 |
kind |
任务种类,具体是否返回取决于任务处理路径。 |
memory |
写入结果摘要。普通成功任务的 total 表示写入结果数量。 |
error |
失败说明。没有错误时通常为 null。 |
parser_record_id |
文档解析记录标识,用于关联解析侧记录。 |
parser_task_id |
解析服务任务标识,用于追踪外部解析处理。 |
document_type |
文档处理类型信息。 |
attempts |
任务记录中的处理尝试次数。 |
files |
逐文件的解析结果。file_index 标识对应文件,status 表示文件解析状态,parser_id 用于限定该文件的文档检索范围。 |
received_at |
任务接收时间。 |
created_at |
任务记录创建时间。 |
updated_at |
任务状态最近更新时间。 |
completed_at |
任务完成时间,未完成时可能为空。 |
Search
POST /v1/memories/search
按用户范围检索已写入的记忆,使用 fast 直接检索。输出模式决定返回摘要、事实或原文。
Search 调用示例
以下示例演示回调规则的写入与检索。Python 使用 requests,JavaScript 使用 Node.js 18+。
cURL
curl --request POST "$MEMORAX_BASE_URL/v1/memories/search" \
--header "Authorization: Token $MEMORAX_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"user_id": "demo-user",
"query": "Cedar 回调如何重试?",
"mode": "fast",
"output_mode": "summary",
"top_k": 5
}'
Python
import os
import requests
base = os.environ["MEMORAX_BASE_URL"].rstrip("/")
payload = {'user_id': 'demo-user',
'query': 'Cedar 回调如何重试?',
'mode': 'fast',
'output_mode': 'summary',
'top_k': 5}
response = requests.post(
base + "/v1/memories/search",
headers={"Authorization": "Token " + os.environ["MEMORAX_API_KEY"]},
json=payload,
timeout=120,
)
response.raise_for_status()
print(response.json())
JavaScript
// Node.js 18+,保存为 .mjs 后执行;密钥不应放在公开网页中。
const base = process.env.MEMORAX_BASE_URL.replace(/\/$/, "");
const payload = {
"user_id": "demo-user",
"query": "Cedar 回调如何重试?",
"mode": "fast",
"output_mode": "summary",
"top_k": 5
};
const response = await fetch(`${base}/v1/memories/search`, {
method: "POST",
headers: {
Authorization: `Token ${process.env.MEMORAX_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify(payload),
signal: AbortSignal.timeout(120000),
});
if (!response.ok) throw new Error(`${response.status} ${await response.text()}`);
console.log(await response.json());
查看请求 JSON
{
"user_id": "demo-user",
"query": "Cedar 回调如何重试?",
"mode": "fast",
"output_mode": "summary",
"top_k": 5
}
响应示例 · HTTP 200,查询完成
以下为响应结构示例。
{
"success": true,
"data": {
"task_id": "33333333-3333-4333-8333-333333333333",
"status": "completed",
"data": [{
"id": "summary-demo", "memory": "Cedar 回调最多重试三次。",
"score": 0.82,
"score_details": {"rank_method": "semantic_similarity", "rank_score": 0.82, "semantic_similarity": 0.82},
"user_id": "demo-user", "content_type": "dialogue",
"created_at": "2026-11-03T00:00:00Z", "updated_at": "2026-11-03T00:00:00Z",
"metadata": {}, "categories": [], "immutable": false
}],
"balances": [], "buckets": null,
"meta_info": {"mode": "fast", "pipeline_status": "fast_search", "recall_decision": null}
},
"meta": {"request_id": "request-demo", "timestamp": "2026-11-03T00:00:00Z"}
}
Search 请求体
application/json。点击复合字段下的“展示属性”查看子字段。数组展开的是单个元素的结构。
user_id
string · 必填
指定要检索的记忆所属用户。user_id 可自定义,应与 Add 时使用的值一致。API Key 决定账户与项目,此字段在该鉴权范围内选择记忆主体。
query
string / null · 普通检索必填 · 最多 1,024 字符
使用自然语言描述要查找的信息,例如“回调失败后如何重试?”。query 须包含非空白字符。
mode
string · 可选 · 默认 fast · 枚举 fast
fast 直接检索已写入的记忆。召回结果取决于查询内容和可用记忆。
output_mode
string · 可选 · 默认由服务配置决定,默认 summary
选择响应的内容粒度。summary 返回摘要,facts 返回细粒度事实,raw 请求原文投影。仅检索文档(sources=["document"])且省略本字段时使用 facts。各模式的响应布局见输出模式与响应说明。
return_raw_text
boolean · 可选 · 默认 false
仅在 output_mode=summary 时生效,facts 输出忽略此参数。设为 true 后,优先展示原文;原文缺失时尝试从原始输入补取,仍不可用则回退摘要,并标记 raw_text_missing。返回内容受服务端大小上限约束,默认上限为 32 MiB,超限会报错。
sources
string[] / null · 可选 · 默认 null · 提供时 1~2 项且不重复
按来源限定检索范围,可选 dialogue、document。例如只搜上传文档时传 ["document"]。省略沿用服务端既有来源范围。
检索上传的文档:检索文件上传后生成的文档内容时,请显式设置 sources: ["document"]。文档检索以匹配片段为单位:output_mode: "facts" 返回文档原始片段,而非从文档中抽取的事实;使用 summary、raw 或开启 return_raw_text,也不保证返回整篇文档的完整正文。
document_ids
string[] / null · 可选 · 提供时 1~100 项
在文档来源中进一步限定具体文档,必须同时使用 sources: ["document"]。通过文件上传写入的文档,使用任务状态返回的目标文件 files[].parser_id 作为文档 ID;它不是 Add 返回的 task_id。检索时使用与上传一致的项目和 user_id。
文档筛选示例 · Search 请求中的相关字段
{
"sources": [
"document"
],
"document_ids": [
"22222222-2222-4222-8222-222222222222"
]
}
filters
object / null · 可选 · 默认 null
根据来源 Agent、应用、会话、记忆类型或创建时间缩小检索范围,避免只依靠自然语言表达这些限制。条件由 and、or 数组组织,使用支持的操作符。条件属性可在下方展开。不支持任意 metadata 键或数据库列。
展示属性
字段值示例 · search.filters
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"and": [
{
"session_id": {
"eq": "callback-session-001"
}
},
{
"created_at": {
"gte": "2026-11-01T00:00:00Z",
"lt": "2026-12-01T00:00:00Z"
}
}
]
}
and
object[] / null · 可选
数组中的条件需要同时满足。重复身份条件值冲突会拒绝,重复时间边界取更严格范围。
展示属性
字段值示例 · search.filters.and
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
[
{
"session_id": {
"eq": "callback-session-001"
}
},
{
"created_at": {
"gte": "2026-11-01T00:00:00Z"
}
}
]
agent_id
object / null · 可选
限定Agent来源。
展示属性
字段值示例 · search.filters.condition.agent_id
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"eq": "agent-a"
}
eq
string · 提供该条件时必填
完全匹配来源 ID,非空且最多 255 字符。
app_id
object / null · 可选
限定应用来源。
展示属性
字段值示例 · search.filters.condition.app_id
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"eq": "demo-app"
}
eq
string · 提供该条件时必填
完全匹配来源 ID,非空且最多 255 字符。
session_id
object / null · 可选
限定会话来源。
展示属性
字段值示例 · search.filters.condition.session_id
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"eq": "callback-session-001"
}
eq
string · 提供该条件时必填
完全匹配来源 ID,非空且最多 255 字符。
mem_type
object / null · 可选
限定记忆分类,eq 与 in 二选一。同一 and 数组最多一个 mem_type 条件。
展示属性
字段值示例 · search.filters.condition.mem_type
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。 分类名仅为示例,请使用实际已有的记忆分类。
{
"in": [
"preference",
"constraint"
]
}
eq
string · 与 in 二选一
指定一个非空记忆分类。
in
string[] · 与 eq 二选一
允许的分类集合,数组及各值非空。会去除首尾空白和重复项。
created_at
object / null · 可选
按创建时间过滤。取值为日期字符串。
展示属性
字段值示例 · search.filters.condition.created_at
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"gte": "2026-11-01T00:00:00Z",
"lt": "2026-12-01T00:00:00Z"
}
eq
string · 可选
等于。建议 ISO 日期或带时区的日期时间。
gt
string · 可选
晚于。建议 ISO 日期或带时区的日期时间。
gte
string · 可选
不早于。建议 ISO 日期或带时区的日期时间。
lt
string · 可选
早于。建议 ISO 日期或带时区的日期时间。
lte
string · 可选
不晚于。建议 ISO 日期或带时区的日期时间。
or
object[] / null · 可选
数组中至少满足一个条件。同时给 and 时两组都约束检索。
展示属性
字段值示例 · search.filters.or
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
[
{
"agent_id": {
"eq": "agent-a"
}
},
{
"agent_id": {
"eq": "agent-b"
}
}
]
agent_id
object / null · 可选
限定Agent来源。
展示属性
字段值示例 · search.filters.condition.agent_id
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"eq": "agent-a"
}
eq
string · 提供该条件时必填
完全匹配来源 ID,非空且最多 255 字符。
app_id
object / null · 可选
限定应用来源。
展示属性
字段值示例 · search.filters.condition.app_id
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"eq": "demo-app"
}
eq
string · 提供该条件时必填
完全匹配来源 ID,非空且最多 255 字符。
session_id
object / null · 可选
限定会话来源。
展示属性
字段值示例 · search.filters.condition.session_id
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"eq": "callback-session-001"
}
eq
string · 提供该条件时必填
完全匹配来源 ID,非空且最多 255 字符。
mem_type
object / null · 可选
限定记忆分类,eq 与 in 二选一。同一 and 数组最多一个 mem_type 条件。
展示属性
字段值示例 · search.filters.condition.mem_type
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。 分类名仅为示例,请使用实际已有的记忆分类。
{
"in": [
"preference",
"constraint"
]
}
eq
string · 与 in 二选一
指定一个非空记忆分类。
in
string[] · 与 eq 二选一
允许的分类集合,数组及各值非空。会去除首尾空白和重复项。
created_at
object / null · 可选
按创建时间过滤。取值为日期字符串。
展示属性
字段值示例 · search.filters.condition.created_at
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
{
"gte": "2026-11-01T00:00:00Z",
"lt": "2026-12-01T00:00:00Z"
}
eq
string · 可选
等于。建议 ISO 日期或带时区的日期时间。
gt
string · 可选
晚于。建议 ISO 日期或带时区的日期时间。
gte
string · 可选
不早于。建议 ISO 日期或带时区的日期时间。
lt
string · 可选
早于。建议 ISO 日期或带时区的日期时间。
lte
string · 可选
不晚于。建议 ISO 日期或带时区的日期时间。
top_k
integer · 可选 · 默认 10 · 1~50
为向量召回和稀疏召回提供默认数量。未单独传入 k_dense、k_sparse 时,两者均取 top_k,因此两路召回合计最多 2 × top_k 条,而不是将最终结果限制为 top_k 条。例如只传 top_k=5,两路各取 5 条,合计可达 10 条。
显式传入 k_dense 或 k_sparse 时,只覆盖对应通道的数量,未指定的通道仍使用 top_k。两路候选数量上限为有效的 k_dense + k_sparse;实际返回数量可能因去重、过滤、可用候选和后续结果处理而减少,不保证每次返回满额。
| 传参示例 | 向量召回 | 稀疏召回 | 两路候选合计上限 |
|---|---|---|---|
{"top_k": 5} | 5 | 5 | 10 |
{"top_k": 5, "k_dense": 3} | 3 | 5 | 8 |
{"k_dense": 3, "k_sparse": 2} | 3 | 2 | 5 |
{"top_k": 5, "k_sparse": 0} | 5 | 0(关闭) | 5 |
k_dense
integer / null · 可选 · 0~50 · 省略时跟随 top_k
控制向量召回通道的候选数量,用于匹配语义相近但用词不同的内容。省略时使用 top_k;显式传值仅覆盖向量通道,不改变 k_sparse。设为 0 关闭向量召回。与稀疏通道的数量关系及示例见上方 top_k 说明。
k_sparse
integer / null · 可选 · 0~50 · 省略时跟随 top_k
控制稀疏召回通道的候选数量,用于匹配关键词、术语等词面信号。省略时使用 top_k;显式传值仅覆盖稀疏通道,不改变 k_dense。设为 0 关闭稀疏召回;仅使用向量召回时,将 k_sparse 设为 0 并保留向量通道。数量关系及示例见上方 top_k 说明。
min_semantic_similarity
number / null · 可选 · 0~1 · 省略沿用服务端阈值
为向量召回设置最低语义相似度,在候选融合前过滤低相似度结果。提高它可能减少无关结果,也可能漏掉有用记忆。该阈值应用于向量召回阶段的语义相似度。
window_context
object[] · 可选 · 默认 []
提供近期对话上下文,例如“刚才那个方案”所指的对话内容。
展示属性
字段值示例 · search.window_context
以下仅展示此处的 JSON 值,请按实际数据替换 ID、地址和内容。
[
{
"role": "user",
"content": "我们刚才讨论了回调重试。"
}
]
近期对话的自由对象数组,例如 role 与 content。用于本次召回判断/查询改写。
输出模式与组合示例
| 模式 | 结果内容 | 注意事项 |
|---|---|---|
summary |
Summary 级正文 | 结果位于 data.data,按摘要粒度返回。 |
facts |
Fact 级内容 | 适用于细粒度结果。仅搜文档且未传 output_mode 时自动采用 facts。 |
raw |
原文投影 | 依赖原文可用性,遵守服务端大小限制,按服务响应大小上限返回。 |
return_raw_text=true 适用于 summary 输出。仅检索文档且省略 mode 时,默认使用 fast。
文档检索示例
{
"user_id": "demo-user",
"query": "回调重试规则",
"sources": ["document"],
"document_ids": ["cedar-design"],
"mode": "fast",
"output_mode": "facts"
}
过滤条件示例
{
"user_id": "demo-user", "query": "回调重试规则",
"filters": {"and": [
{"session_id": {"eq": "coding-session-demo"}},
{"created_at": {"gte": "2026-11-01T00:00:00Z"}}
]}
}
Search 响应 · 普通结果(200)
success
boolean · 可选 · 默认 true
本次检索请求的处理结果,成功响应为 true。
data
object · 必填
业务结果对象。展开查看本响应的具体结构。
展示属性
响应值示例 · search.response.data
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"task_id": "33333333-3333-4333-8333-333333333333",
"status": "completed",
"data": [
{
"id": "55555555-5555-4555-8555-555555555555",
"memory": "回调失败后最多重试 3 次。",
"score": 0.86,
"score_details": {
"rank_method": "semantic_similarity",
"rank_score": 0.86,
"semantic_similarity": 0.86
},
"user_id": "demo-user",
"content_type": "dialogue",
"created_at": "2026-11-11T08:00:00Z",
"updated_at": "2026-11-11T08:00:00Z"
}
],
"balances": [],
"meta_info": {
"mode": "fast",
"pipeline_status": "fast_search",
"recall_decision": null
}
}
task_id
string · 必填
本次检索的请求标识,用于追踪该次查询。
status
"completed" · 必填
本响应的处理状态,允许值见类型说明。
data
object[] · 必填
检索结果数组。空数组表示本次查询未返回匹配结果。
展示属性
响应值示例 · search.response.data.data
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
[
{
"id": "55555555-5555-4555-8555-555555555555",
"memory": "回调失败后最多重试 3 次。",
"score": 0.86,
"score_details": {
"rank_method": "semantic_similarity",
"rank_score": 0.86,
"semantic_similarity": 0.86
},
"user_id": "demo-user",
"content_type": "dialogue",
"created_at": "2026-11-11T08:00:00Z",
"updated_at": "2026-11-11T08:00:00Z"
}
]
id
string · 必填
该结果的标识,粒度随输出模式变化。
memory
string · 必填
可供调用方使用的记忆正文。
score
number / null · 可选 · 默认 null
该结果返回的排序分数。分数含义由 score_details 指定。
score_details
object / null · 可选 · 默认 null
各召回/融合阶段的分数说明,可展开查看。
展示属性
分数明细
响应值示例 · search.response.data.data[].score_details
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"rank_method": "semantic_similarity",
"rank_score": 0.86,
"semantic_similarity": 0.86
}
rank_method
semantic_similarity / sparse_score / channel_rrf / query_rrf / null · 可选 · 默认 null
标明采用 semantic_similarity、sparse_score、channel_rrf 或 query_rrf 哪种排序分数。
rank_score
number / null · 可选 · 默认 null
当前排序方法产生的分值。
semantic_similarity
number / null · 可选 · 默认 null
向量检索得到的语义相似度。
sparse_score
number / null · 可选 · 默认 null
稀疏检索得到的匹配分值。
channel_rrf
number / null · 可选 · 默认 null
多召回通道按排名融合产生的分值。
query_rrf
number / null · 可选 · 默认 null
多查询结果按排名融合产生的分值。
user_id
string · 必填
记忆所属用户。
agent_id
string / null · 可选 · 默认 null
来源 Agent 标识。
app_id
string / null · 可选 · 默认 null
来源应用标识。
session_id
string / null · 可选 · 默认 null
来源会话标识。
project_id
string / null · 可选 · 默认 null
结果所属项目的标识。
api_key_uuid
string / null · 可选 · 默认 null
来源 API Key 的标识。
content_type
dialogue / document / code / webpage · 可选 · 默认 "dialogue"
内容类别包括 dialogue、document、code 或 webpage。
created_at
string(date-time / ISO 8601 日期时间) · 必填
记录创建时间。
updated_at
string(date-time / ISO 8601 日期时间) · 必填
记录最近更新时间。
metadata
object · 可选 · 默认 {}
来源及其他扩展属性。可用过滤条件见 filters 字段。
categories
string[] · 可选 · 默认 []
记忆分类标签,可能为空。
immutable
boolean · 可选 · 默认 false
不可变标记,默认 false。
balances
object[] · 可选 · 默认 []
本次操作返回的配额/余额信息,可能为空。不表示记忆结果。
展示属性
响应值示例 · search.response.data.balances
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
[
{
"product_code": "memory_api",
"feature_code": "memory_search",
"spec_key": "count",
"quota_unit": "count",
"quota_limit": 1000,
"reserved": 0,
"consumed": 21,
"remaining": 979
}
]
product_code
memory_api / chat_api / knowledge_base · 必填
余额所属产品,例如 memory_api。
feature_code
memory_write / memory_search / chat_completion / knowledge_base · 必填
余额所属功能,如 memory_write 或 memory_search。
spec_key
count / storage / calls / tokens · 必填
配额维度,例如次数、存储、调用数或 token 数。与 quota_unit 一起理解。
quota_unit
string · 必填
配额计量单位,说明数值应按什么单位解读。
quota_limit
integer / null · 可选 · 默认 null
该维度的配额上限,可为空,null 表示该值未提供。
reserved
integer · 必填 · 最小值 0
已预占的额度,为非负值,单位由 quota_unit 指定。
consumed
integer · 必填 · 最小值 0
已经消耗的额度,非负。按 quota_unit 解读。
remaining
integer / null · 可选 · 默认 null
返回的剩余额度,可为空,null 表示该值未提供。
buckets
object / null · 可选 · 默认 null
可空的兼容 Bucket 聚合结果,按类型与规范化键组织。
meta_info
object / null · 可选 · 默认 null
本次检索使用的模式、流程状态和召回判断。
展示属性
检索过程信息
响应值示例 · search.response.data.meta_info
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"mode": "fast",
"pipeline_status": "fast_search",
"recall_decision": null
}
mode
fast · 必填
本次检索模式为 fast。
pipeline_status
stub / fast_search / query_rewrite_search / recall_bypassed · 必填
stub 为占位状态,fast_search 为快速检索,query_rewrite_search 为查询改写检索,recall_bypassed 为跳过召回。
recall_decision
object / null · 可选 · 默认 null
召回必要性判断结果。未执行或未返回时为空。
展示属性
召回判断
响应值示例 · search.response.data.meta_info.recall_decision
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"needs_recall": true,
"reason": "问题涉及此前保存的回调约束。",
"confidence": 0.9
}
needs_recall
boolean · 必填
模型是否认为当前问题需要检索记忆。
reason
string · 必填
模型给出的召回或跳过理由。
confidence
number · 必填 · 最小值 0 · 最大值 1
0~1 的判断置信度。
meta
object · 必填
请求追踪信息,用于排查本次接口调用。
展示属性
响应值示例 · search.response.meta
以下仅展示此处的 JSON 值,示例数据以实际响应为准。
{
"request_id": "66666666-6666-4666-8666-666666666666",
"timestamp": "2026-11-11T08:00:00Z"
}
request_id
string · 必填
本次 HTTP 请求的追踪标识,可关联服务端日志。
timestamp
string(date-time / ISO 8601 日期时间) · 必填
服务端生成响应的时间。
错误处理
| HTTP 状态 | 含义 | 处理方式 |
|---|---|---|
| 401 / 403 | 鉴权失败或权限不足 | 检查 API Key、Token 前缀及 read/write 权限。 |
| 404 | 任务或资源不可见、已过期或不存在 | 核对 user_id、资源 ID 和任务保留期限,保存 task_id 排查。 |
| 413 | 输入超过大小限制 | 按对应字段的长度或文件大小上限调整输入。 |
| 415 | 请求媒体类型不受支持 | 使用 application/json。 |
| 422 | 参数格式或组合校验失败 | 检查必填项、时间戳、枚举值及字段组合条件。 |
| 429 | 限流或配额不足 | 检查额度与响应提示,按服务策略退避。 |
| 500 / 503 | 服务处理异常或依赖暂不可用 | 保存 request_id 和 task_id,联系服务提供方排查。 |
错误响应通常包含 success=false、error 和 meta。error 可提供 code、reason、message、details 或 hint,以实际响应为准。
Add 返回 HTTP 202 后,通过任务状态接口等待 status=success。status=failed 时保留 error 与 task_id。Search 返回空数组时,依次检查 user_id、任务完成状态、过滤条件和检索阈值。
版本记录
| 文档版本 | 发布日期 | 本版功能 | 接口路径 |
|---|---|---|---|
| 0.1.0 | 2026-11-06 | 对话与代码记忆写入、异步任务查询、Responses 风格的图片与文件输入、fast 检索、条件过滤,以及摘要、事实和原文输出。 | /v1 |