PMFlow/backend/app/services/ai_pmo_decision/engine.py

41 lines
1.8 KiB
Python

"""Decision engine composition for AI PMO runtime."""
from __future__ import annotations
from .policy import ExecutionPolicyBrain
from .shared import Any, CanonicalIntent
from .simulation import SimulationEngine
from .strategic import StrategicBrain
from .tactical import TacticalBrain
class DecisionEngine:
"""汇总三脑输出。"""
def __init__(self, *, policy_gate_rules: tuple[tuple[str, tuple[str, ...]], ...]) -> None:
self.strategic_brain = StrategicBrain()
self.tactical_brain = TacticalBrain()
self.simulation_engine = SimulationEngine()
self.execution_policy_brain = ExecutionPolicyBrain(policy_gate_rules=policy_gate_rules)
def decide(self, *, intent: CanonicalIntent, world_model: dict[str, Any], message_text: str) -> dict[str, Any]:
strategic = self.strategic_brain.evaluate(intent=intent, world_model=world_model, message_text=message_text)
strategic_plan, execution_plan = self.tactical_brain.plan(intent=intent, world_model=world_model, decision=strategic)
simulation = self.simulation_engine.simulate(intent=intent, world_model=world_model, execution_plan=execution_plan)
strategic_plan["simulation"] = simulation
execution_plan["simulation"] = simulation
policy = self.execution_policy_brain.evaluate(
message_text=message_text,
world_model=world_model,
intent=intent,
simulation=simulation,
)
strategic["risk_score"] = max(float(strategic.get("risk_score") or 0.0), float(simulation.get("projected_risk_score") or 0.0))
return {
"strategic": strategic,
"strategic_plan": strategic_plan,
"execution_plan": execution_plan,
"simulation": simulation,
"policy": policy,
}