41 lines
1.8 KiB
Python
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,
|
|
}
|