54 lines
1.9 KiB
Python
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
|