Advisor 在小人空闲或心情低落时请求角色化建议,通过 Core ToolCall 执行动作,并将直接执行、玩家审批和反馈收敛到一个有界周期。
先读 Source/Advisor/README.md。通常只需要继续打开:
Source/Comps/CompAIAdvisor.cs:Verse 适配、持久化开关与PostDeSpawn/PostDestroy悬空审批清理。Source/Advisor/AdvisorGameComponent.cs:节流扫描和触发。Source/Advisor/AdvisorCycleCoordinator.cs:请求周期、LLMpre_approved防伪剥离、按自治域自动注入pre_approved、内阁批量提案与唯一终态。Source/Advisor/AdvisorTaskDriver.cs:请求和反馈消息构建。Source/Advisor/AdvisorRequestAugmentationFactory.cs:初始 Decision envelope 与可选提示词增量。Source/Advisor/AdvisorRequestCycleState.cs:纯审批/反馈状态机。Source/Advisor/AdvisorToolRiskResolver.cs:5 大自治域(EmergencySurvival、ResourceMarking、WorktableBills、BlueprintPlacement、HighRiskOperations)风险与自动授权判定(领域策略优先于全局IsGlobalForceApprovalEnabled)。Source/Advisor/AdvisorApprovalPolicy.cs、ApprovalManager.cs:审批条件、内阁提案ExecutionCallbacks执行、CancelPendingForPawn生命周期清理与 Core RequestEntry 终态回调。Source/Perception/ColonyMacroPerceiver.cs、CabinetMeetingCoordinator.cs:全殖民地宏观危机感知(仅统计RimMindPawnLookup.IsActiveSpawnedColonist)与内阁会议协同。Source/RimMindAdvisorMod.cs:组合根与设置入口。Source/Advisor/AdvisorProviderRegistrar.cs:Context Provider 注册与工具列表格式化。Source/Settings/AdvisorSettingsDrawer.cs:原生/Core 设置页共享绘制实现。
AdvisorGameComponent / ColonyMacroPerceiver
→ CompAIAdvisor trigger checks
→ AdvisorCycleCoordinator
→ AdvisorTaskDriver
→ RimMindAPI.Request.Send
→ AdvisorToolRiskResolver (domain autonomy check & pre_approved injection)
→ approval (single or CabinetProposal) / direct execution
→ one aggregated feedback batch
→ terminal cleanup
Advisor 只通过 RimMindAPI 使用 Core 请求、ToolRegistry、ContextKey 和审批入口。Actions 不是编译期依赖。对外数据通过 Thought、上下文 Provider 和 perception 事件暴露。
- 初始请求、feedback 和审批回调必须捕获并验证原 driver/cycle。
- 初始和 feedback 请求都使用
RimMindAPI.Context.ScenarioDecision,与advisor_task/actions_listprovider 守卫一致。 - 收到 LLM 原始 ToolCall 时必须先调用
StripPreApprovedFlag剥离伪造的pre_approved: true,仅当AdvisorToolRiskResolver.IsDomainFullAutonomous判定为全自主或玩家在 UI 点击批准后才注入pre_approved = true。 AdvisorToolRiskResolver.DoesToolRequireApproval必须先评估具体AutonomyDomain的配置(Disabled/RequireApproval/FullAutonomous),仅对未映射工具回退到IsGlobalForceApprovalEnabled。CompAIAdvisor.PostDeSpawn与PostDestroy必须调用ApprovalManager.CancelPendingForPawn取消该小人的悬空审批。- 一个响应批次的直接和审批结果只发送一次聚合 feedback。
- Tool handler 可能修改 Verse 状态,必须在主线程完成。
- 每个开始的周期只释放一次并发槽,并清理审批和 driver 状态。
- 保持序列化键
aiAdvisorEnabled不变。 MaxToolCallDepth当前为 3;修改前先获得批准。- Mod 入口只组合和转发;Provider 注册集中在
AdvisorProviderRegistrar,设置控件集中在AdvisorSettingsDrawer。 - 决策历史由
AdvisorHistoryStore持有;ApprovalManager只负责审批入口与终态回调,不另存重复历史。 - 调试预览使用
BuildSnapshotFromEnvelopeAsync;通过LongEventHandler回主线程输出,忽略旧游戏的完成结果。
dotnet test Tests/RimMindAdvisor.Tests.csproj -c Release --filter FullyQualifiedName~AdvisorLifecycleContracts
dotnet build Source/RimMindAdvisor.csproj -c Release提交前运行完整 RimMindAdvisor.Tests.csproj。Advisor 全部测试项目累计最多 999 个发现用例(少于 1000);参数化测试每个数据行计入总数。验证真实行为、失败边界和模块协作;替身只隔离外部依赖,不只验证 mock、不复制生产算法、不锁定私有实现形状,不为压低数量合并无关场景。重点入口见 Tests/README.md。
- 不从后台线程执行
AdvisorToolCallExecutor。 - 不绕过
RimMindAPI访问 Core 内部、设置实例或具体请求队列。 - 不为单一周期再创建 workflow 接口、DTO 层或并行 feedback 通道。
- 不把触发检查、Gizmo 或
PostExposeData搬进周期协调器。