feat: add knowledge retrieval service
This commit is contained in:
53
backend/apps/knowledge/tests/test_retrieval.py
Normal file
53
backend/apps/knowledge/tests/test_retrieval.py
Normal file
@@ -0,0 +1,53 @@
|
||||
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
|
||||
Reference in New Issue
Block a user