feat: 完成 issue #83 [树脂] 树脂 RAG 知识库导出

This commit is contained in:
2026-08-05 05:03:33 +08:00
parent 05bcb3b2f5
commit 6899a2977d
10 changed files with 205 additions and 0 deletions
@@ -0,0 +1,84 @@
# -*- coding: utf-8 -*-
"""树脂 RAG 知识库导出测试(issue #83)。
覆盖:
1. kb.resin.template.yaml 清单声明的 9 篇文档全部导出且非空(validate_export);
2. resin_kb_loader 按标题返回文本(含 GB/T 标题规范化);
3. loader 可直接用于 RagKnowledgeBase(from_template_config + loader);
4. 未知标题 → 空串。
"""
import os
import sys
import unittest
_RAGKB_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, _RAGKB_DIR)
from loader import ( # noqa: E402
DEFAULT_KB_CONFIG,
resin_kb_loader,
validate_export,
)
class TestExportCompleteness(unittest.TestCase):
"""导出完整性:清单 ↔ 文档文件一致。"""
def test_all_listed_documents_exported(self):
problems = validate_export()
self.assertEqual(problems, [], f"导出不完整: {problems}")
def test_document_count(self):
docs = os.listdir(os.path.join(_RAGKB_DIR, "documents"))
self.assertEqual(len(docs), 8)
class TestLoader(unittest.TestCase):
"""加载器行为。"""
def test_process_doc(self):
text = resin_kb_loader("吸附树脂合成工艺规范")
self.assertIn("悬浮聚合法", text)
def test_gbt_title_normalization(self):
# 标题含 / → 文件名用 -(GB/T 5475 → GB-T-5475)
text = resin_kb_loader("GB/T 5475 离子交换树脂取样方法")
self.assertIn("取样", text)
def test_unknown_title_empty(self):
self.assertEqual(resin_kb_loader("不存在的文档"), "")
def test_kb_config_loads(self):
import yaml
with open(DEFAULT_KB_CONFIG, "r", encoding="utf-8") as fh:
raw = yaml.safe_load(fh)
self.assertEqual(raw["template"], "resin")
class TestRagKbIntegration(unittest.TestCase):
"""与内核 rag-kb 集成(loader 直接可用)。"""
def test_build_kb_from_export(self):
import importlib.util
# 挂载 core/rag-kb(目录含连字符)
repo_root = os.path.dirname(os.path.dirname(os.path.dirname(
os.path.dirname(os.path.dirname(os.path.abspath(__file__))))))
rag_kb_dir = os.path.join(repo_root, "core", "rag-kb")
if "rag_kb" not in sys.modules:
spec = importlib.util.spec_from_file_location(
"rag_kb", os.path.join(rag_kb_dir, "__init__.py"),
submodule_search_locations=[rag_kb_dir])
_kb = importlib.util.module_from_spec(spec)
sys.modules["rag_kb"] = _kb
spec.loader.exec_module(_kb)
from rag_kb import RagKnowledgeBase, load_kb_config # noqa: E402
kb = RagKnowledgeBase.from_template_config(
load_kb_config(DEFAULT_KB_CONFIG), loader=resin_kb_loader)
self.assertGreater(kb.doc_count, 0)
hits = kb.search("交换容量测定", top_k=3, categories=None)
self.assertGreater(len(hits), 0)
if __name__ == "__main__":
unittest.main()