b536672000
- PostgreSQL 切换 pgvector/pgvector:pg17 镜像;迁移 000024 建 vector 扩展、 knowledge_chunks.embedding vector(1024) + HNSW 余弦索引,retrieval_mode 放宽三态 - OllamaEmbedder 本地 bge-m3 批量嵌入,404 惰性 pull 重试,维度/超时校验,可整体关闭 - SemanticRetriever/HybridRetriever + NewRetriever 按 retrieval_mode 分发,缺 embedder 回退 FTS - 文档入库同步批量向量化;Ollama 故障降级入库 + embedding_failed 事件 - 修复 pgx CopyFrom 对 vector 列二进制编码误读:COPY 基础列后同事务 unnest 批量回填 - 修复降级路径 embeddings=nil 索引越界 panic(Add 与 Reprocess) - 知识库列表 vectorized_chunk_count + 前端三态检索模式选择与向量化覆盖率 - 单测 embedder/retrievers + 集成 TestKnowledgeVectorLifecycle 全绿 Co-Authored-By: Claude <noreply@anthropic.com>
2.0 KiB
2.0 KiB
ADR-0002:对象存储与向量化基础设施入基线
状态:已接受
日期:2026-08-12
取代/修订:ADR-0001
决策
M8 起把 MinIO(对象存储)与 pgvector + 本地 Ollama(向量化)纳入基线,但它们都不作为启动依赖。
- MinIO 自托管:上传/下载全部经
gateway-api代理,MinIO 不暴露主机端口;gateway.file_objects元数据行以 PostgreSQL 为权威,对象未就绪时上传得到明确报错,服务不崩溃。 - pgvector + Ollama:PostgreSQL 镜像切换为
pgvector/pgvector:pg17(数据卷兼容),knowledge_chunks.embedding vector(1024)由本地 Ollama 容器(默认bge-m3)产生;Ollama 未就绪时知识库入库降级(embedding 置 NULL +knowledge_document.embedding_failed事件),检索自动回退纯 FTS。 - 不引入 pgvector-go / S3 客户端到领域层:向量以
$1::vector字面量直传;对象存储经internal/platform/storage适配层隔离,领域层只依赖接口。 - ClickHouse 仍不属于基线:审计与统计继续存放 PostgreSQL。
动机
- 知识库需要向量化语义召回(旗舰版"外部文档导入、自动切分、向量化、语义匹配召回"),并作为 M10 记忆管理、M12 语义输出的依赖基座。
- 门户个人文件仓库与管理端文件管理需要对象存储;自托管 MinIO 保证完全内网离线。
- 本地 Ollama 生成嵌入避免外发文本到公网 embedding API,多语言模型 bge-m3 与中文检索目标匹配。
影响
- 部署编排新增
minio、ollama两个 stateful 服务与minio-data、ollama-models卷;nginxclient_max_body_size提到 256 MiB 盖过 128 MiB 上传上限。 - 运维需备份
minio-data、ollama-models卷;Ollama 首次拉取 bge-m3 约 1.2 GiB,EMBEDDINGS_ENABLED=false可关闭。 EMBEDDING_DIM必须与vector(1024)一致,配置校验拦截不符。- ADR-0001 第 4 条(MinIO/S3 不在基线)与"知识库只保存纯文本"不再成立,本 ADR 取代。