代理人异常行为链识别(RISK-008)落地: - 新增 agent_behavior_service:三条件证据聚合(A 诱导调仓/B AUTH_403_SCOPE 越权试探/C AUTH_403_NOT_OWNER|NOT_ASSIGNED 越权查询),按代理人维度独立出 pattern 单,payload.actor_id 指向代理人,审计仅 INSERT event_type=agent_behavior_detected。 - risk_repository 新增 list_audit_events / find_agent_behavior_alert / merge_agent_behavior_payload(同日同代理人一张单,证据并集)。 - trade_gateway.submit_trade 补 actor_id 透传(代理人发起交易归属发起人,缺省 SYSTEM);simulate 路由传入 auth.actor_id。 - chat_tools 新增 query_agent_behavior 只读 Tool(agent_id 过滤 + 客户脱敏),tool_service 补意图词与摘要。 - scripts/cron/agent_behavior_scan.py 定时扫描脚本。 - 修复 append_alert_event 序列化缺 default=str(C6 evidence 含 datetime 字段)。 - 单测 12 例(_count_induce 边界 / 三条件 / 出单去重 / payload 归属 / Tool 过滤脱敏)。 全量 pytest 482 passed 0 failed(470 基线 + 12 C6)。
33 lines
1.1 KiB
Python
33 lines
1.1 KiB
Python
"""RISK-008 代理人行为链扫描(建议 30min 周期;RISK_AGENT_BEHAVIOR_SCAN_MINUTES 可配)。
|
||
|
||
初期独立脚本 + 系统 cron;结构对齐 scripts/cron/escalation_scan.py:
|
||
sys.path 引导 → new_trace → 扫描 → 打印 JSON 摘要(供 cron 日志 / 演示走查)。
|
||
审计写库失败由 service 内降级留底,不阻塞下次扫描(红线 5 口径)。
|
||
"""
|
||
|
||
from __future__ import annotations
|
||
|
||
import json
|
||
import sys
|
||
from pathlib import Path
|
||
|
||
# ① sys.path 引导项目根(escalation_scan 先例)
|
||
ROOT = Path(__file__).resolve().parents[2]
|
||
sys.path.insert(0, str(ROOT))
|
||
|
||
from app.service.risk.agent_behavior_service import scan_and_alert # noqa: E402
|
||
from app.utils.trace import new_trace # noqa: E402
|
||
|
||
|
||
def main() -> int:
|
||
# ② 显式生成 trace(无 HTTP 上下文,service 内 current_trace 复用)
|
||
new_trace()
|
||
# ③ 扫描 → 打印 JSON 摘要
|
||
summary = scan_and_alert()
|
||
print(json.dumps(summary, ensure_ascii=False, default=str, indent=2))
|
||
return 0
|
||
|
||
|
||
if __name__ == "__main__":
|
||
sys.exit(main())
|