89 lines
2.9 KiB
Python
89 lines
2.9 KiB
Python
"""
|
|||
|
|
RouterAgent单元测试
|
||
|
|
"""
|
||
|
|
|
||
|
|
import pytest
|
||
|
|
from gfa_core.mas.agents.router import RouterAgent
|
||
|
|
from gfa_core.mas.agents.base import AgentState, AgentMessage, QueryMode
|
||
|
|
|
||
|
|
|
||
|
|
@pytest.mark.unit
|
||
|
|
class TestRouterAgent:
|
||
|
|
"""测试RouterAgent"""
|
||
|
|
|
||
|
|
@pytest.fixture
|
||
|
|
def router_agent(self, mock_llm_manager):
|
||
|
|
"""创建RouterAgent实例"""
|
||
|
|
return RouterAgent(mock_llm_manager)
|
||
|
|
|
||
|
|
@pytest.fixture
|
||
|
|
def sample_message(self):
|
||
|
|
"""示例消息"""
|
||
|
|
return AgentMessage(
|
||
|
|
sender="user",
|
||
|
|
receiver="router",
|
||
|
|
message_type="request",
|
||
|
|
payload={"query": "帮我分析拟南芥SPL基因家族"}
|
||
|
|
)
|
||
|
|
|
||
|
|
@pytest.fixture
|
||
|
|
def sample_state(self):
|
||
|
|
"""示例状态"""
|
||
|
|
return AgentState(session_id="test_session_001")
|
||
|
|
|
||
|
|
def test_agent_initialization(self, router_agent):
|
||
|
|
"""测试Agent初始化"""
|
||
|
|
assert router_agent.name == "router"
|
||
|
|
assert router_agent.role == "Intent Router"
|
||
|
|
|
||
|
|
def test_build_system_prompt(self, router_agent):
|
||
|
|
"""测试系统提示词加载"""
|
||
|
|
prompt = router_agent._build_system_prompt()
|
||
|
|
assert len(prompt) > 1000 # 提示词应该很长
|
||
|
|
assert "RouterAgent" in prompt or "router" in prompt.lower()
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_execute_analysis_intent(self, router_agent, sample_state, sample_message):
|
||
|
|
"""测试分析意图识别"""
|
||
|
|
result = await router_agent.execute(sample_state, sample_message)
|
||
|
|
|
||
|
|
assert result.mode == QueryMode.ANALYSIS
|
||
|
|
assert result.session_id == "test_session_001"
|
||
|
|
assert len(result.messages) > 0
|
||
|
|
|
||
|
|
@pytest.mark.asyncio
|
||
|
|
async def test_execute_faq_intent(self, router_agent, sample_state):
|
||
|
|
"""测试FAQ意图识别"""
|
||
|
|
message = AgentMessage(
|
||
|
|
sender="user",
|
||
|
|
receiver="router",
|
||
|
|
message_type="request",
|
||
|
|
payload={"query": "什么是SPL基因家族?"}
|
||
|
|
)
|
||
|
|
|
||
|
|
result = await router_agent.execute(sample_state, message)
|
||
|
|
|
||
|
|
assert result.mode == QueryMode.FAQ
|
||
|
|
|
||
|
|
def test_rule_based_classify_analysis(self, router_agent):
|
||
|
|
"""测试规则分类-分析模式"""
|
||
|
|
mode, confidence = router_agent._rule_based_classify("帮我分析基因家族")
|
||
|
|
|
||
|
|
assert mode == QueryMode.ANALYSIS
|
||
|
|
assert confidence > 0.8
|
||
|
|
|
||
|
|
def test_rule_based_classify_faq(self, router_agent):
|
||
|
|
"""测试规则分类-FAQ模式"""
|
||
|
|
mode, confidence = router_agent._rule_based_classify("什么是基因家族")
|
||
|
|
|
||
|
|
assert mode == QueryMode.FAQ
|
||
|
|
assert confidence > 0.7
|
||
|
|
|
||
|
|
def test_extract_params(self, router_agent):
|
||
|
|
"""测试参数提取"""
|
||
|
|
text = "分析拟南芥SPL基因家族"
|
||
|
|
params = router_agent._extract_params(text)
|
||
|
|
|
||
|
|
assert params.get("family") == "SPL"
|
||
|
|
assert params.get("species") == "Arabidopsis"
|