第一章 序章:AI时代,Java工程师的危与机
1.1 我们正在见证历史性拐点
2022年11月,ChatGPT发布的那一刻,全球程序员的命运轨迹悄然改变。这不是夸张,而是每一个身在一线的开发者都能感受到的真实变化。
过去三年,我们见证了:
- 代码生成能力的飞跃:从Copilot的简单补全,到Claude 4、GPT-4o的完整函数生成
- 编程范式的改变:Prompt工程成为新技能,AI辅助设计不再是概念
- 开发效率的数量级提升:曾经需要一天的代码,现在可能只需要一小时
作为一名Java工程师,你可能正在经历这样的困惑:
"我写了十年JavaCRUD,现在AI几分钟就能写出来,我的价值在哪里?"
"感觉不学AI就要被淘汰,但市面上资料太杂,不知道从哪入手"
"想转AI方向,但觉得自己年纪大了,卷不动了"
这些困惑,我理解。因为我也经历过。
1.2 AI不是替代者,而是放大器
首先要建立一个核心认知:AI不会替代Java工程师,但会用AI的工程师会替代不会用AI的工程师。
这个道理类似于:
- 计算器替代了算盘,但优秀的会计依然稀缺
- IDE替代了手写代码,但高级工程师依然稀缺
- AI会替代基础编码,但能利用AI做复杂系统的工程师依然稀缺
关键在于层级跃迁:
| 层级 | 能力要求 | AI时代价值 |
|---|---|---|
| L1 | 基础编码 | 高度可替代 |
| L2 | 业务理解 | 中等可替代 |
| L3 | 系统设计 | 难以替代 |
| L4 | 架构决策 | 核心不可替代 |
| L5 | 技术战略 | 绝对不可替代 |
P6到P7的跃迁,本质上就是从L2/L3向L3/L4的跃迁。 AI技能恰恰是这一跃迁的最大助推器。
1.3 为什么是32岁?为什么是Java工程师?
32岁,是一个微妙的年纪
32岁,在互联网行业是一个敏感的年纪:
- 体力和精力开始下降
- 薪资期望达到高位
- 家庭责任逐渐增加
- 但经验也足够丰富
这个年纪最大的优势是:你有足够的技术积累去理解AI,又有足够的工作经验去应用AI。
相比22岁的年轻人,你更懂业务;相比45岁的资深,你更有精力拥抱变化。
Java工程师的特殊优势
Java是全球企业级系统的绝对主力:
- 99%的银行系统用Java
- 80%的互联网大厂核心系统用Java
- Spring生态统治了企业应用开发
这意味着:
- Java+AI = 企业级智能应用的市场巨大
- 你的Java经验不会贬值,而是增值
- 任何一个行业拥抱AI,都需要既懂业务又懂AI的Java工程师
1.4 这份路线图能给你什么
市面上AI教程很多,但真正适合32岁Java工程师的不多。这份路线图的设计理念是:
1. 实战导向
不搞理论堆砌,每一个知识点都必须有Java场景的落地实践。
2. 渐进式学习
从AI代码助手(最简单)→ Prompt工程(基础能力)→ AI应用开发(进阶技能)→ AI Agent(高级能力),循序渐进。
3. P6->P7目标明确
所有学习都指向一个目标:让你具备P7工程师的核心竞争力。
4. 可落地的时间规划
每天2小时,16周完成系统化学习,不影响正常工作。
1.5 学习路线图全景
在正式进入之前,先看一下我们16周的学习路径:
第一阶段:觉醒(1-4周)
├── Week 1: AI编程辅助全景图
├── Week 2: AI代码助手入门(Cursor/Windsurf)
├── Week 3: AI代码助手进阶(Claude Code/Copilot)
└── Week 4: Prompt工程基础
第二阶段:进阶(5-8周)
├── Week 5: Prompt工程进阶
├── Week 6: Spring AI框架入门
├── Week 7: Spring AI框架进阶(RAG架构)
└── Week 8: 第一个AI应用项目
第三阶段:飞跃(9-12周)
├── Week 9: AI Agent基础理论
├── Week 10: LangChain4j实战
├── Week 11: 构建企业级Code Agent
└── Week 12: AI辅助系统设计
第四阶段:蜕变(13-16周)
├── Week 13: AI辅助代码审查
├── Week 14: AI辅助性能优化
├── Week 15: P6->P7能力模型构建
└── Week 16: 实战项目与总结
1.6 行动建议
在开始学习之前,请先做好以下准备:
- 工具准备:注册OpenAI/Claude账号,准备科学上网环境
- 环境准备:IDEA安装相应插件,熟悉基本操作
- 心态准备:接受AI是合作伙伴而非竞争对手
- 时间准备:每天固定2小时,保持连续性
准备好了吗?让我们从第二章开始,正式进入AI编程辅助的世界。
第二章 AI编程辅助全景图
2.1 AI辅助编程的三个层次
理解AI辅助编程,需要从三个层次来把握。每一层都有其独特的价值和适用场景。
第一层:AI代码补全(AI Copilot)
这是最基础也是最普及的一层。代表性产品:
- GitHub Copilot
- Amazon CodeWhisperer
- 腾讯云AI代码助手
核心理念:在开发者编写代码时,AI根据上下文自动补全下一行或下一段代码。
工作原理:
开发者输入 → 上下文分析 → 预测下一个token → 候选代码建议 → 开发者选择/忽略
适用场景:
- 重复性编码(getter/setter、模板代码)
- 简单函数实现
- 常见设计模式的快速实现
对Java工程师的价值:将编码效率提升30-50%,减少低级错误。
第二层:AI对话编程(AI Chat)
这是当前最主流的使用方式。通过自然语言描述需求,AI生成完整代码。
代表性产品:
- Claude Code
- Cursor
- Windsurf
- ChatGPT
核心理念:开发者用自然语言描述需求,AI理解后生成、解释、优化代码。
工作原理:
自然语言需求 → 意图理解 → 代码生成 → 语法校验 → 返回结果 → 开发者审查
适用场景:
- 从零开始实现一个功能
- 重构现有代码
- 解释复杂代码逻辑
- 生成单元测试
对Java工程师的价值:将复杂功能的开发时间从"天"缩短到"小时"。
第三层:AI Agent(自主智能体)
这是AI辅助编程的未来方向。AI不仅能生成代码,还能自主规划、执行、验证。
代表性产品:
- Manus(国内)
- Devin(国外)
- Claude Code Agent模式
- Windsurf Cascade
核心理念:AI作为开发agent,能够理解复杂需求、自主分解任务、执行代码、修复错误、运行测试。
工作原理:
复杂需求 → 任务规划 → 步骤执行 → 结果验证 → 自我修正 → 最终交付
适用场景:
- 完整功能的端到端开发
- 复杂系统的bug定位和修复
- 大规模代码重构
- 新项目的快速原型
对Java工程师的价值:从"编码者"升级为"AI指挥家",个人产能提升10倍以上。
2.2 工具生态全解析
下面详细解析当前主流的AI编程工具,特别关注Java场景的适用性。
2.2.1 GitHub Copilot
基本信息:
- 母公司:微软/OpenAI
- 定价:10/月(个人版),19/人/月(企业版)
- 基础模型:GPT-4 + 专用代码模型
优点:
- 与IDE深度集成(IDEA、VS Code、JetBrains全家桶)
- 补全速度快,延迟低
- 支持多种编程语言,Java支持优秀
- 企业级安全和合规
缺点:
- 需要科学上网
- 对中文支持一般
- 主要是补全模式,对话能力较弱
适用人群:企业用户,已习惯Copilot生态的团队
2.2.2 Claude Code(Anthropic)
基本信息:
- 母公司:Anthropic
- 定价:25/月(Pro),100/月(Max)
- 基础模型:Claude 4(Opus/Sonnet/Haiku)
优点:
- 代码理解能力最强,特别是复杂业务逻辑
- 支持MCP协议,扩展性强
- 可以直接操作文件、执行命令
- 对Java Spring生态支持良好
- 支持Artifacts,UI原型快速生成
缺点:
- 需要科学上网
- 国内生态较弱
- 价格相对较高
适用人群:追求代码质量,需要复杂业务逻辑帮助的工程师
2.2.3 Cursor
基本信息:
- 公司:Anthropic投资,Cursor团队开发
- 定价:$0-40/月(分层)
- 基础模型:GPT-4 + Claude
优点:
- AI对话+代码补全完美结合
- Tab补全功能强大
- 支持项目级上下文理解
- 内置终端和调试功能
- 对中文支持好
缺点:
- 长期使用成本较高
- 部分功能需要Pro版本
适用人群:个人开发者,创业团队,追求效率的工程师
2.2.4 Windsurf
基本信息:
- 公司:Codeium(AI代码领域独角兽)
- 定价:$0-30/月
- 基础模型:Claude 3.5 + 专用模型
优点:
- 免费版功能足够强大
- 补全和对话能力均衡
- 对Java支持优秀
- 速度极快
- 轻量级,资源占用低
缺点:
- 生态相对较新
- 高级功能需要付费
适用人群:预算有限,注重性价比的工程师
2.2.5 国产工具
| 工具 | 特点 | 适用场景 |
|---|---|---|
| 腾讯云AI代码助手 | 免费,国内网络直接访问 | 快速补全,简单功能 |
| 阿里云通义灵码 | 阿里生态集成 | Java项目 |
| 百度Comate | 百度文心大模型 | 快速上手 |
工具选型建议
| 场景 | 推荐工具 | 理由 |
|---|---|---|
| 企业团队协作 | GitHub Copilot | 安全合规、生态完善 |
| 个人高效开发 | Cursor | 综合体验最好 |
| 预算有限 | Windsurf | 免费够用 |
| 复杂业务逻辑 | Claude Code | 代码理解最强 |
| 国内快速上手 | 腾讯云AI代码助手 | 无需翻墙 |
2.3 Java场景的选型原则
作为Java工程师,在选择AI编程工具时,需要考虑以下因素:
1. Spring生态兼容性
Java项目大多基于Spring生态,AI工具需要理解:
- Spring Boot注解
- Spring Cloud组件
- Maven/Gradle依赖
- JPA/Hibernate映射
实测推荐:Claude Code > Cursor > Windsurf > Copilot
2. 中文需求理解
国内业务为主的项目,需要AI准确理解中文需求描述。
实测推荐:Cursor > Claude Code > Windsurf > Copilot
3. 长对话上下文
复杂业务需求需要多轮对话,AI需要记住之前的上下文。
实测推荐:Claude Code > Cursor > Windsurf > Copilot
4. 代码质量
生成的代码需要符合Java编码规范,避免常见的反模式。
实测推荐:Claude Code > Cursor > Copilot > Windsurf
5. 工具联动
最好能与现有开发工具链无缝集成。
实测推荐:Copilot = Cursor > Claude Code > Windsurf
2.4 本章小结
本章我们了解了AI辅助编程的三个层次:
- AI代码补全:最基础,提升30-50%效率
- AI对话编程:最主流,将天级任务缩短到小时
- AI Agent:未来方向,10倍产能提升
以及主流工具的选型建议:
- 追求综合体验:Cursor
- 追求代码质量:Claude Code
- 追求性价比:Windsurf
- 企业级需求:Copilot
记住:工具只是手段,不是目的。 下一章我们将进入实战,学习如何真正利用这些工具提升开发效率。
第三章 AI代码助手实战
本章是全路线图的核心章节之一,将深入讲解四大主流AI代码助手在Java开发中的实际应用。每个工具都会给出具体的配置方法、使用技巧和避坑指南。
3.1 工具安装与环境配置
公共前置准备
在开始使用任何AI代码助手之前,你需要准备:
-
OpenAI/Claude账号
- 注册 OpenAI 账号(platform.openai.com)
- 或注册 Claude 账号(claude.ai)
- 获取 API Key
-
科学上网
- 大多数AI工具需要访问境外服务器
- 推荐稳定的代理服务
-
IDE环境
- 推荐 IDEA 2023+(对AI工具支持最好)
- 或 VS Code(轻量级选择)
3.1.1 Cursor 安装配置
安装步骤:
- 访问 cursor.sh 下载安装包
- 安装后打开,登录账号
- 配置API Key:Settings → API → Enter API Key
IDEA用户替代方案: 如果习惯用IDEA,Cursor的补全功能可以通过插件实现,但体验不如原生VS Code。
核心快捷键:
| 快捷键 | 功能 |
|---|---|
| Cmd+K | 打开AI对话窗口 |
| Cmd+L | 打开聊天窗口 |
| Tab | 接受AI建议 |
| Cmd+Enter | 接受整个补全 |
| Cmd+/ | 注释解释 |
3.1.2 Windsurf 安装配置
安装步骤:
- 访问 codeium.com/windsurf 下载
- 安装并登录
- 免费版已足够使用
特点:
- 无需API Key,直接使用
- 对Java支持优秀
- 资源占用极低
核心快捷键:
| 快捷键 | 功能 |
|---|---|
| Cmd+K | 生成代码 |
| Tab | 接受补全 |
| Cmd+I | 解释选中代码 |
3.1.3 Claude Code 安装配置
安装步骤:
-
确保已安装 Node.js 18+
-
安装 Claude Code CLI:
npm install -g @anthropic-ai/claude-code -
认证:
claude auth -
在IDEA中安装插件:
- Settings → Plugins → 搜索 "Claude"
- 或使用 Claude Code 的 MCP 集成
核心使用方式:
# 在项目目录中
claude
# 具体任务
claude --print "帮我写一个Spring Boot的REST接口"
3.1.4 GitHub Copilot 安装配置
安装步骤:
- 在IDEA中:Settings → Plugins → 搜索 "GitHub Copilot"
- 安装后点击 "Sign in to GitHub"
- 授权完成即可使用
免费使用技巧:
- GitHub Copilot 免费版:每月2000次补全
- 学生/教师:免费使用
- 开源贡献者:免费使用
3.2 四大工具深度对比
3.2.1 代码补全能力对比
| 维度 | Cursor | Windsurf | Claude Code | Copilot |
|---|---|---|---|---|
| 补全速度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| 补全准确性 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| Java语法理解 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ |
| Spring生态 | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 中文需求 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ |
实测场景:生成Spring Boot CRUD接口
Prompt:
生成一个Spring Boot的UserController,包含:
1. CRUD接口
2. 使用JPA
3. 返回Result包装类
各工具表现:
| 工具 | 生成质量 | 耗时 | 问题 |
|---|---|---|---|
| Cursor | ⭐⭐⭐⭐⭐ | 3s | 需微调 |
| Windsurf | ⭐⭐⭐⭐ | 2s | 缺少异常处理 |
| Claude Code | ⭐⭐⭐⭐⭐ | 5s | 最完整 |
| Copilot | ⭐⭐⭐⭐ | 3s | 补全形式,需多按Tab |
3.2.2 对话编程能力对比
| 维度 | Cursor | Windsurf | Claude Code | Copilot |
|---|---|---|---|---|
| 上下文理解 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 多轮对话 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 项目级理解 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 代码修改能力 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
实测场景:重构一个300行的Service类
Prompt:
这个UserService有300行代码,请:
1. 分析其职责
2. 拆分为多个小Service
3. 使用策略模式处理if-else分支
各工具表现:
| 工具 | 重构思路 | 代码质量 | 可执行性 |
|---|---|---|---|
| Cursor | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 需调试 |
| Windsurf | ⭐⭐⭐⭐ | ⭐⭐⭐⭐ | 需较多修改 |
| Claude Code | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 可直接运行 |
| Copilot | ⭐⭐⭐ | ⭐⭐⭐⭐ | N/A(不支持) |
3.2.3 Agent能力对比(重要!)
这是AI代码助手的核心差异点:
| 维度 | Cursor | Windsurf | Claude Code | Copilot |
|---|---|---|---|---|
| 自动执行 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 任务规划 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 错误修复 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐ |
| 测试生成 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
实测场景:创建一个完整的Spring Boot项目
Prompt:
创建一个学生管理系统:
1. 使用Spring Boot 3 + MyBatis Plus
2. 包含学生CRUD、班级管理
3. 使用MySQL
4. 包含基本的单元测试
各工具表现:
| 工具 | 完整度 | 文件数量 | 执行结果 |
|---|---|---|---|
| Cursor | ⭐⭐⭐⭐ | 8个文件 | 可运行 |
| Windsurf | ⭐⭐⭐⭐ | 7个文件 | 需补充 |
| Claude Code | ⭐⭐⭐⭐⭐ | 12个文件 | 完整可运行 |
| Copilot | ⭐⭐ | 依赖手动 | N/A |
3.3 Java场景最佳实践
3.3.1 Spring Boot项目实战
场景:快速生成一个RESTful API
最佳实践流程:
1. 在Cursor/Windsurf中打开项目
2. 使用 Cmd+K 输入需求
3. 审查生成的代码
4. 使用 Tab 逐行接受补全
5. 运行测试验证
示例Prompt(直接复制使用) :
创建一个Spring Boot REST接口:
- 路径:/api/users
- 方法:GET(列表)、GET/{id}(详情)、POST(新增)、PUT/{id}(更新)、DELETE/{id}(删除)
- 使用JPA + MySQL
- 包含Swagger注解
- 返回Result<T>包装类
- 添加分页支持
生成的代码质量对比:
| 工具 | 规范性 | 完整性 | 可优化点 |
|---|---|---|---|
| Cursor | ⭐⭐⭐⭐⭐ | 90% | 异常处理可增强 |
| Windsurf | ⭐⭐⭐⭐ | 85% | 缺少校验注解 |
| Claude Code | ⭐⭐⭐⭐⭐ | 95% | 几乎无需修改 |
3.3.2 复杂业务逻辑处理
场景:编写一个订单处理流程
最佳实践:
1. 先让AI理解现有代码结构
"我有一个OrderService.java,请先阅读并总结其职责"
2. 分步骤生成
"现在帮我生成订单创建方法,需要:
- 参数校验
- 库存扣减(调用库存服务)
- 优惠计算
- 订单落库
- 消息队列通知"
3. 审查和修改
"这段代码的异常处理可以更完善吗?
- 库存扣减失败需要回滚
- 使用TCC事务"
进阶技巧:使用CLAUDE.md引导AI
在项目根目录创建CLAUDE.md:
# 项目规范
## 技术栈
- Spring Boot 3.2
- Java 17
- MyBatis Plus 3.5
## 编码规范
1. Service层必须使用接口+实现
2. Controller返回Result<T>包装类
3. 所有DTO使用Lombok @Data
4. 日志使用SLF4J
## AI使用规范
1. 生成代码必须包含完整的异常处理
2. 接口必须有Swagger注解
3. 数据库操作使用事务注解
这样AI生成代码时,会自动遵守项目规范。
3.3.3 测试代码生成
场景:为现有Service生成单元测试
最佳Prompt:
为UserService编写单元测试:
- 测试类使用SpringBootTest
- 使用@MockBean模拟依赖
- 覆盖所有public方法
- 包含正常场景和异常场景
- 使用AssertJ断言
- 添加@Transactional确保测试隔离
生成质量排序:Claude Code > Cursor > Windsurf > Copilot
3.4 工作流集成方案
3.4.1 IDE快捷键配置
推荐配置(以IDEA为例):
| 快捷键 | 功能 | 配置位置 |
|---|---|---|
| Alt+P | AI对话 | Keymap → Plug-ins → AI Assistant |
| Alt+A | 接受补全 | Keymap → Editor Actions |
| Alt+Z | AI解释代码 | Keymap → Plug-ins |
3.4.2 项目级Prompt模板
创建常用Prompt模板文件:
template/coding-prompt.md:
## 代码生成规范
### Controller规范
- 必须添加@Api注解
- 必须添加Swagger注解
- 返回类型必须是Result<T>
### Service规范
- 必须使用接口+实现类
- 必须有@Transactional
- 必须有详细的日志
### 请求参数规范
- 必须有@Valid注解
- 必须有详细的@Schema描述
使用方式:
在AI对话中先输入:
"请先阅读项目根目录的template/coding-prompt.md,按照规范生成代码"
3.4.3 AI辅助Code Review
工作流:
1. 提交代码前
2. 使用AI检查:Ctrl+Shift+A → "Review this code"
3. AI返回审查意见
4. 根据意见修改
5. 提交代码
推荐Prompt:
请审查这段Java代码:
1. 是否有安全漏洞
2. 是否有性能问题
3. 是否符合编码规范
4. 是否有潜在的NPE风险
5. 是否有资源泄漏风险
返回具体的问题列表和修复建议。
3.5 避坑指南
坑1:完全信任AI生成代码
问题:直接复制粘贴AI代码到生产环境
正确姿势:
- 理解AI生成的每一行代码
- 在测试环境验证
- 审查安全性和性能
- 添加适当的注释
坑2:需求描述不清晰
问题:"帮我写个接口" → AI生成的可能不是你想要的
正确姿势:
❌ "写一个用户接口"
✅ "创建一个用户查询接口:
- GET /api/users
- 支持分页(page, size)
- 支持按姓名模糊查询(nameLike)
- 返回用户ID、姓名、手机号、创建时间
- 使用Redis缓存5分钟"
坑3:忽视上下文
问题:直接让AI生成代码,不提供任何上下文
正确姿势:
- 先让AI阅读相关文件
- 说明现有代码结构
- 明确需要保持一致的地方
坑4:不测试就提交
问题:AI生成的代码未经测试直接提交
正确姿势:
// 必须执行的检查
1. 编译通过 ✅
2. 单元测试通过 ✅
3. 集成测试通过 ✅
4. Code Review通过 ✅
3.6 本章小结
本章我们深入学习了四大AI代码助手:
| 工具 | 核心优势 | 适用场景 |
|---|---|---|
| Cursor | 综合体验最好 | 日常开发、重构 |
| Windsurf | 性价比最高 | 预算有限的个人开发者 |
| Claude Code | 代码质量最高 | 复杂业务、需要高质量代码 |
| Copilot | 企业级生态 | 团队协作、有合规要求 |
Java开发最佳实践:
- 优先使用Cursor或Claude Code
- 为项目创建CLAUDE.md规范文件
- 使用Prompt模板提高效率
- AI代码必须经过测试才能提交
- 保持学习,工具在快速迭代
下一章我们将学习Prompt工程,这是高效使用AI工具的核心技能。
第四章 Prompt工程:与AI对话的艺术
Prompt,中文译为"提示词",是与AI沟通的语言。掌握Prompt工程,就是掌握了与AI高效对话的能力。这是AI时代最重要的新技能。
4.1 Prompt基础原理
4.1.1 AI是如何理解Prompt的
AI(特别是大语言模型)处理Prompt的基本原理:
用户输入的Prompt → Token化 → 注意力机制 → 预测下一个Token → 生成回答
关键理解:
- AI没有"理解"能力,它是通过统计规律预测最可能的回答
- 越清晰、越具体的Prompt,预测越准确
- 上下文(Context)直接影响回答质量
4.1.2 优秀Prompt的核心要素
| 要素 | 说明 | 示例 |
|---|---|---|
| 角色 | 明确AI扮演的角色 | "你是一位资深Java架构师" |
| 背景 | 提供必要的上下文 | "项目使用Spring Boot 3" |
| 任务 | 清晰说明要做什么 | "生成一个用户CRUD接口" |
| 要求 | 具体的约束条件 | "返回Result包装类" |
| 格式 | 期望的输出形式 | "提供完整的Java代码" |
万能Prompt模板:
你是一位[角色],请[任务]。
背景信息:
- [技术栈]
- [项目特点]
- [相关约束]
要求:
1. [具体要求1]
2. [具体要求2]
3. [具体要求3]
请以[格式]形式输出。
4.2 Java代码优化技巧
4.2.1 基础优化Prompt
场景:代码审查
你是一位资深Java架构师,请审查以下代码:
```java
[粘贴代码]
请从以下维度分析:
- 代码规范(命名、注释、格式)
- 性能问题(时间复杂度、空间复杂度)
- 安全隐患(SQL注入、XSS、越权)
- 异常处理(NPE、空指针、资源泄漏)
- 扩展性(是否符合开闭原则)
对每个问题,请给出:
- 问题描述
- 严重程度(高/中/低)
- 修复建议
场景:性能优化
分析以下Java代码的性能问题:
```java
[粘贴代码]
请分析:
- 循环中是否有重复计算
- 是否有不必要的对象创建
- 是否有数据库N+1查询问题
- 是否有缓存可以优化
- 是否有线程安全风险
请提供优化后的代码。
#### 4.2.2 进阶优化Prompt
**场景:重构**
请重构以下Service类,要求:
- 单一职责:每个方法只做一件事
- 可读性:方法命名清晰
- 可测试性:易于单元测试
[粘贴代码]
请:
- 分析当前代码的问题
- 拆分方法,解释每个新方法的职责
- 使用设计模式优化(如适用)
- 提供完整的重构后代码
场景:并发优化
分析以下代码的并发问题:
```java
[粘贴代码]
请从以下角度分析:
- 线程安全性(竞态条件、可见性)
- 锁的使用是否合理
- 是否有死锁风险
- 线程池配置是否合理
- 是否有性能瓶颈
请提供线程安全的优化版本。
#### 4.2.3 模板化Prompt库
创建自己的Prompt模板库:
```markdown
# Java开发常用Prompt
## 1. 生成Controller
生成Spring Boot Controller:
- 路径:{path}
- 方法:{methods}
- 请求参数:{params}
- 返回类型:Result
- 要求:包含Swagger注解
2. 生成Service
生成Spring Boot Service:
- 接口名称:{interfaceName}
- 实现类名称:{implName}
- 核心方法:{methods}
- 事务要求:@Transactional
- 日志要求:SLF4J
3. 生成单元测试
为{ClassName}生成单元测试:
- 测试框架:JUnit 5 + AssertJ
- Mock对象:使用@MockBean
- 覆盖场景:{scenarios}
- 断言要求:详细且有意义
4. 生成DDL
为{TableName}生成建表SQL:
- 字段:{fields}
- 索引:{indexes}
- 约束:{constraints}
- 引擎:InnoDB
- 字符集:utf8mb4
### 4.3 复杂任务分解
#### 4.3.1 为什么要分解
复杂任务直接给AI,往往得到:
- 不完整的代码
- 逻辑混乱的结果
- 难以调试的错误
**分解原则**:
- 每次任务只解决一个问题
- 任务之间有明确的依赖关系
- 完成后可以验证结果
#### 4.3.2 分解示例:从零构建订单系统
**目标**:创建一个完整的订单系统
**错误方式**:
"帮我创建一个订单系统,包含下单、支付、发货、退款功能"
❌ 结果:生成的代码千疮百孔,无法使用
**正确方式**:
**Step 1: 先设计数据模型**
设计订单系统的数据库表:
- 订单表(orders):订单ID、用户ID、订单金额、订单状态、创建时间
- 订单明细表(order_items):明细ID、订单ID、商品ID、单价、数量
- 订单日志表(order_logs):日志ID、订单ID、操作类型、操作内容、操作时间
请生成建表SQL,要求:
- 使用MySQL
- 合理的主键和索引
- 软删除支持
- 创建时间、更新时间字段
Step 2: 生成实体类和DAO
基于刚才的表结构,生成:
1. Orders实体类(使用MyBatis Plus注解)
2. OrderItems实体类
3. 对应的Mapper接口
要求:
- 使用Lombok @Data
- 添加Swagger @ApiModel注解
- 合理的字段映射
Step 3: 生成Service层
生成OrderService:
1. 创建订单方法:参数包含用户ID、商品列表、收货地址
2. 订单校验(库存、优惠券)
3. 事务处理
4. 日志记录
要求:
- 使用接口+实现类
- 详细的异常处理
- 完善的日志
Step 4: 生成Controller层
生成OrderController:
1. POST /api/orders - 创建订单
2. GET /api/orders/{id} - 查询订单详情
3. GET /api/orders - 订单列表(分页)
4. PUT /api/orders/{id}/cancel - 取消订单
5. PUT /api/orders/{id}/pay - 支付订单
要求:
- Result<T>包装返回
- 完善的参数校验
- Swagger注解
Step 5: 生成单元测试
为OrderService生成单元测试:
1. testCreateOrder_Success - 成功创建订单
2. testCreateOrder_InsufficientStock - 库存不足
3. testCreateOrder_InvalidParam - 参数校验失败
4. testCancelOrder_Success - 成功取消订单
要求:
- 使用@MockBean模拟依赖
- AssertJ断言
- 事务保证测试隔离
4.3.3 验证和修正
每次AI生成后,必须:
1. 编译验证
- 运行 mvn compile 确保无语法错误
2. 逻辑审查
- 阅读每一行代码
- 理解业务逻辑
3. 单元测试
- 运行测试用例
- 修复失败测试
4. 集成测试
- 启动应用
- 验证功能正常
4.4 高级Prompt技巧
4.4.1 思维链(Chain of Thought)
让AI展示推理过程:
分析以下问题,请先展示你的思考过程,再给出答案:
[问题描述]
请按以下格式回答:
1. 我的理解:...
2. 分析步骤:...
3. 具体方案:...
4. 潜在风险:...
4.4.2 few-shot学习
提供示例,让AI模仿:
请按照以下示例的风格生成代码:
示例:
```java
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getById(Long id) {
return userMapper.selectById(id);
}
}
请生成OrderServiceImpl:
- 接口:OrderService
- Mapper:OrderMapper
- 包含方法:getById, createOrder, cancelOrder
4.4.3 分隔符使用
使用清晰的格式标记:
# 背景
[描述背景]
# 任务
[描述任务]
# 要求
[具体要求]
# 参考代码
[代码示例]
# 输出格式
[期望格式]
4.5 本章小结
Prompt工程的核心要点:
| 技巧 | 说明 |
|---|---|
| 角色设定 | 明确AI扮演的角色 |
| 背景信息 | 提供必要的上下文 |
| 具体要求 | 越具体越好 |
| 格式指定 | 明确输出格式 |
| 分解任务 | 复杂问题分步解决 |
| 验证修正 | 每次生成后必须验证 |
Java开发Prompt要点:
- 明确技术栈版本
- 说明返回格式规范
- 要求添加注解和注释
- 指定异常处理要求
- 强调安全和性能
下一章我们将学习AI应用开发,掌握如何将LLM集成到Java项目中。
第五章 AI应用开发:LLM与Java集成
本章将带你从"使用AI工具"进阶到"开发AI应用"。你将学会如何在Java项目中直接调用LLM API,构建智能应用。
5.1 API调用基础
5.1.1 主流LLM API对比
| 供应商 | 模型 | 特点 | 价格 | 访问难度 |
|---|---|---|---|---|
| OpenAI | GPT-4o, GPT-4 Turbo | 生态最强 | $15-75/M tokens | 需要科学上网 |
| Anthropic | Claude 4 | 代码最强 | $15-75/M tokens | 需要科学上网 |
| Gemini | 多模态 | $0-7/M tokens | 需要科学上网 | |
| 阿里云 | 通义千问 | 中文优化 | 较便宜 | 国内可直接访问 |
| 百度 | 文心一言 | 中文优化 | 较便宜 | 国内可直接访问 |
5.1.2 OpenAI API调用
基础依赖:
<!-- Maven -->
<dependency>
<groupId>com.theokanning.openai-gpt3-java</groupId>
<artifactId>service</artifactId>
<version>0.18.2</version>
</dependency>
基础调用代码:
@Service
@RequiredArgsConstructor
public class OpenAIService {
private final OpenAiService openAiService;
public String chat(String prompt) {
ChatCompletionRequest request = ChatCompletionRequest.builder()
.model("gpt-4o")
.messages(List.of(
new ChatMessage("user", prompt)
))
.temperature(0.7)
.maxTokens(2000)
.build();
return openAiService.createChatCompletion(request)
.getChoices()
.get(0)
.getMessage()
.getContent();
}
}
配置类:
@Configuration
public class OpenAIConfig {
@Value("${openai.api.key}")
private String apiKey;
@Bean
public OpenAiService openAiService() {
return new OpenAiService(apiKey);
}
}
application.yml:
openai:
api:
key: sk-xxxxx # 替换为你的API Key
5.1.3 Claude API调用
基础依赖:
<dependency>
<groupId>com.anthropic</groupId>
<artifactId>anthropic-sdk-java</artifactId>
<version>0.25.0</version>
</dependency>
基础调用代码:
@Service
@RequiredArgsConstructor
public class ClaudeService {
private final AnthropicService anthropicService;
public String chat(String prompt) {
MessageCreateParams params = MessageCreateParams.builder()
.model(AnthropicModel.CLAUDE_4_OPUS.getValue())
.maxTokens(2000)
.messages(List.of(
MessageCreateParams.Message.builder()
.role(MessageCreateParams.MessageRole.USER)
.content(prompt)
.build()
))
.build();
return anthropicService.messages().create(params)
.getContent()
.get(0)
.asText()
.getText();
}
}
5.2 Spring AI框架
5.2.1 Spring AI简介
Spring AI是Spring生态的AI应用开发框架:
- 提供统一的AI模型抽象
- 支持多种AI供应商
- 与Spring生态无缝集成
5.2.2 Spring AI集成OpenAI
依赖配置:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
<version>1.0.0-M4</version>
</dependency>
application.yml:
spring:
ai:
openai:
api-key: ${OPENAI_API_KEY}
chat:
options:
model: gpt-4o
temperature: 0.7
基础使用:
@Service
@RequiredArgsConstructor
public class ChatService {
private final ChatClient chatClient;
public String chat(String prompt) {
return chatClient.prompt()
.user(prompt)
.call()
.content();
}
// 流式响应
public Flux<String> streamChat(String prompt) {
return chatClient.prompt()
.user(prompt)
.stream()
.content();
}
}
5.2.3 构建智能问答系统
需求:基于企业知识库构建智能问答系统
架构设计:
用户问题 → 向量化 → 向量数据库检索 → 相关文档 → LLM生成答案 → 返回用户
核心实现:
@Service
@RequiredArgsConstructor
public class QAService {
private final ChatClient chatClient;
private final VectorStore vectorStore;
private final DocumentReader documentReader;
/**
* 文档上传与向量化
*/
public void ingestDocument(String content) {
Document document = new Document(content);
List<Document> documents = List.of(document);
// 文档分割
TextSplitter textSplitter = new TokenTextSplitter();
List<Document> splitDocs = textSplitter.apply(documents);
// 存储到向量数据库
vectorStore.add(splitDocs);
}
/**
* 问答
*/
public String answer(String question) {
// 1. 将问题向量化
// 2. 从向量数据库检索相似文档
List<Document> similarDocs = vectorStore.similaritySearch(question);
// 3. 构建上下文
String context = similarDocs.stream()
.map(Document::getContent)
.collect(Collectors.joining("\n"));
// 4. 构建Prompt
String prompt = buildPrompt(question, context);
// 5. 调用LLM
return chatClient.prompt()
.user(prompt)
.call()
.content();
}
private String buildPrompt(String question, String context) {
return """
你是一个专业的客服助手。请根据以下参考文档回答用户问题。
参考文档:
%s
用户问题:%s
要求:
1. 只根据参考文档回答,不要编造信息
2. 如果文档中没有相关信息,请明确告知用户
3. 回答要清晰、准确、有帮助
回答:
""".formatted(context, question);
}
}
5.3 RAG架构实现
5.3.1 RAG核心概念
RAG(Retrieval-Augmented Generation,检索增强生成):
- 检索:从知识库中找到相关信息
- 增强:将检索结果作为上下文
- 生成:LLM基于上下文生成答案
为什么需要RAG:
- 解决LLM知识过时问题
- 解决LLM hallucination(幻觉)问题
- 实现企业私有知识问答
5.3.2 完整RAG流程
┌─────────────────────────────────────────────────────────────┐
│ RAG 流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 文档输入 │ -> │ 文档分块 │ -> │ 向量化 │ 索引构建 │
│ └──────────┘ └──────────┘ └──────────┘ │
│ │
│ ┌──────────────────────────────────┐ │
│ │ 向量数据库 │ │
│ │ (Milvus/Pinecone/ES) │ │
│ └──────────────────────────────────┘ │
│ ↑ │
│ │ 相似度检索 │
│ ↓ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ 用户问题 │ -> │ 向量化 │ -> │ 相似检索 │ 查询流程 │
│ └──────────┘ └──────────┘ └──────────┘ │
│ ↓ │
│ ┌──────────────┐ │
│ │ Prompt构建 │ │
│ └──────────────┘ │
│ ↓ │
│ ┌──────────────┐ │
│ │ LLM生成 │ │
│ └──────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
5.3.3 文档处理
文档加载器:
@Service
public class DocumentLoader {
/**
* 加载PDF文档
*/
public List<String> loadPdf(String filePath) {
PdfDocumentReader reader = new PdfDocumentReader(
filePath,
new PdfReaderConfig()
);
return reader.get();
}
/**
* 加载Word文档
*/
public List<String> loadWord(String filePath) {
TikaDocumentReader reader = new TikaDocumentReader(filePath);
return reader.get();
}
/**
* 加载HTML
*/
public List<String> loadHtml(String url) {
HtmlDocumentReader reader = new HtmlDocumentReader(url);
return reader.get();
}
/**
* 加载数据库
*/
public List<String> loadDatabase(String sql) {
JdbcDocumentReader reader = new JdbcDocumentReader(
dataSource,
sql
);
return reader.get();
}
}
文档分块:
@Service
public class DocumentChunker {
/**
* 滑动窗口分块
*/
public List<String> chunkByWindow(String text, int windowSize, int overlap) {
List<String> chunks = new ArrayList<>();
int start = 0;
while (start < text.length()) {
int end = Math.min(start + windowSize, text.length());
chunks.add(text.substring(start, end));
start += (windowSize - overlap);
}
return chunks;
}
/**
* 按段落分块
*/
public List<String> chunkByParagraph(String text) {
return Arrays.asList(text.split("\n\n"));
}
/**
* 使用Spring AI的TextSplitter
*/
public List<Document> chunkWithSpringAI(String text) {
TokenTextSplitter splitter = new TokenTextSplitter(
500, // chunk size
50, // overlap
true, // keepSeparator
true // prependMetadata
);
Document doc = new Document(text);
return splitter.apply(List.of(doc));
}
}
5.3.4 向量数据库
推荐向量数据库:
| 数据库 | 特点 | 适用场景 |
|---|---|---|
| Milvus | 开源、功能强 | 大规模企业应用 |
| Pinecone | 托管服务、简单 | 快速上手 |
| Qdrant | 轻量、易部署 | 中小企业 |
| Elasticsearch | 现有ES集群 | 已有ES团队 |
| Chroma | 轻量、易用 | 入门学习 |
Spring AI集成示例(以Qdrant为例) :
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-qdrant-spring-boot-starter</artifactId>
<version>1.0.0-M4</version>
</dependency>
spring:
ai:
vectorstore:
qdrant:
host: localhost
port: 6333
collection-name: my_documents
5.3.5 相似度检索
@Service
@RequiredArgsConstructor
public class RetrievalService {
private final VectorStore vectorStore;
/**
* 语义检索
*/
public List<String> semanticSearch(String query, int topK) {
List<Document> results = vectorStore.similaritySearch(
SearchRequest.query(query).topK(topK)
);
return results.stream()
.map(Document::getContent)
.toList();
}
/**
* 带过滤条件的检索
*/
public List<String> filteredSearch(String query, String category, int topK) {
List<Document> results = vectorStore.similaritySearch(
SearchRequest.query(query)
.topK(topK)
.withFilterExpression("category == '" + category + "'")
);
return results.stream()
.map(Document::getContent)
.toList();
}
/**
* MMR检索(最大边际相关性)
* 避免返回内容过于相似的文档
*/
public List<String> mmrSearch(String query, int topK, double fetchSize) {
List<Document> results = vectorStore.similaritySearch(
SearchRequest.query(query)
.topK(topK)
.withSimilarityThreshold(0.7)
);
// MMR重排序逻辑
return mmrRerank(results, query, topK);
}
private List<String> mmrRerank(List<Document> docs, String query, int topK) {
// 简化实现,实际需要计算mmr分数
return docs.stream()
.limit(topK)
.map(Document::getContent)
.toList();
}
}
5.4 实战:企业知识库系统
5.4.1 系统架构
┌─────────────────────────────────────────────────────────────┐
│ 企业知识库系统架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │ Web前端 │ │ 移动端 │ │ API网关 │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ │
│ │ │ │ │
│ └──────────────┼──────────────┘ │
│ ↓ │
│ ┌───────────────┐ │
│ │ Spring Boot │ │
│ │ 应用层 │ │
│ └───────┬───────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 业务逻辑层 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ 文档管理 │ │ 向量化 │ │ 问答服务 │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────┐ │
│ │ 数据层 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ MySQL │ │ Qdrant │ │ Redis │ │ │
│ │ │ (元数据) │ │ (向量) │ │ (缓存) │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────┐ │
│ │ AI能力层 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
│ │ │ OpenAI │ │ 向量化模型 │ │ TextSplitter│ │ │
│ │ │ API │ │ │ │ │ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ │ │
│ └─────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
5.4.2 核心代码结构
@RestController
@RequestMapping("/api/knowledge")
@RequiredArgsConstructor
public class KnowledgeController {
private final DocumentIngestService documentIngestService;
private final QAService qaService;
/**
* 上传文档
*/
@PostMapping("/documents")
public Result<DocumentId> uploadDocument(
@RequestParam("file") MultipartFile file,
@RequestParam("category") String category) {
String docId = documentIngestService.ingest(file, category);
return Result.success(new DocumentId(docId));
}
/**
* 问答接口
*/
@PostMapping("/chat")
public Result<ChatResponse> chat(@RequestBody ChatRequest request) {
String answer = qaService.answer(request.getQuestion());
return Result.success(new ChatResponse(answer));
}
/**
* 查询文档列表
*/
@GetMapping("/documents")
public Result<List<DocumentMeta>> listDocuments() {
return Result.success(documentIngestService.listDocuments());
}
}
5.5 本章小结
本章学习了如何将LLM集成到Java应用:
| 技能点 | 掌握程度 |
|---|---|
| OpenAI API调用 | ✅ 基础 |
| Claude API调用 | ✅ 基础 |
| Spring AI框架 | ✅ 进阶 |
| RAG架构 | ✅ 进阶 |
| 向量数据库 | ✅ 进阶 |
| 企业知识库系统 | ✅ 实战 |
核心要点:
- API调用是基础:掌握OpenAI/Claude API调用
- Spring AI简化开发:统一的模型抽象,与Spring生态无缝集成
- RAG是核心技术:解决企业私有知识问答的最佳方案
- 向量数据库选型:根据规模和团队选择合适的方案
下一章我们将进入重点章节:AI Agent,学习如何构建自动化编程助手。
第六章 AI Agent:自动化编程助手
AI Agent(智能体)是AI辅助编程的终极形态。与简单的代码补全不同,Agent能够理解复杂需求、自主规划任务、执行代码、验证结果、修复错误。本章将深入讲解Agent的核心原理,并手把手教你用Java构建企业级Code Agent。
6.1 Agent核心概念
6.1.1 什么是Agent
传统AI vs Agent:
| 维度 | 传统AI(LLM) | Agent |
|---|---|---|
| 交互方式 | 被动响应 | 主动执行 |
| 任务处理 | 单次问答 | 规划+执行+验证 |
| 工具使用 | 无 | 可调用工具 |
| 自我修正 | 无 | 有 |
| 适用场景 | 简单问答 | 复杂任务 |
Agent的定义:
Agent = LLM(大脑) + Tools(手和脚) + Memory(记忆) + Planning(规划能力)
Agent工作流程:
┌─────────────────────────────────────────────────────────┐
│ Agent 工作流程 │
├─────────────────────────────────────────────────────────┤
│ │
│ ┌─────────┐ │
│ │ 用户输入 │ "帮我创建一个用户CRUD接口" │
│ └────┬────┘ │
│ ↓ │
│ ┌─────────────────────────────────────┐ │
│ │ 1. 任务理解与规划 │ │
│ │ - 理解需求 │ │
│ │ - 分解子任务 │ │
│ │ - 确定执行顺序 │ │
│ └────┬────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────┐ │
│ │ 2. 执行计划 │ │
│ │ - 调用工具执行每个子任务 │ │
│ │ - 读取文件、生成代码、运行测试 │ │
│ └────┬────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────┐ │
│ │ 3. 结果验证 │ │
│ │ - 检查代码编译 │ │
│ │ - 运行测试验证 │ │
│ └────┬────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────┐ │
│ │ 4. 自我修正(如有问题) │ │
│ │ - 分析错误 │ │
│ │ - 修复问题 │ │
│ │ - 重新验证 │ │
│ └────┬────────────────────────────────┘ │
│ ↓ │
│ ┌─────────┐ │
│ │ 返回结果 │ 完整的UserController代码 │
│ └─────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
6.1.2 Agent的核心组件
1. Planning(规划能力)
Agent能够将复杂任务分解为可执行的子任务:
用户需求:创建一个订单系统
↓
分解为:
1. 设计数据库表结构
2. 生成实体类
3. 生成Mapper
4. 生成Service
5. 生成Controller
6. 生成单元测试
↓
按顺序执行每个子任务
↓
验证和修正
2. Tools(工具能力)
Agent可以调用各种工具:
| 工具类型 | 功能 | 示例 |
|---|---|---|
| 文件操作 | 读写文件 | 读取Java源文件 |
| 代码执行 | 运行命令 | mvn compile |
| 搜索工具 | 搜索代码 | 查找相关类 |
| Web搜索 | 获取信息 | 搜索API文档 |
| 数据库操作 | 查询数据 | 查询MySQL |
3. Memory(记忆能力)
Agent的记忆分为:
| 记忆类型 | 说明 | 生命周期 |
|---|---|---|
| 短期记忆 | 当前对话上下文 | 会话期间 |
| 长期记忆 | 项目信息、代码结构 | 长期 |
| 知识库 | 企业知识、文档 | 永久 |
4. Action(执行能力)
Agent执行任务的方式:
ReAct(Reasoning + Acting)模式:
Thought: 我需要先了解项目结构
Action: 读取项目根目录文件列表
Observation: 发现是Spring Boot项目
Thought: 需要查看pom.xml了解依赖
Action: 读取pom.xml
...
6.1.3 Agent的类型
| Agent类型 | 特点 | 适用场景 |
|---|---|---|
| Code Agent | 代码生成、调试、测试 | 开发工作 |
| Data Agent | 数据分析、处理 | 数据相关 |
| Research Agent | 信息搜集、分析 | 调研任务 |
| Conversation Agent | 多轮对话、任务执行 | 客服助手 |
| Multi-Agent | 多Agent协作 | 复杂系统 |
6.2 LangChain4j框架
6.2.1 LangChain4j简介
LangChain4j是LangChain的Java实现:
- 纯Java实现,无需Python
- 与Spring生态完美集成
- 支持多种LLM供应商
- 丰富的工具生态
GitHub:github.com/langchain4j…
6.2.2 快速入门
Maven依赖:
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-bom</artifactId>
<version>0.35.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-open-ai</artifactId>
<version>0.35.0</version>
</dependency>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-mcp</artifactId>
<version>0.35.0</version>
</dependency>
基础配置:
@Configuration
public class LangChain4jConfig {
@Value("${openai.api.key}")
private String apiKey;
@Bean
public ChatLanguageModel chatLanguageModel() {
return OpenAiChatModel.builder()
.apiKey(apiKey)
.modelName("gpt-4o")
.temperature(0.7)
.maxToken(2000)
.build();
}
@Bean
public AiServices aiServices(ChatLanguageModel chatLanguageModel) {
return AiServices.builder(chatLanguageModel)
.chatLanguageModel(chatLanguageModel)
.build();
}
}
6.2.3 工具定义
/**
* 文件读取工具
*/
public class FileReaderTool {
public String readFile(String filePath) {
try {
return Files.readString(Paths.get(filePath));
} catch (IOException e) {
return "Error reading file: " + e.getMessage();
}
}
public List<String> listFiles(String directory) {
try (Stream<Path> paths = Files.walk(Paths.get(directory))) {
return paths
.filter(Files::isRegularFile)
.map(Path::toString)
.collect(Collectors.toList());
} catch (IOException e) {
return List.of("Error: " + e.getMessage());
}
}
}
/**
* 代码执行工具
*/
public class CodeExecutionTool {
public String executeCommand(String command, String workingDir) {
try {
ProcessBuilder pb = new ProcessBuilder();
pb.command("bash", "-c", command);
pb.directory(new File(workingDir));
pb.redirectErrorStream(true);
Process process = pb.start();
String output = new String(process.getInputStream().readAllBytes());
int exitCode = process.waitFor();
return "Exit code: " + exitCode + "\nOutput: " + output;
} catch (Exception e) {
return "Error: " + e.getMessage();
}
}
public String compileJava(String filePath) {
return executeCommand("javac " + filePath, ".");
}
public String runMaven(String goal, String projectDir) {
return executeCommand("./mvnw " + goal + " -q", projectDir);
}
}
/**
* 搜索工具
*/
public class SearchTool {
public String searchCode(String query, String projectDir) {
// 使用grep或jgrep进行代码搜索
try {
ProcessBuilder pb = new ProcessBuilder();
pb.command("grep", "-r", query, projectDir);
pb.redirectErrorStream(true);
Process process = pb.start();
return new String(process.getInputStream().readAllBytes());
} catch (Exception e) {
return "Error: " + e.getMessage();
}
}
}
6.2.4 构建Agent
/**
* Code Agent 服务
*/
@Service
@RequiredArgsConstructor
public class CodeAgentService {
private final ChatLanguageModel chatLanguageModel;
private final FileReaderTool fileReaderTool;
private final CodeExecutionTool codeExecutionTool;
private final SearchTool searchTool;
/**
* 构建可执行代码的Agent
*/
public String executeTask(String task) {
// 1. 理解任务
String taskAnalysis = analyzeTask(task);
// 2. 规划执行步骤
List<String> steps = planSteps(task);
// 3. 执行每个步骤
StringBuilder result = new StringBuilder();
for (String step : steps) {
String stepResult = executeStep(step);
result.append("Step: ").append(step).append("\n");
result.append("Result: ").append(stepResult).append("\n\n");
// 4. 检查结果,决定是否需要修正
if (containsError(stepResult)) {
String fix = fixError(step, stepResult);
result.append("Fixed: ").append(fix).append("\n\n");
}
}
return result.toString();
}
private String analyzeTask(String task) {
String prompt = """
分析以下任务,确定需要做什么:
任务:%s
请分析:
1. 任务类型(创建/修改/调试/查询)
2. 涉及的技术栈
3. 需要生成或修改的文件
4. 可能的依赖和约束
""".formatted(task);
return chat(prompt);
}
private List<String> planSteps(String task) {
String prompt = """
将以下任务分解为可执行的步骤:
任务:%s
要求:
1. 每个步骤必须是可执行的具体动作
2. 步骤之间有明确的依赖关系
3. 按照执行顺序列出
格式:
1. [步骤描述]
2. [步骤描述]
...
""".formatted(task);
String result = chat(prompt);
// 解析步骤列表...
return parseSteps(result);
}
private String executeStep(String step) {
String prompt = """
执行以下步骤,给出具体的命令或代码:
步骤:%s
如果需要生成代码,请给出完整的代码。
如果需要执行命令,请给出具体的命令。
""".formatted(step);
String action = chat(prompt);
// 根据action类型执行
if (action.startsWith("```java")) {
return generateAndSaveCode(action);
} else if (action.startsWith("```bash")) {
return executeCommand(action);
}
return action;
}
private String chat(String prompt) {
UserMessage userMessage = UserMessage.userMessage(prompt);
return chatLanguageModel.chat(userMessage).single().text();
}
private boolean containsError(String result) {
return result.toLowerCase().contains("error") ||
result.toLowerCase().contains("failed") ||
result.toLowerCase().contains("exception");
}
private String fixError(String step, String errorResult) {
String prompt = """
之前的执行出现了错误,请分析并修复:
步骤:%s
错误结果:%s
请:
1. 分析错误原因
2. 给出修复后的代码或命令
""".formatted(step, errorResult);
return chat(prompt);
}
private List<String> parseSteps(String result) {
// 解析步骤列表
return Arrays.stream(result.split("\n"))
.filter(s -> s.matches("^\d+\..*"))
.map(s -> s.replaceFirst("^\d+\.\s*", ""))
.collect(Collectors.toList());
}
private String generateAndSaveCode(String action) {
// 生成并保存代码
return "Code generated successfully";
}
private String executeCommand(String command) {
return codeExecutionTool.executeCommand(command, ".");
}
}
6.3 构建企业级Code Agent
6.3.1 完整架构
┌─────────────────────────────────────────────────────────────┐
│ 企业级 Code Agent 架构 │
├─────────────────────────────────────────────────────────────┤
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 用户交互层 │ │
│ │ IDE插件 │ Web界面 │ CLI │ API │ │
│ └──────────────────────┬────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ Agent编排层 │ │
│ │ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐ │ │
│ │ │ Task Planner│ │ Executor │ │ Evaluator │ │ │
│ │ │ 任务规划 │ │ 执行器 │ │ 评估器 │ │ │
│ │ └─────────────┘ └─────────────┘ └─────────────┘ │ │
│ └──────────────────────┬────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 工具层 │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │ │
│ │ │ 文件操作 │ │ 代码执行 │ │ 代码搜索 │ │代码审查│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └────────┘ │ │
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌────────┐ │ │
│ │ │ 数据库 │ │ API调用 │ │ Web搜索 │ │单元测试│ │ │
│ │ └──────────┘ └──────────┘ └──────────┘ └────────┘ │ │
│ └──────────────────────┬────────────────────────────────┘ │
│ ↓ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 模型层 │ │
│ │ GPT-4o / Claude 4 / Gemini │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 知识层 │ │
│ │ 项目知识库 │ 代码规范 │ API文档 │ 架构图 │ │
│ └─────────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────────┘
6.3.2 MCP协议集成
MCP(Model Context Protocol)是Claude Code推出的工具协议:
/**
* MCP工具服务
*/
@Service
public class MCPToolService {
/**
* 使用MCP协议调用工具
*/
public String callTool(String toolName, Map<String, Object> params) {
// MCP工具调用逻辑
// 可用工具:filesystem, git, bash, search等
return executeMCP(toolName, params);
}
/**
* 列出所有可用工具
*/
public List<String> listAvailableTools() {
return List.of(
"filesystem_read",
"filesystem_write",
"bash_execute",
"git_operations",
"code_search",
"web_search"
);
}
private String executeMCP(String toolName, Map<String, Object> params) {
// MCP执行逻辑
return "";
}
}
6.3.3 Agent核心逻辑
/**
* 企业级Agent实现
*/
@Service
@Slf4j
public class EnterpriseCodeAgent {
private final ChatLanguageModel model;
private final MCPToolService mcpToolService;
private final ProjectKnowledgeService knowledgeService;
/**
* 处理用户请求
*/
public AgentResponse processRequest(String userRequest) {
log.info("Processing request: {}", userRequest);
// 1. 加载项目上下文
String context = loadProjectContext();
// 2. 规划任务
TaskPlan plan = planTask(userRequest, context);
log.info("Task plan: {}", plan);
// 3. 执行任务
ExecutionResult result = executePlan(plan);
// 4. 验证结果
ValidationResult validation = validateResult(result);
// 5. 如果验证失败,尝试修复
if (!validation.isSuccess()) {
result = fixIssues(result, validation.getIssues());
}
return buildResponse(result, validation);
}
private String loadProjectContext() {
// 加载项目结构、依赖、代码规范等
String projectStructure = knowledgeService.getProjectStructure();
String codingStandards = knowledgeService.getCodingStandards();
String techStack = knowledgeService.getTechStackInfo();
return """
项目结构:
%s
编码规范:
%s
技术栈:
%s
""".formatted(projectStructure, codingStandards, techStack);
}
private TaskPlan planTask(String request, String context) {
String prompt = """
基于以下项目信息和用户请求,制定执行计划:
用户请求:%s
项目信息:%s
请制定详细的任务计划,包含:
1. 任务拆解(具体步骤)
2. 每个步骤需要的工具
3. 步骤之间的依赖关系
4. 预期的输出结果
""".formatted(request, context);
String planStr = model.chat(UserMessage.userMessage(prompt)).single().text();
return parseTaskPlan(planStr);
}
private ExecutionResult executePlan(TaskPlan plan) {
ExecutionResult result = new ExecutionResult();
for (TaskStep step : plan.getSteps()) {
log.info("Executing step: {}", step.getDescription());
// 执行步骤
String stepResult = executeStep(step);
result.addStepResult(step.getId(), stepResult);
// 检查是否有错误
if (containsError(stepResult)) {
log.warn("Step {} has errors: {}", step.getId(), stepResult);
result.addError(step.getId(), stepResult);
}
}
return result;
}
private String executeStep(TaskStep step) {
// 根据步骤类型选择工具
return switch (step.getTool()) {
case "generate_code" -> generateCode(step);
case "read_file" -> readFile(step);
case "write_file" -> writeFile(step);
case "run_command" -> runCommand(step);
case "search_code" -> searchCode(step);
case "review_code" -> reviewCode(step);
default -> "Unknown tool: " + step.getTool();
};
}
private ValidationResult validateResult(ExecutionResult result) {
// 验证执行结果
List<String> issues = new ArrayList<>();
// 检查是否有错误
if (!result.getErrors().isEmpty()) {
issues.addAll(result.getErrors());
}
// 编译检查
if (!compileProject().contains("BUILD SUCCESS")) {
issues.add("编译失败");
}
// 测试检查
if (!runTests().contains("Tests passed")) {
issues.add("测试失败");
}
return new ValidationResult(issues.isEmpty(), issues);
}
private ExecutionResult fixIssues(ExecutionResult result, List<String> issues) {
for (String issue : issues) {
String fixPrompt = """
请修复以下问题:
问题:%s
之前的执行结果:
%s
请给出修复方案并执行。
""".formatted(issue, result.toString());
String fixResult = model.chat(UserMessage.userMessage(fixPrompt)).single().text();
log.info("Fix for {}: {}", issue, fixResult);
}
return result;
}
// ... 其他辅助方法
}
6.4 业务场景实战
6.4.1 智能客服Agent
需求:构建企业级智能客服,能回答产品相关问题
架构:
/**
* 智能客服Agent
*/
@Service
public class CustomerServiceAgent {
private final ChatLanguageModel model;
private final RAGService ragService;
private final ConversationHistory history;
public String answer(String question, String userId) {
// 1. 获取对话历史
List<String> recentHistory = history.getRecent(userId, 5);
// 2. 检索相关知识
List<String> relevantDocs = ragService.retrieve(question, 3);
// 3. 构建Prompt
String prompt = buildPrompt(question, relevantDocs, recentHistory);
// 4. 调用LLM
String answer = model.chat(UserMessage.userMessage(prompt)).single().text();
// 5. 保存对话历史
history.add(userId, question, answer);
return answer;
}
private String buildPrompt(String question, List<String> docs, List<String> history) {
return """
你是一个专业、耐心的客服。请根据以下信息回答用户问题。
相关产品文档:
%s
对话历史:
%s
用户问题:%s
要求:
1. 只根据提供的文档回答,不要编造信息
2. 回答要专业、友好、有帮助
3. 如果文档中没有相关信息,请明确告知用户
4. 适当使用Emoji让回答更生动
回答:
""".formatted(
String.join("\n---\n", docs),
String.join("\n", history),
question
);
}
}
6.4.2 知识库问答Agent
需求:构建企业内部知识库问答系统
/**
* 知识库问答Agent
*/
@Service
public class KnowledgeBaseAgent {
private final ChatLanguageModel model;
private final VectorStore vectorStore;
private final DocumentStore documentStore;
public QAResponse answer(String question, String userId) {
// 1. 意图识别
Intent intent = recognizeIntent(question);
// 2. 根据意图选择策略
return switch (intent) {
case RETRIEVAL -> retrievalQA(question);
case PROCEDURE -> procedureQA(question);
case TROUBLESHOOTING -> troubleshootingQA(question);
case GENERAL -> generalQA(question);
};
}
private QAResponse retrievalQA(String question) {
// 语义检索
List<Document> docs = vectorStore.similaritySearch(question, 5);
// 构建上下文
String context = docs.stream()
.map(Document::getContent)
.collect(Collectors.joining("\n\n"));
// 生成答案
String prompt = """
基于以下知识库内容回答问题:
知识库内容:
%s
问题:%s
要求:
1. 只基于知识库内容回答
2. 如需引用,请标注来源
3. 内容要准确、完整
""".formatted(context, question);
String answer = model.chat(UserMessage.userMessage(prompt)).single().text();
return QAResponse.builder()
.answer(answer)
.sources(docs.stream().map(Doc::getSource).toList())
.confidence(calculateConfidence(docs))
.build();
}
// ... 其他方法
}
6.5 本章小结
本章深入学习了AI Agent的核心知识:
| 技能点 | 掌握程度 |
|---|---|
| Agent核心概念 | ✅ 理解 |
| Agent工作流程 | ✅ 掌握 |
| LangChain4j框架 | ✅ 进阶 |
| 工具定义与集成 | ✅ 实战 |
| 企业级Code Agent | ✅ 实战 |
| 智能客服Agent | ✅ 实战 |
核心要点:
- Agent = LLM + Tools + Memory + Planning:理解这四个核心组件
- LangChain4j是Java首选:纯Java实现,与Spring无缝集成
- 工具是Agent的手脚:文件读写、代码执行、搜索等
- 自我纠正是关键:Agent能检测错误并自动修复
下一章我们将学习AI辅助架构与设计,掌握如何利用AI进行系统设计。
第七章 AI辅助架构与设计
AI不仅是代码生成工具,更是架构设计的得力助手。本章将教你如何利用AI进行系统设计、代码审查和性能优化,向P7级别的架构能力迈进。
7.1 AI辅助系统设计
7.1.1 系统设计Prompt模板
场景:设计一个新的微服务
你是一位资深Java架构师,有10年以上企业级系统设计经验。
请为以下需求设计系统架构:
需求描述:
[粘贴需求]
请提供:
1. 系统架构图(ASCII形式)
2. 技术选型及理由
3. 核心模块设计
4. 数据模型设计
5. API设计
6. 关键技术难点及解决方案
7. 性能考虑
8. 安全考虑
9. 扩展性考虑
10. 部署方案
要求:
- 使用Spring Cloud生态
- 遵循DDD领域驱动设计
- 考虑高并发场景
- 提供具体的技术栈版本
7.1.2 数据库设计
场景:设计订单系统数据库
为订单系统设计数据库表结构:
需求:
1. 订单包含基本信息(订单号、用户、金额、状态、时间)
2. 订单包含多个商品明细
3. 订单有支付信息
4. 订单有物流信息
5. 订单有操作日志
请提供:
1. ER图
2. 建表SQL(MySQL)
3. 每个字段的类型、说明、约束
4. 索引设计
5. 分库分表策略(如需)
6. 数据迁移方案(如需)
AI生成的典型输出:
-- 订单主表
CREATE TABLE orders (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_no VARCHAR(64) NOT NULL COMMENT '订单号',
user_id BIGINT NOT NULL COMMENT '用户ID',
total_amount DECIMAL(10,2) NOT NULL COMMENT '订单总金额',
status TINYINT NOT NULL DEFAULT 0 COMMENT '订单状态',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
deleted_at DATETIME DEFAULT NULL,
INDEX idx_order_no (order_no),
INDEX idx_user_id (user_id),
INDEX idx_status (status),
INDEX idx_created_at (created_at)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单主表';
-- 订单明细表
CREATE TABLE order_items (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
order_id BIGINT NOT NULL COMMENT '订单ID',
product_id BIGINT NOT NULL COMMENT '商品ID',
product_name VARCHAR(256) NOT NULL COMMENT '商品名称',
price DECIMAL(10,2) NOT NULL COMMENT '单价',
quantity INT NOT NULL COMMENT '数量',
subtotal DECIMAL(10,2) NOT NULL COMMENT '小计',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
INDEX idx_order_id (order_id),
INDEX idx_product_id (product_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='订单明细表';
7.1.3 API设计
场景:设计用户相关API
为用户模块设计RESTful API:
需求:
1. 用户注册
2. 用户登录(手机号+验证码)
3. 获取用户信息
4. 修改用户信息
5. 修改密码
6. 忘记密码
请提供:
1. 完整的API设计
2. 请求参数和响应格式
3. 错误码定义
4. 安全性考虑
5. 限流策略
7.2 AI辅助代码审查
7.2.1 代码审查Prompt库
基础审查:
请审查以下Java代码:
```java
[粘贴代码]
从以下维度审查:
- 代码规范(命名、格式、注释)
- 安全性(SQL注入、XSS、越权)
- 性能问题(N+1、循环中查库)
- 异常处理(NPE、资源泄漏)
- 并发安全
- 设计模式
每个问题请按以下格式输出:
- 位置:[文件和行号]
- 问题:[描述]
- 严重程度:[高/中/低]
- 建议:[修复方案]
安全审查:
进行安全审查:
```java
[粘贴代码]
请检查:
- SQL注入风险
- XSS漏洞
- 越权访问
- 敏感信息泄露
- 认证授权问题
- 文件操作安全
- 反序列化风险
- 命令注入风险
并发审查:
审查以下代码的线程安全性:
```java
[粘贴代码]
请分析:
- 共享变量访问
- 锁的使用是否正确
- 死锁风险
- 可见性问题
- 原子性问题
- 线程池配置合理性
7.2.2 批量代码审查
/**
* AI代码审查服务
*/
@Service
@RequiredArgsConstructor
public class CodeReviewService {
private final ChatLanguageModel model;
public ReviewResult review(String code, ReviewType type) {
String prompt = buildPrompt(code, type);
String result = model.chat(UserMessage.userMessage(prompt)).single().text();
return parseReviewResult(result);
}
public List<ReviewResult> batchReview(List<String> files) {
return files.stream()
.map(this::review)
.collect(Collectors.toList());
}
private String buildPrompt(String code, ReviewType type) {
return switch (type) {
case SECURITY -> buildSecurityPrompt(code);
case PERFORMANCE -> buildPerformancePrompt(code);
case CONCURRENCY -> buildConcurrencyPrompt(code);
case STANDARD -> buildStandardPrompt(code);
case COMPREHENSIVE -> buildComprehensivePrompt(code);
};
}
// ... 各种prompt构建方法
}
7.3 AI辅助性能优化
7.3.1 性能分析Prompt
SQL优化:
分析以下SQL的性能问题:
```sql
[粘贴SQL]
请分析:
- 是否存在全表扫描
- 索引使用是否合理
- 是否存在慢查询
- 是否有优化空间
- 优化建议
Java代码优化:
分析以下Java代码的性能问题:
```java
[粘贴代码]
请分析:
- 循环中是否有重复计算
- 是否有不必要的对象创建
- 是否有缓存可以优化
- 并发性能如何
- 内存使用是否合理
- 建议的优化方案
7.3.2 JVM调优指导
分析以下JVM参数配置是否合理:
-XX:+UseG1GC
-Xms4g
-Xmx4g
-XX:MaxGCPauseMillis=200
-XX:+ParallelRefProcEnabled
-XX:+UnlockExperimentalVMOptions
-XX:G1NewSizePercent=30
-XX:G1MaxNewSizePercent=50
系统信息:
- 堆大小:4GB
- 并发用户:1000
- 请求量:10000 QPS
- 主要业务:订单处理
请评估:
1. 垃圾回收器选择是否合适
2. 内存配置是否合理
3. 是否有优化空间
4. 建议的参数调整
7.4 架构决策辅助
7.4.1 技术选型评估
请评估以下技术选型:
选型1:Spring Cloud Alibaba Nacos + Sentinel
选型2:Spring Cloud Netflix Eureka + Hystrix
背景:
- 团队规模:10人
- 技术栈:Java + Spring Boot
- 目标:微服务架构改造
- 已有:MySQL, Redis
请从以下维度对比:
1. 功能完整性
2. 学习成本
3. 运维复杂度
4. 社区活跃度
5. 性能表现
6. 稳定性
7. 适用场景
给出推荐方案及理由。
7.4.2 方案评审
请评审以下架构方案:
方案描述:
[粘贴方案]
请评估:
1. 架构合理性
2. 可扩展性
3. 可维护性
4. 性能考量
5. 安全性
6. 成本
7. 潜在风险
给出改进建议。
7.5 本章小结
| 技能 | 应用场景 |
|---|---|
| AI辅助系统设计 | 新项目设计、技术方案编写 |
| AI辅助代码审查 | Code Review、安全审查 |
| AI辅助性能优化 | SQL优化、代码优化、JVM调优 |
| AI辅助架构决策 | 技术选型、方案评审 |
核心要点:
- 系统设计:AI可以快速生成架构方案,但需要人工审核
- 代码审查:AI擅长发现潜在问题,但需要结合业务理解
- 性能优化:AI能给出优化建议,但需要实际压测验证
- 架构决策:AI提供多维度分析,最终决策仍需人工
下一章我们将学习P6->P7的能力模型构建,明确AI时代的P7技能要求。
第八章 P6→P7——AI时代的工程师能力模型
这一章是整份路线图的核心目标。我们将深入分析大厂P7工程师的核心能力要求,并探讨如何利用AI快速补齐短板,建立差异化竞争优势。
8.1 大厂P7能力模型
8.1.1 P6 vs P7 核心差异
| 维度 | P6(高级工程师) | P7(技术专家/资深工程师) |
|---|---|---|
| 职责边界 | 完成交给的任务 | 独立负责完整系统/业务域 |
| 问题规模 | 单点问题 | 系统性问题 |
| 创新要求 | 业务优化 | 技术创新/业务创新 |
| 影响力 | 小组/模块 | 团队/部门 |
| ** mentorship** | 被指导 | 指导他人 |
| 决策权 | 执行决策 | 架构决策 |
8.1.2 P7核心能力图谱
P7 能力模型
┌─────────────┐
│ 业务理解 │ ★★★★★
└──────┬──────┘
│
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 技术深度 │ │ 系统设计 │ │ 架构能力 │
│ ★★★★☆ │ │ ★★★★★ │ │ ★★★★★ │
└───────────────┘ └───────────────┘ └───────────────┘
│ │ │
│ │ │
▼ ▼ ▼
- 源码理解 - 领域建模 - 技术选型
- 原理掌握 - 架构设计 - 性能优化
- 工程实践 - 数据设计 - 高可用设计
- 性能调优 - API设计 - 安全性设计
┌───────────────────────┼───────────────────────┐
│ │ │
▼ ▼ ▼
┌───────────────┐ ┌───────────────┐ ┌───────────────┐
│ 创新能力 │ │ 影响力 │ │ AI能力 │
│ ★★★★☆ │ │ ★★★★☆ │ │ ★★★★★ │
└───────────────┘ └───────────────┘ └───────────────┘
│ │ │
│ │ │
▼ ▼ ▼
- 问题发现 - 技术传播 - AI辅助编程
- 方案创新 - 跨团队协作 - AI辅助设计
- 技术突破 - 面试招聘 - AI辅助优化
8.2 AI如何放大个人能力
8.2.1 能力放大器模型
AI不是替代你,而是放大你的能力:
AI 能力放大器
传统工作方式:
能力 × 1 = 输出
(个人能力直接产出)
AI辅助工作方式:
(能力 + AI) × 时间 = 输出
(AI放大能力,时间复用)
具体表现:
- 编码效率:3-5倍提升
- 学习速度:2-3倍提升
- 问题排查:2倍提升
- 文档产出:2倍提升
8.2.2 各能力维度的AI增强
| 能力维度 | AI增强方式 | 效果 |
|---|---|---|
| 技术深度 | AI辅助源码阅读、原理分析 | 加速理解 |
| 系统设计 | AI辅助方案设计、架构图生成 | 拓宽思路 |
| 编码能力 | AI代码补全、重构、审查 | 效率提升 |
| 问题排查 | AI辅助日志分析、问题定位 | 快速定位 |
| 文档能力 | AI辅助文档撰写、PRD编写 | 质量提升 |
| 学习能力 | AI辅助知识总结、答疑解惑 | 个性化学习 |
8.2.3 AI时代的差异化竞争
传统竞争维度:
- 技术深度
- 业务理解
- 沟通能力
- 加班能力 ❌
AI时代竞争维度:
- AI工具使用能力 ⭐⭐⭐⭐⭐
- AI辅助决策能力
- 人机协作能力
- AI不可替代的创新能力
结论:32岁+AI能力 = 重新定义职场竞争力
8.3 构建P7能力路径
8.3.1 16周能力提升计划
Week 1-4: AI工具入门
├── 掌握至少2款AI代码助手
├── 建立个人Prompt库
├── 养成AI辅助编程习惯
└── 目标:编码效率提升50%
Week 5-8: AI应用开发
├── 学会调用LLM API
├── 完成1个AI应用项目
├── 理解RAG架构
└── 目标:具备AI应用开发能力
Week 9-12: AI Agent进阶
├── 深入理解Agent原理
├── 掌握LangChain4j
├── 构建自动化工作流
└── 目标:复杂任务自动化
Week 13-16: 能力整合
├── AI辅助系统设计
├── AI辅助Code Review
├── 影响力建设
└── 目标:P7能力模型初具
8.3.2 关键里程碑
| 阶段 | 里程碑 | 验收标准 |
|---|---|---|
| W4 | AI入门 | 日常开发60%使用AI辅助 |
| W8 | AI应用 | 独立完成1个AI应用 |
| W12 | AI Agent | 能构建简单Agent |
| W16 | P7能力 | 可独立负责系统设计 |
8.4 32岁工程师的特殊优势
8.4.1 经验优势
| 优势 | 说明 |
|---|---|
| 业务理解 | 多年业务沉淀,AI难以替代 |
| 问题预判 | 踩过的坑都是财富 |
| 架构直觉 | 见过足够多的系统,形成直觉 |
| 稳定性 | 家庭稳定,工作投入度高 |
8.4.2 策略建议
不要和年轻人比:
- 拼加班 → 输
- 拼新技术速度 → 输
- 拼体力 → 输
要和AI结合:
- AI做重复工作 → 你做决策
- AI生成代码 → 你做架构
- AI搜索答案 → 你做方案
具体行动:
- 每天2小时AI学习,雷打不动
- 每周1个AI辅助项目实践
- 每月输出1篇AI相关技术文章
- 每季度向团队分享AI实践经验
8.5 本章小结
| 核心观点 | 行动建议 |
|---|---|
| P7核心是系统思维 | 用AI辅助处理细节,聚焦架构 |
| AI是能力放大器 | 不是替代,是放大 |
| 32岁是黄金期 | 经验+AI=竞争力 |
| 差异化竞争 | AI能力是新维度 |
P6→P7的核心转变:
- 从"执行者"到"设计者"
- 从"单点"到"系统"
- 从"被指导"到"指导他人"
- 从"技术"到"技术+业务"
AI加速这一转变,让你在更短时间内达成P7能力。
下一章我们将进入实战阶段,制定详细的16周学习计划。
第九章 16周学习路线图
本章是整份路线图的操作指南。我们将16周分为四个阶段,每个阶段有明确的目标、任务和验收标准。
9.1 整体规划
┌─────────────────────────────────────────────────────────────┐
│ 16周学习路线图 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 第一阶段:觉醒(Week 1-4) ████████░░░░░░░░░░░░░░ 25% │
│ │
│ 第二阶段:进阶(Week 5-8) ░░░░░░░░░░████████████ 50% │
│ │
│ 第三阶段:飞跃(Week 9-12) ░░░░░░░░░░░░░░░░░████ 75% │
│ │
│ 第四阶段:蜕变(Week 13-16)░░░░░░░░░░░░░░░░░░░░ 100% │
│ │
└─────────────────────────────────────────────────────────────┘
9.2 第一阶段:觉醒(第1-4周)
目标
- 掌握AI编程辅助工具
- 建立Prompt工程基础
- 养成AI辅助开发习惯
周计划
| 周次 | 主题 | 任务 | 验收标准 |
|---|---|---|---|
| W1 | AI辅助编程全景 | 了解AI编程三个层次,对比主流工具 | 完成工具选型 |
| W2 | Cursor/Windsurf入门 | 安装配置,实战3个Java开发场景 | 日常开发使用AI |
| W3 | Claude Code/Copilot | 掌握至少2款工具的Java开发技巧 | 能用AI生成完整代码 |
| W4 | Prompt工程基础 | 学习Prompt核心要素,构建个人模板库 | 积累20+常用Prompt |
每日任务(每天2小时)
Morning(1小时):
- 30分钟:学习AI工具新功能
- 30分钟:实战练习
Evening(1小时):
- 30分钟:阅读AI开发相关资料
- 30分钟:整理当天学习的Prompt模板
9.3 第二阶段:进阶(第5-8周)
目标
- 掌握LLM API调用
- 完成第一个AI应用
- 理解RAG架构
周计划
| 周次 | 主题 | 任务 | 验收标准 |
|---|---|---|---|
| W5 | Prompt工程进阶 | 复杂任务分解,Few-shot学习 | 能设计复杂业务Prompt |
| W6 | Spring AI入门 | 集成OpenAI/Claude API | 能调用LLM API |
| W7 | Spring AI进阶 | RAG架构,向量数据库集成 | 完成知识库Demo |
| W8 | AI应用实战 | 完成第一个完整AI应用 | 上线1个AI应用 |
项目实战(W8)
推荐项目:智能问答系统
技术栈:Spring Boot + Spring AI + Qdrant + OpenAI
功能:
- 文档上传与向量化
- 语义搜索
- 基于RAG的智能问答
- Web界面
产出:
- 完整的GitHub项目
- 可演示的Demo
- 技术分享PPT
9.4 第三阶段:飞跃(第9-12周)
目标
- 深入理解AI Agent
- 掌握LangChain4j
- 构建自动化工作流
周计划
| 周次 | 主题 | 任务 | 验收标准 |
|---|---|---|---|
| W9 | AI Agent基础 | Agent原理,MCP协议理解 | 能解释Agent工作流程 |
| W10 | LangChain4j | 框架学习,工具定义 | 能构建简单Agent |
| W11 | Code Agent | 构建代码生成Agent | 能自动完成简单任务 |
| W12 | Agent实战 | 智能客服/知识库Agent | 上线1个Agent应用 |
项目实战(W12)
推荐项目:智能客服Agent
技术栈:Spring Boot + LangChain4j + RAG
功能:
- 多轮对话
- 意图识别
- 知识库检索
- 自主工具调用
产出:
- 企业级Agent应用
- 可用于生产环境
9.5 第四阶段:蜕变(第13-16周)
目标
- AI辅助架构设计
- P7能力模型构建
- 影响力建设
周计划
| 周次 | 主题 | 任务 | 验收标准 |
|---|---|---|---|
| W13 | AI辅助Code Review | 代码审查自动化 | 团队Code Review提效50% |
| W14 | AI辅助性能优化 | 性能问题分析 | 完成1个性能优化案例 |
| W15 | P7能力构建 | 架构设计能力 | 能独立设计中等系统 |
| W16 | 总结与输出 | 学习总结,技术分享 | 完成1次技术分享 |
最终产出
| 产出 | 说明 |
|---|---|
| 技能掌握 | AI辅助开发完整能力链 |
| 项目经验 | 2个以上AI应用项目 |
| 技术沉淀 | 100+Prompt模板库 |
| 影响力 | 1次技术分享/文章 |
9.6 每日时间安排
工作日(每天2小时)
20:00-21:00:学习新知识
- 观看教程视频(30分钟)
- 实战练习(30分钟)
21:00-22:00:项目实践
- 继续项目开发
- 解决遇到的问题
周末(每天4小时)
上午(2小时):
- 深度学习(视频/文档)
- 总结本周学习
下午(2小时):
- 项目开发
- 代码优化
9.7 避坑指南
| 坑 | 解决方案 |
|---|---|
| 三分钟热度 | 设定每周固定学习时间,雷打不动 |
| 工具太多 | 精通2款工具即可,不要贪多 |
| 只学不用 | 每天必须在实际项目中使用AI |
| 闭门造车 | 加入学习社群,互相监督 |
| 急于求成 | 按阶段走,不要跳章节 |
9.8 本章小结
| 阶段 | 周期 | 核心能力 | 产出 |
|---|---|---|---|
| 觉醒 | W1-4 | AI工具使用 | 习惯养成 |
| 进阶 | W5-8 | AI应用开发 | 1个项目 |
| 飞跃 | W9-12 | AI Agent | 1个项目 |
| 蜕变 | W13-16 | 综合能力 | 能力模型 |
关键提醒:
- 坚持 > 强度(每天2小时,持续16周)
- 实践 > 理论(必须动手做项目)
- 输出 > 输入(定期分享和总结)
下一章我们将进入资源推荐阶段,提供最优质的学习资料。
第十章 实战项目与资源推荐
这一章整理了最优质的学习资源,包括实战项目、课程、书籍和社区。根据你的偏好(业务方向),推荐的项目会偏重智能客服、知识库等业务场景。
10.1 实战项目推荐
10.1.1 入门级项目
项目1:智能文档问答系统
项目名称:Enterprise Doc Q&A
技术栈:Spring Boot + Spring AI + Elasticsearch + Vue3
难度:⭐⭐
预计时间:1周
功能:
- PDF/Word文档上传
- 文档自动向量化
- 语义搜索
- 基于RAG的问答
- Web管理界面
学习价值:
- 掌握RAG基本流程
- 理解向量数据库
- 熟悉Spring AI
GitHub参考:
- spring-ai-examples
- langchain4j-examples
项目2:AI代码助手插件
项目名称:IDEA AI Assistant Plugin
技术栈:Java + OpenAI API + IntelliJ SDK
难度:⭐⭐
预计时间:1周
功能:
- 选中代码右键解释
- 生成单元测试
- 代码优化建议
- 重构辅助
学习价值:
- 理解AI辅助编程
- 学习IDEA插件开发
- 深入Java语言
GitHub参考:
- intellij-community
- AI Assistant plugins
10.1.2 进阶级项目
项目3:智能客服系统(重点推荐)
项目名称:Intelligent Customer Service
技术栈:Spring Boot + LangChain4j + MySQL + Redis + Vue3
难度:⭐⭐⭐
预计时间:2-3周
功能模块:
1. 多轮对话系统
- 意图识别
- 对话状态管理
- 上下文记忆
2. 知识库管理
- 文档导入
- 自动分块
- 向量化存储
- 相似度检索
3. 问答引擎
- RAG问答
- 意图匹配
- 答案生成
- 来源引用
4. 管理系统
- 知识库管理
- 对话日志
- 数据统计
- 效果优化
架构亮点:
- 对话上下文管理
- 多策略检索
- 答案质量评估
- 可扩展的工具调用
学习价值:
- 完整AI应用开发流程
- Agent基础实现
- 业务场景深度理解
项目4:企业知识库平台
项目名称:Enterprise Knowledge Base
技术栈:Spring Cloud + Spring AI + Milvus + Kafka + Vue3
难度:⭐⭐⭐⭐
预计时间:3-4周
功能模块:
1. 文档管理
- 多格式支持(PDF/Word/PPT/Markdown)
- 自动提取目录结构
- 版本管理
- 权限控制
2. 智能搜索
- 全文搜索
- 向量搜索
- 混合搜索
- 搜索建议
3. 知识推荐
- 基于用户行为推荐
- 基于文档关联推荐
- 个性化推荐
4. 数据分析
- 搜索热度分析
- 用户行为分析
- 知识图谱可视化
架构亮点:
- 微服务架构
- 异步文档处理
- 分布式向量检索
- 实时推荐系统
学习价值:
- 微服务与AI结合
- 大规模数据处理
- 推荐系统基础
10.1.3 高级项目
项目5:代码智能分析平台
项目名称:Code Intelligence Platform
技术栈:Spring Boot + LangChain4j + MyBatis Plus + Vue3
难度:⭐⭐⭐⭐⭐
预计时间:4周+
功能模块:
1. 代码理解
- 代码解析与理解
- 架构分析
- 依赖分析
2. 智能问答
- 基于代码库的问答
- 技术问题解答
- 方案建议
3. 代码审查
- 自动代码审查
- 安全漏洞检测
- 性能问题识别
- 规范检查
4. 文档生成
- 自动生成API文档
- 代码注释生成
- README生成
学习价值:
- 深度理解代码
- Agent高级应用
- 企业级系统设计
10.2 优质课程推荐
10.2.1 AI编程类
| 课程 | 平台 | 价格 | 推荐度 |
|---|---|---|---|
| Prompt Engineering for Developers | DeepLearning.AI | 免费 | ⭐⭐⭐⭐⭐ |
| Building Systems with the ChatGPT API | DeepLearning.AI | 免费 | ⭐⭐⭐⭐⭐ |
| AI For Everyone | DeepLearning.AI | 免费 | ⭐⭐⭐⭐ |
| LangChain & LangGraph 完整指南 | Udemy | $19.99 | ⭐⭐⭐⭐⭐ |
10.2.2 Java AI开发类
| 课程 | 平台 | 价格 | 推荐度 |
|---|---|---|---|
| Spring AI Official Tutorial | Spring.io | 免费 | ⭐⭐⭐⭐⭐ |
| LangChain4j Tutorial | YouTube | 免费 | ⭐⭐⭐⭐ |
| Building AI Applications with Java | Udemy | $19.99 | ⭐⭐⭐⭐ |
10.2.3 系统设计类
| 课程 | 平台 | 价格 | 推荐度 |
|---|---|---|---|
| System Design Interview | Alex Xu | $49 | ⭐⭐⭐⭐⭐ |
| Designing Data-Intensive Applications | O'Reilly | $59 | ⭐⭐⭐⭐⭐ |
10.3 优质书籍
10.3.1 AI/机器学习
| 书名 | 作者 | 评价 |
|---|---|---|
| 《人工智能:一种现代方法》 | Stuart Russell | 经典教材 |
| 《深度学习》 | Ian Goodfellow | 深度学习圣经 |
| 《Hands-On Machine Learning》 | Aurélien Géron | 实践导向 |
10.3.2 LLM/Prompt工程
| 书名 | 作者 | 评价 |
|---|---|---|
| 《Prompt Engineering Guide》 | DAIR.AI | 免费在线 |
| 《The Art of Prompt Engineering》 | Alex Banks | 新书推荐 |
| 《Building LLM Powered Applications》 | Valentina Alto | 实战导向 |
10.3.3 Java/架构
| 书名 | 作者 | 评价 |
|---|---|---|
| 《Effective Java》 | Joshua Bloch | Java必读 |
| 《Architecture Patterns with Python》 | Harry Percival | DDD入门 |
| 《Design Patterns》 | Gang of Four | 经典 |
10.4 社区与资讯
10.4.1 中文社区
| 社区 | 网址 | 说明 |
|---|---|---|
| 掘金 | juejin.cn | 很多AI实践文章 |
| 知乎 | www.zhihu.com | AI讨论 |
| 阿里云开发者社区 | developer.aliyun.com | Spring AI中文 |
| 腾讯云开发者社区 | cloud.tencent.com | AI应用 |
10.4.2 英文社区
| 社区 | 网址 | 说明 |
|---|---|---|
| LangChain Forums | discuss.langchain.com | LangChain讨论 |
| Hacker News | news.ycombinator.com | 技术资讯 |
| Reddit r/LocalLLaMA | reddit.com/r/LocalLLaM… | LLM社区 |
| GitHub Discussions | 各项目官方 | 问题解答 |
10.4.3 Newsletter订阅
| 名称 | 频率 | 内容 |
|---|---|---|
| The Batch | 周报 | AI新闻 |
| TLDR | 日报 | 技术摘要 |
| 阮一峰周报 | 周报 | 技术趋势 |
10.5 工具资源
10.5.1 AI开发工具
| 工具 | 用途 | 网址 |
|---|---|---|
| Cursor | AI代码助手 | cursor.sh |
| Windsurf | AI代码助手 | codeium.com/windsurf |
| Claude Code | AI CLI | anthropic.com/claude-code |
| GitHub Copilot | 代码补全 | github.com/features/copilot |
10.5.2 API服务
| 服务商 | 模型 | 特点 | 网址 |
|---|---|---|---|
| OpenAI | GPT-4o | 生态最强 | platform.openai.com |
| Anthropic | Claude 4 | 代码最强 | anthropic.com |
| Gemini | 多模态 | aistudio.google.com | |
| 阿里云 | 通义千问 | 中文优化 | dashscope.console.aliyun.com |
| 百度 | 文心一言 | 中文优化 | yiyan.baidu.com |
10.5.3 向量数据库
| 数据库 | 类型 | 推荐度 |
|---|---|---|
| Qdrant | 开源 | ⭐⭐⭐⭐⭐ |
| Milvus | 开源 | ⭐⭐⭐⭐ |
| Pinecone | 托管 | ⭐⭐⭐⭐ |
| Weaviate | 开源 | ⭐⭐⭐⭐ |
| Chroma | 轻量 | ⭐⭐⭐ |
10.6 本章小结
| 类别 | 推荐资源 |
|---|---|
| 入门项目 | 智能文档问答、IDEA插件 |
| 进阶项目 | 智能客服系统、知识库平台 |
| 高级项目 | 代码智能分析平台 |
| 必学课程 | Prompt Engineering、Spring AI |
| 必读书籍 | Effective Java、Designing Data-Intensive Applications |
| 必逛社区 | 掘金、LangChain Forums |
项目优先级:
- 智能客服系统(业务方向)
- 企业知识库平台
- 代码分析平台
行动建议:从中选择一个项目,立刻开始。
下一章我们将学习常见问题与避坑指南。
第十一章 常见问题与避坑指南
本章整理了学习AI编程过程中最常见的问题和误区,帮助你少走弯路。这些建议来自众多学习者的实践经验。
11.1 学习认知误区
误区1:AI会替代程序员
误解:
- "AI都这么强了,学Java还有用吗?"
- "以后不需要程序员了"
真相:
- AI是工具,不是替代者
- AI降低的是编程门槛,提升的是能力上限
- 高级工程师的价值反而增加
正确认知:
AI时代程序员价值公式:
价值 = (技术深度 × AI放大) + 业务理解 + 创新能力
不是AI替代你,而是会用AI的人替代不会用AI的人
误区2:必须掌握所有AI工具
误解:
- "Cursor、Copilot、Claude都要学"
- "工具越多越好"
真相:
- 精通2款工具,远胜浅尝10款
- 工具是手段,不是目的
- 适合自己的才是最好的
正确做法:
选择标准:
1. 满足日常工作需求
2. 团队/项目普遍使用
3. 学习成本可接受
推荐组合:
- Cursor(日常开发)+ Claude(高质量代码)
- 或 Windsurf(免费)+ Claude(进阶)
误区3:AI生成的代码可以直接用
误解:
- "AI写的代码肯定没问题"
- "直接复制到项目就行"
真相:
- AI会犯低级错误
- 不理解业务上下文
- 可能引入安全风险
正确做法:
代码审查流程:
1. 理解每一行代码
2. 检查业务逻辑
3. 运行单元测试
4. 检查安全漏洞
5. 性能评估
6. 才能提交
11.2 学习方法误区
误区4:只学不用
表现:
- 看了很多教程,就是不动手
- 收藏了无数资源,从未打开
- 学完就忘,没有输出
后果:
- 知识无法内化
- 技能无法提升
- 自信心受挫
正确做法:
每日实践原则:
1. 每天至少1小时实际使用AI编程
2. 每周完成1个小功能
3. 每月产出1个项目模块
4. 定期输出技术文章
误区5:急于求成
表现:
- 一周想学完所有内容
- 跳着看,不扎实
- 基础没打好就追高级内容
后果:
- 知识体系不完整
- 遇到问题无法解决
- 信心受挫,放弃学习
正确做法:
学习节奏:
- 基础阶段:4周(不能少)
- 进阶阶段:4周(稳扎稳打)
- 高级阶段:4周(循序渐进)
- 实战阶段:4周(项目巩固)
每个阶段必须达标才能进入下一阶段
误区6:闭门造车
表现:
- 一个人闷头学习
- 不交流,不分享
- 遇到问题自己扛
后果:
- 问题无法及时解决
- 学习效率低
- 缺乏反馈和动力
正确做法:
加入学习社群:
1. 找到志同道合的学习者
2. 每周至少讨论1次
3. 分享学习心得
4. 互相Code Review
5. 组队做项目
11.3 技术实践误区
误区7:忽视基础
表现:
- 直接学AI,不学Java
- 基础不牢就追新
- "底层原理不重要"
后果:
- AI工具使用效果差
- 无法深入理解问题
- 职业发展受限
正确认识:
Java基础 + AI = 王炸
Java基础 × AI = 废铁
AI放大的是能力,不是弥补缺陷
误区8:不关注AI局限性
表现:
- 盲目信任AI
- 不验证AI输出
- 忽视AI的边界
后果:
- 引入bug
- 安全漏洞
- 生产事故
AI局限性认知:
AI不擅长的领域:
1. 最新的技术(2024后的知识)
2. 特定业务逻辑
3. 安全性要求极高的代码
4. 需要推理的复杂问题
5. 有歧义的需求
AI常见问题:
1. 会编造不存在的API
2. 会忽略边界条件
3. 不理解你的具体业务
4. 上下文理解有限
11.4 资源选择困惑
问题1:英文还是中文?
困惑:
- 英文资料看不懂
- 中文资料怕过时
建议:
优先级:
1. 英文官方文档(最准确)
2. 英文教程(最及时)
3. 中文高质量翻译(方便理解)
4. 中文博客(参考为主)
学习方法:
- 初期:配合中文理解
- 中期:尝试阅读英文
- 后期:以英文为主
问题2:课程还是书籍?
困惑:
- 课程太贵
- 书籍太慢
- 不知道选什么
建议:
选择标准:
- 新兴领域(AI):视频课程优先(更新快)
- 成熟领域(Java):书籍优先(经典)
推荐组合:
- 入门:视频课程
- 进阶:官方文档 + 书籍
- 实战:开源项目 + 教程
问题3:学什么框架?
困惑:
- LangChain4j vs Spring AI
- 版本更新太快
- 怕学错了
建议:
框架选择原则:
1. 官方支持力度
2. 社区活跃度
3. 与现有技术栈匹配
4. 学习成本
Java AI框架推荐:
- 应用开发:Spring AI(与Spring生态无缝集成)
- Agent开发:LangChain4j(功能最全)
- 入门学习:都可以,原理相通
11.5 实践中的坑
坑1:API Key泄露
问题:
- 把API Key提交到GitHub
- 本地调试时泄露
正确做法:
// 错误 ❌
@Value("${openai.api.key}")
private String apiKey; // 硬编码
// 正确 ✅
@Value("${OPENAI_API_KEY}") // 环境变量
private String apiKey;
// .env文件(不要提交)
OPENAI_API_KEY=sk-xxx
坑2:成本失控
问题:
- API调用量爆炸
- 费用超出预期
正确做法:
// 1. 设置预算限制
@Bean
public ChatLanguageModel model() {
return OpenAiChatModel.builder()
.apiKey(apiKey)
.maxToken(1000) // 限制输出
.temperature(0.7)
.build();
}
// 2. 添加用量监控
@Scheduled(cron = "0 0 0 * * ?")
public void monitorUsage() {
// 统计每日调用量
// 超过阈值报警
}
// 3. 缓存策略
@Cacheable("chat-responses")
public String chat(String prompt) { ... }
坑3:数据安全问题
问题:
- 敏感数据上传到第三方API
- 合规风险
正确做法:
敏感数据处理原则:
1. 脱敏后再上传
2. 使用本地部署模型
3. 明确数据处理范围
4. 遵守GDPR等法规
企业级方案:
- 使用私有化部署
- 数据不出内网
- 审计日志
11.6 本章小结
| 类别 | 核心提醒 |
|---|---|
| 认知 | AI是放大器,不是替代者 |
| 方法 | 精通过2款工具,实践优先 |
| 技术 | Java基础不能丢 |
| 资源 | 英文为主,官方优先 |
| 实践 | 审查代码,控制成本,注意安全 |
最核心的一句话:
每天2小时,持续16周,比任何技巧都重要。
下一章是最后一章,我们将总结整个路线图,并提供持续成长的建议。
第十二章 结语与持续成长
12.1 路线图总结
经过16周的学习,你将掌握:
┌─────────────────────────────────────────────────────────────┐
│ 能力矩阵总结 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 工具能力 │ AI代码助手使用 │ Cursor/Windsurf │
│ ├───────────────│ Claude Code │ Copilot │
│ │ │ │
│ 应用开发能力 │ LLM API集成 │ Spring AI │
│ ├───────────────│ RAG架构实现 │ 向量数据库 │
│ │ │ │
│ Agent能力 │ Agent原理理解 │ LangChain4j │
│ ├───────────────│ 工具定义 │ MCP协议 │
│ │ │ │
│ 架构能力 │ AI辅助系统设计 │ 方案评审 │
│ ├───────────────│ AI辅助Code Review │ 性能优化 │
│ │ │ │
│ P7核心能力 │ 系统思维 │ 业务理解 │
│ ├───────────────│ 架构决策 │ 影响力 │
│ │ │ │
└─────────────────────────────────────────────────────────────┘
12.2 核心要点回顾
| 阶段 | 核心收获 |
|---|---|
| 第一阶段 | 掌握AI编程工具,养成AI辅助习惯 |
| 第二阶段 | 能独立开发AI应用(知识库、问答) |
| 第三阶段 | 能构建AI Agent,实现自动化 |
| 第四阶段 | 具备P7级综合能力 |
12.3 长期成长建议
1. 持续学习
AI领域变化极快,保持学习的习惯:
每月必做:
- 关注AI领域新闻
- 学习新出的工具/框架
- 参加技术分享
- 阅读论文摘要
2. 经验输出
教是最好的学:
输出方式:
- 技术博客(掘金、知乎)
- 开源项目
- 内部技术分享
- 社区问答
3. 项目积累
用项目证明能力:
项目选择:
- 解决实际问题
- 业务价值优先
- 可展示、可落地
- 持续迭代优化
4. 社群参与
找到同路人:
社群价值:
- 信息获取
- 问题解答
- 资源共享
- 职业机会
12.4 与读者共勉
32岁,不是职业生涯的终点,而是新阶段的起点。
致每一位32岁的Java工程师:
你写过无数行代码
踩过无数个坑
积累无数经验
这些,都是AI无法替代的财富
现在,AI给了你一个机会
一个放大能力
一个跨越阶层
一个重新定义价值的机会
每天2小时
16周
100多天
做难而正确的事
做时间的朋友
愿你在AI时代
遇见更好的自己
与君共勉
12.5 最后的行动
现在,立刻,马上:
1. 打开电脑
2. 注册一个AI账号
3. 安装一款AI代码助手
4. 开始你的第一个AI辅助编程
期待16周后
看到一个全新的你
加油!
附录
附录A:常用Prompt模板
[内容待补充]
附录B:术语表
| 术语 | 解释 |
|---|---|
| LLM | 大语言模型 |
| RAG | 检索增强生成 |
| Agent | 智能体 |
| Prompt | 提示词 |
| Token | 文本最小单元 |
| Compressed Oops | 压缩指针 |
| MCP | 模型上下文协议 |