本项目为山东大学软件学院创新项目实训团队项目技术栈采用Spring Boot 3.4.3PostgreSQL(pgvector)Neo4jMinIORedis混合存储架构前端为微信小程序。一、工作概览本周我主要完成了以下工作模块工作内容数据库设计完成14张PostgreSQL核心业务表的DDL设计集成pgvector向量扩展后端框架Spring Boot 3.4.3 MyBatis Plus 3.5.10.1 JPA混合ORM自定义VectorTypeHandler服务配置Docker Compose一键部署PostgreSQL(pgvector)、Redis、MinIO接口开发用户模块完整CRUD AI对话流式接口对接前端小程序产出14张表设计文档 完整DDL脚本 12个实体类 12个Mapper 12个Service AI ChatClient配置 项目已推送至Gitee仓库。二、数据库设计混合存储架构2.1 选型思路本项目采用混合存储架构根据不同数据特征选择合适的数据库数据库用途核心场景PostgreSQL pgvector业务数据 向量检索用户、课程、题库、RAGNeo4j知识图谱知识点关联、错题诊断MinIO多模态文件存储视频、PPT、图片Redis热点数据缓存学习计划、会话状态2.2 表结构设计完成14张 PostgreSQL 业务表的设计涵盖用户、课程、习题、学习记录等核心业务。重点说明几个关键设计1用户学情画像表user_profile采用 JSONB 字段存储知识点掌握度、学习偏好等非结构化数据便于后续 AI Agent 读取。2四级内容结构课程course→ 章节chapter→ 知识点knowledge_point→ 习题question完整支持知识点定位。3pgvector 向量扩展vector_embedding 表使用 vector(1024) 类型存储教材切片向量实际使用阿里云 text-embedding-v3 模型输出 1024 维支持语义检索。向量表与 learning_resource 关联确保题干、教材、图片 OCR 等资源均可被统一索引。2.3 建表脚本与自动迁移采用Flyway管理数据库版本。建表 SQL 脚本位于 src/main/resources/db/migration/V1__initial_schema.sql包含所有表的 CREATE TABLE 语句、主外键约束、索引及注释。Spring Boot 启动时自动执行确保团队成员数据库结构一致。三、后端框架搭建3.1 技术栈选型技术版本用途Spring Boot3.4.3主框架MyBatis Plus3.5.10.1ORM简化数据库操作Spring AI1.0.0-M6AI集成Ollama 阿里云通义PostgreSQL16关系数据库pgvector内置向量检索扩展MinIO8.5.11对象存储Redis7-alpine缓存 会话存储Flyway9.x数据库版本迁移3.2 项目初始化Spring Boot 项目通过Spring Initializr初始化选择Spring Boot 3.4.3。包结构controller/ service/ mapper/ entity/ config/ handler/ utils/ memory/ tools/核心依赖包含 Spring Boot Starter Web、MyBatis Plus、PostgreSQL Driver、Lombok、MinIO Client、Spring AIOllama OpenAI 兼容、Flyway。3.3 MyBatis Plus配置配置位于 application.yml开启驼峰映射并输出 SQL 日志。3.4 pgvector 类型处理器pgvector 使用自定义 VectorTypeHandler 实现 Java float[] 与 PostgreSQL vector 类型的转换代码位于 handler/VectorTypeHandler.java。由于 Spring AI 官方已提供 spring-ai-pgvector-store-spring-boot-starter但我们仍保留自定义处理器以保证灵活性。3.5 AI 集成配置Spring AI 阿里云通义千问项目使用 Spring AI 1.0.0-M6同时支持本地 Ollamagemma3:4b和阿里云通义千问qwen-max-latest。关键配置通过 CommonConfiguration 配置了多个 ChatClient Bean分别用于不同场景并集成了 PersistentChatMemory实现对话持久化。3.6 流式对话接口ChatController 提供 /ai/chat 接口支持流式响应Flux、多模态文件上传图片/音频和会话记忆。前端传入 prompt、chatId、type 和可选的 files后端通过 MessageChatMemoryAdvisor 自动管理对话历史无需手动保存消息。四、Docker 环境配置为避免队友配置环境时出错编写 docker-compose.yml 实现一键部署。队友只需执行 docker-compose up -d即可完成全部服务部署。五、接口开发与前端对接5.1 RESTful 接口设计首日完成用户模块基础接口和 AI 对话接口供前端小程序调用方法路径功能POST/api/users/register用户注册GET/api/users/{id}获取用户信息PUT/api/users/{id}更新用户信息POST/ai/chat流式 AI 对话支持文件统一响应格式Result 类定义 {ok: 1/0, msg: string}简洁明了。5.2 Service 层设计MyBatis Plus的 ServiceImpl 已内置 save()、getById()、list()、page() 等通用 CRUD 方法无需重复编写。同时项目保留了 JPA 依赖用于部分复杂查询。六、Git 协作与团队同步项目代码已推送至 https://gitee.com/mlgasreil/eduagent分支规范main稳定主分支通过 PR 合并feature/*功能分支个人开发使用团队成员协作流程克隆仓库git clone https://gitee.com/mlgasreil/eduagent.git启动 Docker 环境docker-compose up -d配置环境变量OPENAI_API_KEY阿里云 DashScope API Key运行 Spring Boot 应用Flyway 自动建表开发完成后提交 PR 合并至 main七、踩坑记录7.1 pgAdmin 导出乱码使用 pgAdmin 的 Backup 功能时默认 Format 为 Custom生成二进制文件。解决方法改用命令行 pg_dump --schema-only 导出纯文本 SQL。7.2 pgvector 类型转换MyBatis Plus 默认不支持 PostgreSQL vector 类型需自定义 VectorTypeHandler。参考官方文档实现 float[] 与 [0.1,0.2,...] 字符串的互转。7.3 Spring AI 依赖版本兼容Spring AI 1.0.0-M6 需要 Spring Boot 3.4.x 以上且需显式声明 spring-ai-bom。同时注意排除冲突的 tomcat-embed-core 版本pom.xml 中存在两个不同版本已保留较新版。7.4 Git 推送 403 错误首次推送时因 Gitee 要求使用个人访问令牌Personal Access Token而非密码需在凭据管理器中更新。解决后成功推送。