# springAI1.1.3学习笔记 **Repository Path**: baseme/spring-ai1.0.0-learning-notes ## Basic Information - **Project Name**: springAI1.1.3学习笔记 - **Description**: springAI学习笔记 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-09-02 - **Last Updated**: 2026-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Spring AI 学习项目 > 系统化学习 Spring AI 框架的完整示例项目 > > 基于 Spring Boot 3.5.14 + Spring AI 1.1.3 + DeepSeek V4(OpenAI 兼容模式) --- ## 📖 项目简介 本项目旨在解决 **Spring AI 官方文档零散、示例不足** 的问题,提供: - ✅ **系统化学习路线**:从基础到高级,循序渐进 - ✅ **完整代码示例**:8 个核心功能模块,每个都可独立运行 - ✅ **详细中文文档**:超过 1.4万字的学习指南 - ✅ **实用测试命令**:25+ 个 curl 测试用例,直接可用 **项目特色**: - 🎯 基于 Spring AI 1.1.3 最新版本,API 稳定可靠 - 🔥 使用 **OpenAI 兼容协议**连接 DeepSeek(聊天)+ 通义(向量化) - 📚 每个功能都有详细的概念讲解、代码示例、测试命令 - ⚡ 所有代码经过编译验证,开箱即用 - 🚀 **简化架构**:仅需一个 OpenAI starter,无需 DeepSeek 专用依赖 --- ## 🚀 快速开始 ### 1. 环境要求 | 工具 | 版本要求 | |------|---------| | **JDK** | 21 或更高 | | **Maven** | 3.6+ | | **IDE** | IntelliJ IDEA / VS Code(推荐)| ### 2. 获取 API Key **DeepSeek API Key**(聊天模型): - 访问 [DeepSeek 平台](https://platform.deepseek.com) - 注册账号并创建 API Key **阿里百炼 API Key**(Embedding 模型,用于 RAG): - 访问 [阿里百炼](https://bailian.console.aliyun.com/) - 开通服务并获取 API Key ### 3. 配置环境变量 **推荐方式**:使用环境变量(安全,不会泄露到 Git) **Windows PowerShell**: ```powershell # 永久设置(写入用户环境变量) [Environment]::SetEnvironmentVariable("DEEPSEEK_API_KEY", "sk-your-deepseek-key", "User") [Environment]::SetEnvironmentVariable("DASHSCOPE_API_KEY", "sk-your-dashscope-key", "User") # 重启终端生效 ``` **Linux / macOS**: ```bash # 添加到 ~/.bashrc 或 ~/.zshrc export DEEPSEEK_API_KEY="sk-your-deepseek-key" export DASHSCOPE_API_KEY="sk-your-dashscope-key" # 使配置生效 source ~/.bashrc ``` **临时测试**(仅当前会话有效): ```powershell # Windows $env:DEEPSEEK_API_KEY = "sk-your-deepseek-key" $env:DASHSCOPE_API_KEY = "sk-your-dashscope-key" ``` ```bash # Linux/macOS export DEEPSEEK_API_KEY="sk-your-deepseek-key" export DASHSCOPE_API_KEY="sk-your-dashscope-key" ``` ### 4. 启动应用 ```bash mvn spring-boot:run ``` 或者在 IDE 中直接运行 `SpringAiStudyApplication.java` ### 5. 验证启动 ```bash # 健康检查 curl http://localhost:8080/spring-ai/hello # 基础聊天测试 curl "http://localhost:8080/spring-ai/ai/simple?message=你好" ``` 看到 AI 的回复,说明启动成功!🎉 --- ## 📂 项目结构 ``` spring-ai-study/ ├── src/main/java/com/fy/spring_ai/spring_ai_study/ │ ├── chatclient/ # ChatClient 核心功能 │ │ ├── config/ # ✅ 配置类 │ │ ├── controller/ # ✅ 基础问答 │ │ ├── streaming/ # ✅ 流式响应 │ │ ├── structured/ # ✅ 结构化输出 │ │ ├── function/ # ✅ 工具调用 │ │ └── memory/ # ✅ 聊天记忆 │ ├── prompt/ # Prompt 工程 │ │ └── templates/ # ✅ Prompt 模板 │ └── rag/ # RAG 检索增强 │ └── simple/ # ✅ 简单 RAG ├── 系统学习路线图.md # 📚 详细学习指南(1.4万字) ├── 多模态与高级特性.md # 📖 DeepSeek 限制与替代方案 ├── FAQ.md # ❓ 常见问题解答 └── README.md # 📄 本文档 ``` --- ## 🎯 核心功能示例 ### 1️⃣ 基础对话 ✅ **简单问答** ```bash curl "http://localhost:8080/spring-ai/ai/simple?message=什么是Spring AI?" ``` **流式响应**(逐字输出,提升体验) ```bash curl -N "http://localhost:8080/spring-ai/ai/stream?message=写一首关于春天的诗" ``` **温度控制**(调节创造性) ```bash # 保守模式(适合事实问答) curl -N "http://localhost:8080/spring-ai/ai/stream-temp?message=解释量子力学&temperature=0.0" # 创意模式(适合创作) curl -N "http://localhost:8080/spring-ai/ai/stream-temp?message=编个科幻故事&temperature=1.5" ``` 📖 **详细说明**:见 [系统学习路线图.md](doc/系统学习路线图.md) 第1章 --- ### 2️⃣ 结构化输出 ✅ 将 AI 输出自动解析为 Java 对象 **提取人物信息** ```bash curl -X POST http://localhost:8080/spring-ai/structured/extract \ -H "Content-Type: application/json" \ -d '{"text":"李明是一位30岁的Java工程师,住在北京"}' ``` **文本分类** ```bash curl -X POST http://localhost:8080/spring-ai/structured/classify \ -H "Content-Type: application/json" \ -d '{"text":"学习 Spring AI 框架"}' ``` **情感分析** ```bash curl -X POST http://localhost:8080/spring-ai/structured/sentiment \ -H "Content-Type: application/json" \ -d '{"text":"This product is amazing!"}' ``` 📖 **详细说明**:见 [系统学习路线图.md](doc/系统学习路线图.md) 第4章 --- ### 3️⃣ 工具调用 ✅ 让 AI 自动调用外部工具 **天气查询** ```bash curl "http://localhost:8080/spring-ai/function/chat?message=北京今天天气怎么样?" ``` **货币转换** ```bash curl "http://localhost:8080/spring-ai/function/chat?message=100美元等于多少人民币?" ``` **时间查询** ```bash curl "http://localhost:8080/spring-ai/function/chat?message=现在几点了?" ``` 📖 **详细说明**:见 [系统学习路线图.md](doc/系统学习路线图.md) 第5章 --- ### 4️⃣ Prompt 模板 ✅ 复用提示词,支持变量替换 **生成营销邮件** ```bash curl -X POST http://localhost:8080/spring-ai/prompt/email \ -H "Content-Type: application/json" \ -d '{ "recipientName": "张三", "productName": "智能手表", "features": ["心率监测", "GPS定位", "防水"] }' ``` **生成代码注释** ```bash curl -X POST http://localhost:8080/spring-ai/prompt/code-comment \ -H "Content-Type: application/json" \ -d '{ "language": "Java", "code": "public int factorial(int n) { return n <= 1 ? 1 : n * factorial(n-1); }" }' ``` 📖 **详细说明**:见 [系统学习路线图.md](doc/系统学习路线图.md) 第6章 --- ### 5️⃣ RAG 检索增强生成 ✅ ⭐ 给 AI 提供私有知识库 **步骤 1:加载示例数据** ```bash curl -X POST http://localhost:8080/spring-ai/rag/load-samples ``` **步骤 2:基于知识库提问** ```bash curl "http://localhost:8080/spring-ai/rag/ask?question=什么是Spring AI?" ``` **步骤 3:添加自定义文档** ```bash curl -X POST http://localhost:8080/spring-ai/rag/add-text \ -H "Content-Type: application/json" \ -d '{ "content": "公司年假政策:入职满1年享受5天年假,满3年10天,满5年15天。", "source": "company-policy" }' # 基于新文档提问 curl "http://localhost:8080/spring-ai/rag/ask?question=入职3年有几天年假?" ``` **步骤 4:上传文件** ```bash curl -X POST http://localhost:8080/spring-ai/rag/upload-file \ -F "file=@/path/to/document.txt" ``` 📖 **详细说明**:见 [系统学习路线图.md](doc/系统学习路线图.md) 第7章 --- ### 6️⃣ 聊天记忆 ✅ 多轮对话,AI 能记住上下文 **第一轮对话** ```bash curl -X POST http://localhost:8080/spring-ai/memory/chat \ -H "Content-Type: application/json" \ -d '{"conversationId":"user-123","message":"你好,我叫张三"}' ``` **第二轮对话**(AI 会记得你的名字) ```bash curl -X POST http://localhost:8080/spring-ai/memory/chat \ -H "Content-Type: application/json" \ -d '{"conversationId":"user-123","message":"我叫什么名字?"}' ``` **查看对话历史** ```bash curl "http://localhost:8080/spring-ai/memory/history/user-123" ``` **清空历史** ```bash curl -X DELETE "http://localhost:8080/spring-ai/memory/history/user-123" ``` **多轮对话演示** ```bash curl -X POST http://localhost:8080/spring-ai/memory/demo/multi-turn ``` 📖 **详细说明**:见 [系统学习路线图.md](doc/系统学习路线图.md) 第8章 --- ## 📚 学习路径 ### 第一阶段:基础入门(1-2周) 1. ✅ **ChatClient 基础** - 理解核心 API 2. ✅ **流式响应** - 提升用户体验 3. ✅ **Prompt 工程** - 编写有效的提示词 ### 第二阶段:核心功能(2-3周) 4. ✅ **结构化输出** - 数据提取和分类 5. ✅ **工具调用** - 扩展 AI 能力 6. ✅ **Prompt 模板** - 代码复用和管理 ### 第三阶段:高级应用(3-4周) 7. ✅ **RAG 检索增强** - 私有知识库问答 8. ✅ **聊天记忆** - 多轮对话上下文 9. 📖 **智能代理** - 工作流模式(见高级特性文档) ### 第四阶段:生产实践(持续) 10. 性能优化 11. 安全配置 12. 监控部署 📖 **完整学习路线**:[系统学习路线图.md](doc/系统学习路线图.md) --- ## 🔧 配置说明 ### application.yaml ```yaml spring: application: name: spring-ai-study ai: openai: # DeepSeek OpenAI 兼容端点(用于聊天) base-url: https://api.deepseek.com api-key: ${DEEPSEEK_API_KEY} chat: options: model: deepseek-chat # 或 deepseek-reasoner temperature: 0.7 # 通义 Embedding 配置(通过 EmbeddingConfig.java 手动注入) embedding: api-key: ${DASHSCOPE_API_KEY} server: port: 8080 servlet: context-path: /spring-ai ``` ### 架构说明 **为什么使用 OpenAI 兼容模式?** DeepSeek 完全支持 OpenAI 协议,因此本项目: - ✅ **仅使用 `spring-ai-starter-model-openai` 一个依赖** - ✅ **聊天模型**:通过 `application.yaml` 指向 DeepSeek API - ✅ **Embedding 模型**:通过 `EmbeddingConfig.java` 手动配置通义 API **双 base-url 解决方案**: Spring AI 的 OpenAI starter 只支持一个 `base-url`,因此: - **聊天**:自动配置,使用 `spring.ai.openai.base-url` 指向 DeepSeek - **Embedding**:手动配置 Bean,单独指向通义的兼容端点 ### pom.xml 依赖 ```xml org.springframework.ai spring-ai-starter-model-openai org.springframework.ai spring-ai-advisors-vector-store ``` ### EmbeddingConfig.java ```java @Configuration public class EmbeddingConfig { @Value("${spring.ai.embedding.api-key}") private String dashscopeApiKey; @Bean public EmbeddingModel embeddingModel() { var openAiApi = OpenAiApi.builder() .baseUrl("https://dashscope.aliyuncs.com/compatible-mode") .apiKey(dashscopeApiKey) .build(); var options = OpenAiEmbeddingOptions.builder() .model("text-embedding-v3") .build(); return new OpenAiEmbeddingModel(openAiApi, MetadataMode.EMBED, options); } } ``` --- ## 📖 文档导航 | 文档 | 大小 | 描述 | |------|------|------| | [README.md](README.md) | - | 项目入口,快速开始指南(本文档)| | [系统学习路线图.md](doc/系统学习路线图.md) | 13.7 KB | 9章详细学习路径 + 代码示例 + 测试命令 | | [多模态与高级特性.md](doc/多模态与高级特性.md) | 10.3 KB | 图像、语音、Agents 等高级功能说明 | | [FAQ.md](doc/FAQ.md) | 8.6 KB | 常见问题解答 | | [01-ChatClient和Advisors/](doc/01-ChatClient和Advisors/) | 46+ KB | 第一章详细学习资料(3个文档)| --- ## 🤔 常见问题 ### Q1: 编译报错 "javac 1.8 不支持文本块" **A**: 需要使用 Java 21。检查: ```bash java -version # 应该显示 21.x.x ``` 配置 Maven 使用 Java 21: ```bash # Windows $env:JAVA_HOME = "D:\Program Files\jdk-21" # Linux/macOS export JAVA_HOME=/path/to/jdk-21 ``` ### Q2: 启动失败 "API Key 无效" **A**: 检查环境变量是否设置: ```bash # Windows echo $env:DEEPSEEK_API_KEY echo $env:DASHSCOPE_API_KEY # Linux/macOS echo $DEEPSEEK_API_KEY echo $DASHSCOPE_API_KEY ``` ### Q3: RAG 功能报错 "找不到 EmbeddingModel" **A**: 确保配置了 `DASHSCOPE_API_KEY` 环境变量,并且 `application.yaml` 中配置了通义的 embedding。 ### Q4: 如何切换到其他 AI 模型? **A**: 修改 `pom.xml` 的依赖和 `application.yaml` 的配置。详见 [多模态与高级特性.md](doc/多模态与高级特性.md) 📖 **更多问题**:见 [FAQ.md](doc/FAQ.md) --- ## 🌟 项目亮点 ### 1. 真实 API 验证 所有代码都基于 **Spring AI 1.1.3 实际验证**,确保 API 正确: - ✅ `functions()` → `tools()` (M8版本改名) - ✅ `options(lambda)` → `options(ChatOptions)` (API变化) - ✅ `SimpleVectorStore.builder()` (构造方式变化) - ✅ `OpenAiChatOptions.builder().temperature()` (正确的 Builder 方法) - ✅ `OpenAiEmbeddingModel` 构造函数参数(需要 MetadataMode) - ✅ 正确的包路径和方法签名 ### 2. 简化架构 - OpenAI 兼容模式 **为什么简化?** - ❌ **旧方案**:`spring-ai-starter-model-deepseek` + `spring-ai-starter-model-openai` 两个依赖 - ✅ **新方案**:只需 `spring-ai-starter-model-openai` 一个依赖 **如何实现?** - **聊天**: DeepSeek API(OpenAI 兼容端点 `https://api.deepseek.com`) - **向量化**: 通义 text-embedding-v3(通过 `EmbeddingConfig.java` 手动配置) **优势**: - 依赖更少,配置更清晰 - 使用 OpenAI 协议标准,通用性更强 - 无需排除自动配置,避免 bean 冲突 ### 3. 生产级配置 - ✅ API Key 从环境变量读取 - ✅ 排除冲突的自动配置 - ✅ 完整的错误处理 - ✅ 详细的日志和注释 ### 4. 详细中文文档 - **系统学习路线图**: 1.4万字,9个章节 - **多模态说明**: DeepSeek 限制和替代方案 - **FAQ**: 覆盖常见问题 - 每个功能都有:概念讲解 + 代码示例 + 测试命令 --- ## 🚧 局限性说明 ### DeepSeek 不支持的功能 - ❌ **图像生成** - 需要 DALL-E / Stable Diffusion - ❌ **语音处理** - 需要 Whisper / TTS - ❌ **视觉理解** - 需要 GPT-4V / Claude 3 - ❌ **Embedding** - 本项目用通义解决 ### 解决方案 详见 [多模态与高级特性.md](doc/多模态与高级特性.md),根据需求切换或混合使用多个模型。 --- ## 📊 项目统计 - **代码文件**: 10 个 Java 文件 - **Controller**: 8 个 - **API 端点**: 20+ 个 - **文档**: 4 个 Markdown 文件 - **测试用例**: 25+ 个 curl 命令 - **代码行数**: 2000+ 行(含注释) --- ## 🎓 学习建议 1. **按顺序学习**:从基础到高级,不要跳章节 2. **动手实践**:每个示例都运行一遍 3. **阅读代码**:注释很详细,理解原理 4. **修改实验**:改参数、改提示词,观察变化 5. **参考文档**:遇到问题先查 FAQ 和学习路线图 **建议节奏**:每天 1-2 小时,2-3周完成基础和核心功能,4周掌握所有内容。 --- ## 🔗 相关资源 ### 官方资源 - [Spring AI 官方文档](https://docs.spring.io/spring-ai/reference/) - [Spring AI GitHub](https://github.com/spring-projects/spring-ai) ### 社区教程 - [Baeldung: Introduction to Spring AI](https://www.baeldung.com/spring-ai) - [Spring AI RAG with MongoDB](https://baeldung.com/spring-ai-mongodb-rag) - [Building Effective Agents](https://spring.io/blog/2025/01/21/spring-ai-agentic-patterns/) ### 模型平台 - [DeepSeek 平台](https://platform.deepseek.com/) - [阿里百炼](https://bailian.console.aliyun.com/) --- ## ⚠️ 注意事项 1. **API Key 安全** - ✅ 使用环境变量 - ❌ 不要硬编码在代码中 - ❌ 不要提交到 Git 2. **成本控制** - 注意 API 调用次数 - 设置 `max-tokens` 限制 - 使用缓存减少重复调用 3. **速率限制** - DeepSeek 有 API 调用频率限制 - 生产环境建议添加限流 4. **生产部署** - RAG 用持久化向量库(PGVector/Redis) - 聊天记忆用 JDBC/Redis 持久化 - 添加监控和日志 --- ## 📄 License MIT License --- ## 🎉 开始学习 项目已经完全就绪!按照以下步骤开始: 1. ✅ 配置环境变量(`DEEPSEEK_API_KEY` 和 `DASHSCOPE_API_KEY`) 2. ✅ 启动应用(`mvn spring-boot:run`) 3. ✅ 测试基础功能(`curl` 命令验证) 4. 📖 打开 [系统学习路线图.md](doc/系统学习路线图.md) 开始系统学习 **祝学习愉快!🚀** --- **项目维护**: 如有问题或建议,欢迎提交 Issue。