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