需求分析

构建一个基于Java+MySQL的个人ChatGPT提示词库与分享平台,核心功能包括:

  • 用户注册、登录与权限管理
  • 提示词的增删改查(CRUD)
  • 分类标签管理(如技术、写作、营销等)
  • 热门提示词推荐与分享机制
  • 搜索与过滤功能(关键词、标签、用户)

技术栈选择

  • 后端:Spring Boot(Web+Security)+ MyBatis/JPA
  • 数据库:MySQL 8.0(支持JSON字段存储复杂提示词参数)
  • 前端:Thymeleaf/Vue.js(可选)
  • 部署:Docker + Nginx

数据库设计

表结构示例
-- 用户表  
CREATE TABLE `user` (  
  `id` INT PRIMARY KEY AUTO_INCREMENT,  
  `username` VARCHAR(50) UNIQUE NOT NULL,  
  `password` VARCHAR(100) NOT NULL, -- 加密存储  
  `email` VARCHAR(100) UNIQUE,  
  `role` ENUM('admin', 'user') DEFAULT 'user'  
);  

-- 提示词表  
CREATE TABLE `prompt` (  
  `id` INT PRIMARY KEY AUTO_INCREMENT,  
  `title` VARCHAR(200) NOT NULL,  
  `content` TEXT NOT NULL,  -- 存储提示词内容  
  `params` JSON,            -- 存储动态变量(如{{topic}})  
  `user_id` INT,            -- 关联用户  
  `created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,  
  FOREIGN KEY (`user_id`) REFERENCES `user`(`id`)  
);  

-- 标签表(多对多关系)  
CREATE TABLE `tag` (  
  `id` INT PRIMARY KEY AUTO_INCREMENT,  
  `name` VARCHAR(50) UNIQUE NOT NULL  
);  

CREATE TABLE `prompt_tag` (  
  `prompt_id` INT,  
  `tag_id` INT,  
  PRIMARY KEY (`prompt_id`, `tag_id`),  
  FOREIGN KEY (`prompt_id`) REFERENCES `prompt`(`id`),  
  FOREIGN KEY (`tag_id`) REFERENCES `tag`(`id`)  
);  


核心功能实现

用户认证
  • 使用Spring Security实现基于JWT的登录验证
  • 密码加密存储(BCryptPasswordEncoder)
@Configuration  
@EnableWebSecurity  
public class SecurityConfig extends WebSecurityConfigurerAdapter {  
    @Override  
    protected void configure(HttpSecurity http) throws Exception {  
        http.csrf().disable()  
            .authorizeRequests()  
            .antMatchers("/api/auth/**").permitAll()  
            .anyRequest().authenticated()  
            .and()  
            .addFilter(new JwtAuthenticationFilter(authenticationManager()));  
    }  
}  

提示词管理
  • 使用MyBatis操作MySQL,支持JSON字段解析
  • 示例Service层逻辑:
@Service  
public class PromptService {  
    @Autowired  
    private PromptMapper promptMapper;  

    public List<Prompt> searchPrompts(String keyword, List<String> tags) {  
        return promptMapper.selectByKeywordAndTags(keyword, tags);  
    }  

    public void savePrompt(Prompt prompt, List<Integer> tagIds) {  
        promptMapper.insert(prompt);  
        tagIds.forEach(tagId -> promptMapper.addPromptTag(prompt.getId(), tagId));  
    }  
}  

分享与推荐
  • 基于用户行为(点击、收藏)的协同过滤推荐
  • 热门提示词SQL查询示例:
SELECT p.*, COUNT(f.id) as favorite_count  
FROM prompt p LEFT JOIN favorite f ON p.id = f.prompt_id  
GROUP BY p.id  
ORDER BY favorite_count DESC  
LIMIT 10;  


扩展功能

版本控制
  • 添加version字段记录提示词修改历史
  • 使用触发器自动生成历史版本
API集成
  • 提供OpenAPI规范文档(Swagger)
  • 支持Webhook推送更新到第三方平台
数据导出
  • 支持JSON/CSV格式导出个人词库

部署建议

  1. 使用Docker Compose编排MySQL和Spring Boot应用
  2. Nginx配置HTTPS与静态资源缓存
  3. 定期数据库备份(如通过AWS RDS自动快照)

性能优化

  • 为高频查询字段(如title, user_id)添加索引
  • 使用Redis缓存热门提示词
  • 分页查询避免全表扫描
Logo

中国智能体开发者社区,聚焦智能体与大模型开发,提供前沿资讯、实用工具链、开源项目及行业案例。通过技术沙龙、开发者大赛等活动,促进经验交流与协作,助力开发者快速构建创新智能应用。

更多推荐