Files
iAOP/templates/resin/rag-kb/tests/test_resin_export.py
T

85 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# -*- 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()