Skip to main content

Attune 架构

当前实现架构

┌─────────────────────────────┐
│ Attune Rust │
│ rust/ │
│ • Axum + rusqlite │
│ • 900+ tests │
│ • AES-256-GCM 加密 vault │
│ • tantivy + usearch 检索栈 │
└─────────────────────────────┘

设计取舍:所有产品路径统一落在 Rust 实现,便于加密、性能、打包发版和回归测试保持一致。

Rust 后端模块(v0.7)

attune-core/
├── chat/ # ChatEngine(J5 Self-RAG + 二次检索)
├── chunker/ # Markdown 分块 + 章节路径 breadcrumb
├── context_budget/ # ★ v0.7 LLM 上下文窗口预算(注入/历史按模型窗口分配)
├── classifier/ # 维度分类(按 plugin 注册)
├── clusterer/ # HDBSCAN 聚类
├── crypto/ # Argon2id + AES-GCM
├── embed/ # OllamaProvider + OrtEmbeddingProvider (Xenova/bge-m3 量化)
├── entities/ # 通用实体抽取(Person/Money/Date/Org)
├── infer/
│ ├── embedding.rs # ONNX bge-m3 推理
│ ├── reranker.rs # ONNX BAAI/bge-reranker-base 推理
│ └── model_store.rs # HF 模型自动下载 + 缓存
├── pii/ # ★ Phase A.5
│ ├── mod.rs # Redactor + PiiKind + PiiMatch
│ ├── patterns.rs # 12 类格式化 PII(含 ISO 7064 / Luhn)
│ ├── dictionary.rs # 用户自定义词典(YAML)
│ └── ner.rs # L2 NER trait scaffold (v0.7 ONNX)
├── platform/ # CPU 性能 DB + Tier 分类 + Region 检测
├── plugin_loader/ # plugin.yaml 解析(含 chat_trigger / pii_patterns)
├── plugin_registry/ # 插件全局聚合(chat keywords + PII patterns)
├── search/ # 三阶段:BM25 + 向量 → RRF → reranker → cross-domain penalty
├── store/ # rusqlite 持久层
│ ├── items # 主资产表(含 privacy_tier + corpus_domain)
│ ├── item_blobs # ★ v0.7 原始上传文件加密留存(证据原文可回看)
│ ├── audit # ★ 出网审计日志(明文 metadata)
│ ├── chunk_breadcrumbs # F2 加密 sidecar
│ └── ...
├── vault/ # 主控 + DEK 派生
└── workflow/ # 三段式(extract_entities → find_overlap → write_annotation)

attune-server/
├── routes/
│ ├── chat.rs # /api/v1/chat(J5 + 证据流)
│ ├── search.rs # /api/v1/search(含 detect_query_domain)
│ ├── audit.rs # ★ 出网审计 + CSV 导出
│ ├── privacy.rs # ★ Privacy tier endpoint
│ ├── items.rs # ★ per-file privacy_tier set/get
│ └── ...
└── ui/ # 嵌入式 Preact + Tailwind 单页(include_str!)

attune-cli/ # 命令行工具
attune-tauri/ # 桌面应用(Tauri 2 + Preact UI)

检索栈(Phase B 验证)

User query

┌─────────────────────────┐
│ detect_query_domain │ 关键词 4 domain × 12-30 词,零 LLM
│ → "legal"/"tech"/... │
└──────────────┬──────────┘

┌──────────┐ ┌──────────┐
│ BM25 │ │ Vector │ 双路检索
│ tantivy │ │ usearch │
│ +jieba │ │ +bge-m3 │
└────┬─────┘ └────┬─────┘
↓ ↓
└──────┬──────┘

RRF 融合 (top-20)

┌─────────────────┐
│ BAAI/bge- │ Cross-encoder 真值排序
│ reranker-base │ ONNX (Xenova 量化版触发 Expand bug,已切官方)
└─────────┬───────┘

Cross-language penalty query.lang ≠ doc.lang → ×0.3

Cross-domain penalty query.domain ≠ doc.domain → ×0.4 ★ F-Pro

Final top-K

隐私架构(Phase A.5)

User upload file

本地解析 + 分块

embed_queue 入队

┌─────────── 全程 100% 本地 ───────────┐
│ bge-m3 embedding → vector index │
│ jieba tokenize → tantivy fts5 │
│ AES-256-GCM 加密 → vault.db │
└───────────────┬───────────────────────┘

User query

检索 top-5 chunks

┌──────────────┴──────────────┐
│ per-file 🔒 (L0)? │
│ → 强制本地 LLM │
└──────────────┬──────────────┘
↓ (L1 默认)
┌──────────────────────────────┐
│ PII Redactor (本地) │
│ • 12 类格式化 PII 检测 │
│ • 替换为 [PERSON_1] 等 │
│ • 同值同 placeholder │
└──────────────┬───────────────┘

┌──────────────────────────────┐
│ 出网审计日志写入 │
│ • SHA256[:16] 前后 hash │
│ • 模型 / token / 脱敏统计 │
│ • 0 用户原文落库 │
└──────────────┬───────────────┘

☁️ 云端 LLM(脱敏后)

本地 PII 还原(placeholder → 原值)

User 看到完整答案 + citations

资源治理(H1)

每个后台任务(embedding worker / classify / browse capture)通过 resource_governor 注册:

  • per-task CPU budget
  • 全局 RAM ceiling
  • 暂停/恢复 hook

避免长会话把 GPU/RAM 跑飞。

浏览捕获(W3 batch B)

Chrome 扩展 → content_browse_capture.js
↓ MutationObserver + dwell timer
浏览信号(URL hash + dwell + scroll + copy)
↓ 加密上传
attune-server browse_signals 表
↓ G2 high engagement 阈值(dwell ≥3min + scroll ≥50% + copy ≥1)
auto_bookmark candidate
↓ G3 worker (W5+)
正文抓取 + promote 到 items

RAG 知识库

Reliability Framework(v1.0)

agent 可靠性通过三 Phase gate 强制保证,每个 law-pro agent 并入 develop 前必须全过:

agent PR

┌─────────────────────────┐
│ Phase 1: F1 gate │ 确定性 agent 公式 / 规则输出 F1 = 1.00
│ (golden fixtures CI) │
└──────────────┬──────────┘
↓ pass
┌─────────────────────────┐
│ Phase 2: Six-class │ 6 类下限 ENFORCE(structural gate)
│ floor gate (CI) │ 覆盖所有 agent 输出类型,不低于最小集
└──────────────┬──────────┘
↓ pass
┌─────────────────────────┐
│ Phase 3: LLM gate │ LLM extractor 语义 F1 ≥ 0.85
│ (llm-holdout eval) │ v1.0 实测 0.9828(10 holdout cases)
└──────────────┬──────────┘
↓ all pass
merge to develop
Phase触发时机v1.0 实测
Phase 1每次 PR CIF1 = 1.00
Phase 2每次 PR CIall pass
Phase 3LLM holdout eval(手动触发)F1 = 0.9828

模型矩阵(按硬件 tier)

TierRAMembeddingrerankerLLM
Low4-8GBbge-small (ORT)baseqwen2.5:1.5b
Mid8-16GBbge-base (ORT)baseqwen2.5:3b
High16-32GBbge-m3 (Ollama F16)bge-reranker-basedeepseek-r1:14b
Flagship32+GBbge-m3 + 自训 fine-tunev2-m3 multilingualqwen3.5:35b-a3b

ATTUNE_EMBEDDING_BACKEND=ollama / ATTUNE_CHAT_MODEL=<name> 可手动覆盖。