fix: T21 真库联调三坑——①Milvus Lite 文件库跨进程重开 collection released, ensure_collection 补显式 load(单测同进程覆盖不到); ②faiss 不支持中文路径(faiss C++ IO), 本机 .env 改英文绝对路径 C:/Users/YUAN/.jinrong/milvus/, .env.example 加警告; ③build_kb 直跑 sys.path 引导项目根(同 rebuild_alerts 先例); 真库 24 块入库+检索验收通过(基金申购 Top3 命中申赎规则, 溯源完整), 425 绿

This commit is contained in:
2026-09-07 12:11:10 +08:00
parent 1c51149912
commit 535c8a0a20
3 changed files with 12 additions and 1 deletions
+1
View File
@@ -18,6 +18,7 @@ NEO4J_USER=neo4j
NEO4J_PASSWORD=
# Milvus Lite
# 注意:路径含中文会触发 Milvus Lite(faiss) 文件 IO 失败,Windows 中文用户目录请改纯英文绝对路径
MILVUS_URI=./data/milvus.db
# Ollama Embedding
+7 -1
View File
@@ -64,20 +64,26 @@ def _kb_schema(dim: int):
def ensure_collection(client: MilvusClient, dim: int | None = None) -> None:
"""幂等建集合(exists 跳过;不存在则建 schema + 向量索引)。
"""幂等建集合 + 确保加载(exists → load;不存在 → 建 schema + 索引 + load)。
索引 AUTOINDEX + COSINE:Milvus Lite 支持 AUTOINDEX(自动选型),
COSINE 语义直观且 bge-m3 未归一化时也正确。dim 缺省取 settings.embed_dim,
与 embedding 服务同源——两边配置天然一致,不必各配一份。
load 口径(2026-09-07 实测坑):Milvus Lite 文件库**跨进程重开**后
collection 处于 released 状态,直接 search 报 MilvusException(code=101);
单测同进程覆盖不到,须每次 ensure 时显式 load_collection。
"""
dim = dim or settings.embed_dim
if client.has_collection(COLLECTION_NAME):
client.load_collection(COLLECTION_NAME)
return
index = client.prepare_index_params()
index.add_index(field_name="embedding", index_type="AUTOINDEX", metric_type="COSINE")
client.create_collection(
COLLECTION_NAME, schema=_kb_schema(dim), index_params=index
)
client.load_collection(COLLECTION_NAME)
def insert_chunks(client: MilvusClient, rows: list[dict]) -> int:
+4
View File
@@ -23,6 +23,10 @@ import re
import sys
from pathlib import Path
# 项目根加入 path(直跑脚本时 sys.path[0] 为脚本目录,须自行引导;同 rebuild_alerts)
ROOT = Path(__file__).resolve().parents[2]
sys.path.insert(0, str(ROOT))
# 允许 doc_type 白名单(03-milvus-collections.md §2.1 冻结枚举)
DOC_TYPES = ("prospectus", "fee", "rule", "risk")