Skip to main content

召回编排器

召回不是搜索。召回是上下文工程——将记忆加工成可以直接注入 Agent 上下文窗口的结构化块。

8 步处理流水线

每次召回请求,编排器串行执行以下步骤:

步骤名称说明
1候选检索向量搜索 + 词法搜索,覆盖 Stable 和 History 两层
2评分importance × recency × hybridScore 三维加权
3排序按复合分降序
4语义键去重同一 semantic_key 只保留最高分版本
5冲突检测hasConflict=true 的记录优先浮现至结果头部
6Token 预算分配prefer 参数在两层间分配 token 配额
7新鲜度标注超过 30/90/365 天阈值的记录附加警告标签
8结果块组装输出 RecallContextBlock

搜索策略

召回器使用混合检索,两种方式并行,结果通过 RRF(倒数排名融合)合并:

混合检索 = 向量搜索(语义相似) + 词法搜索(关键词精确)

RRF Fusion

统一候选集

降级策略:

  • 无 Embedding 服务 → 纯词法搜索
  • zhparser 不可用 → plainto_tsquery(基础全文搜索)
  • 任何单点故障不导致召回完全失败

请求参数

POST /v1/recall
{
"task": "实现带邮箱验证的用户注册功能",
"scope": { "projectId": "p_demo" },
"prefer": "stable_first",
"maxTokens": 2000,
"includeHistory": true,
"historyDays": 30
}
参数类型说明
taskstring当前任务描述,作为检索 query
scopeobject访问范围
preferenumToken 分配策略(stable_first / history_first / balanced / stable_only
maxTokensint总 token 预算,默认 2000
includeHistorybool是否包含历史记录,默认 true
historyDaysint历史记录时间窗口(天),默认 30

输出结构

{
"code": "SUCCESS",
"data": {
"stableMemories": [
{
"id": "mem_a1b2c3d4",
"content": "所有 API 统一返回 {code, message, data}",
"memoryType": "project_rule",
"importance": 0.9,
"score": 0.94
}
],
"historyRecords": [
{
"id": "rec_x9y8z7",
"content": "完成 MailCodeService,用 Redis 管理 TTL",
"recordKind": "task_summary",
"createdAt": "2024-04-01T10:00:00Z"
}
],
"conflicts": [],
"tokenEstimate": 1420,
"truncated": false,
"freshnessWarnings": []
}
}