Files
st-react/docs/development-progress.md
Echo 0a7ebec780 📝 更新进度文档
Signed-off-by: Echo <1711788888@qq.com>
2026-03-02 02:56:13 +08:00

999 lines
32 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 云酒馆项目开发进度
> 最后更新2026-03-02
## 项目概述
云酒馆是一个现代化的 AI 角色对话平台,采用前后端分离架构,完全兼容 SillyTavern V2/V3 格式。
- **前端**React 18 + TypeScript + Tailwind CSS + Vite
- **后端**Go 1.24 + Gin + PostgreSQL + GORM
- **设计风格**Glassmorphism + 深色主题 (OLED 优化)
---
## 开发进度总览
| 模块 | 状态 | 完成度 | 负责人 | 备注 |
|------|------|--------|--------|------|
| 用户系统 | ✅ 已完成 | 100% | - | 注册、登录、资料管理 |
| 角色卡管理 | ✅ 已完成 | 100% | - | 完全兼容 ST V2前后端已打通 |
| 预设管理 | ✅ 已完成 | 100% | - | 前后端已打通,支持导入导出 |
| 对话系统 | ✅ 已完成 | 95% | - | 预设切换、消息重新生成已完成 |
| AI 集成 | ✅ 已完成 | 100% | - | AI 配置管理、API 调用已完成 |
| 世界书系统 | ✅ 已完成 | 100% | - | 前后端已打通,触发引擎已集成到对话系统 |
| 正则脚本 | ✅ 已完成 | 95% | - | 完全兼容 ST已集成到对话流程 |
**图例**
- ✅ 已完成
- 🚧 进行中
- 📋 待开发
- ⏸️ 暂停
- ❌ 已取消
---
## 一、用户系统 ✅
### 1.1 后端 API已完成 - 2024-02-26
**数据模型**
-`AppUser` - 用户模型
-`AppUserSession` - 会话模型
**API 端点**
-`POST /app/auth/register` - 用户注册
-`POST /app/auth/login` - 用户登录
-`POST /app/auth/refresh` - 刷新Token
-`POST /app/auth/logout` - 用户登出
-`GET /app/auth/userinfo` - 获取用户信息
-`PUT /app/user/profile` - 更新用户资料
-`POST /app/user/change-password` - 修改密码
**核心功能**
- ✅ JWT 认证7天有效期
- ✅ bcrypt 密码加密
- ✅ 会话管理IP、设备信息
- ✅ 用户状态检查
- ✅ 最后登录记录
**文件清单**
```
server/
├── api/v1/app/auth.go # API 控制器
├── model/app/
│ ├── app_user.go # 用户模型
│ ├── app_user_session.go # 会话模型
│ ├── request/auth.go # 请求结构
│ └── response/auth.go # 响应结构
├── service/app/auth.go # 业务逻辑
├── router/app/auth.go # 路由配置
├── middleware/app_jwt.go # JWT 中间件
└── utils/app_jwt.go # JWT 工具
```
### 1.2 前端页面(已完成 - 2024-02-26
**页面清单**
-`/login` - 登录页
-`/register` - 注册页
-`/forgot-password` - 忘记密码
-`/profile` - 用户中心
**功能特性**
- ✅ 表单验证
- ✅ 密码可见性切换
- ✅ 第三方登录入口GitHub/Google
- ✅ 用户统计数据展示
- ✅ 账号设置、隐私设置、通知设置
**文件清单**
```
web-app/src/pages/
├── LoginPage.tsx
├── RegisterPage.tsx
├── ForgotPasswordPage.tsx
└── ProfilePage.tsx
```
### 1.3 前后端对接(已完成 - 2024-02-26
**API 服务层**
-`web-app/src/api/client.ts` - Axios 客户端配置
-`web-app/src/api/auth.ts` - 用户认证 API 封装
**核心功能**
- ✅ Token 自动注入请求头
- ✅ Token 过期自动刷新
- ✅ 统一错误处理
- ✅ 登录状态持久化localStorage
- ✅ 登录后跳转用户中心
- ✅ 未登录自动跳转登录页
- ✅ 用户信息实时加载
- ✅ 登出功能
**环境配置**
-`.env.development` - 开发环境配置http://localhost:8888
-`.env.production` - 生产环境配置
**依赖安装**
- ✅ axios - HTTP 客户端
---
## 二、角色卡管理 ✅
### 2.1 后端 API已完成 - 2024-02-26
**数据模型**
-`AICharacter` - 角色卡模型(完全兼容 SillyTavern V2 格式)
- ✅ 使用 JSONB 存储复杂数据tags, alternateGreetings, characterBook, extensions
- ✅ 支持公开/私有角色卡
- ✅ 统计信息(使用次数、收藏次数)
**API 端点**
-`POST /app/character` - 创建角色卡
-`GET /app/character` - 获取角色卡列表(分页、搜索、标签筛选)
-`GET /app/character/:id` - 获取角色卡详情
-`PUT /app/character/:id` - 更新角色卡
-`DELETE /app/character/:id` - 删除角色卡
-`POST /app/character/upload` - 上传角色卡文件PNG/JSON
-`GET /app/character/:id/export` - 导出角色卡为 JSON
**核心功能**
- ✅ 完全兼容 SillyTavern V2 格式
- ✅ PNG 元数据提取(使用 `utils/character_card.go`
- ✅ JSON 格式导入导出
- ✅ 角色卡搜索和标签筛选
- ✅ 用户权限控制(只能编辑自己的角色卡)
- ✅ 支持 Base64 编码的 PNG tEXt chunk
**文件清单**
```
server/
├── api/v1/app/character.go # API 控制器
├── model/app/ai_character.go # 角色卡模型
├── model/app/request/character.go # 请求结构
├── model/app/response/character.go # 响应结构
├── service/app/character.go # 业务逻辑
├── router/app/character.go # 路由配置
└── utils/character_card.go # SillyTavern V2 格式工具
```
### 2.2 前端页面(已完成 - 2024-02-26
**页面**
-`/characters` - 角色卡管理页
**功能特性**
- ✅ 上传 PNG 角色卡(后端自动解析)
- ✅ 上传 JSON 角色卡
- ✅ 角色卡编辑(名称、描述、性格、场景、系统提示词等)
- ✅ 角色卡导出为 JSON
- ✅ 角色卡删除
- ✅ 搜索功能
- ✅ 分页加载
**文件清单**
```
web-app/src/
├── api/character.ts # 角色卡 API 封装
└── pages/CharacterManagePage.tsx # 角色卡管理页面
```
### 2.3 前后端对接(已完成 - 2024-02-26
**API 服务层**
-`web-app/src/api/character.ts` - 角色卡 API 封装
**核心功能**
- ✅ 角色卡列表加载(分页、搜索)
- ✅ 文件上传PNG/JSON
- ✅ 角色卡编辑和保存
- ✅ 角色卡删除
- ✅ 角色卡导出
- ✅ 错误处理和用户提示
- ✅ 登录状态检查
---
## 三、预设管理 ✅
### 3.1 后端 API已完成 - 2026-02-27
**数据模型**
-`AIPreset` - 预设模型(完全兼容 SillyTavern 格式)
- ✅ 支持所有采样参数temperature/topP/topK/frequencyPenalty/presencePenalty/maxTokens/repetitionPenalty/minP/topA
- ✅ 支持系统提示词和停止序列
- ✅ 使用 JSONB 存储扩展字段extensions
- ✅ 支持公开/私有预设和默认预设
**API 端点**
-`POST /app/preset` - 创建预设
-`GET /app/preset` - 获取预设列表(分页、搜索、公开筛选)
-`GET /app/preset/:id` - 获取预设详情
-`PUT /app/preset/:id` - 更新预设
-`DELETE /app/preset/:id` - 删除预设
-`POST /app/preset/:id/default` - 设置默认预设
-`POST /app/preset/import` - 导入预设JSON 文件)
-`GET /app/preset/:id/export` - 导出预设为 JSON
**核心功能**
- ✅ 完全兼容 SillyTavern 预设格式
- ✅ JSON 格式导入导出
- ✅ 预设搜索和筛选
- ✅ 用户权限控制(只能编辑自己的预设)
- ✅ 默认预设管理
- ✅ 使用统计
**文件清单**
```
server/
├── api/v1/app/preset.go # API 控制器
├── model/app/preset.go # 预设模型
├── model/app/request/preset.go # 请求结构
├── model/app/response/preset.go # 响应结构
├── service/app/preset.go # 业务逻辑
└── router/app/preset.go # 路由配置
```
### 3.2 前端页面(已完成 - 2026-02-27
**页面**
-`/presets` - 预设管理页
**功能特性**
- ✅ 导入 JSON 预设
- ✅ 预设参数编辑Temperature、Top P、Top K、Frequency Penalty、Presence Penalty 等)
- ✅ 预设复制
- ✅ 预设导出
- ✅ 预设删除
- ✅ 搜索功能
- ✅ 设置默认预设
**文件清单**
```
web-app/src/
├── api/preset.ts # 预设 API 封装
└── pages/PresetManagePage.tsx # 预设管理页面
```
### 3.3 前后端对接(已完成 - 2026-02-27
**API 服务层**
-`web-app/src/api/preset.ts` - 预设 API 封装
**核心功能**
- ✅ 预设列表加载(分页、搜索)
- ✅ 文件上传JSON
- ✅ 预设编辑和保存
- ✅ 预设删除
- ✅ 预设导出
- ✅ 默认预设设置
- ✅ 错误处理和用户提示
- ✅ 登录状态检查
---
## 四、对话系统 ✅
### 4.1 后端 API已完成 - 2026-02-27
**数据模型**
-`Conversation` - 对话会话模型
-`Message` - 消息模型
- ✅ 支持用户、角色、预设关联
- ✅ 支持 AI 提供商和模型配置
- ✅ 使用 JSONB 存储对话设置和消息元数据
- ✅ 统计信息消息数量、Token 使用量)
**API 端点**
-`POST /app/conversation` - 创建对话
-`GET /app/conversation` - 获取对话列表(分页)
-`GET /app/conversation/:id` - 获取对话详情
-`PUT /app/conversation/:id/settings` - 更新对话设置
-`DELETE /app/conversation/:id` - 删除对话
-`GET /app/conversation/:id/messages` - 获取消息历史(分页)
-`POST /app/conversation/:id/message` - 发送消息
-`POST /app/conversation/:id/message?stream=true` - 流式发送消息SSE
**核心功能**
- ✅ 对话会话管理
- ✅ 消息发送接收
- ✅ 对话历史存储
- ✅ SSE 流式响应支持
- ✅ Token 统计
- ✅ 用户权限控制
**文件清单**
```
server/
├── api/v1/app/conversation.go # API 控制器
├── model/app/conversation.go # 对话和消息模型
├── model/app/request/conversation.go # 请求结构
├── model/app/response/conversation.go # 响应结构
├── service/app/conversation.go # 业务逻辑
└── router/app/conversation.go # 路由配置
```
### 4.2 前端页面(已完成 - 2026-02-27
**页面**
-`/chat` - 聊天界面
**功能特性**
- ✅ 对话列表侧边栏
- ✅ 角色选择弹窗
- ✅ 消息输入框
- ✅ 对话菜单(导出、删除)
- ✅ 实时消息发送
- ✅ 消息流式显示
- ✅ 对话历史加载
- ✅ 背景图和主题色设置
**待完善**
- ✅ 预设切换功能(流式模式已修复应用预设参数)
- ✅ 消息重新生成(支持流式,自动删除旧回复)
- 📋 消息编辑
- 📋 世界书开关
- 📋 正则脚本开关
**文件清单**
```
web-app/src/
├── api/conversation.ts # 对话 API 封装
├── pages/ChatPage.tsx # 聊天页面
├── components/Sidebar.tsx # 侧边栏
├── components/ChatArea.tsx # 聊天区域
├── components/CharacterPanel.tsx # 角色面板
└── components/SettingsPanel.tsx # 设置面板
```
### 4.3 前后端对接(已完成 - 2026-02-27
**API 服务层**
-`web-app/src/api/conversation.ts` - 对话 API 封装
**核心功能**
- ✅ 对话列表加载(分页)
- ✅ 创建新对话
- ✅ 发送消息
- ✅ 消息历史加载
- ✅ 对话设置更新
- ✅ 对话删除
- ✅ 错误处理和用户提示
- ✅ 登录状态检查
---
## 五、AI 集成 🚧
### 5.1 后端 API部分完成 - 2026-02-27
**数据模型**
-`AIConfig` - AI 配置模型
- ✅ 支持多种 AI 提供商OpenAI/Anthropic/Custom
- ✅ API Key 加密存储
- ✅ 模型配置和参数管理
**API 端点**
-`POST /app/ai-config` - 创建 AI 配置
-`GET /app/ai-config` - 获取配置列表
-`GET /app/ai-config/:id` - 获取配置详情
-`PUT /app/ai-config/:id` - 更新配置
-`DELETE /app/ai-config/:id` - 删除配置
-`POST /app/ai-config/:id/test` - 测试连接
**待实现功能**
- ✅ 实际 AI API 调用集成OpenAI/Anthropic
- 📋 本地模型支持Ollama/LM Studio
- 📋 Token 计数优化
- 📋 错误重试机制
- 📋 提示词模板系统
**文件清单**
```
server/
├── api/v1/app/ai_config.go # API 控制器
├── model/app/ai_config.go # AI 配置模型
├── model/app/request/ai_config.go # 请求结构
├── model/app/response/ai_config.go # 响应结构
└── service/app/ai_config.go # 业务逻辑
```
### 5.2 前端页面(已完成 - 2026-02-27
**功能特性**
- ✅ AI 配置管理界面
- ✅ API Key 配置
- ✅ 模型选择
- ✅ 连接测试
**文件清单**
```
web-app/src/
└── api/aiConfig.ts # AI 配置 API 封装
```
---
## 六、世界书系统 ✅
### 6.1 后端 API已完成 - 2026-02-27
**数据模型**
-`Worldbook` - 世界书模型
-`WorldbookEntry` - 世界书条目模型(完全兼容 SillyTavern 格式)
- ✅ 支持公开/私有世界书
- ✅ 使用 JSONB 存储关键词数组和扩展字段
**已实现字段**
- ✅ keys/secondary_keys - 主关键词和次要关键词
- ✅ content - 条目内容
- ✅ constant/enabled - 常驻和启用标志
- ✅ use_regex/case_sensitive/match_whole_words - 匹配选项
- ✅ selective/selective_logic - 选择性触发逻辑
- ✅ position/depth/order - 注入位置和深度
- ✅ probability/scan_depth - 触发概率和扫描深度
- ✅ group_id - 分组管理
**API 端点**
-`POST /app/worldbook` - 创建世界书
-`GET /app/worldbook` - 获取世界书列表(分页、搜索)
-`GET /app/worldbook/:id` - 获取世界书详情
-`PUT /app/worldbook/:id` - 更新世界书
-`DELETE /app/worldbook/:id` - 删除世界书(级联删除条目)
-`POST /app/worldbook/import` - 导入世界书JSON
-`GET /app/worldbook/:id/export` - 导出世界书为 JSON
-`POST /app/worldbook/:id/entry` - 创建条目
-`GET /app/worldbook/:id/entries` - 获取条目列表
-`PUT /app/worldbook/:id/entry/:entryId` - 更新条目
-`DELETE /app/worldbook/:id/entry/:entryId` - 删除条目
**核心功能**
- ✅ 完全兼容 SillyTavern 世界书格式
- ✅ JSON 格式导入导出
- ✅ 世界书搜索和筛选
- ✅ 用户权限控制(只能编辑自己的世界书)
- ✅ 条目计数自动更新
- ✅ 关键词触发引擎WorldbookEngine
- ✅ 与对话系统完全集成(非流式 + 流式)
**文件清单**
```
server/
├── api/v1/app/worldbook.go # API 控制器
├── model/app/worldbook.go # 世界书和条目模型
├── model/app/request/worldbook.go # 请求结构
├── model/app/response/worldbook.go # 响应结构
├── service/app/worldbook.go # 业务逻辑
├── service/app/worldbook_engine.go # 关键词触发引擎
└── router/app/worldbook.go # 路由配置
```
### 6.2 前端页面(已完成 - 2026-02-27
**页面**
-`/worldbooks` - 世界书管理页
**功能特性**
- ✅ 导入 JSON 世界书
- ✅ 创建世界书
- ✅ 世界书列表展示
- ✅ 世界书搜索
- ✅ 世界书导出
- ✅ 世界书删除
- ✅ 条目创建和编辑
- ✅ 条目列表展示
- ✅ 条目删除
- ✅ 关键词管理(主关键词、次要关键词)
- ✅ 条目选项配置(常驻、启用、正则、大小写等)
- ✅ 高级选项(触发概率、扫描深度)
**文件清单**
```
web-app/src/
├── api/worldbook.ts # 世界书 API 封装
└── pages/WorldbookManagePage.tsx # 世界书管理页面
```
### 6.3 前后端对接(已完成 - 2026-02-27
**API 服务层**
-`web-app/src/api/worldbook.ts` - 世界书 API 封装
**核心功能**
- ✅ 世界书列表加载(分页、搜索)
- ✅ 文件上传JSON
- ✅ 世界书创建、编辑、删除
- ✅ 世界书导出
- ✅ 条目创建、编辑、删除
- ✅ 条目列表加载
- ✅ 错误处理和用户提示
- ✅ 登录状态检查
### 6.4 对话系统集成(已完成 - 2026-02-27
**触发引擎**`service/app/worldbook_engine.go`
-`WorldbookEngine.ScanAndTrigger` - 扫描消息历史并触发匹配条目
-`WorldbookEngine.shouldTrigger` - 逐条检查触发条件constant/keys/scanDepth
-`WorldbookEngine.matchKeys` - 关键词匹配useRegex/caseSensitive/matchWholeWords
-`WorldbookEngine.BuildPromptWithWorldbook` - 将触发条目注入到系统提示词
**集成点**
-`conversation.go:callAIService` - 非流式消息世界书注入
-`conversation.go:SendMessageStream` - 流式消息世界书注入
**执行流程**
```
用户消息 → 扫描最近 N 条消息 → 匹配关键词 → 触发条目排序 → 注入系统提示词 → AI 处理
```
**设置面板**`components/SettingsPanel.tsx`
- ✅ 世界书开关(启用/禁用)
- ✅ 世界书选择器(下拉列表,显示条目数量)
- ✅ 保存到 `conversation.worldbookId``conversation.worldbookEnabled`
### 6.5 待完善功能
- 📋 概率触发机制probability 字段已存储,引擎待实现)
- 📋 递归扫描
- 📋 角色绑定世界书Character Book
- 📋 全局世界书
---
## 七、正则脚本系统 ✅
### 7.1 后端 API已完成 - 2026-03-02
**数据模型**
-`RegexScript` - 正则脚本模型(完全兼容 SillyTavern 格式)
- ✅ 支持全局、角色、预设三种作用域
- ✅ 使用 JSONB 存储扩展字段和修剪字符串数组
**已实现字段**
- ✅ name - 脚本名称
- ✅ find_regex - 查找正则表达式
- ✅ replace_with - 替换字符串
- ✅ trim_strings - 修剪字符串数组
- ✅ placement - 执行阶段0=输入/1=输出/2=世界书/3=显示)
- ✅ disabled - 禁用标志
- ✅ markdown_only - 仅 Markdown 模式
- ✅ run_on_edit - 编辑时运行
- ✅ prompt_only - 仅提示词模式
- ✅ substitute_regex - 宏替换({{user}}/{{char}}
- ✅ min_depth/max_depth - 深度控制
- ✅ scope - 作用域0=全局/1=角色/2=预设)
- ✅ owner_char_id/owner_preset_id - 所有者 ID
- ✅ order - 执行顺序
**API 端点**
-`POST /app/regex` - 创建正则脚本
-`GET /app/regex` - 获取脚本列表(分页、搜索、作用域筛选)
-`GET /app/regex/:id` - 获取脚本详情
-`PUT /app/regex/:id` - 更新脚本
-`DELETE /app/regex/:id` - 删除脚本
-`POST /app/regex/test` - 测试脚本执行
**核心功能**
- ✅ 完全兼容 SillyTavern 正则脚本格式
- ✅ 多阶段脚本执行(输入/输出/世界书/显示)
- ✅ 正则表达式解析和执行
- ✅ 宏替换系统({{user}}/{{char}}/{{original}}
- ✅ 深度控制和条件执行
- ✅ 与对话系统集成
- ✅ 角色卡导入时自动导入正则脚本
- ✅ 角色卡导出时自动导出正则脚本
**文件清单**
```
server/
├── api/v1/app/regex_script.go # API 控制器
├── model/app/regex_script.go # 正则脚本模型
├── model/app/request/regex_script.go # 请求结构
├── model/app/response/regex_script.go # 响应结构
├── service/app/regex_script.go # 业务逻辑和执行引擎
├── router/app/regex_script.go # 路由配置
└── service/app/character.go # 角色卡导入导出集成
```
### 7.2 前端页面(已完成 - 2026-03-02
**功能特性**
- ✅ 角色卡管理页面集成正则脚本编辑
- ✅ 导入 JSON 正则脚本(兼容 SillyTavern 格式)
- ✅ 正则脚本创建和编辑
- ✅ 正则脚本列表展示
- ✅ 正则脚本删除
- ✅ 执行阶段选择(输入/输出/世界书/显示)
- ✅ 执行顺序配置
- ✅ 启用/禁用开关
- ✅ 作用域管理(全局/角色/预设)
**文件清单**
```
web-app/src/
├── api/regex.ts # 正则脚本 API 封装
├── pages/CharacterManagePage.tsx # 角色卡管理页面(集成正则脚本)
└── components/MessageContent.tsx # 消息渲染组件HTML/脚本渲染)
```
### 7.3 对话系统集成(已完成 - 2026-03-02
**集成点**
- ✅ 输入阶段Placement 0- 用户消息发送前处理
- ✅ 输出阶段Placement 1- AI 回复生成后处理
- ✅ 显示阶段Placement 3- 前端渲染前处理
- ✅ 开场白消息处理 - 角色首条消息应用正则脚本
**实现位置**
-`conversation.go:SendMessage` - 非流式消息发送
-`conversation.go:SendMessageStream` - 流式消息发送
-`conversation.go:CreateConversation` - 创建对话时处理开场白
**执行流程**
```
用户输入 → 输入阶段脚本 → AI 处理 → 输出阶段脚本 → 保存数据库 → 显示阶段脚本 → 前端渲染
```
### 7.4 前端渲染优化(已完成 - 2026-03-02
**HTML 渲染支持**
- ✅ 自动提取 markdown 代码块中的 HTML```html...```
- ✅ 移除 markdown 代码块标记(``` 符号)
- ✅ 自动启用脚本渲染(无需手动点击按钮)
- ✅ iframe 沙箱渲染(支持 JavaScript
- ✅ 直接 HTML 渲染(无脚本内容)
- ✅ 统一容器样式(避免宽高变化)
- ✅ 响应式宽度适配(强制覆盖固定宽度)
**选项按钮支持**
- ✅ 自动解析选项格式A:/A./A、/A
- ✅ 渲染为可点击按钮
- ✅ 点击后自动发送选项内容
- ✅ 支持多种选项格式
**文件位置**
-`MessageContent.tsx:173-243` - HTML 提取和处理逻辑
-`MessageContent.tsx:246-290` - iframe 渲染逻辑
-`MessageContent.tsx:348-372` - 渲染模式切换
### 7.5 全局正则脚本管理(已完成 - 2026-03-02
**功能特性**
- ✅ 独立的全局正则脚本管理页面 `/regex-scripts`
- ✅ 创建、编辑、删除全局正则脚本
- ✅ 导入导出 JSON 格式脚本(兼容 SillyTavern
- ✅ 只管理 scope=0 的全局脚本
- ✅ 支持批量导出所有脚本
**文件位置**
-`web-app/src/pages/RegexScriptManagePage.tsx` - 全局正则脚本管理页面
-`web-app/src/App.tsx` - 添加路由配置
### 7.6 变量系统扩展(已完成 - 2026-03-02
**后端新增变量** (`server/service/app/regex_script.go`):
-`{{time_12h}}` - 12小时制时间
-`{{date_short}}` - 短日期格式 (MM/DD/YY)
-`{{weekday}}` - 星期几
-`{{month}}` - 月份名称
-`{{year}}` - 年份
-`{{pick:option1|option2|option3}}` - 随机选择一个选项
-`{{tab}}` - 制表符
-`{{space}}` - 空格
-`{{empty}}` - 空字符串
**前端变量系统** (`web-app/src/store/index.ts`):
- ✅ 同步支持所有后端变量
-`substituteVariables()` 函数可在前端替换变量
-`extractVariables()` 函数可提取文本中的变量
### 7.7 MVU 状态管理架构(已完成 - 2026-03-02
**核心实现** (`web-app/src/store/index.ts`):
- ✅ 基于 Zustand 实现完整的 MVU 架构
- ✅ Model: 用户、角色、对话、消息、UI、变量状态
- ✅ Update: 完整的状态更新操作
- ✅ View: 状态选择器Selectors
- ✅ 持久化存储localStorage
- ✅ DevTools 支持
**页面集成**:
-`ChatPage.tsx` - 集成 MVU store 管理对话状态
-`CharacterManagePage.tsx` - 导入 MVU store
- ✅ 角色切换时自动更新变量系统
**工具函数**:
-`substituteVariables()` - 替换文本中的变量
-`extractVariables()` - 提取文本中的变量
### 7.8 待完善功能
- 📋 世界书阶段Placement 2脚本执行
- 📋 正则脚本测试界面
- 📋 正则脚本模板库
- 🧪 全局正则脚本功能测试
- 🧪 扩展变量系统测试
- 🧪 MVU store 集成测试
---
## 八、公共页面 ✅
### 6.1 已完成页面
-`/` - 首页(平台介绍、热门角色)
-`/market` - 角色广场(浏览、搜索、分类)
-`/character/:id` - 角色详情(信息、评价)
**文件**
```
web-app/src/pages/
├── HomePage.tsx
├── CharacterMarket.tsx
└── CharacterDetail.tsx
```
---
## 九、技术债务与优化
### 9.1 待优化项
- ✅ 前后端 API 对接(已完成:用户、角色卡、预设、对话)
- ✅ 实际 AI API 调用集成
- 📋 错误处理统一化
- 📋 加载状态优化
- 📋 响应式布局完善
- 📋 性能优化(虚拟滚动、懒加载)
- 📋 单元测试
- 📋 E2E 测试
- 📋 实际 AI API 调用集成
- 📋 世界书引擎实现
- 📋 正则脚本引擎实现
- 📋 Prompt Pipeline 优化
### 9.2 已知问题
- ✅ 对话系统预设切换功能(流式模式已支持)
- ✅ 消息重新生成功能(支持流式,自动删除旧回复)
- 📋 消息编辑功能待实现
---
## 十、部署相关 📋
### 10.1 待完成
- 📋 Docker 配置
- 📋 CI/CD 流程
- 📋 环境变量管理
- 📋 数据库迁移脚本
- 📋 备份策略
- 📋 监控告警
---
## 十一、文档完善 📋
### 11.1 待补充文档
- 🚧 API 接口文档Swagger 注释已添加,待生成)
- 📋 数据库设计文档
- 📋 部署文档
- 📋 开发规范
- 📋 贡献指南
- ✅ SillyTavern 兼容优化方案(已完成)
---
## 开发时间线
### 2024-02-26
- ✅ 完成用户系统后端 API
- ✅ 完成用户系统前端页面
- ✅ 完成用户系统前后端对接
- ✅ 完成角色卡管理后端 API完全兼容 SillyTavern V2
- ✅ 完成角色卡管理前端页面
- ✅ 完成角色卡管理前后端对接
- ✅ 完成预设管理前端页面
- ✅ 完成对话系统前端基础界面
- ✅ 完成公共页面(首页、角色广场、角色详情)
- ✅ 项目结构重构(前后端分离)
### 2026-02-27
-**完成预设管理后端 API**
- 实现预设 CRUD 操作
- 实现预设导入导出JSON
- 实现默认预设管理
- 完全兼容 SillyTavern 预设格式
-**完成预设管理前后端对接**
-**完成对话系统后端 API**
- 实现对话会话管理
- 实现消息发送接收
- 实现 SSE 流式响应
- 实现对话历史存储
-**完成对话系统前后端对接**
-**完成 AI 配置管理模块**
-**完成世界书系统**
- 实现世界书 CRUD 操作
- 实现世界书条目管理
- 实现导入导出功能
- 完全兼容 SillyTavern 格式
-**编写 SillyTavern 完全兼容优化方案**
-**更新开发进度文档**
### 2026-02-27
-**完成世界书与对话系统集成**
- 实现 WorldbookEngine 关键词触发引擎
- 集成到非流式callAIService和流式SendMessageStream消息路径
- 实现选择性触发逻辑constant/keys/useRegex/caseSensitive/matchWholeWords
- 实现 SettingsPanel 世界书选择器(启用开关 + 世界书下拉)
-**修复前端消息渲染 Bug**
- 修复通用代码块正则误判导致消息内容消失的问题(恢复仅识别 \`\`\`html 标识符)
- 修复 iframe 宽度坍缩为 300px 问题(助手消息列从 max-w-[70%] 改为 w-[70%]
- 保留 HTML 代码块渲染中的 ``` → `<pre><code>` 转换逻辑
### 2026-03-02
-**完成正则脚本系统后端 API**
- 实现正则脚本 CRUD 操作
- 实现多阶段脚本执行引擎
- 实现宏替换系统({{user}}/{{char}}/{{original}}
- 完全兼容 SillyTavern 正则脚本格式
-**完成正则脚本前端管理界面**
- 集成到角色卡管理页面
- 支持导入导出正则脚本
- 支持脚本创建、编辑、删除
-**完成正则脚本与对话系统集成**
- 输入阶段脚本处理(用户消息)
- 输出阶段脚本处理AI 回复)
- 显示阶段脚本处理(前端渲染)
- 开场白消息脚本处理
-**完成前端 HTML 渲染优化**
- 自动提取和渲染 markdown 代码块中的 HTML
- 移除 markdown 代码块标记
- 自动启用脚本渲染
- iframe 沙箱渲染支持
- 响应式宽度适配
-**完成选项按钮功能**
- 自动解析选项格式
- 渲染为可点击按钮
- 点击后自动发送
-**修复关键 Bug**
- 修复 GetScriptsForPlacement SQL 查询 bug
- 修复流式消息未应用正则脚本问题
- 修复 HTML 渲染宽度问题
- 修复 markdown 符号残留问题
### 2026-03-02今天完成
-**完成正则脚本前端 HTML 渲染优化**
- 修复 HTML 代码块渲染问题
- 移除 markdown ``` 符号残留
- 自动启用脚本渲染
- 统一 iframe 和直接 HTML 渲染的容器样式
- 修复宽度适配问题
-**完成全局正则脚本管理功能**
- 创建独立的全局正则脚本管理页面 `/regex-scripts`
- 支持创建、编辑、删除、导入、导出全局脚本
- 完全兼容 SillyTavern 格式
-**扩展变量系统**
- 后端新增 10+ 个变量类型
- 支持时间格式化、随机选择、特殊字符等
- 前端同步支持所有变量
-**实现 MVU 状态管理架构**
- 基于 Zustand 实现完整的 MVU 模式
- 集成到 ChatPage 和 CharacterManagePage
- 支持持久化存储和 DevTools
- 内置变量替换工具函数
-**完成混合内容渲染系统**
- 实现 HTML 和文本混合渲染(保持原始顺序)
- 支持代码块自动识别和转换
- 文本内容正确换行显示
- 对白内容自动高亮(紫色加粗)
- 支持多种引号格式:`""``"``「」``『』``''`
-**修复关键 Bug**
- 修复开场白消息未应用正则脚本问题
- 修复 API 导出名称不匹配导致页面空白问题
- 修复 HTML 内容渲染失效问题
- 修复文本换行和对白高亮不生效问题
- 修复内容渲染顺序错误问题HTML 被提取到顶部)
### 待测试功能(下次工作)
- 🧪 **全局正则脚本功能测试**
- 测试全局脚本在所有对话中的应用
- 测试导入导出功能
- 测试脚本执行顺序
- 🧪 **扩展变量系统测试**
- 测试所有新增变量类型
- 测试 `{{pick:}}` 随机选择功能
- 测试时间格式化变量
- 🧪 **MVU Store 集成测试**
- 测试状态持久化
- 测试变量系统自动更新
- 测试跨页面状态同步
- 🧪 **混合内容渲染测试**
- 测试 HTML 和文本混合渲染
- 测试对白高亮效果
- 测试各种引号格式
- 测试内容顺序保持
- 测试所有新增变量类型
- 测试 `{{pick:}}` 随机选择功能
- 测试时间格式化变量
- 🧪 **MVU Store 集成测试**
- 测试状态持久化
- 测试变量系统自动更新
- 测试跨页面状态同步
- 🧪 **HTML 渲染优化测试**
- 测试 markdown 代码块中的 HTML 渲染
- 测试 iframe 宽度自适应
- 测试脚本自动启用功能
- ✅ 实现实际 AI API 调用OpenAI/Anthropic
- ✅ 实现世界书系统(完全兼容 SillyTavern包含触发引擎和对话集成
- ✅ 实现正则脚本系统(完全兼容 SillyTavern
- ✅ 实现 Prompt Pipeline世界书触发注入、正则处理、提示词构建
- 📋 完善对话系统高级功能(消息编辑)
- 📋 性能优化与测试
- 📋 部署上线
---
## 下一步计划
### 短期目标(本周)
1. ✅ 完成角色卡管理后端 API已完成
2. ✅ 完成预设管理后端 API已完成
3. ✅ 完成对话系统后端 API已完成
4. ✅ 实现实际 AI API 调用OpenAI/Anthropic
5. ✅ 完善对话系统高级功能(消息重新生成)
### 中期目标(本月)
1. ✅ 实现世界书系统(完全兼容 SillyTavern
- ✅ 数据模型设计
- ✅ 关键词触发算法WorldbookEngine
- ✅ 选择性触发逻辑
- ✅ 与对话系统集成
2. ✅ 实现正则脚本系统(完全兼容 SillyTavern
- ✅ 数据模型设计
- ✅ 多阶段脚本执行
- ✅ 正则表达式引擎
- ✅ 宏替换系统
3. ✅ 实现 Prompt Pipeline
- ✅ 世界书扫描与注入
- ✅ 正则脚本处理
- ✅ 提示词构建优化
4. 📋 基础功能测试与优化
5. 📋 消息编辑功能
### 长期目标(下月)
1. 📋 插件系统设计与实现
2. 📋 性能优化(虚拟滚动、懒加载、缓存)
3. 📋 完善文档API 文档、部署文档)
4. 📋 Docker 部署配置
5. 📋 CI/CD 流程搭建
6. 📋 部署上线
7. 📋 用户反馈收集
---
## 团队协作
### 开发规范
- 代码风格:遵循项目现有风格
- 提交规范:使用 Conventional Commits
- 分支管理feature/* 用于新功能bugfix/* 用于修复
### 沟通渠道
- 技术讨论GitHub Issues
- 进度同步:本文档
- 代码审查Pull Request
---
## 备注
- 本文档持续更新,记录项目开发进度
- 每完成一个功能模块,更新对应状态
- 遇到问题及时记录在"已知问题"部分