Files
projectAIpopular/tests/test_knowledge.py
T
tzt ce0f6170d3 chore: T-P-1 工作区收敛——并行会话成果与历史未入库文件整理入库
- 入库历史遗漏源码/测试:router_system 9 模块(agent/executors/inference/knowledge/
  memory/planner/skills/trace)、tests 11 个测试文件、config/knowledge 领域知识
- 入库根目录方案文档(v2/v3/可行性×2)、references 文献(arxiv 14-18/cnki_open/
  参考文献清单)、research 论文素材(routerarena/paper/中文文献 PDF)
- 前端构建产物刷新(新 hash);webapp 误写文档删除
- gitignore 增补:deepseek-harness、research/_refs、.mimosa/.zcode、网关日志/pid、
  临时调试脚本、tests/e2e/node_modules、AI代理功能开发/prefix
- 基线确认:318 passed
2026-09-05 08:28:25 +08:00

60 lines
2.0 KiB
Python

"""知识库(KnowledgeBase)单元测试。"""
from router_system.knowledge import KnowledgeBase, Rule
def test_builtin_rules_loaded():
kb = KnowledgeBase()
# 内置规则 + 文件规则合并后应至少有 10+ 条
assert kb.rules_count() >= 10
# 文件规则按 id 覆盖内置(code-sort 存在且可命中)
r = kb.rule("code-sort")
assert r is not None
assert r.template == "code-implement"
def test_match_priority_order():
kb = KnowledgeBase()
hits = kb.match("用 Python 写一个快速排序函数", domain="code")
assert hits, "应命中 code 领域规则"
# 优先级降序:排序规则(90) 应在通用实现规则(50) 之前
assert hits[0].id == "code-sort"
priorities = [h.priority for h in hits]
assert priorities == sorted(priorities, reverse=True)
def test_match_cross_domain():
kb = KnowledgeBase()
# 同一文本在不同领域过滤下命中不同规则
code_hits = kb.match("帮我调试报错 TypeError", domain="code")
assert code_hits and code_hits[0].id == "code-debug"
# 领域过滤:不指定 domain 时全领域匹配
all_hits = kb.match("帮我调试报错 TypeError")
assert len(all_hits) >= len(code_hits)
def test_task_template():
kb = KnowledgeBase()
tpl = kb.task_template("code-implement")
assert tpl is not None
steps = tpl["steps"]
assert len(steps) == 4
ids = [s["id"] for s in steps]
assert ids == ["analyze", "design", "implement", "verify"]
# 依赖关系存在
assert steps[1]["deps"] == ["analyze"]
def test_facts():
kb = KnowledgeBase()
legal_facts = kb.facts("legal")
assert any("竞业" in f["statement"] for f in legal_facts)
medical_facts = kb.facts("medical")
assert any("高血压" in f["statement"] for f in medical_facts)
def test_rule_matches_case_insensitive():
r = Rule(id="t", domain="code", patterns=["Sort", "Python"])
assert r.matches("用 python 写一个 sort 算法")
assert r.matches("PYTHON 快速排序")
assert not r.matches("java 写个函数")