feat: 重构知识库系统,移除Hermes集成,增强RAG和同步功能
主要变更: - 移除Hermes智能体及相关回调服务 - 新增知识库RAG、同步、调度、规范化和索引任务服务 - 重构orchestrator服务,增强运行时聊天功能 - 更新前端聊天、政策制度、设置等页面样式和逻辑 - 更新expense_claims和document_intelligence服务 - 删除llm_wiki相关服务和测试文件 - 更新docker-compose配置和启动脚本
This commit is contained in:
95
server/tests/test_knowledge_rag_service.py
Normal file
95
server/tests/test_knowledge_rag_service.py
Normal file
@@ -0,0 +1,95 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from app.services import knowledge_rag as knowledge_rag_module
|
||||
from app.services.knowledge_rag import KnowledgeRagService
|
||||
|
||||
|
||||
def test_build_hits_prioritizes_structured_table_evidence_for_standard_queries() -> None:
|
||||
hits = KnowledgeRagService._build_hits_from_query_data(
|
||||
query="住宿费标准是多少?",
|
||||
chunks=[
|
||||
{
|
||||
"chunk_id": "plain-1",
|
||||
"file_path": "/tmp/doc-1__差旅制度.md",
|
||||
"content": "住宿费说明文字,提到了出差和报销要求,但没有清晰表格。",
|
||||
},
|
||||
{
|
||||
"chunk_id": "table-1",
|
||||
"file_path": "/tmp/doc-1__差旅制度.md",
|
||||
"content": "# 结构化表格补充\n\n| 城市 | 住宿费标准 |\n| 北京 | 500 |",
|
||||
},
|
||||
],
|
||||
entities=[],
|
||||
limit=2,
|
||||
)
|
||||
|
||||
assert [item["candidate_id"] for item in hits] == ["table-1", "plain-1"]
|
||||
|
||||
|
||||
def test_build_hits_boosts_query_term_matches() -> None:
|
||||
hits = KnowledgeRagService._build_hits_from_query_data(
|
||||
query="招待费报销标准",
|
||||
chunks=[
|
||||
{
|
||||
"chunk_id": "travel-1",
|
||||
"file_path": "/tmp/doc-1__费用制度.md",
|
||||
"content": "差旅费包含交通费、住宿费和餐补标准。",
|
||||
},
|
||||
{
|
||||
"chunk_id": "ent-1",
|
||||
"file_path": "/tmp/doc-1__费用制度.md",
|
||||
"content": "业务招待费报销标准:应结合客户接待场景、人数和审批要求执行。",
|
||||
},
|
||||
],
|
||||
entities=[],
|
||||
limit=2,
|
||||
)
|
||||
|
||||
assert [item["candidate_id"] for item in hits] == ["ent-1", "travel-1"]
|
||||
|
||||
|
||||
def test_build_hits_prioritizes_answer_clue_appendix_for_rule_queries() -> None:
|
||||
hits = KnowledgeRagService._build_hits_from_query_data(
|
||||
query="报销时限是多少?",
|
||||
chunks=[
|
||||
{
|
||||
"chunk_id": "plain-1",
|
||||
"file_path": "/tmp/doc-1__费用制度.md",
|
||||
"content": "本制度用于规范报销流程,员工应遵守公司审批要求。",
|
||||
},
|
||||
{
|
||||
"chunk_id": "clue-1",
|
||||
"file_path": "/tmp/doc-1__费用制度.md",
|
||||
"content": (
|
||||
"# 问答线索补充\n\n"
|
||||
"- 第二章 报销时限:费用发生后 30 日内提交申请。\n"
|
||||
"- 第二章 报销时限:超过 30 日需补充审批说明。"
|
||||
),
|
||||
},
|
||||
],
|
||||
entities=[],
|
||||
limit=2,
|
||||
)
|
||||
|
||||
assert [item["candidate_id"] for item in hits] == ["clue-1", "plain-1"]
|
||||
|
||||
|
||||
def test_resolve_default_qdrant_url_prefers_container_host(monkeypatch) -> None:
|
||||
monkeypatch.setattr(
|
||||
knowledge_rag_module.socket,
|
||||
"getaddrinfo",
|
||||
lambda hostname, port: [("family", "type", "proto", "canonname", ("172.21.0.2", 0))]
|
||||
if hostname == "qdrant"
|
||||
else [],
|
||||
)
|
||||
|
||||
assert knowledge_rag_module._resolve_default_qdrant_url() == "http://qdrant:6333"
|
||||
|
||||
|
||||
def test_resolve_default_qdrant_url_falls_back_to_loopback(monkeypatch) -> None:
|
||||
def raise_lookup_error(_hostname, _port):
|
||||
raise OSError("lookup failed")
|
||||
|
||||
monkeypatch.setattr(knowledge_rag_module.socket, "getaddrinfo", raise_lookup_error)
|
||||
|
||||
assert knowledge_rag_module._resolve_default_qdrant_url() == "http://127.0.0.1:6333"
|
||||
Reference in New Issue
Block a user