JAVA AI 应用开发学习路线
Component@Autowired@Tool(description = "根据订单ID查询订单详细状态")public String checkOrderStatus(@ToolParam("订单编号,如ORD-2024001") String orderId) {if (order == null) return "未找到该订单";return "订单状态:" + order.getSta
路线概览:从应用到原理的四步走
一条高效的路径是“应用→框架→算法→底层” 。这意味着你不用一开始就死磕数学和算法,而是可以先从最熟悉的Java调用AI能力开始,快速获得反馈和成就感,再逐步向下探知其所以然。
| 第一周 | Hello AI | 跑通API,理解流式响应,建立信心 | 一个能对话的Spring Boot接口 | 3-5天 |
| 第二周 | RAG实战 | 让AI读懂你的私有文档(PDF/Word) | 基于知识库的问答系统Demo | 5-7天
| 第三周 | Agent赋能 | 让AI调用Java方法(查库/发邮件) | 能执行具体业务的智能助手 | 5-7天 |
| 第四周 | 工程落地 | 性能优化、监控、安全与部署 | 可上线的生产级模块 | 持续迭代 |
🚀 第一周:快速上手 (Hello AI & Streaming)
目标:不纠结原理,先让Java代码调通大模型,看到“打字机”效果。
✅ 每日执行清单
- Day 1: 环境准备与API测试
- 注册账号:阿里云百炼 (Qwen)、DeepSeek 或 Moonshot (Kimi)。
- 获取
API Key。 - 使用 Postman 发送POST请求,测试非流式和流式(SSE)接口。
- 关键点:观察SSE返回的数据格式(
data: {...})。
- Day 2: Spring AI 快速集成
- 创建 Spring Boot 3.2+ 项目。
- 引入依赖:
spring-ai-starter-model-openai(兼容Qwen/DeepSeek)。 - 配置
application.yml(Base URL, API Key, Model Name)。 - 编写第一个
ChatController,实现同步问答。
这个阶段是核心,选对框架能让你事半功倍。
主攻框架:Spring AI(强烈推荐)--------》为什么选Spring AI?
Spring官方出品,和Spring Boot生态无缝集成
你熟悉Spring,学习曲线非常平缓
抽象了AI模型调用、Prompt模板、输出解析等通用能力
- Day 3: 攻克流式响应 (SSE)
- 学习 Spring AI 的
Flux<String>返回类型。 - 前端模拟:写一个简单的HTML页面或使用Postman查看流式输出。
- 难点突破:处理中文乱码或断流问题。
- 学习 Spring AI 的
- Day 4: 本地模型体验 (可选但推荐)
- 下载并安装 Ollama。
- 运行命令:
ollama run qwen2.5。 - 修改Spring AI配置,将Base URL指向本地
http://localhost:11434,实现零成本调试。
- Day 5: 周复盘与小结
- 整理本周代码,封装一个通用的
AiService接口。
- 整理本周代码,封装一个通用的
💡 核心代码片段 (Spring AI)
// 注入 ChatClient
@Autowired
private ChatClient chatClient;
// 流式接口
@GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamChat(String prompt) {
return chatClient.prompt()
.user(prompt)
.stream()
.content(); // 返回 Flux<String>,Spring Boot自动转为SSE
}
📚 第二周:RAG实战 (让AI懂业务)
目标:解决大模型“不知道公司内部数据”的问题,实现文档问答。
✅ 每日执行清单
- Day 1: 文档解析与读取
- 引入
Apache Tika或Spring AI自带的文档读取器。 - 编写代码读取本地 PDF/Word/Txt 文件,转换为纯文本。
- 引入
- Day 2: 文本分块 (Chunking)
- 理解为什么需要分块(Token限制、检索精度)。
- 使用
RecursiveCharacterTextSplitter对长文本进行切分。 - 调整
chunkSize(如500) 和overlap(如50),观察效果。
- Day 3: 向量化与存储
- 选择向量库:开发期用 In-Memory (Spring AI内置) 或 Chroma;生产期规划 Milvus/PgVector。
- 配置
EmbeddingModel(调用API或本地Ollama)。 - 编写初始化脚本:启动时自动加载文档并入库。
- Day 4: 检索增强生成 (RAG)
- 实现流程:用户提问 -> 向量化 -> 向量库相似度搜索 -> 取出Top 3片段 -> 拼接到Prompt。
- 测试:上传一份公司手册,问具体政策,验证回答准确性。
- Day 5: 优化检索效果
- 尝试调整 Prompt 模板(加入“请仅根据以下上下文回答”)。
- 处理“不知道”的情况(当检索分数低于阈值时,直接回复不知道,避免幻觉)。
💡 核心架构思路
User Query ➔ Embedding ➔ Vector DB (Search) ➔ Context Documents ➔ LLM Prompt ➔ Answer
🤖 第三周:Agent与Function Calling (让AI动手)
目标:从“聊天机器人”升级为“业务助手”,让AI能查数据库、调接口。
项目结构示例:
src/main/java/com/yourproject/ai/
├── config/
│ ├── VectorStoreConfig.java # 向量数据库配置
│ └── EmbeddingConfig.java # 文本向量化配置
├── service/
│ ├── DocumentService.java # 文档处理(PDF/Word等)
│ ├── RetrievalService.java # 知识检索
│ └── RagChatService.java # RAG对话服务
└── controller/
└── AIChatController.java # API接口
✅ 每日执行清单
- Day 1: 理解 Function Calling 原理
- 阅读文档:LLM如何识别需要调用函数?(它只负责生成JSON参数,Java负责执行)。
- 定义一个简单的Java方法:
getWeather(String city)或getUserInfo(String id)。
- Day 2: Spring AI Tool 注解实战
- 使用
@Tool注解标记你的Service方法。 - 在
ChatClient构建时注册这些 Tools。 - 测试:输入“查询用户1001的余额”,观察AI是否自动触发Java方法。
- 使用
- Day 3: 复杂场景编排
- 场景模拟:“帮我查一下订单状态,如果已发货,就给用户发一封邮件”。
- 让AI自主决定调用顺序(Chain of Thought)。
- Day 4: 异常处理与反馈
- 当Java方法抛出异常(如订单不存在)时,如何将错误信息回传给AI,让AI委婉地告诉用户?
- 限制AI的调用权限(防止恶意删除数据)。
- Day 5: 综合Demo构建
- 整合 RAG + Function Calling:既能查文档,又能查实时数据。
实战场景:
查询业务数据(订单、库存、客户信息)
触发业务流程(创建工单、发送邮件)
调用第三方服务
3.3 多智能体协作(进阶)
当业务复杂时,可以让多个智能体分工协作:
一个负责理解意图
一个负责检索知识
一个负责调用系统API
一个负责生成最终回复
💡 核心代码片段 (定义工具)
@Component
public class OrderTools {
@Autowired
private OrderService orderService;
@Tool(description = "根据订单ID查询订单详细状态")
public String checkOrderStatus(@ToolParam("订单编号,如ORD-2024001") String orderId) {
Order order = orderService.findById(orderId);
if (order == null) return "未找到该订单";
return "订单状态:" + order.getStatus() + ", 金额:" + order.getAmount();
}
}
第四周:工程化与生产落地
目标:把Demo变成稳定、可控、可监控的生产代码。
选择第一个集成场景 建议从低风险、高频次的场景开始:
-
智能客服助手:内部员工或客户的问题解答
-
代码/文档生成:根据需求生成代码模板或文档草稿
-
数据分析助手:自然语言查询转为SQL或数据分析
-
内容审核助手:辅助审核用户生成内容
✅ 每日执行清单
- Day 1: 成本控制与缓存
- 实现 Token 计数拦截器,记录每次调用的消耗。
- 引入 Spring Cache (Redis):对相同的问题(Hash(prompt))直接返回缓存结果,省钱提速。
- Day 2: 稳定性建设
- 重试机制:网络波动或API限流时,使用
RetryTemplate自动重试。 - 超时控制:设置合理的
ReadTimeout,避免线程阻塞。 - 降级策略:当大模型不可用时,返回预设的友好提示或切换到小模型。
- 重试机制:网络波动或API限流时,使用
- Day 3: 安全与防护
- Prompt 注入防御:过滤用户输入中的特殊指令(如“忽略之前的规则”)。
- 敏感数据脱敏:在发送给LLM前,自动掩盖手机号、身份证等PII信息。
- Day 4: 可观测性 (Observability)
- 集成 Micrometer/Prometheus:监控响应延迟、错误率、Token用量。
- 日志审计:异步记录所有的 Prompt 和 Response(用于后续优化和合规审计)。
- Day 5: 最终复盘与规划
- 整理文档,编写接入指南。
- 规划下一个业务场景(如:自动生成周报、SQL生成助手)。
🧰 必备工具箱 (Java Stack)
表格
| 类别 | 推荐选型 | 理由 |
|---|---|---|
| 核心框架 | Spring AI | 官方亲儿子,生态融合最好,学习成本低。Spring AI官方文档、B站搜索"Spring AI 实战" |
| 备选框架 | LangChain4j | 功能更丰富,社区活跃,适合复杂Agent场景。 |
| 本地模型 | Ollama + Qwen2.5 | 免费、隐私安全、离线可用,开发调试神器。 |
| 向量数据库 | PgVector / Milvus | PgVector无需新运维组件(若已有PG);Milvus性能强。 |
| 文档解析 | Apache Tika | 老牌强大,支持格式多。 |
| API服务商 | 阿里云百炼 / DeepSeek | 国内访问快,性价比高,中文能力强。 |
| GitHub项目 | LangChain4j Examples | 很多实用示例代码 |
| 开源项目 | Chat2DB | Java写的AI+数据库项目,值得学习 |
| 模型服务 | DeepSeek开发者文档 | 国内模型,文档友好 |
⚠️ 避坑指南 (经验之谈)
- 不要一开始就微调模型:90%的业务场景通过 Prompt工程 + RAG 就能解决,微调成本高且维护难。
- 警惕幻觉:在涉及金额、法律、医疗等严谨场景,必须在Prompt中强调“如果不确定,请回答不知道”,并加上引用来源。
- 流式不是万能的:如果是生成报表、SQL执行等需要完整结果的操作,不要用流式,等待完整返回再处理逻辑更简单。
- Token也是钱:在开发阶段尽量用本地小模型(Ollama)或便宜的模型测试,上线前再切换到大模型。
- 上下文窗口限制:不要把几十万的文档一次性塞给AI,务必做好 分块(Chunking) 和 检索(Retrieval)。
🏁 下一步行动建议
今天就可以做的事:
- 打开终端,运行
docker run -d -v ollama:/root/.ollama -p 11434:11434 --name ollama ollama/ollama(如果你习惯用Docker)。 - 去阿里云或DeepSeek官网申请一个免费的 API Key。
- 创建一个空的 Spring Boot 项目,把
spring-ai依赖加进去。
更多推荐


所有评论(0)