Files

1.6 KiB
Raw Permalink Blame History

架构决策记录 (ADR)

ADR-1: 为什么选择 ChromaDB

日期: 2026-07-05 | 状态: 已采纳

背景: 需要一个嵌入式向量数据库来持久化文档嵌入。

候选: ChromaDB(嵌入式 SQLite)、Qdrant(独立服务)、FAISS(纯内存)、Milvus(生产级集群)

决策: ChromaDB。零运维成本远超吞吐量考量。内置 Collection 概念映射多知识库场景。

代价: 高并发下逊于 Qdrant/Milvus。未来可透明迁移(Embedder/Searcher 已隔离 ChromaDB 依赖)。


ADR-2: 为什么默认 bge-small-zh-v1.5

日期: 2026-07-05 | 状态: 已采纳

候选: bge-small-zh-v1.5 (512维/23M)、bge-large-zh-v1.5 (1024维/324M)、text2vec-large-chinese、m3e-base

决策: bge-small-zh-v1.5。RTX 4060 上 729 chunks 嵌入仅 1.8s,日常精度足够。高精度场景可切换 large 模型或 OpenAI API。


ADR-3: 为什么采用 Protocol 而非 ABC

日期: 2026-07-05 | 状态: 已采纳

候选: typing.Protocol(结构化子类型)、abc.ABC(名义子类型)、Callable(丢失类型信息)

决策: Protocol。外部模块无需依赖本项目源码即可实现 Splitter/Embedder,对插件化友好。


ADR-4: 为什么使用 rank-bm25 而非集成搜索引擎?

日期: 2026-07-11 | 状态: 已采纳

候选: rank-bm25(纯 Python BM25)、Elasticsearch(外部服务)、Whoosh(纯 Python 全文搜索)

决策: rank-bm25。零运维、轻量、与现有 ChromaDB 架构匹配。在向量候选上做 BM25 重打分(而非全文索引所有文档),兼顾性能和精度。