merge: integrate ZSY customer service and profile capabilities
This commit is contained in:
@@ -12,6 +12,7 @@ from app.core.contracts import (
|
||||
)
|
||||
from app.core.errors import ForbiddenAgentError, RecoverableAgentError
|
||||
from app.service.agent.base import BaseAgent
|
||||
from app.service.agent.customer_service_agent import CustomerServiceAgent
|
||||
from app.service.agent.factory import AgentFactory
|
||||
from app.service.agent.governance import review_output
|
||||
|
||||
@@ -23,6 +24,59 @@ def test_all_governance_hooks_protected(name):
|
||||
type("Bypass", (BaseAgent,), {name: lambda *args: None})
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_visitor_does_not_recall_customer_memory() -> None:
|
||||
"""访客不能以匿名主体标识读取任何客户记忆。"""
|
||||
class Demo(BaseAgent):
|
||||
async def handle(self, request, context):
|
||||
return CoreResult(text="unused")
|
||||
|
||||
class FailingGovernance:
|
||||
async def recall(self, context):
|
||||
raise AssertionError("visitor memory recall is forbidden")
|
||||
|
||||
definition = AgentDefinition(
|
||||
agent_type="demo", version="1", allowed_roles=("visitor",), allowed_portals=("api",)
|
||||
)
|
||||
agent = Demo(definition)
|
||||
agent.bind_governance(FailingGovernance())
|
||||
request = AgentRequest(
|
||||
agent_type="demo", message="公开问题", session_id="visitor-session",
|
||||
idempotency_key="visitor-memory-request-0001",
|
||||
)
|
||||
context = RequestContext(
|
||||
user_id="visitor-id", trace_id="visitor-trace", roles=("visitor",),
|
||||
permissions=("agent:run",), data_scope="public",
|
||||
)
|
||||
|
||||
await agent.recall_memory(request, context)
|
||||
|
||||
assert agent.memories == ()
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_authenticated_customer_service_does_not_recall_customer_memory() -> None:
|
||||
"""客服即使面对已登录用户,也不得触发通用长期或画像记忆读取。"""
|
||||
class FailingGovernance:
|
||||
async def recall(self, context):
|
||||
raise AssertionError("customer service memory recall is forbidden")
|
||||
|
||||
agent = CustomerServiceAgent()
|
||||
agent.bind_governance(FailingGovernance())
|
||||
request = AgentRequest(
|
||||
agent_type="customer_service", message="查询我的持仓", session_id="customer-session",
|
||||
idempotency_key="customer-memory-request-0001",
|
||||
)
|
||||
context = RequestContext(
|
||||
user_id="1", trace_id="customer-trace", roles=("customer",),
|
||||
permissions=("agent:run",), data_scope="self",
|
||||
)
|
||||
|
||||
await agent.recall_memory(request, context)
|
||||
|
||||
assert agent.memories == ()
|
||||
|
||||
|
||||
async def test_resolve_recall_handle_review_order_and_snapshot(governance):
|
||||
calls = []
|
||||
config = ResolvedAgentConfig(config_version="released", prompt_version="p", model_endpoint="m")
|
||||
|
||||
Reference in New Issue
Block a user