feat: adapt advisor agent to qyqy base
This commit is contained in:
@@ -12,6 +12,7 @@ from app.infrastructure.memory_cache import MemoryCacheAdapter
|
|||||||
from app.infrastructure.vector_memory import VectorMemoryAdapter
|
from app.infrastructure.vector_memory import VectorMemoryAdapter
|
||||||
from app.service.agent.factory import AgentFactory
|
from app.service.agent.factory import AgentFactory
|
||||||
from app.service.agent.governance import PlatformGovernance
|
from app.service.agent.governance import PlatformGovernance
|
||||||
|
from app.service.agent.implementations.advisor import AdvisorAgent
|
||||||
from app.service.agent.implementations.fund_query_demo import FundQueryDemoAgent
|
from app.service.agent.implementations.fund_query_demo import FundQueryDemoAgent
|
||||||
from app.service.fund_quote_service import query_fund_quote_tool
|
from app.service.fund_quote_service import query_fund_quote_tool
|
||||||
from app.service.intent_classifier import IntentClassifier
|
from app.service.intent_classifier import IntentClassifier
|
||||||
@@ -172,3 +173,7 @@ def register_business_agents(factory: AgentFactory) -> None:
|
|||||||
FundQueryDemoAgent.definition,
|
FundQueryDemoAgent.definition,
|
||||||
lambda _context: FundQueryDemoAgent(FundQueryDemoAgent.definition),
|
lambda _context: FundQueryDemoAgent(FundQueryDemoAgent.definition),
|
||||||
)
|
)
|
||||||
|
factory.register(
|
||||||
|
AdvisorAgent.definition,
|
||||||
|
lambda _context: AdvisorAgent(AdvisorAgent.definition),
|
||||||
|
)
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
"""投顾 Agent 的迁移骨架。
|
||||||
|
|
||||||
|
当前阶段只接入新底座已有的场内基金行情只读能力;后续业务模块会按迁移 TODO
|
||||||
|
逐项扩展 definition、工具白名单和处理逻辑。
|
||||||
|
"""
|
||||||
|
|
||||||
|
from app.core.contracts import AgentDefinition
|
||||||
|
from app.service.agent.implementations.fund_query_demo import FundQueryDemoAgent
|
||||||
|
|
||||||
|
|
||||||
|
class AdvisorAgent(FundQueryDemoAgent):
|
||||||
|
"""通过公共 BaseAgent 链路运行的最小投顾 Agent。"""
|
||||||
|
|
||||||
|
definition = AgentDefinition(
|
||||||
|
agent_type="advisor",
|
||||||
|
version="0.1.0",
|
||||||
|
allowed_roles=("customer", "advisor", "operator", "admin"),
|
||||||
|
allowed_portals=("api",),
|
||||||
|
allowed_tools=("query_fund_quote",),
|
||||||
|
supported_intents=("fund_quote",),
|
||||||
|
)
|
||||||
@@ -28,6 +28,7 @@ dependencies = [
|
|||||||
dev = [
|
dev = [
|
||||||
"pytest>=8.3,<9",
|
"pytest>=8.3,<9",
|
||||||
"pytest-asyncio>=0.25,<1",
|
"pytest-asyncio>=0.25,<1",
|
||||||
|
"aiosqlite>=0.20,<1",
|
||||||
"ruff>=0.9,<1",
|
"ruff>=0.9,<1",
|
||||||
"mypy>=1.14,<2",
|
"mypy>=1.14,<2",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -17,5 +17,6 @@ httpx>=0.28,<1
|
|||||||
# Development and test dependencies
|
# Development and test dependencies
|
||||||
pytest>=8.3,<9
|
pytest>=8.3,<9
|
||||||
pytest-asyncio>=0.25,<1
|
pytest-asyncio>=0.25,<1
|
||||||
|
aiosqlite>=0.20,<1
|
||||||
ruff>=0.9,<1
|
ruff>=0.9,<1
|
||||||
mypy>=1.14,<2
|
mypy>=1.14,<2
|
||||||
|
|||||||
@@ -0,0 +1,22 @@
|
|||||||
|
from app.core.contracts import RequestContext
|
||||||
|
from app.service.agent.base import BaseAgent
|
||||||
|
from app.service.agent.bootstrap import get_agent_factory
|
||||||
|
from app.service.agent.implementations.advisor import AdvisorAgent
|
||||||
|
|
||||||
|
|
||||||
|
def test_advisor_is_registered_through_the_new_base_factory() -> None:
|
||||||
|
factory = get_agent_factory()
|
||||||
|
definition = factory.definition("advisor")
|
||||||
|
context = RequestContext(
|
||||||
|
user_id="1",
|
||||||
|
trace_id="advisor-base-adapter",
|
||||||
|
roles=("customer",),
|
||||||
|
permissions=("agent:run",),
|
||||||
|
)
|
||||||
|
agent = factory.create("advisor", context)
|
||||||
|
|
||||||
|
assert isinstance(agent, BaseAgent)
|
||||||
|
assert isinstance(agent, AdvisorAgent)
|
||||||
|
assert agent.definition == definition
|
||||||
|
assert definition.allowed_tools == ("query_fund_quote",)
|
||||||
|
assert definition.supported_intents == ("fund_quote",)
|
||||||
Reference in New Issue
Block a user