Files

68 lines
2.4 KiB
Python
Raw Permalink 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。
把已交付化工新材料AI平台(吸附树脂)的领域知识库**导出为模板资产**
(`documents/*.md`),并提供与 `kb.resin.template.yaml` 清单一致的加载器:
- `resin_kb_loader(title)`:标题 → 文档文本(对齐 rag-kb 的 loader 约定,
可直接用于 `RagKnowledgeBase.from_template_config(..., loader=resin_kb_loader)`);
- `validate_export()`:校验 kb 清单声明的文档均有对应文件且非空
(导出完整性检查,防止清单与文档漂移)。
标题规范化:`GB/T 5475 ...` → 文件名 `GB-T-5475 ....md`(`/` 不允许出现在文件名)。
"""
from __future__ import annotations
import os
from typing import List, Optional
import yaml
#: 知识库配置资产(与模板清单同目录)
DEFAULT_KB_CONFIG = os.path.join(
os.path.dirname(os.path.abspath(__file__)), "kb.resin.template.yaml")
def resin_documents_dir() -> str:
"""文档集目录(documents/)。"""
return os.path.join(os.path.dirname(os.path.abspath(__file__)),
"documents")
def _doc_path(title: str) -> str:
"""标题 → 文档文件路径(规范化:/ 与空格 → -,对齐导出文件名)。"""
safe = title.replace("/", "-").replace(" ", "-")
return os.path.join(resin_documents_dir(), f"{safe}.md")
def resin_kb_loader(title: str) -> str:
"""按标题返回文档文本(找不到返回空串,与 rag-kb loader 约定一致)。"""
path = _doc_path(title)
if not os.path.isfile(path):
return ""
with open(path, "r", encoding="utf-8") as fh:
return fh.read()
def load_kb_config(kb_config_path: str = DEFAULT_KB_CONFIG) -> dict:
"""加载树脂知识库配置资产。"""
with open(kb_config_path, "r", encoding="utf-8") as fh:
return yaml.safe_load(fh) or {}
def validate_export(kb_config_path: str = DEFAULT_KB_CONFIG) -> List[str]:
"""校验导出完整性:清单声明的文档均有文件且非空。
Returns:
缺失/为空的问题列表(空 = 导出完整)。
"""
problems: List[str] = []
raw = load_kb_config(kb_config_path)
for src in raw.get("sources", []):
kind = src.get("kind")
for doc in src.get("documents", []):
text = resin_kb_loader(doc)
if not text:
problems.append(f"[{kind}] 文档缺失或为空: {doc}")
return problems