---
belongs_to:
  - "[[INDEX · 铸渊·协作指令｜GitHub ↔ Notion 桥接协议]]"
---
# ✍️ 铸渊指令｜AI写网文平台·Phase B · 平台首页 + 用户登录注册 + AI伙伴对话框（ZY-WRITING-PLATFORM-2026-0325-001）· 霜砚签发 · 冰朔授权

<aside>
🔴

**指令编号**：ZY-WRITING-PLATFORM-2026-0325-001

**指令等级**：P0 · 网文平台首期功能

**签发者**：霜砚（AG-SY-01）

**授权者**：冰朔（TCS-0002∞）

**发起人**：肥猫（TCS-GL-07∞ / DEV-002）

**签发时间**：2026-03-25 19:55 CST

**需求来源**：[📘 中国网文行业·光湖纪元语言人格平台｜完整说明书](../%F0%9F%8C%8A%20%E6%9B%9C%E5%86%A5%E7%BA%AA%E5%85%83%20%C2%B7%20HoloLake%20Era%20%C2%B7%20AGE%20OS%20v1%200/%F0%9F%8C%80%20%E9%9B%B6%E6%84%9F%E5%9F%9F%20%C2%B7%20Zero-Sense%20Domain/%F0%9F%8C%80%20%E9%9B%B6%E6%84%9F%E5%9F%9F%20%C2%B7%20%E6%80%BB%E5%AF%BC%E8%88%AA%E5%8F%B0%EF%BC%88Zero-Sense%20Domain%20%C2%B7%20Navigation%20Hub%EF%BC%89/%F0%9F%92%BC%20%E5%9B%9B%E3%80%81%E9%A1%B9%E7%9B%AE%E5%AE%9E%E6%96%BD%E5%8C%BA/%F0%9F%93%98%20%E4%B8%AD%E5%9B%BD%E7%BD%91%E6%96%87%E8%A1%8C%E4%B8%9A%C2%B7%E5%85%89%E6%B9%96%E7%BA%AA%E5%85%83%E8%AF%AD%E8%A8%80%E4%BA%BA%E6%A0%BC%E5%B9%B3%E5%8F%B0%EF%BD%9C%E5%AE%8C%E6%95%B4%E8%AF%B4%E6%98%8E%E4%B9%A6%202f0fb92f383181e781c7dafe728ae4b3.md)

**架构参考**：[🏗️ 光湖网站架构设计 + 部署推进规划 v3.0（2026-03-15·曜冥签发）](../%F0%9F%8C%8A%20%E6%9B%9C%E5%86%A5%E7%BA%AA%E5%85%83%20%C2%B7%20HoloLake%20Era%20%C2%B7%20AGE%20OS%20v1%200/%E2%9A%A1%20%E5%85%89%E6%B9%96%E4%B8%AD%E5%A4%AE%E6%9E%A2%E7%BA%BD%20%C2%B7%20HoloLake%20Central%20Hub/%F0%9F%8C%8A%20%E5%85%89%E6%B9%96%E7%B3%BB%E7%BB%9F%C2%B7%E6%9B%9C%E5%86%A5%E4%B8%BB%E6%8E%A7%E5%8F%B0%C2%B7%E5%BD%93%E5%89%8D%E7%8A%B6%E6%80%81%EF%BC%88%E5%8D%B71%20%C2%B7%20%E5%B7%B2%E5%B0%81%E5%8D%B7%EF%BC%89/%F0%9F%8F%97%EF%B8%8F%20%E5%85%89%E6%B9%96%E7%BD%91%E7%AB%99%E6%9E%B6%E6%9E%84%E8%AE%BE%E8%AE%A1%20+%20%E9%83%A8%E7%BD%B2%E6%8E%A8%E8%BF%9B%E8%A7%84%E5%88%92%20v3%200%EF%BC%882026-03-15%C2%B7%E6%9B%9C%E5%86%A5%E7%AD%BE%E5%8F%91%EF%BC%89%2031efb92f3831818cbd0ee43c1be2fd90.md)

**仓库参考**：[🗂️ GitHub 仓库最新路径索引｜Notion↔仓库 实时对照表（2026-03-24 · 霜砚整理）](%F0%9F%97%82%EF%B8%8F%20GitHub%20%E4%BB%93%E5%BA%93%E6%9C%80%E6%96%B0%E8%B7%AF%E5%BE%84%E7%B4%A2%E5%BC%95%EF%BD%9CNotion%E2%86%94%E4%BB%93%E5%BA%93%20%E5%AE%9E%E6%97%B6%E5%AF%B9%E7%85%A7%E8%A1%A8%EF%BC%882026-03-24%20%C2%B7%20%E9%9C%9C%E7%A0%9A%2012df1cbf6c454a08b2946652ec70d865.md)

**前置依赖**：ZY-FULLSITE-DEPLOY-2026-0325-001（全站部署令 · 网站已上线）

**回执要求**：每个 Phase 完成后写回执到 GitHub Issue

</aside>

---

## 〇、指令总览

本指令要求铸渊在 [guanghulab.com](http://guanghulab.com) 上构建 **「AI写网文」平台首期功能**，实现三大核心：

1. **平台首页（Landing Page）** — 光湖码字平台入口，对话式设计，不是传统菜单式
2. **用户注册/登录系统** — 手机号+验证码，三种角色（作者/编辑/运营），JWT 鉴权
3. **AI伙伴对话框** — 登录后分配专属AI伙伴，WebSocket实时对话，人格化交互

### 核心设计理念

<aside>
⚡

**用户全程不点菜单，只跟AI伙伴说话。**

AI伙伴理解意图 → 系统动态渲染对应模块 → 用户感觉整个网站只有自己一个人。

这不是传统网站。这是**语言驱动的创作平台**。

</aside>

---

## 一、技术选型（锁定）

| **层级** | **技术** | **版本** | **用途** |
| --- | --- | --- | --- |
| 前端框架 | React 18 + TypeScript | 18.2+ | UI 组件化 |
| 构建工具 | Vite | 5.0+ | 快速构建 |
| 样式框架 | Tailwind CSS | 3.3+ | 响应式 + 快速开发 |
| UI 组件库 | shadcn/ui + Radix UI | latest | 现代无障碍组件 |
| 实时通信 | [Socket.io](http://Socket.io) | 4.x | AI伙伴实时对话 |
| 后端框架 | Node.js + Express | 20 LTS + 4.18 | API 服务 |
| 身份认证 | JWT + Passport.js | latest | Token 鉴权 |
| AI 接入 | OpenAI SDK + Anthropic SDK | latest | GPT-4 / Claude |
| 数据库 | Notion API（主）+ Redis（缓存） | latest | 数据存储 + 会话缓存 |
| 部署 | 阿里云 ECS（8.155.62.235） | - | 正式站 [guanghulab.com](http://guanghulab.com) |

---

## 二、仓库路径规划

在主仓库 `qinfendebingshuo/guanghulab` 下新建以下目录：

```
guanghulab/
└── writing-platform/                    ← AI写网文平台根目录
    ├── frontend/                        ← 前端（React + Vite）
    │   ├── src/
    │   │   ├── pages/
    │   │   │   ├── LandingPage.tsx       ← 平台首页
    │   │   │   ├── LoginPage.tsx         ← 登录页
    │   │   │   ├── RegisterPage.tsx      ← 注册页
    │   │   │   └── DashboardPage.tsx     ← 登录后主界面（AI伙伴）
    │   │   ├── components/
    │   │   │   ├── AICompanion.tsx       ← AI伙伴头像 + 对话框组件
    │   │   │   ├── ChatBubble.tsx        ← 聊天气泡
    │   │   │   ├── RoleSelector.tsx      ← 角色选择器（作者/编辑/运营）
    │   │   │   ├── PhoneLogin.tsx        ← 手机号登录组件
    │   │   │   └── Navbar.tsx            ← 导航栏
    │   │   ├── hooks/
    │   │   │   ├── useAuth.ts            ← 认证状态管理
    │   │   │   └── useSocket.ts          ← WebSocket 连接
    │   │   ├── services/
    │   │   │   ├── api.ts                ← API 调用封装
    │   │   │   └── socket.ts             ← Socket.io 客户端
    │   │   ├── stores/
    │   │   │   └── authStore.ts           ← Zustand 状态管理
    │   │   ├── App.tsx
    │   │   └── main.tsx
    │   ├── public/
    │   │   └── assets/                   ← 静态资源（AI伙伴头像等）
    │   ├── index.html
    │   ├── vite.config.ts
    │   ├── tailwind.config.ts
    │   ├── tsconfig.json
    │   └── package.json
    │
    ├── backend/                          ← 后端（Express）
    │   ├── src/
    │   │   ├── routes/
    │   │   │   ├── auth.ts               ← 注册/登录/验证码
    │   │   │   ├── user.ts               ← 用户信息
    │   │   │   └── ai.ts                 ← AI对话代理
    │   │   ├── middleware/
    │   │   │   ├── authMiddleware.ts      ← JWT 验证中间件
    │   │   │   └── rateLimiter.ts         ← 限流
    │   │   ├── services/
    │   │   │   ├── smsService.ts          ← 短信验证码（阿里云SMS）
    │   │   │   ├── aiService.ts           ← AI模型调用封装
    │   │   │   ├── notionService.ts       ← Notion API 封装
    │   │   │   └── socketService.ts        ← WebSocket 服务
    │   │   ├── models/
    │   │   │   └── userModel.ts           ← 用户数据模型
    │   │   └── server.ts                 ← 入口
    │   ├── tsconfig.json
    │   └── package.json
    │
    └── README.md                         ← 模块说明
```

---

## 三、Phase 0 · 平台首页（Landing Page）

### 3.1 设计要求

<aside>
🎨

**核心：对话式，不是菜单式。**

页面打开后，屏幕中央是一个 AI 伙伴头像 + 欢迎语 + 对话框。

用户不是在「浏览网站」，而是在「遇见自己的AI创作伙伴」。

</aside>

### 3.2 页面结构

```
┌─────────────────────────────────────────────────────────┐
│  🌟 光湖码字 · AI创作伙伴平台           [登录] [注册]   │
├─────────────────────────────────────────────────────────┤
│                                                         │
│                    🤖                                    │
│               AI伙伴头像（动态）                         │
│                                                         │
│          "你好！我是你的AI创作伙伴。                     │
│           无论你是作者、编辑还是运营，                     │
│           我都能陪你一起工作。"                           │
│                                                         │
│          [我是作者] [我是编辑] [我是运营]                 │
│                                                         │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  ✨ 三大核心能力                                         │
│                                                         │
│  ┌──────────┐  ┌──────────┐  ┌──────────┐              │
│  │ 🖊️ AI码字  │  │ 📊 透明追踪│  │ 🤝 跨平台 │              │
│  │ AI陪你写   │  │ 全程留痕   │  │ 自由合作   │              │
│  │ 不代替你写 │  │ 创意归你   │  │ 信誉说话   │              │
│  └──────────┘  └──────────┘  └──────────┘              │
│                                                         │
├─────────────────────────────────────────────────────────┤
│                                                         │
│  📈 平台数据（实时）                                     │
│  注册作者: XXX  |  今日新作: XXX  |  AI使用透明度: 100%  │
│                                                         │
├─────────────────────────────────────────────────────────┤
│  © 2026 光湖纪元 · 国作登字-2026-A-00037559              │
└─────────────────────────────────────────────────────────┘
```

### 3.3 技术实现要点

- 响应式设计（移动端优先）
- AI伙伴头像：使用 CSS 动画实现呼吸效果（发光 + 微浮动）
- 欢迎语：打字机效果逐字显示
- 角色选择按钮：点击后跳转到注册页，自动填入角色
- 底部平台数据：从 Notion API 读取真实数据（通过后端代理）
- 路由：`guanghulab.com/writing/` 为入口

---

## 四、Phase 1 · 用户注册/登录系统

### 4.1 注册流程

```
用户点击 [注册]
    ↓
选择角色：[作者] / [编辑] / [运营]
    ↓
填写信息：
  - 手机号（必填）
  - 短信验证码（必填）
  - 笔名/昵称（必填）
  - 真实姓名（选填，编辑/运营必填）
    ↓
验证通过 → 创建账号 → 分配专属AI伙伴
    ↓
跳转到主界面（Dashboard）
```

### 4.2 登录流程

```
用户点击 [登录]
    ↓
输入手机号 + 短信验证码
    ↓
验证通过 → 返回 JWT Token
    ↓
跳转到主界面（Dashboard）
```

### 4.3 API 设计

```jsx
// 发送验证码
POST /api/writing/auth/send-code
Body: { phone: "13800138000" }
Response: { success: true, message: "验证码已发送" }

// 注册
POST /api/writing/auth/register
Body: {
  phone: "13800138000",
  code: "123456",
  nickname: "小红",
  realName: "张小红",       // 选填
  role: "author"            // author / editor / operator
}
Response: {
  success: true,
  token: "eyJhbGciOiJI...",
  user: {
    id: "user_001",
    nickname: "小红",
    role: "author",
    aiCompanion: {
      name: "笔灵",
      avatar: "/assets/ai-companion-author.png"
    }
  }
}

// 登录
POST /api/writing/auth/login
Body: { phone: "13800138000", code: "123456" }
Response: { success: true, token: "...", user: {...} }

// 获取当前用户
GET /api/writing/user/me
Headers: { Authorization: "Bearer <token>" }
Response: { user: {...} }
```

### 4.4 数据存储（Notion 数据库）

在 Notion 中新建 **「AI写网文·用户表」** 数据库：

| **字段名** | **类型** | **说明** |
| --- | --- | --- |
| 用户ID | title | 唯一标识（系统生成） |
| 手机号 | text | 登录凭证（加密存储） |
| 笔名 | text | 用户昵称 |
| 真实姓名 | text | 可选 |
| 角色 | select | author / editor / operator |
| AI伙伴名称 | text | 系统分配的AI伙伴名字 |
| 信誉分 | number | 初始 60 分 |
| 注册时间 | date | 注册时间 |
| 最后登录 | date | 最后登录时间 |
| 状态 | select | active / suspended / deleted |

### 4.5 AI伙伴分配规则

| **角色** | **AI伙伴名** | **人设** | **System Prompt 核心** |
| --- | --- | --- | --- |
| 作者 | 笔灵 | 温暖的创作伙伴，擅长灵感激发、扩写、节奏把控 | 你是作者的AI创作伙伴，名叫笔灵。帮助作者提高效率、激发灵感。 |
| 编辑 | 慧眼 | 专业的审稿助手，擅长筛选、评估、数据分析 | 你是编辑的AI审稿助手，名叫慧眼。帮助编辑高效筛选和评估稿件。 |
| 运营 | 星图 | 敏锐的数据分析师，擅长趋势洞察、策略建议 | 你是运营的AI数据助手，名叫星图。帮助运营洞察数据趋势、制定策略。 |

---

## 五、Phase 2 · AI伙伴对话框

### 5.1 界面设计

登录后进入 Dashboard，核心界面如下：

```
┌─────────────────────────────────────────────────────────┐
│  🌟 光湖码字              小红（作者）    [设置] [退出]  │
├─────────────────────────────────────────────────────────┤
│                                                         │
│                    🤖 笔灵                               │
│              （呼吸发光动画）                              │
│                                                         │
│  ┌─────────────────────────────────────────────────┐    │
│  │                                                 │    │
│  │  笔灵：早上好，小红！你已经连续写作3天了！        │    │
│  │        今天想继续写《霸总的小娇妻》吗？           │    │
│  │                                                 │    │
│  │                        小红：是的，帮我打开第8章  │    │
│  │                                                 │    │
│  │  笔灵：好的！第8章已打开，上次写到2567字。         │    │
│  │        今天的目标是写完3000字吗？                  │    │
│  │                                                 │    │
│  └─────────────────────────────────────────────────┘    │
│                                                         │
│  ┌─────────────────────────────────────────┐ [发送]     │
│  │  和笔灵说点什么...                       │           │
│  └─────────────────────────────────────────┘           │
│                                                         │
│  ─────────────────────────────────────────────          │
│  快捷操作：                                              │
│  [📝 开始写作] [📊 查看数据] [📢 看定制书需求] [💬 讨论区]│
│                                                         │
└─────────────────────────────────────────────────────────┘
```

### 5.2 WebSocket 对话系统

**前端（[Socket.io](http://Socket.io) Client）**

```tsx
// hooks/useSocket.ts
import { io, Socket } from 'socket.io-client';
import { useEffect, useState } from 'react';

export function useSocket(token: string) {
  const [socket, setSocket] = useState<Socket | null>(null);
  const [messages, setMessages] = useState<Message[]>([]);

  useEffect(() => {
    const newSocket = io('/writing-ai', {
      auth: { token },
      transports: ['websocket']
    });

    newSocket.on('ai_response', (data: { message: string; suggestions?: string[] }) => {
      setMessages(prev => [...prev, {
        role: 'assistant',
        content: data.message,
        timestamp: Date.now()
      }]);
    });

    setSocket(newSocket);
    return () => { newSocket.close(); };
  }, [token]);

  const sendMessage = (message: string) => {
    if (!socket) return;
    setMessages(prev => [...prev, {
      role: 'user',
      content: message,
      timestamp: Date.now()
    }]);
    socket.emit('user_message', { message });
  };

  return { messages, sendMessage };
}
```

**后端（[Socket.io](http://Socket.io) Server + AI 代理）**

```tsx
// services/socketService.ts
import { Server } from 'socket.io';
import { verifyToken } from '../middleware/authMiddleware';
import { callAI } from './aiService';
import { saveConversation } from './notionService';

export function setupSocketService(httpServer: any) {
  const io = new Server(httpServer, {
    path: '/writing-ai',
    cors: { origin: process.env.FRONTEND_URL }
  });

  // JWT 鉴权
  io.use((socket, next) => {
    const token = socket.handshake.auth.token;
    try {
      const user = verifyToken(token);
      socket.data.user = user;
      next();
    } catch (err) {
      next(new Error('认证失败'));
    }
  });

  io.on('connection', (socket) => {
    const user = socket.data.user;
    console.log(`[AI伙伴] ${user.aiCompanion.name} 已连接 · 用户: ${user.nickname}`);

    // 发送欢迎消息
    socket.emit('ai_response', {
      message: getWelcomeMessage(user)
    });

    socket.on('user_message', async (data: { message: string }) => {
      try {
        // 1. 构建 system prompt（注入角色 + AI伙伴人设）
        const systemPrompt = buildSystemPrompt(user);

        // 2. 调用 AI
        const aiResponse = await callAI({
          systemPrompt,
          userMessage: data.message,
          userId: user.id
        });

        // 3. 保存对话到 Notion
        await saveConversation({
          userId: user.id,
          userMessage: data.message,
          aiResponse: aiResponse,
          timestamp: new Date().toISOString()
        });

        // 4. 返回 AI 响应
        socket.emit('ai_response', {
          message: aiResponse
        });

      } catch (error) {
        socket.emit('ai_response', {
          message: '抱歉，我遇到了一些问题，请稍后再试。'
        });
      }
    });
  });
}

function getWelcomeMessage(user: any): string {
  const name = user.aiCompanion.name;
  const nick = user.nickname;
  const role = user.role;

  if (role === 'author') {
    return `早上好，${nick}！我是${name}，你的AI创作伙伴。\n\n今天想做什么？写作、看数据、还是找合作机会？`;
  } else if (role === 'editor') {
    return `早上好，${nick}！我是${name}，你的AI审稿助手。\n\n今天有新投稿等你审核，要看看吗？`;
  } else {
    return `早上好，${nick}！我是${name}，你的AI数据助手。\n\n今天的数据已更新，要看看趋势分析吗？`;
  }
}

function buildSystemPrompt(user: any): string {
  const companionPrompts: Record<string, string> = {
    author: `你是用户的AI创作伙伴，名字叫「笔灵」。
用户信息：昵称=${user.nickname}，角色=作者。
你的职责：
1. 帮助用户创作（提供灵感、扩写、优化文笔）
2. 管理写作项目（打开文档、查看进度）
3. 提醒和建议（写作时间、字数目标、市场趋势）
4. 记住用户的写作风格和习惯
语气：温暖、鼓励、专业。像一个懂你的创作搭档。`,

    editor: `你是用户的AI审稿助手，名字叫「慧眼」。
用户信息：昵称=${user.nickname}，角色=编辑。
你的职责：
1. 帮助筛选和评估投稿
2. 分析AI使用报告
3. 提供审稿建议
4. 管理审核工作流
语气：专业、精准、高效。`,

    operator: `你是用户的AI数据助手，名字叫「星图」。
用户信息：昵称=${user.nickname}，角色=运营。
你的职责：
1. 分析平台数据趋势
2. 提供运营策略建议
3. 管理跨平台合作
4. 生成数据报告
语气：敏锐、有洞察力、数据驱动。`
  };

  return companionPrompts[user.role] || companionPrompts.author;
}
```

### 5.3 AI 模型调用封装

```tsx
// services/aiService.ts
import OpenAI from 'openai';

const openai = new OpenAI({
  apiKey: process.env.LLM_API_KEY,
  baseURL: process.env.LLM_BASE_URL   // 使用仓库已配置的 LLM 端点
});

// 每个用户的对话历史缓存（Redis）
const conversationCache = new Map<string, any[]>();

export async function callAI(params: {
  systemPrompt: string;
  userMessage: string;
  userId: string;
}): Promise<string> {
  const { systemPrompt, userMessage, userId } = params;

  // 获取最近 10 轮对话历史
  const history = conversationCache.get(userId) || [];

  const messages = [
    { role: 'system' as const, content: systemPrompt },
    ...history.slice(-20),  // 最近10轮 = 20条消息
    { role: 'user' as const, content: userMessage }
  ];

  const completion = await openai.chat.completions.create({
    model: 'gpt-4',
    messages,
    temperature: 0.7,
    max_tokens: 800
  });

  const aiResponse = completion.choices[0].message.content || '...';

  // 更新对话缓存
  const updatedHistory = [
    ...history,
    { role: 'user', content: userMessage },
    { role: 'assistant', content: aiResponse }
  ].slice(-20);  // 保留最近10轮
  conversationCache.set(userId, updatedHistory);

  return aiResponse;
}
```

---

## 六、Nginx 路由配置

在现有 Nginx 配置中增加 `writing-platform` 路由：

```
# /etc/nginx/conf.d/hololake.conf 新增

# AI写网文平台前端
location /writing/ {
    alias /var/www/guanghulab/writing-platform/frontend/dist/;
    try_files $uri $uri/ /writing/index.html;
}

# AI写网文平台后端 API
location /api/writing/ {
    proxy_pass http://127.0.0.1:3100/api/writing/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

# WebSocket（AI伙伴对话）
location /writing-ai/ {
    proxy_pass http://127.0.0.1:3100/writing-ai/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}
```

后端服务端口：**3100**（写网文平台独立端口，不与现有服务冲突）

---

## 七、部署流程

### 7.1 预览站（先部署验证）

```bash
# 1. 构建前端
cd writing-platform/frontend
npm install
npm run build

# 2. 构建后端
cd ../backend
npm install
npm run build

# 3. 部署到 GitHub Pages 预览
# 前端 dist 目录推到 docs/writing/ 下
```

### 7.2 正式站

```bash
# CD 自动部署（deploy-to-server.yml 扩展）
# 1. SSH 到服务器
# 2. git pull
# 3. cd writing-platform/frontend && npm install && npm run build
# 4. cd ../backend && npm install && npm run build
# 5. pm2 restart writing-platform-backend  (或新启动)
# 6. nginx -s reload
```

---

## 八、环境变量

以下环境变量需要在服务器和 GitHub Secrets 中配置：

| **变量名** | **用途** | **来源** |
| --- | --- | --- |
| `LLM_API_KEY` | AI 模型 API Key | ✅ 已有 |
| `LLM_BASE_URL` | AI 模型端点 | ✅ 已有 |
| `NOTION_TOKEN` | Notion API Token | ✅ 已有 |
| `JWT_SECRET` | JWT 签名密钥 | ⭕ 需新增（铸渊自动生成随机字符串） |
| `SMS_ACCESS_KEY` | 阿里云短信 Key | ⏳ 需冰朔配置 |
| `SMS_ACCESS_SECRET` | 阿里云短信 Secret | ⏳ 需冰朔配置 |
| `WRITING_DB_ID` | Notion 用户表 Database ID | ⭕ 铸渊创建后填入 |
| `REDIS_URL` | Redis 连接地址 | ⭕ 需配置（可先用内存缓存降级） |

---

## 九、人类侧操作（冰朔待办）

<aside>
👤

以下操作需要人类手动完成，铸渊无法代执行：

1. **配置阿里云短信服务** — 开通短信 API + 配置签名和模板 + 填入 `SMS_ACCESS_KEY` / `SMS_ACCESS_SECRET`
2. **确认 AI 模型用量预算** — AI伙伴对话会消耗 API 额度，确认月预算
3. **预览站测试验收** — 铸渊部署后，人类在预览站测试登录和对话功能
4. **正式上线授权** — 预览站验收通过后，通知铸渊执行正式站部署

**临时方案（短信服务未就绪时）**：

先用固定验证码 `888888` 做测试，短信服务就绪后切换到真实验证码。

</aside>

---

## 十、验收标准

| **验收项** | **标准** |
| --- | --- |
| 首页可访问 | `guanghulab.com/writing/` 打开显示完整首页 |
| AI伙伴头像动画 | 中央头像有呼吸发光效果 |
| 欢迎语显示 | 打字机效果逐字显示 |
| 角色选择 | 三个按钮可点击，跳转到注册 |
| 注册功能 | 填写信息 → 创建账号 → 分配AI伙伴 → 跳转Dashboard |
| 登录功能 | 手机号+验证码 → JWT Token → 跳转Dashboard |
| AI伙伴对话 | 登录后可与AI伙伴实时对话，响应流畅 |
| 角色区分 | 不同角色登录后AI伙伴名称和行为不同 |
| 移动端适配 | 手机浏览器正常显示和操作 |
| 数据持久化 | 用户数据写入 Notion 数据库，对话记录可追溯 |

---

## 十一、执行时序

```
Phase 0: 搭建项目骨架 + 前端首页（预计 2h）
    ↓
Phase 1: 后端注册/登录 API + Notion 用户表（预计 2h）
    ↓
Phase 2: AI伙伴对话系统（WebSocket + AI调用）（预计 3h）
    ↓
Phase 3: 前后端联调 + Nginx 路由配置（预计 1h）
    ↓
Phase 4: 部署到预览站 → 测试
    ↓
→ 人类验收 → 正式站上线
```

---

## 十二、后续扩展预留

本期完成后，后续 Phase 可继续扩展（不在本指令范围内）：

- **Phase C**：码字台 · AI辅助写作编辑器 + 全程留痕 + AI使用报告
- **Phase D**：审核系统 · AI初筛 + 人工复审 + 数字签名
- **Phase E**：信誉系统 · 四维动态评分 + 信誉曲线
- **Phase F**：模块市场 · Prompt 打包 + 分润
- **Phase G**：跨平台协作 · 定制书招募 + 自动匹配

---

<aside>
🔏

**签发确认**

霜砚（AG-SY-01）· Notion 执行 AI 人格体

冰朔（TCS-0002∞）· 语言架构师 · 创始人

肥猫（TCS-GL-07∞ / DEV-002）· 系统副控 · 需求发起人

2026-03-25 19:55 CST

**版权**：国作登字-2026-A-00037559

**需求来源**：📘 中国网文行业·光湖纪元语言人格平台｜完整说明书

</aside>