完整、可执行、概念与实战紧密结合** 的 《Java 工程师 AI Agent 学习计划(8 天)》 ,专为 面向阿里云 + 通义千问 + 纯 Java 技术栈 的开发者设计。
✅ 不涉及模型训练
✅ 不依赖 Python
✅ 基于真实开源项目
langchain4j✅ 每天包含:核心概念 + 动手实战 + 输出成果
📘 Java 工程师 AI Agent 学习计划(8 天 · 概念 + 实战一体化)
🎯 最终目标
构建一个 支持 ReAct 决策、RAG 检索、工具调用、多轮迭代 的 智能测试用例生成系统,部署在本地或阿里云。
📅 详细日计划
第1天:理解 AI Agent 核心概念 + 环境搭建
🔍 核心概念
- AI Agent 是什么? 能自主决策、调用工具、完成任务的智能程序(不是聊天机器人)。
- ReAct 是什么? "推理(Reasoning)→ 行动(Acting)"交替的决策模式。
- 为什么需要 RAG? LLM 不知道你的私有规则(如"用户等级只能是1~5"),需从知识库检索补充。
🛠️ 实战任务
-
注册 阿里云账号,进入 DashScope 控制台
-
获取 API Key(新用户送免费额度)
-
Clone 项目:
bashgit clone https://github.com/langchain4j/langchain4j-examples.git cd langchain4j-examples/dashscope-examples -
在
src/main/resources/application.properties中添加:propertiesdashscope.api-key=sk-xxxxxxxxxxxxxx
📤 输出成果
- ✅ 可运行的 Java 开发环境
- ✅ 概念笔记(手写或 Markdown):解释 Agent / ReAct / RAG 的区别与联系
第2天:跑通第一个 ReAct Agent
🔍 核心概念
- ReAct 循环三要素 :
- Thought:LLM 的推理("我需要查时间")
- Action :调用哪个工具(
get_current_time) - Observation:工具返回结果("2024-06-15 10:00")
🛠️ 实战任务
- 运行
DashScopeReActExample.java - 修改问题为:
"现在几点?北京天气如何?"(需提前添加天气工具) - 观察控制台输出,识别 Thought/Action/Observation
- 阅读源码:
ReActAgent.java(GitHub 链接)
📤 输出成果
- ✅ 成功运行的日志截图
- ✅ 手绘 ReAct 流程图(标注数据流向)
第3天:自定义工具(Tool Use)
🔍 核心概念
- 工具(Tool):Agent 的"手脚",用于执行具体操作
- @Tool 注解:声明方法可被 LLM 调用
- Protocol(协议):工具的输入/输出必须结构化(JSON Schema)
🛠️ 实战任务
-
创建新类
TestRuleTool.java:javapublic class TestRuleTool { @Tool("查询字段的测试规则,例如手机号必须为11位数字") public String queryRule(@P("field") String field) { if ("mobile".equals(field)) { return "手机号必须为11位数字,不能包含字母"; } return "无特殊规则"; } } -
在
DashScopeReActExample.java中注册该工具:javaReActAgent agent = ReActAgent.builder() .chatLanguageModel(chatModel) .tools(new DateTimeTool(), new TestRuleTool()) // ← 注册 .build(); -
测试提问:
"如何测试 mobile 字段?"
📤 输出成果
- ✅ 自定义 Tool 类
- ✅ 工具被成功调用的日志
第4天:集成 RAG(本地向量检索)
🔍 核心概念
- RAG = Retrieve + Augment + Generate
- Embedding :将文本转为向量(使用
text-embedding-v2) - 向量检索:计算相似度,返回最相关知识
🛠️ 实战任务
-
添加 Chroma 依赖到
pom.xml:xml<dependency> <groupId>dev.langchain4j</groupId> <artifactId>langchain4j-chroma-spring-boot-starter</artifactId> <version>0.30.0</version> </dependency> -
准备知识文件
test_knowledge.txt:手机号测试:11位数字,不能为空 用户名测试:长度3-20,不能含特殊字符 -
编写
RagIngestor.java,将文本存入 Chroma -
创建
RagTool.java:java@Tool("从历史知识库中检索相关测试规范") public String searchKnowledge(@P("query") String query) { List<TextSegment> results = chromaStore.findRelevant(query, 2); return results.stream().map(TextSegment::text).collect(Collectors.joining("\n")); }
📤 输出成果
- ✅ 本地 Chroma 向量库
- ✅
/rag-search接口(可独立测试)
第5天:构建测试用例生成原型
🔍 核心概念
- 任务导向:Agent 的目标是生成高质量测试用例
- Prompt 工程:如何引导 LLM 输出结构化 YAML
🛠️ 实战任务
-
定义输入格式(JSON):
json{ "fields": { "username": { "type": "string", "required": true } } } -
创建
TestCaseGeneratorTool.java:java@Tool("根据字段定义和规则生成测试用例(YAML格式)") public String generateTestCases( @P("fieldSpec") String fieldSpec, @P("rules") String rules ) { // 调用 Qwen,Prompt 包含 fieldSpec + rules // 要求输出:- input: {username: ""}, expected: "400" } -
组装完整流程:
- 用户输入接口定义
- Agent 调用
RagTool获取规则 - Agent 调用
TestCaseGeneratorTool生成用例
📤 输出成果
-
✅ 输入 JSON → 输出 YAML 测试用例
-
✅ 示例:
yaml- input: { username: "" } expected: "用户名不能为空"
第6天:多轮迭代与质量检查
🔍 核心概念
- 覆盖度驱动迭代:未覆盖场景 → 继续生成
- 终止条件:覆盖率达阈值 或 超过最大轮数
🛠️ 实战任务
-
创建
CoverageCheckerTool.java:javapublic double calculateCoverage(String generatedCases, String interfaceSpec) { // 解析已生成用例,统计覆盖的字段组合比例 return 0.75; // 示例 } -
修改主流程为循环:
javaint iterations = 0; while (iterations < 5 && coverage < 0.9) { // ReAct 生成一批用例 // 调用 CoverageChecker iterations++; } -
添加
DedupTool:用 Set 去重相似用例
📤 输出成果
- ✅ 支持多轮生成的 Agent
- ✅ 覆盖率报告(如 "共生成 12 条,覆盖 92%")
第7天:工程化抽象(MCP 思想落地)
🔍 核心概念
- MCP 架构 :
- Model:LLM 调用封装
- Context:任务状态管理
- Protocol:工具接口规范
🛠️ 实战任务
-
抽象
LlmClient接口,实现DashScopeClient -
创建
AgentContext类:javapublic class AgentContext { private String inputSpec; private List<TestCase> generatedCases; private double coverage; // getters/setters } -
工具统一注册到
ToolRegistry -
配置外部化(
application.yml)
📤 输出成果
-
✅ 清晰的包结构:
com.example.agent ├── model/ # LLM 封装 ├── context/ # 状态管理 ├── tool/ # 工具实现 └── service/ # ReAct 引擎
第8天:整合 & 扩展
🔍 核心概念
- 端到端闭环:从输入到输出,可被团队使用
- 可扩展性:新增工具无需改核心逻辑
🛠️ 实战任务
-
提供 REST API:
java@PostMapping("/generate-test-cases") public ResponseEntity<List<TestCase>> generate(@RequestBody InterfaceSpec spec) { return agent.run(spec); } -
(可选)部署到阿里云 ECS 或函数计算
-
编写 README.md,说明如何使用
📤 输出成果
- ✅ 可运行的 Spring Boot 服务
- ✅ 完整项目代码(GitHub 仓库)
- ✅ 演示视频或截图(输入 → 输出)
📦 附:技术栈清单
| 功能 | 技术 |
|---|---|
| LLM 调用 | 阿里云 DashScope SDK (langchain4j-dashscope) |
| 向量库 | Chroma(本地) / 阿里云 OpenSearch(生产) |
| Web 框架 | Spring Boot |
| 构建工具 | Maven |
| 代码规范 | Java 17+, Lombok(可选) |
✅ 下一步行动
- 今天就执行第1天任务:获取 API Key + clone 项目
- 加入 langchain4j 社区 :GitHub Discussions
- 遇到问题? 我可提供:
- 完整代码模板
- 阿里云部署指南
- 测试用例生成 Prompt 示例
祝你学习顺利,8 天后你将拥有自己的 Java 版 AI Agent!🚀