refactor(server): scene 注册表骨架 + 统一门控管道设计文档
Phase 1 P1.1-P1.2:为后端门控收口提供声明式场景注册基础设施。 - 新建 scenes/ 目录:gate_rules(GateRule/SceneRoute 枚举)、scene_descriptor(SceneDescriptor dataclass)、scene_registry(SceneRegistry 单例) - 3 个场景迁入 descriptor:expense_application / reimbursement / query_travel_standard - __init__.py 的 bootstrap_scenes 在 import 时注册 + 运行时绑定 handler/builder/executor(解决循环 import) - 查询场景 priority=50 优先于 MODEL_ONLY 场景,确保规则匹配先于 LLM - 落地 UNIFIED_GATE_PIPELINE.md 架构文档:目标架构 / 验收标准(接入 O(1))/ 3 阶段迁移路径 - 76 passed,scene 注册表未破坏现有代码;与 intent_registry 暂时并存,P1.3-P1.8 会统一迁移
This commit is contained in:
63
server/src/app/services/scenes/scene_descriptor.py
Normal file
63
server/src/app/services/scenes/scene_descriptor.py
Normal file
@@ -0,0 +1,63 @@
|
||||
from __future__ import annotations
|
||||
|
||||
from dataclasses import dataclass, field
|
||||
from typing import Any, Callable
|
||||
|
||||
from app.services.scenes.gate_rules import GateRule, SceneRoute
|
||||
|
||||
|
||||
@dataclass(frozen=True)
|
||||
class SceneDescriptor:
|
||||
"""单个业务场景的声明式描述符。
|
||||
|
||||
一个场景的"如何识别""走哪条路""做什么""要什么槽位""能否恢复上下文"
|
||||
全部在这里声明,实现接入成本 O(1)。
|
||||
"""
|
||||
|
||||
scene_id: str
|
||||
"""唯一标识,等同 task_type(如 expense_application / query_travel_standard)。"""
|
||||
|
||||
label: str
|
||||
"""中文标签,用于 system prompt、前端展示、日志。"""
|
||||
|
||||
signal_keywords: tuple[str, ...] = ()
|
||||
"""规则识别的关键词;聚合进 off_topic 信号池,也用于 CHOICE 门控规则匹配。"""
|
||||
|
||||
ontology_fields: tuple[str, ...] = ()
|
||||
"""该场景允许的 canonical 槽位;为空表示沿用全局 BUSINESS_CANONICAL_FIELDS。"""
|
||||
|
||||
gate: GateRule = GateRule.MODEL_ONLY
|
||||
"""门控规则,决定场景如何参与 gate_classify 裁决。"""
|
||||
|
||||
route: SceneRoute = SceneRoute.MODEL_INTENT
|
||||
"""路由策略,gate_classify 命中后决定走图的哪条边。"""
|
||||
|
||||
handler: Callable[..., Any] | None = None
|
||||
"""执行函数;HANDLER_ONLY 路由必填,其他路由可选。"""
|
||||
|
||||
action_steps_builder: Callable[[Any], list[Any]] | None = None
|
||||
"""动作步骤生成函数;把 StewardTask 转换为白名单 action steps。"""
|
||||
|
||||
can_resume: bool = False
|
||||
"""是否参与"再提交"上下文恢复。"""
|
||||
|
||||
flow_id: str | None = None
|
||||
"""候选流程确认使用的 flow_id;查询/命令类为 None。"""
|
||||
|
||||
prompt_fragment: str = ""
|
||||
"""注入 steward_intent_agent system prompt 的识别指引片段。"""
|
||||
|
||||
priority: int = 100
|
||||
"""gate_classify 的匹配优先级;数字小的优先。"""
|
||||
|
||||
side_effect_actions: tuple[str, ...] = ()
|
||||
"""该场景产生副作用的 action_type 集合。"""
|
||||
|
||||
noop_actions: tuple[str, ...] = ()
|
||||
"""该场景的无副作用 action_type 集合(填充/预览/校验等)。"""
|
||||
|
||||
assigned_agent: str = ""
|
||||
"""该场景对应的执行 agent 标识。"""
|
||||
|
||||
executor: Callable[..., Any] | None = None
|
||||
"""副作用/查询动作的执行器;供 action_executor 通过 registry 分发。"""
|
||||
Reference in New Issue
Block a user