Files
xyou f70b061d1a
CI / Go Backend (push) Canceled after 0s
feat: 项目初始化 + 3D方块世界原型 + AI助搭系统
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器

HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块

Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚

AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
2026-08-08 14:07:56 +08:00

135 lines
4.6 KiB
C#

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using UnityEngine;
namespace RedCircuit.AIAssistant
{
/// <summary>
/// AI 助搭核心协调器,管理 AI 会话生命周期,协调各子系统。
/// </summary>
public class AIAssistantManager : MonoBehaviour
{
public static AIAssistantManager Instance { get; private set; }
/// <summary>当前会话 ID</summary>
public string SessionId { get; private set; } = Guid.NewGuid().ToString("N")[..16];
/// <summary>AI 是否就绪</summary>
public bool IsReady { get; private set; }
/// <summary>聊天历史记录</summary>
public List<ChatMessage> 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<AIChatController>() ?? gameObject.AddComponent<AIChatController>();
_advisor = GetComponent<AICircuitAdvisor>() ?? gameObject.AddComponent<AICircuitAdvisor>();
_executor = GetComponent<AIActionExecutor>() ?? gameObject.AddComponent<AIActionExecutor>();
_contextProvider = GetComponent<AIContextProvider>() ?? gameObject.AddComponent<AIContextProvider>();
IsReady = true;
Debug.Log("[AIAssistant] Manager initialized");
}
/// <summary>
/// 处理用户输入的消息。
/// </summary>
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<AIResponse> 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<AIAction>(),
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;
}
}
/// <summary>用户确认执行 AI 操作</summary>
public void ConfirmActions()
{
_executor.ExecuteQueuedActions();
}
/// <summary>用户拒绝执行 AI 操作</summary>
public void RejectActions()
{
_executor.CancelQueuedActions();
}
/// <summary>撤销上一次 AI 操作</summary>
public void UndoLastAIAction()
{
_executor.UndoLastBatch();
}
}
}