Files
ai-ticket-platform/backend/apps/knowledge/tests/test_retrieval.py
2026-07-03 17:52:59 +08:00

54 lines
1.9 KiB
Python

from apps.knowledge.models import KnowledgeBase, KnowledgeChunk, KnowledgeItem
from apps.knowledge.services import retrieve_knowledge
from apps.solutions.models import Solution
def test_retrieve_knowledge_prefers_relevant_chunk(db):
base = KnowledgeBase.objects.create(name="采集知识库", scope="数据采集")
item = KnowledgeItem.objects.create(
knowledge_base=base,
title="税局采集进度",
problem="采集进度不更新",
solution="查询 Python 日志,确认税局状态。",
status="published",
)
KnowledgeChunk.objects.create(
knowledge_base=base,
item=item,
chunk_index=0,
content="税局采集进度不更新时,需要查询 Python 日志。",
embedding=[0.1, 0.2],
metadata={"source_type": "knowledge_item", "title": item.title},
)
KnowledgeChunk.objects.create(
knowledge_base=base,
chunk_index=1,
content="登录失败通常需要检查账号密码。",
embedding=[0.9, 0.1],
metadata={"source_type": "document", "title": "登录问题"},
)
results = retrieve_knowledge("税局采集进度怎么查询", limit=1)
assert len(results) == 1
assert results[0]["title"] == "税局采集进度"
assert "Python 日志" in results[0]["content"]
def test_published_solution_can_be_indexed_for_retrieval(db):
solution = Solution.objects.create(
title="税局不稳定采集处理中",
problem_signature="采集进度长时间不更新",
root_cause="税局服务不稳定",
solution="回复客户税局不稳定,任务仍在采集中。",
status="published",
)
from apps.knowledge.services import index_published_solution
chunks = index_published_solution(solution)
assert len(chunks) == 1
assert chunks[0].metadata["source_type"] == "solution"
assert chunks[0].metadata["solution_id"] == solution.id