Files

89 lines
2.9 KiB
Python
Raw Permalink Normal View History

2026-08-03 18:42:47 +08:00
"""
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"