90 lines
3.7 KiB
Python
90 lines
3.7 KiB
Python
|
|
# =============================================================================
|
||
|
|
# 企微IT智能服务台 — 置信门控逻辑测试(D3 / P0-3)
|
||
|
|
# =============================================================================
|
||
|
|
# 说明:测试 confidence < 0.7 门控逻辑、阈值可配置性、source_failed 标记。
|
||
|
|
# =============================================================================
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
|
||
|
|
from app.schemas.enums import AudienceEnum
|
||
|
|
|
||
|
|
|
||
|
|
class TestConfidenceGate:
|
||
|
|
"""置信门控逻辑测试。"""
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_confidence_above_07_passes(self):
|
||
|
|
"""验证 confidence >= 0.7 通过门控。"""
|
||
|
|
from app.services.knowledge_iteration_service import KnowledgeIterationService
|
||
|
|
|
||
|
|
service = KnowledgeIterationService()
|
||
|
|
assert service._apply_confidence_gate(0.86) is True
|
||
|
|
assert service._apply_confidence_gate(0.70) is True # 边界值
|
||
|
|
assert service._apply_confidence_gate(0.95) is True
|
||
|
|
assert service._apply_confidence_gate(1.0) is True
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_confidence_below_07_fails(self):
|
||
|
|
"""验证 confidence < 0.7 未通过门控。"""
|
||
|
|
from app.services.knowledge_iteration_service import KnowledgeIterationService
|
||
|
|
|
||
|
|
service = KnowledgeIterationService()
|
||
|
|
assert service._apply_confidence_gate(0.69) is False
|
||
|
|
assert service._apply_confidence_gate(0.5) is False
|
||
|
|
assert service._apply_confidence_gate(0.0) is False
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_confidence_none_fails(self):
|
||
|
|
"""验证 confidence=None 未通过门控。"""
|
||
|
|
from app.services.knowledge_iteration_service import KnowledgeIterationService
|
||
|
|
|
||
|
|
service = KnowledgeIterationService()
|
||
|
|
assert service._apply_confidence_gate(None) is False
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_threshold_configurable(self):
|
||
|
|
"""验证门控阈值可配置。"""
|
||
|
|
from app.services.knowledge_iteration_service import KnowledgeIterationService
|
||
|
|
|
||
|
|
# 默认阈值 0.7
|
||
|
|
service = KnowledgeIterationService()
|
||
|
|
assert service.confidence_gate_threshold == 0.7
|
||
|
|
|
||
|
|
# 修改阈值
|
||
|
|
service.confidence_gate_threshold = 0.8
|
||
|
|
assert service._apply_confidence_gate(0.75) is False
|
||
|
|
assert service._apply_confidence_gate(0.85) is True
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_auto_tag_audience_manual(self, db_session):
|
||
|
|
"""验证手动录入→engineer_workguide。"""
|
||
|
|
from app.services.knowledge_iteration_service import KnowledgeIterationService
|
||
|
|
|
||
|
|
service = KnowledgeIterationService()
|
||
|
|
audience = await service._auto_tag_audience(
|
||
|
|
db_session, "manual", ["test_id"]
|
||
|
|
)
|
||
|
|
assert audience == AudienceEnum.engineer_workguide
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_auto_tag_audience_document_ragflow(self, db_session):
|
||
|
|
"""验证 RAGFlow 文档→engineer_workguide。"""
|
||
|
|
from app.services.knowledge_iteration_service import KnowledgeIterationService
|
||
|
|
|
||
|
|
service = KnowledgeIterationService()
|
||
|
|
audience = await service._auto_tag_audience(
|
||
|
|
db_session, "document_ragflow", ["test_id"]
|
||
|
|
)
|
||
|
|
assert audience == AudienceEnum.engineer_workguide
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_auto_tag_audience_conversation_default(self, db_session):
|
||
|
|
"""验证会话来源→默认 employee_quick_reply(保守)。"""
|
||
|
|
from app.services.knowledge_iteration_service import KnowledgeIterationService
|
||
|
|
|
||
|
|
service = KnowledgeIterationService()
|
||
|
|
audience = await service._auto_tag_audience(
|
||
|
|
db_session, "conversation", ["nonexistent_id"]
|
||
|
|
)
|
||
|
|
assert audience == AudienceEnum.employee_quick_reply
|