using System; using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; namespace RedCircuit.AIAssistant { /// /// AI 助搭核心协调器,管理 AI 会话生命周期,协调各子系统。 /// public class AIAssistantManager : MonoBehaviour { public static AIAssistantManager Instance { get; private set; } /// 当前会话 ID public string SessionId { get; private set; } = Guid.NewGuid().ToString("N")[..16]; /// AI 是否就绪 public bool IsReady { get; private set; } /// 聊天历史记录 public List History { get; } = new(); private AIChatController _chatController; private AICircuitAdvisor _advisor; private AIActionExecutor _executor; private AIContextProvider _contextProvider; private void Awake() { if (Instance != null) { Destroy(gameObject); return; } Instance = this; } private void Start() { _chatController = GetComponent() ?? gameObject.AddComponent(); _advisor = GetComponent() ?? gameObject.AddComponent(); _executor = GetComponent() ?? gameObject.AddComponent(); _contextProvider = GetComponent() ?? gameObject.AddComponent(); IsReady = true; Debug.Log("[AIAssistant] Manager initialized"); } /// /// 处理用户输入的消息。 /// public async void HandleUserMessage(string message) { if (!IsReady) { _chatController.AppendSystemMessage("AI 助手尚未就绪,请稍候..."); return; } // 记录用户消息 History.Add(new ChatMessage { Role = MessageRole.User, Content = message, Timestamp = DateTime.Now }); _chatController.AppendUserMessage(message); // 采集上下文 var context = _contextProvider.CollectContext(); // 发送到服务端 (TODO: 实现网络请求) var response = await RequestAIChat(message, context); // 处理响应 ProcessAIResponse(response); } private async Task RequestAIChat(string message, GameContext context) { // TODO: 调用 ai-service POST /api/ai/chat // 使用 SSE 流式接收响应 await Task.Delay(100); // 模拟网络延迟 return new AIResponse { Type = ResponseType.Text, Content = "AI 助搭功能正在开发中,敬请期待!", Actions = new List(), RequiresConfirmation = false }; } private void ProcessAIResponse(AIResponse response) { // 记录 AI 消息 History.Add(new ChatMessage { Role = MessageRole.Assistant, Content = response.Content, Timestamp = DateTime.Now }); switch (response.Type) { case ResponseType.Text: _chatController.AppendAIMessage(response.Content); break; case ResponseType.Analysis: _chatController.AppendAIMessage(response.Content); _advisor.ShowReport(response.Analysis); break; case ResponseType.Action: _chatController.AppendAIMessage(response.Content); if (response.RequiresConfirmation && response.Actions.Count > 0) { _executor.QueueActions(response.Actions); _chatController.ShowConfirmationPrompt(response.Actions.Count); } break; case ResponseType.Error: _chatController.AppendErrorMessage(response.Content); break; } } /// 用户确认执行 AI 操作 public void ConfirmActions() { _executor.ExecuteQueuedActions(); } /// 用户拒绝执行 AI 操作 public void RejectActions() { _executor.CancelQueuedActions(); } /// 撤销上一次 AI 操作 public void UndoLastAIAction() { _executor.UndoLastBatch(); } } }