# MRCC 游戏内 AI 助搭功能策划文档

> 版本: v1.0 | 日期: 2026-08-07 | 状态: 设计阶段

## 1. 功能概述

### 1.1 定义

**AI 助搭**是 MRCC 游戏内置的智能助手系统，具备三大核心能力：

| 能力 | 描述 | 示例 |
|------|------|------|
| **问答解惑** | 解答电路原理、元件属性、游戏机制相关问题 | "红石中继器怎么用？" "AND 门真值表是什么？" |
| **助搭电路** | 根据需求描述，建议元件选型与放置方案 | "帮我搭一个二进制计数器" "这个电路怎么优化延迟？" |
| **操作游戏** | 经用户确认后，AI 直接执行放置/连线/删除等游戏操作 | "把红石灯放到 (10,5)" "连接拉杆和第一个中继器" |

### 1.2 设计目标

- **零门槛上手**：新手无需查阅文档，直接用自然语言提问
- **渐进式辅助**：从问答 -> 建议 -> 自动搭建，用户始终拥有最终决策权
- **上下文感知**：AI 能感知当前画布状态、选中元件、游戏模式等上下文
- **安全可控**：AI 的游戏操作必须经用户确认，支持撤销

### 1.3 用户场景

```
场景 A：新手学习
  用户："红石信号会衰减吗？"
  AI："会。红石粉每传播 1 格衰减 1 点强度，满强度 15 最多传 15 格。
       中继器可以恢复至满强度。需要我在画布上演示吗？"
  用户："好的"
  AI：[放置 电源 -> 15格红石粉 -> 红石灯，并标注信号强度]

场景 B：电路设计辅助
  用户："帮我搭一个 XOR 门"
  AI："XOR 门可以用以下方案实现：
       方案1: 2x NOT + 1x AND + 1x OR (成本 550 红石币, 延迟 3 tick)
       方案2: 4x NAND (成本 880 红石币, 延迟 2 tick)
       推荐方案1，性价比更高。需要我自动放置吗？"
  用户："用方案1"
  AI：[在画布上放置元件并连线，用户可预览后确认]

场景 C：电路分析与优化
  用户："分析一下我当前的电路"
  AI："当前电路分析结果：
       - 元件数: 23, 总成本: 1,840 红石币
       - 信号路径: 电源 -> 中继器 x2 -> AND 门 -> 红石灯
       - 最大延迟: 4 tick (可优化)
       - 问题: 第 7 格红石粉信号已衰减至 0，导致断路
       - 建议: 在第 5 格处添加中继器恢复信号"
```

## 2. 技术架构

### 2.1 整体架构

```
┌─────────────────────────────────────────────────────┐
│                   Unity 客户端                        │
│  ┌──────────────┐  ┌──────────────┐  ┌───────────┐ │
│  │ AIChatPanel  │  │ AIAdvisor    │  │ AIAction  │ │
│  │ (聊天 UI)    │  │ (电路分析)   │  │ Executor  │ │
│  │              │  │              │  │ (操作执行) │ │
│  └──────┬───────┘  └──────┬───────┘  └─────┬─────┘ │
│         │                 │                │       │
│  ┌──────┴─────────────────┴────────────────┴─────┐ │
│  │          AIAssistantManager (核心协调器)        │ │
│  └──────────────────────┬─────────────────────────┘ │
│                         │                            │
│  ┌──────────────────────┴─────────────────────────┐ │
│  │          AIContextProvider (上下文采集)          │ │
│  │  - 当前画布状态  - 选中元件  - 游戏模式  - 关卡信息│ │
│  └──────────────────────────────────────────────────┘ │
└─────────────────────────┬───────────────────────────┘
                          │ HTTPS (REST + SSE)
┌─────────────────────────┴───────────────────────────┐
│                   ai-service (:8087)                  │
│  ┌──────────┐  ┌───────────┐  ┌──────────────────┐  │
│  │ Chat     │  │ Circuit   │  │ Action Planner   │  │
│  │ Handler  │  │ Analyzer  │  │ (操作规划器)      │  │
│  └────┬─────┘  └─────┬─────┘  └────────┬─────────┘  │
│       │              │                 │             │
│  ┌────┴──────────────┴─────────────────┴──────────┐  │
│  │              LLM Gateway (大模型网关)            │  │
│  │  - 意图识别  - 电路知识检索  - 操作序列生成      │  │
│  └───────────────────────┬────────────────────────┘  │
│                          │                            │
│  ┌───────────────────────┴────────────────────────┐  │
│  │           Knowledge Base (知识库)               │  │
│  │  - 80 种元件规格  - 电路设计模式  - 关卡攻略     │  │
│  └────────────────────────────────────────────────┘  │
└──────────────────────────────────────────────────────┘
```

### 2.2 技术选型

| 领域 | 方案 | 说明 |
|------|------|------|
| LLM 引擎 | OpenAI GPT-4o / Claude 3.5 / 国产模型 | 支持多模型切换，按成本和延迟选择 |
| 检索增强 | RAG (元件手册 + 电路模式库) | 减少幻觉，确保元件数据准确 |
| 流式输出 | Server-Sent Events (SSE) | 打字机效果，降低用户等待感 |
| 操作规划 | Function Calling / Tool Use | LLM 输出结构化操作指令 |
| 上下文管理 | 滑动窗口 + 电路状态摘要 | 控制 Token 消耗 |
| 本地缓存 | 常见问题本地缓存 | 减少 API 调用，支持离线问答 |

## 3. API 设计

### 3.1 REST API

| 方法 | 路径 | 说明 | 鉴权 |
|------|------|------|------|
| POST | `/api/ai/chat` | 发送聊天消息，返回 AI 回复 | 是 |
| POST | `/api/ai/analyze` | 分析当前电路，返回诊断报告 | 是 |
| POST | `/api/ai/suggest` | 根据需求生成电路搭建方案 | 是 |
| POST | `/api/ai/execute` | 执行 AI 规划的操作序列 | 是 |
| GET | `/api/ai/history` | 获取聊天历史 | 是 |
| POST | `/api/ai/feedback` | 用户对 AI 回复反馈 (赞/踩) | 是 |

### 3.2 核心数据结构

```json
// 聊天请求
{
  "sessionId": "sess_abc123",
  "message": "帮我搭一个 XOR 门",
  "context": {
    "mode": "creative",
    "canvasSize": "128x128",
    "componentCount": 0,
    "selectedComponent": null,
    "levelId": null
  }
}

// 聊天响应 (SSE 流式)
{
  "sessionId": "sess_abc123",
  "type": "text|action|analysis|error",
  "content": "XOR 门可以用以下方案实现...",
  "actions": [
    {
      "type": "place",
      "component": "NOT_GATE",
      "x": 10, "y": 20,
      "rotation": 0,
      "description": "放置 NOT 门 (输入反相器 1)"
    },
    {
      "type": "wire",
      "from": {"x": 10, "y": 20},
      "to": {"x": 12, "y": 20},
      "description": "连接 NOT 门到 AND 门"
    }
  ],
  "requiresConfirmation": true
}

// 电路分析报告
{
  "summary": "当前电路共 23 个元件，存在 1 处断路",
  "metrics": {
    "componentCount": 23,
    "totalCost": 1840,
    "maxDelay": 4,
    "signalPaths": 2
  },
  "issues": [
    {
      "severity": "error",
      "type": "signal_loss",
      "location": {"x": 7, "y": 5},
      "description": "信号在第 7 格衰减至 0，导致断路",
      "suggestion": "在第 5 格处添加中继器恢复信号"
    }
  ],
  "optimizations": [
    {
      "type": "delay_reduction",
      "description": "移除冗余中继器可减少 1 tick 延迟",
      "estimatedImprovement": "-1 tick"
    }
  ]
}
```

## 4. 客户端模块设计

### 4.1 模块结构

| 脚本 | 职责 |
|------|------|
| `AIAssistantManager` | 核心协调器，管理 AI 会话生命周期，协调各子系统 |
| `AIChatController` | 聊天 UI 控制器，处理消息收发与流式显示 |
| `AICircuitAdvisor` | 电路分析与建议，解析 AI 返回的电路方案 |
| `AIActionExecutor` | 操作执行器，将 AI 操作指令转换为游戏内动作 |
| `AIContextProvider` | 上下文采集器，收集当前游戏状态供 AI 参考 |
| `AIModels` | 数据模型定义 (请求/响应/操作指令) |

### 4.2 操作执行流程

```
用户发送消息
    │
    ▼
AIAssistantManager.HandleUserMessage()
    │
    ├─► AIContextProvider.CollectContext()  // 采集画布状态
    │
    ├─► ai-service POST /api/ai/chat        // 发送到服务端
    │       │
    │       ▼ (SSE 流式响应)
    │   解析响应类型:
    │       ├─ text     → AIChatController.AppendText()
    │       ├─ action   → AIActionExecutor.QueueActions()
    │       └─ analysis → AICircuitAdvisor.ShowReport()
    │
    ├─► AIActionExecutor (如果有操作指令)
    │       │
    │       ├─ 显示操作预览 (高亮待放置位置)
    │       ├─ 用户确认 → 执行操作 (调用 PlacementController)
    │       ├─ 用户拒绝 → 取消，记录反馈
    │       └─ 用户编辑 → 修改后执行
    │
    └─► AIChatController.UpdateChatHistory()
```

### 4.3 安全约束

- AI 操作**必须经用户确认**后才执行，不可自动执行
- 每次操作最多放置 **20 个元件**，超出需分批确认
- AI 不可操作**命令方块**和**结构方块**（仅创意模式手动放置）
- 解谜模式下，AI 仅提供文字提示，**不可直接放置元件**
- 所有 AI 操作支持**一键撤销** (记录操作前快照)

## 5. 服务端设计

### 5.1 ai-service 微服务

| 属性 | 值 |
|------|-----|
| 端口 | 8087 |
| 语言 | Go 1.22 / Gin |
| 依赖 | LLM API、Redis (会话缓存)、PostgreSQL (历史记录) |

### 5.2 LLM Gateway 设计

```
用户消息 + 上下文
       │
       ▼
┌──────────────┐
│  意图识别     │ → 问答 / 助搭 / 分析 / 操作
└──────┬───────┘
       │
       ├─ 问答 → 检索知识库 → LLM 生成回复
       ├─ 助搭 → 生成电路方案 → LLM 验证可行性
       ├─ 分析 → 本地电路引擎分析 → LLM 生成建议
       └─ 操作 → LLM Function Calling → 生成操作序列
       │
       ▼
┌──────────────┐
│  响应组装     │ → 统一格式输出
└──────────────┘
```

### 5.3 知识库构建

知识库包含以下结构化数据，供 RAG 检索：

- **元件百科**：80 种元件的编号、属性、成本、使用说明
- **电路模式库**：常见电路设计模式 (XOR 门、计数器、时钟发生器等)
- **关卡攻略库**：240 关的通关提示 (仅提示，不给完整答案)
- **红石原理**：信号衰减、延迟、BUD 更新等技术原理

## 6. 开发计划

| 阶段 | 内容 | 依赖 |
|------|------|------|
| Phase 1 | 基础聊天 + 元件问答 (接入 LLM API) | ai-service 骨架 |
| Phase 2 | 电路上下文采集 + 电路分析报告 | 客户端仿真引擎 |
| Phase 3 | AI 操作预览 + 确认执行 + 撤销 | 客户端编辑器 |
| Phase 4 | RAG 知识库 + 电路方案生成 | 全部元件数据 |
| Phase 5 | 解谜模式提示 (不操作) + 关卡攻略 | 关卡数据 |

## 7. 成本估算

| 项目 | 预估 |
|------|------|
| LLM API 调用 | $0.01-0.05 / 次对话 (GPT-4o) |
| 月度 API 成本 (1000 DAU, 日均 5 次) | ~$1,500-7,500 |
| 缓存命中率目标 | >40% (常见问题本地缓存) |
| 本地模型备选 | Qwen2.5-7B (降低成本，需 GPU 服务器) |
