全栈开发AI聊天回复小程序

一款基于微信小程序的 AI 聊天回复助手,支持多语气风格、多图识别、会话持久化,帮你轻松应对各种聊天场景。


🔍项目预览

一、项目缘起

在日常微信聊天中,我们常常遇到这样的场景:收到一条棘手的消息,不知道如何得体地回复;想表达某种语气,却找不到恰当的表达方式;或是面对多张截图,需要快速理解上下文给出回复。

AI 聊天回复大师 正是为解决这些痛点而生。用户只需输入对方消息(或上传聊天截图),选择期望的语气风格,即可一键生成多条高质量回复建议,直接复制发送。


二、技术架构总览

┌──────────────────────────────────────────────────────────────┐
│                        微信小程序 (uni-app)                   │
│  ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────────┐ │
│  │ 消息编辑器│ │ 语气选择器│ │ 自定义提示│ │   生成/结果展示   │ │
│  └──────────┘ └──────────┘ └──────────┘ └──────────────────┘ │
└──────────────────────────┬───────────────────────────────────┘
                           │ HTTPS / JWT
                           ▼
┌──────────────────────────────────────────────────────────────┐
│                   Nginx 反向代理 (your-domain.com)            │
└──────────────────────────┬───────────────────────────────────┘
                           │
                           ▼
┌──────────────────────────────────────────────────────────────┐
│                   Flask 后端服务 (:5000)                      │
│  ┌──────────┐ ┌─────────────┐ ┌────────────┐ ┌─────────────┐ │
│  │  鉴权模块 │ │   聊天模块   │ │  上传模块  │ │    语气模块  │ │
│  │ (JWT)    │ │(生成/重生成) │ │  (图片上传) │ │  (语气选项) │ │
│  └──────────┘ └─────────────┘ └────────────┘ └─────────────┘ │
│  ┌──────────┐ ┌─────────────┐ ┌────────────┐ ┌─────────────┐ │
│  │Prompt构建│ │    响应解析  │ │   会话服务  │ │  微信服务    │ │
│  └──────────┘ └─────────────┘ └────────────┘ └─────────────┘ │
└──────┬────────────────────┬──────────────────────────────────┘
       │                    │
       ▼                    ▼
┌──────────────┐   ┌──────────────────┐
│   MySQL 8.0  │   │  MinIO 对象存储   │
│  (会话/回复)  │   │   (聊天图片)      │
└──────────────┘   └──────────────────┘
       │
       ▼
┌──────────────────────────────────────────────┐
│          AI 服务商 (OpenAI 兼容 API)          │
│  ┌──────────────┐  ┌──────────────────────┐  │
│  │  供应商 A     │  │  供应商 B            │  │
│  │ (纯文本对话)  │  │ (多模态·支持图片识别)  │  │
│  └──────────────┘  └──────────────────────┘  │
└──────────────────────────────────────────────┘

三、前端技术实现

3.1 技术选型

技术说明
uni-app跨端开发框架,一次编写多端运行
Vue 3 Composition API逻辑复用与响应式状态管理
SCSSCSS 预处理器,配合 Design Tokens 实现主题化
微信小程序原生能力uni.loginuni.chooseImageuni.uploadFile

3.2 组件化设计

前端采用 原子化组件 + Composables 逻辑层 的架构:

frontend/
├── components/          # UI 组件
│   ├── app-header/      # 顶部导航栏(显示当前 AI 模型)
│   ├── message-editor/  # 消息输入区(文字 + 图片缩略图)
│   ├── tone-picker/     # 语气选择器(多选标签)
│   ├── custom-prompt/   # 自定义提示词折叠面板
│   ├── generate-action/ # 生成按钮(loading 光晕动画)
│   ├── loading-state/   # 加载骨架屏
│   ├── reply-card/      # 单条回复卡片(复制功能)
│   └── result-list/     # 回复结果列表(含"重新生成"重生成)
├── composables/         # 逻辑复用层
│   ├── use-reply-master.js  # 核心业务状态机
│   └── use-tones.js         # 语气选项管理
├── services/            # API 调用层
│   ├── auth.js          # 微信登录 & Token 管理
│   ├── reply.js         # 生成 / 重生成回复
│   └── upload.js        # 图片上传
├── config/              # 配置管理
│   ├── api.js           # API 地址
│   └── provider.js      # AI 供应商配置
└── utils/               # 工具函数
    ├── request.js       # 统一请求封装(自动 Token 续期)
    └── file.js          # 文件选择 / Base64 转换

3.3 核心状态管理(Composable)

use-reply-master.js 是整个前端的核心状态机,管理了:

  • 状态流转idle → loading → success / error
  • 图片上传:选择 → 本地预览 → 上传 MinIO → 获取 URL → 随请求发送
  • 前置校验:空内容防抖(shake 动画)、模型图片支持检测、数量上限
  • 会话持久化sessionId 贯穿生成与重生成流程
// 状态机核心
const status = ref('idle'); // idle | loading | success | error
const sessionId = ref(null); // 用于重生成关联

async function generateReplies() {
  status.value = 'loading';
  // 1. 上传图片 → 获取 URL
  // 2. 调用 API → 获取回复
  // 3. 保存 sessionId → 状态切换
  status.value = 'success';
}

3.4 请求拦截与 Token 自动续期

request.js 封装了请求层,关键特性:

  • 自动携带 JWT:从本地存储读取 token,注入 Authorization
  • 401 自动重登录:token 过期时自动触发微信登录,获取新 token 后重放请求
// 核心代码
if (res.statusCode === 401) {
  const loginResult = await wxLogin(); // 静默重新登录
  if (loginResult.success) {
    return await uni.request({ ...options, url, header }); // 重放请求
  }
}

3.5 视觉体验

  • 布局:深色主题 + 毛玻璃卡片 + 径向渐变光晕
  • 入场动画:各功能区域按 0s / 0.1s / 0.2s / 0.3s 交错淡入上移
  • 加载态:生成按钮 box-shadow 光晕脉冲动画
  • 错误态:红色调卡片 + 层级化文案

四、后端技术实现

4.1 技术选型

技术说明
Flask 3.0轻量级 Python Web 框架
Flask-SQLAlchemyORM 数据库操作
Flask-CORS跨域支持
Flask-Limiter接口频率限制
PyJWT + cryptographyJWT 鉴权
MinIO Python SDK对象存储图片上传
MySQL 8.0关系型数据库
Docker容器化部署

4.2 分层架构

backend/
├── app.py              # 应用工厂入口
├── config.py           # 集中配置管理
├── extensions.py       # Flask 扩展初始化
├── models.py           # 数据模型定义
├── Dockerfile          # 容器镜像构建
├── api/                # 路由层(薄层,只做参数校验与响应)
│   ├── auth.py         # 微信登录 + JWT 签发/校验
│   ├── chat.py         # 生成 / 重生成回复
│   ├── upload.py       # 图片上传
│   └── tones.py        # 语气选项
├── services/           # 业务逻辑层
│   ├── ai_service.py         # AI 接口调用
│   ├── session_service.py    # 会话数据存取
│   └── wx_service.py         # 微信 OpenAPI 对接
├── storage/            # 存储层
│   └── minio_client.py       # MinIO 文件上传/删除
└── utils/              # 工具层
    ├── prompt_builder.py     # Prompt 构建器
    ├── parser.py             # AI 响应解析器
    ├── response.py           # 统一响应格式
    └── errors.py             # 全局错误处理

4.3 数据库设计(ER 模型)

-- 语气选项表(预置种子数据)
tones (id, label, description, sort_order, created_at)
  └── 预置 6 种语气:正式得体 | 温柔安慰 | 幽默风趣 | 委婉高情商 | 真诚走心 | 简洁直接

-- 聊天会话表(每次生成请求创建一条)
chat_sessions (id, session_id, user_openid, message, custom_prompt, provider, model, created_at, updated_at)

-- 会话图片关联表(一对多)
session_images (id, session_id → chat_sessions.session_id, image_url, sort_order)

-- 会话语气关联表(多对多)
session_tones (id, session_id → chat_sessions.session_id, tone_id → tones.id)

-- 回复记录表(一对多,按生成批次分组)
chat_replies (id, session_id → chat_sessions.session_id, reply_content, reply_index, generation_batch, created_at)

设计亮点:

  • generation_batch 字段:每次点击"重新生成"会创建一个新的批次号,同一 session 的历史回复按批次分组,支持回溯查看
  • session_id 使用 UUID:前端持有 UUID,不暴露自增主键,增强安全性
  • 级联删除:删除 session 时自动清理关联的图片、语气、回复记录

4.4 Prompt 工程

系统的核心在于 prompt 构建策略。prompt_builder.py 会根据用户输入动态拼接:

System Prompt:
  你是一名擅长微信聊天场景的中文回复助手,精通高情商沟通、关系拿捏、
  不同语气转换和聊天润色...

User Prompt:
  请生成 3 条适合微信直接发送的中文回复。
  对方消息内容:{用户输入}
  目标语气:幽默风趣、委婉高情商
  额外要求:{自定义提示词}
  补充信息:用户还上传了聊天截图,请优先识别图片中的文字与语境...
  生成要求:自然、口语化、可直接发送、表达角度有区分...
  请严格返回 JSON:{"replies":["回复1","回复2","回复3"]}

关键设计:

  • 要求 AI 严格返回 JSON,避免输出额外解释文本
  • 每批生成多条回复,且要求 表达角度有区分,避免重复
  • 支持图片上下文,AI 会优先识别截图中文字再生成

4.5 响应解析与容错

AI 的输出具有不确定性,parser.py 实现了多层容错解析:

def extract_reply_payload(raw_content, reply_count):
    # 第 1 层:尝试 JSON 解析(自动去除 markdown 代码块标记)
    parsed = safe_parse_json(raw_content)

    # 第 2 层:如果 JSON 格式正确,直接提取 replies 数组
    if parsed and isinstance(parsed.get('replies'), list):
        return {'replies': replies[:target_count]}

    # 第 3 层:降级为按行分割(去除编号前缀)
    return {'replies': fallback_split_replies(raw_content)[:target_count]}

4.6 AI 多供应商接入

支持多 AI 供应商无缝切换,通过配置驱动:

AI_PROVIDERS = {
    'provider-a': {
        'endpoint': 'https://api.example.com/v1/chat/completions',
        'default_model': 'example-flash',
    },
    'provider-b': {
        'endpoint': 'https://api.example.com/v1/chat/completions',
        'default_model': 'example-vision-pro',  # 支持多模态图片识别
    },
}

所有供应商统一使用 OpenAI 兼容的 Chat Completions API 格式,ai_service.py 提供统一调用入口,自动处理错误码、空响应等异常。

4.7 安全设计

安全措施实现方式
API Key 保护存储在服务端配置,前端不接触任何 AI API Key
微信登录鉴权wx.login() 获取 code → 后端换取 openid → 签发 JWT → 前端存储
JWT 校验装饰器@login_required 拦截所有业务接口,校验 token 有效性
接口限流Flask-Limiter 限制 8 次/分钟,防止滥用
Token 过期15 分钟过期,401 自动重新登录
文件上传校验限制图片格式(jpg/png/gif/webp),拒绝非图片文件
统一响应格式{code, msg, isSuccess, content} 保证前端一致性处理

4.8 统一响应格式

# 成功响应
{'code': 200, 'msg': 'success', 'isSuccess': True, 'content': {...}}

# 失败响应
{'code': 400, 'msg': '错误描述', 'isSuccess': False}

全局错误处理器统一接管 404 / 405 / 500 异常,保证所有接口响应格式一致。


五、关键业务流程

5.1 生成回复完整链路

[用户输入消息] → [选择语气] → [可选:上传截图] → [可选:自定义提示词]
       │
       ▼
[前端图片上传至 MinIO] → 获取图片 URL 列表
       │
       ▼
[POST /api/v1/chat/generate]  ──── JWT 校验 ──── 限流检查
       │
       ▼
[Prompt 构建] → 拼接 system + user prompt + 图片 URL
       │
       ▼
[AI 服务调用] → 发送 OpenAI 兼容请求 → 等待响应
       │
       ▼
[响应解析] → JSON 解析 / 降级按行分割 → 提取 replies[]
       │
       ▼
[数据持久化] → 创建/更新 ChatSession → 保存图片/语气/回复
       │
       ▼
[返回前端] → 渲染回复卡片 → 支持复制 / 重新生成重生成

5.2 "重新生成"重生成流程

[点击"重新生成"] → POST /api/v1/chat/regenerate { sessionId }
       │
       ▼
[查询会话上下文] → 从 DB 读取原始 message、tone_ids、image_urls 等
       │
       ▼
[重新构建 Prompt] → 相同的输入参数 → 不同的 generation_batch
       │
       ▼
[AI 重新生成] → 解析 → 追加保存到同一 session(新批次)
       │
       ▼
[返回新回复] → 前端替换显示

设计优势:重生成不需要前端重传所有参数,后端从数据库恢复会话上下文,减少请求体积和前端复杂度。


六、部署方案

6.1 Docker 容器化

FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]

6.2 生产环境

组件部署方式
Flask 后端Docker 容器运行于自有服务器
MySQL服务器本地安装,端口 3306
MinIO服务器 Docker 部署,API 端口 9000,Console 端口 9001
│ Nginx反向代理,HTTPS 域名 your-domain.com,路径 /api/v1localhost:5000
微信小程序uni-app 编译为微信小程序代码,上传至微信公众平台

6.3 配置管理

所有敏感配置通过环境变量注入,本地开发提供 .env 默认值,生产环境通过 Docker --envdocker-compose 传入真实凭据。


七、技术亮点总结

  1. 前后端代码逻辑清晰、条理分明、层次清楚:前端采用 Composables(逻辑层)+ Services(API 层)+ Components(UI 层)三层解耦,状态管理集中、数据流单向可追溯;后端采用 API 路由层(薄)→ 业务服务层 → 存储层的三层架构,每层职责单一、边界清晰,新增功能只需在对应层级扩展,不污染其他模块
  2. AI 多供应商可插拔:通过配置驱动,新增供应商只需添加配置项,无需改动业务代码
  3. Prompt 工程精细化:结构化 prompt 构建 + 多层容错解析,保证 AI 输出的可靠性
  4. 会话完整持久化:generation_batch 设计支持历史回溯,session_id + UUID 保障数据安全
  5. JWT 无感续期:401 响应自动触发静默登录,用户无感知
  6. 统一错误处理:全局异常拦截 + 统一响应格式,前后端对接零歧义
  7. Docker 一键部署:全组件容器化,环境一致,运维友好

八、项目信息

  • 项目名称:AI 聊天回复大师
  • 技术栈:uni-app / Vue 3 / Flask / MySQL / MinIO / Docker
  • AI 服务:供应商 A(纯文本)/ 供应商 B(多模态图片识别)
  • 平台:微信小程序

本文基于实际项目开发经验整理,完整记录了从技术选型、架构设计到核心实现的全部过程,希望对有类似需求的朋友有所启发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

acheding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值