大家好,我是欧达克。
正文
现在 AI 工具遍地生花,之前一直受限于种种原因,很多想法都没办法实际落地。今天突发奇想,为啥不搭着这波 AI 浪潮,搞点有趣的东西出来?一方面是完整体验下目前常用的 AI 工具,另一方面也是丰富下自己的技术栈。
项目介绍
首先是确定要做什么,对于要开发的应用,有这两点要求:
- 足够简单,验证 AI 辅助编程的实际效果;
- 具备一定的吸引力,至少让自己开发的时候不那么枯燥;
思考了一天,结合 DeepSeek 的输入,最终决定做一款 AI 嘴替 APP,能够根据社交评论中的攻击性言论,用AI生成高情商回复。
核心用户场景:
用户A在社交平台被杠精攻击 → 复制评论粘贴到App → AI生成高情商反击回复
MVP 版本功能很简单,本质上就是一个 AI 聊天机器人。主要想通过这个项目,实现:
- 使用 uni-app 工具,完成从 0 到 1 的 APP 项目开发;
- 测试目前常用 AI 编程辅助工具的优缺点;
- 走通 IOS/安卓的应用上架流程;
- 集成 AI 接口,方便后续快速接入 AI;
- 丰富前端技术栈;
技术栈
前端:
vue3 + uni-app;
- Cursor + Trae + + Cline + DeepSeek + UI 工具生成页面;
- uni-app 打包生成跨平台应用;
后端:
Spring Boot + Redis + MySQL + AI 模型
- 大模型的选型待定,待接入时看看实际表现;
效果:
完整前后端+AI链路
后端工程
个人主要从事后端开发,根据多年的开发经验,结合自己的思考,整理了一套开源的后端工程模板,分享给大家。本项目的后端代码也是直接基于该模板。
脚手架
Github 地址:github.com/oubin17/odk...。脚手架具备的功能包括但不限于:
- 后端框架:
- 数据库:
-
- MySQL / Oracle
- Redis(缓存支持)
- ElasticSearch(全文索引)
- 消息队列:
-
- RabbitMQ / Kafka(可选)
- 安全:
-
- Sa-Token(单点登录、权限认证)
- 构建工具:
-
- Maven
- 其他:
-
- Lombok(简化代码)
- Snowflake ID 生成器(分布式唯一 ID 生成)
- Tracer (链路追踪)
- MapStruct(对象映射)
- Jackson(JSON 处理)
模块
项目模块依赖如下:
🌟 模块介绍
odk-base-template
- web:提供 http 接口
- rpc:预留
- api:服务统一对外功能接口,调用方可以是 http,也可以是 rpc
- service:服务处理模板封装,实现 api 接口,完成参数校验、参数转换、异常处理、日志打印等
- manager:核心实现模块,业务逻辑处理
- domain:领域模块,领域模型封装
- infra:基础设施模块,外部系统集成
- util:提供常用工具类
- bootstrap:启动模块
odk-base-util
可以理解为基座,如数据库的集成,缓存的集成,ES 的集成;
对外提供统一的集成 jar 包,屏蔽底层的集成逻辑,消除由于版本差异带来的未知问题;
🚀 主要特性
- 现代化技术栈:基于 Spring Boot 3 和 Java 17
- 模块化设计:清晰的模块划分,便于扩展和维护。
- 高拓展性:项目融合微服务的思想,非常方便由单体应用拓展到微服务应用。
- 开箱即用:内置常用功能模块(如日志管理、异常处理、统一返回格式等)。
- 易于集成 :支持与主流中间件(如 Redis、MySQL、RabbitMQ 等)无缝集成。项目采用互联网常用的基座方式,中间件的集成由工程odk-common-util实现,其他项目只需引入 odk-common-util 对应模块即可,无需关心如何对接。
- 完善的文档:详细的代码注释和使用说明,降低学习成本。
基于脚手架的新工程搭建
步骤
Step1:克隆 util 应用到本地
git clone https://github.com/oubin17/odk-common-util.git
Step2:切换到相应的目录,将基座包部署到本地
bash
cd database-spring-boot-starter
mvn clean install
cd odk-common-util-base
mvn clean install
cd redis-spring-boot-starter
mvn clean install
Step3:克隆模板应用到本地
git clone https://github.com/oubin17/odk-base-template.git
Step4:执行 SQL 脚本(这里默认已经具备 MySQL 和 Redis 环境,如果没有需要安装一下,配置信息可以写到配置文件 application-dev.properties 中),这里以我本地为例:
ini
spring.odk.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.odk.datasource.url=jdbc:mysql://127.0.0.1:3306/odk_template
spring.odk.datasource.username=root
spring.odk.datasource.password=123456
# redis
spring.data.redis.host=localhost
spring.data.redis.port=6379
spring.data.redis.password=123456
spring.data.redis.database=0
SQL 脚本在项目根节点下 z-non-project-file/odk_template.sql
:
scss
/*
Navicat Premium Data Transfer
Source Server : mysql-docker-5.7.42
Source Server Type : MySQL
Source Server Version : 50742 (5.7.42)
Source Host : localhost:3306
Source Schema : odk_template
Target Server Type : MySQL
Target Server Version : 50742 (5.7.42)
File Encoding : 65001
Date: 26/03/2025 19:23:40
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for t_role_permission_rel
-- ----------------------------
DROP TABLE IF EXISTS `t_role_permission_rel`;
CREATE TABLE `t_role_permission_rel` (
`id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`create_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`tenant_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`permission_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`role_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_permission_id` (`role_id`,`permission_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for t_user_access_token
-- ----------------------------
DROP TABLE IF EXISTS `t_user_access_token`;
CREATE TABLE `t_user_access_token` (
`id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`create_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`tenant_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`token_type` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`token_value` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`user_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_type_id` (`token_value`,`token_type`),
UNIQUE KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for t_user_base
-- ----------------------------
DROP TABLE IF EXISTS `t_user_base`;
CREATE TABLE `t_user_base` (
`id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`create_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`tenant_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`user_status` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`user_type` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for t_user_identification
-- ----------------------------
DROP TABLE IF EXISTS `t_user_identification`;
CREATE TABLE `t_user_identification` (
`id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`create_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`tenant_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`identify_type` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`identify_value` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`user_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for t_user_permission
-- ----------------------------
DROP TABLE IF EXISTS `t_user_permission`;
CREATE TABLE `t_user_permission` (
`id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`create_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`tenant_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`permission_code` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`permission_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`status` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_permission_id` (`permission_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for t_user_profile
-- ----------------------------
DROP TABLE IF EXISTS `t_user_profile`;
CREATE TABLE `t_user_profile` (
`id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`create_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`tenant_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`user_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户ID',
`birthday` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '生日',
`gender` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '性别',
`user_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL COMMENT '用户姓名',
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_id` (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for t_user_role
-- ----------------------------
DROP TABLE IF EXISTS `t_user_role`;
CREATE TABLE `t_user_role` (
`id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`create_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`tenant_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`role_code` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`role_name` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`status` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_role_code` (`role_code`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
-- ----------------------------
-- Table structure for t_user_role_rel
-- ----------------------------
DROP TABLE IF EXISTS `t_user_role_rel`;
CREATE TABLE `t_user_role_rel` (
`id` varchar(255) COLLATE utf8mb4_bin NOT NULL,
`create_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`create_time` datetime(6) DEFAULT NULL,
`tenant_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_by` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`update_time` datetime(6) DEFAULT NULL,
`role_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
`user_id` varchar(255) COLLATE utf8mb4_bin DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `idx_user_role_id` (`user_id`,`role_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
SET FOREIGN_KEY_CHECKS = 1;
执行到这一步,正常项目应该就直接能本地启动了:
以下为脚手架相关内容
Step5:创建 Maven Archetype
mvn archetype:create-from-project
这条命令会创建一个 target/generated-sources/archetype 目录,其中包含转换后的项目结构,Maven 已将项目转化为 archetype 模式;
Step6:安装 Archetype
bash
cd target/generated-sources/archetype
mvn install
Step7:使用 Archetype 创建新项目,现在你的自定义 Archetype 已安装到本地仓库,可以用它生成新的项目。
ini
mvn archetype:generate -DarchetypeGroupId=com.odk \
-DarchetypeArtifactId=base-template-archetype \
-DarchetypeVersion=1.0-SNAPSHOT \
-DgroupId=com.odk.ai \
-DartifactId=robotalk
-DgroupId=com.odk.ai 和 -DartifactId=robotalk 是新生成项目的 groupId 和 artifactId
生成完之后,代码可能还需要微调,这里不做演示了,都比较无脑,无非就是改些路径等等。
Step8:运行项目,项目启动正常。
分享
- 在 Github 上新建仓库:
- 按指令将本地项目推到远端:
项目 Github 地址:github.com/oubin17/rob...
说明
如果觉得使用脚手架拉出新应用麻烦, Step5-Step8 都可以跳过,直接基于脚手架工程开发也是完全没问题的。
总结
好了,以上就是 AI 嘴替应用服务端的基本工程搭建,后续有更多进展再分享~