feat(rag): v1 rerank 精排 + bge-m3 多语言切换(T6/T11 架构审查整改)

- T6 (Issue6): RerankConfig(enabled/model=BAAI/bge-reranker-v2-m3/device)
  - rag-layer-design §6.3 Rerank 精排:窗口=RRF top-10、候选≤top_k 跳过、
    故障降级 RRF 原序;原 §6.3-6.6 顺延 6.4-6.7
  - config-design §5 新增 rerank 段;design §5.5 检索策略加 rerank
- T11 (OV2): EmbeddingConfig.model 默认 bge-small-zh-v1.5 → BAAI/bge-m3(日文语料)
  - rag-layer-design 选型表/依赖表/manifest/流程图同步 + 新增 §2.3 日文样本验证
  - design.md / implementation-plan 4.3 / config-design embedding 同步
- 新增 test_rag_design_consistency.py 一致性门禁(6 用例防文档漂移)
- TDD: RED(默认模型仍旧 + rerank 字段不存在)→ GREEN → 全量 198 passed / 100.00%(996 stmts/252 br)
This commit is contained in:
lhl
2026-08-12 11:32:28 +08:00
parent c170ec2edd
commit 3decdfc31c
9 changed files with 186 additions and 24 deletions
+26 -3
View File
@@ -35,7 +35,7 @@ def test_from_dir_maps_yaml_fields():
assert s.inference.models.primary.name == "deepseek-chat"
assert s.inference.llm_calls.max_context_tokens == 16000
assert s.inference.structured_output.max_parse_retry == 3
assert s.rag.embedding.model == "BAAI/bge-small-zh-v1.5"
assert s.rag.embedding.model == "BAAI/bge-m3"
assert s.rag.retrieval.rrf_k == 42
@@ -45,7 +45,7 @@ def test_defaults_when_dir_empty(tmp_path):
assert s.app.server.max_upload_mb == 100
assert s.app.task_queue["backend"] == "memory"
assert s.inference.models.primary.name == "deepseek-chat"
assert s.rag.embedding.model == "BAAI/bge-small-zh-v1.5"
assert s.rag.embedding.model == "BAAI/bge-m3"
assert s.rag.retrieval.rrf_k == 60
@@ -82,4 +82,27 @@ def test_expand_env_list_branch(monkeypatch):
data = {"models": [{"name": "a", "key": "${SOME_API_KEY}"}, "plain"]}
out = _expand_env(data)
assert out["models"][0]["key"] == "sk-list-xyz"
assert out["models"][1] == "plain"
assert out["models"][1] == "plain"
# ---------- T6/T11: rerank 精排 + bge-m3 多语言(I6/OV2 ----------
def test_embedding_default_model_is_bge_m3():
"""OV2bge-small-zh 面向中文、实际语料为日文 → 默认切换多语言 bge-m3。"""
s = Settings()
assert s.rag.embedding.model == "BAAI/bge-m3"
def test_rerank_config_defaults():
"""I6v1 引入 rerank 精排(bge-reranker-v2-m3),默认启用、device=cpu。"""
s = Settings()
assert s.rag.rerank.enabled is True
assert s.rag.rerank.model == "BAAI/bge-reranker-v2-m3"
assert s.rag.rerank.device == "cpu"
def test_rerank_env_override(monkeypatch):
monkeypatch.setenv("GENESIS_RAG__RERANK__ENABLED", "false")
s = Settings.from_dir(FIXTURES)
assert s.rag.rerank.enabled is False
assert s.rag.rerank.model == "BAAI/bge-reranker-v2-m3"