Skip to content

Commit c03a2bd

Browse files
committed
docs: define recoverable semantic recall architecture
1 parent e709526 commit c03a2bd

3 files changed

Lines changed: 117 additions & 61 deletions

File tree

.github/workflows/release.yml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ name: Release
33
on:
44
push:
55
tags:
6-
- 'v*'
6+
- "v*"
77
workflow_dispatch:
88
inputs:
99
tag:
10-
description: 'Tag to build (e.g., v0.40.1)'
10+
description: "Tag to build (e.g., v0.40.1)"
1111
required: true
1212
type: string
1313
target:
14-
description: 'Target to build'
14+
description: "Target to build"
1515
required: false
1616
default: all
1717
type: choice
@@ -207,8 +207,8 @@ jobs:
207207
workspaces: src-tauri
208208
cache-bin: false
209209
# A release bump updates the root package entry in Cargo.lock, but it
210-
# does not require recompiling Tantivy/LanceDB and the rest of the
211-
# dependency graph. Keep one dependency cache per Rust host and let
210+
# does not require recompiling the unchanged dependency graph. Keep
211+
# one dependency cache per Rust host and let
212212
# Cargo's fingerprints rebuild only crates whose inputs changed.
213213
shared-key: ataru-release-dependencies
214214
add-rust-environment-hash-key: false
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
# ADR-0002:语义召回采用可恢复的后台混合检索管线
2+
3+
## 状态
4+
5+
已接受;分阶段实施。
6+
7+
## 背景
8+
9+
Ataru 是本地优先的 AI 对话召回器。关键词检索必须开箱即用,且不应要求用户配置模型、网络或远程凭据。
10+
11+
实际抽样显示,2,539 个来源会话约有 119,651 个候选片段,需要约 3,740 批远程 Embedding 请求。一次性前台全量构建会长时间占用网络与进程,也无法清楚说明进度、可恢复性和数据外发边界。
12+
13+
## 决策
14+
15+
1. 默认路径保持本地关键词检索:Tantivy + Jieba,语义召回保持高级选项并默认关闭。
16+
2. 用户明确启用远程 Embedding 后,初始化作为后台作业执行;作业支持暂停、恢复、取消、增量补齐与断点续跑,搜索页面始终保留关键词结果。
17+
3. 首次初始化提供范围选择:最近会话、当前项目、收藏内容或全部历史。UI 先显示本地抽样估算的片段数、请求批次、预计时间、数据外发范围和配置的模型。
18+
4. 每个语义条目使用稳定身份:`projectId/sessionId/runIndex/turnId`、来源路径、来源 mtime、内容哈希、分块策略版本与 Embedding 模型版本。来源或策略变化时,只重建受影响条目。
19+
5. 查询执行两路召回:关键词 Top-K 与向量 Top-K 并行,使用 RRF 融合。仅在融合后的少量候选上运行可选 reranker;远程语义超时或索引未就绪时,直接降级为关键词结果。
20+
6. SQLite 保留为元数据、队列、任务检查点和向量持久化的唯一默认存储。当前向量读取内存的穷举搜索只作为中等规模过渡;达到实际延迟或内存门槛后,再以基准决定是否采用打包的本地 ANN 实现。
21+
22+
## 后果
23+
24+
### 正面
25+
26+
- 小型安装仍有即时、零配置的本地检索。
27+
- 长历史不会在一次点击后变成数小时的前台等待。
28+
- 用户能理解哪些内容会发送到 Embedding 服务,并可随时停止。
29+
- 关键词、自然语言与中英文混合检索都有明确的召回路径。
30+
31+
### 代价
32+
33+
- 需要任务状态、检查点、失效检测和进度事件,索引实现比一次性重建更复杂。
34+
- 混合检索与 rerank 必须由固定评测集和 TTCR 指标持续校准。
35+
- 本地 ANN 扩展会增加跨平台打包与更新验证成本,因此不在当前版本预先引入。
36+
37+
## 备选方案
38+
39+
### 一次性全量语义初始化
40+
41+
拒绝。初次体验和失败恢复较差,且会使查询路径隐式触发长任务。
42+
43+
### 默认远程语义检索
44+
45+
拒绝。它破坏本地优先与零配置体验,也不能让用户在发送历史内容前作出明确选择。
46+
47+
### 立即引入独立向量数据库
48+
49+
拒绝。当前规模和单机桌面产品不需要新的服务运维面;先测量 SQLite 过渡方案的真实内存与查询延迟。
50+
51+
## 验收门槛
52+
53+
- 索引作业可在应用退出后从已提交批次继续,重复运行不会重复发送未变更内容。
54+
- 搜索输入和关键词结果在作业运行时保持可用。
55+
- UI 展示处理数、待处理数、失败数、当前范围、可复制诊断与暂停/继续/取消入口。
56+
- Hybrid p95、Recall@10、MRR@10 与 TTCR 使用固定的中英文对话评测集回归验证。

0 commit comments

Comments
 (0)