🤖 系列:Java工程师转AI Agent 3个月学习计划 👤 作者:宸丶一 | 28岁Java程序员,规划狂魔,正在被AI Agent按头学习 🎯 今日目标: 理解Agent核心架构、工具调用机制、错误处理策略 💬 个人格言: 代码改不改变世界我不知道,但先让我准时下班。
前言
大家好,我是宸一,一个28岁的Java程序员。
今天是第4天,学习内容是:Agent核心架构全解析。
前三天我们学了:
- Day 1:大模型API基础
- Day 2:LangChain与工具调用
- Day 3:记忆系统与向量数据库
今天要把这些串起来,看看一个完整的Agent到底是怎么工作的。
这次的学习方式有点不一样------我用的是"1对1问答式"学习。
什么意思?就是我问AI老师问题,它秒回我,我再追问,它再解答。不像传统学习那样"看视频→做笔记→忘了",而是"问→答→理解→追问→深入"。
下面我把今天的核心内容整理出来,全是问答中碰撞出来的干货。
一、Agent三元组:规划、工具、记忆
1.1 最简模型
Agent的本质就是三个核心模块:
1.2 用后端思维理解
| Agent概念 | Java后端对应 | 说明 |
|---|---|---|
| Planning | Service层业务逻辑 | 拆解任务、决定执行流程 |
| Action | 调用外部API/工具类 | 执行具体操作 |
| Memory | 数据库 + 缓存 | 存储历史和上下文 |
这就是我们天天干的事儿:
- 接收请求 → 理解用户意图
- 查数据库 → 获取历史上下文
- 执行业务逻辑 → 调用各种Service
- 返回结果 → 生成回答
二、系统提示词:全局变量
2.1 什么是System Prompt?
系统提示词就是Agent的"人设",一次创建,全程不变。
python
# 就像Java中的常量
public static final String ROLE = "再战Java工程师的28岁程序员";
# 或者Python中的配置
SYSTEM_PROMPT = """
你是一个正在学习AI Agent的Java工程师,名叫宸一。
你的特点是:用后端思维理解AI概念。
"""
2.2 为什么重要?
System Prompt决定了Agent的"性格"和"能力边界":
sql
没有System Prompt的Agent:
用户:你是谁?
Agent:我是一个AI助手
有System Prompt的Agent:
用户:你是谁?
Agent:我是宸一,一个28岁的Java程序员,正在学习AI Agent
2.3 用后端思维理解
System Prompt = 全局配置 = CONFIG对象
java
// Java中我们这样写
@Configuration
public class AgentConfig {
@Value("${agent.role}")
private String role; // "再战Java工程师"
@Value("${agent.max_history}")
private int maxHistory; // 10
}
一次创建,全程使用,不会改变。
三、对话历史:滑动窗口
3.1 为什么需要滑动窗口?
大模型的上下文窗口有限,不能无限存储对话历史。
3.2 实现方式
python
from collections import deque
class ConversationHistory:
def __init__(self, max_size=10):
# 双向队列,两端都是O(1)操作
self.history = deque(maxlen=max_size)
def add(self, role, content):
"""添加新对话,自动淘汰最旧的"""
self.history.append({
"role": role,
"content": content
})
def get_recent(self, n=5):
"""获取最近n轮对话"""
return list(self.history)[-n:]
3.3 用后端思维理解
滑动窗口 = 固定大小的环形缓冲区
scss
┌─────────────────────────────────────────────────────────┐
│ conversation_history (maxlen=10) │
├─────────────────────────────────────────────────────────┤
│ [0] 最旧 → 新消息插入时自动淘汰 │
│ [1] ... │
│ ... │
│ [8] ... │
│ [9] 最新 ← 新消息插入这里 │
└─────────────────────────────────────────────────────────┘
数据结构选择:
- 数组:O(n)删除头部,不推荐
- 链表:O(1)删除头部,但Python没有原生支持
- deque:最佳选择!两端O(1)操作
四、工具调用:四步走
4.1 完整流程
4.2 用后端思维理解
工具调用 = 策略模式 + 工厂模式
java
// 策略接口
public interface Tool {
String getName();
String getDescription();
Object execute(Map<String, Object> params);
}
// 工具注册表(工厂)
public class ToolRegistry {
private Map<String, Tool> tools = new HashMap<>();
public void register(Tool tool) {
tools.put(tool.getName(), tool);
}
public Tool findByName(String name) {
return tools.get(name);
}
}
// 具体工具
public class WeatherTool implements Tool {
@Override
public Object execute(Map<String, Object> params) {
String city = (String) params.get("city");
// 调用天气API
return weatherApi.getWeather(city);
}
}
4.3 两种工具选择方式
| 方式 | 原理 | 优点 | 缺点 |
|---|---|---|---|
| 向量匹配 | 语义相似度搜索 | 灵活,能处理模糊表达 | 需要向量数据库 |
| 大模型直接选择 | 把工具列表塞给LLM | 简单,LLM本身就懂语义 | 工具太多时prompt很长 |
现在主流是方式2(OpenAI的Function Calling就是这个原理):
python
# 把工具描述直接给大模型
prompt = f"""
你有以下工具可用:
1. get_weather - 查询指定城市的天气
2. search_web - 搜索网页信息
用户问题:{user_query}
请选择合适的工具并提取参数。
"""
五、错误处理:三板斧
5.1 完整流程
5.2 三板斧总结
| 策略 | 术语 | 说明 |
|---|---|---|
| 重试3次 | Retry with Backoff | 给系统恢复时间 |
| 失败换工具 | Fallback Strategy | 尝试备选方案 |
| 直接摊牌 | Graceful Degradation | 诚实告诉用户 |
5.3 用后端思维理解
这就是我们熟悉的异常处理:
java
public String getWeather(String city) {
// 1. 重试3次
for (int i = 0; i < 3; i++) {
try {
return weatherApi.getWeather(city);
} catch (Exception e) {
if (i == 2) break; // 最后一次失败
Thread.sleep(1000 * (i + 1)); // 指数退避
}
}
// 2. 尝试备选方案
try {
return searchWeb(city + "天气");
} catch (Exception e) {
// 备选也失败了
}
// 3. 兜底
return "抱歉,当前网络异常,请稍后再试";
}
六、今日收获
6.1 核心概念对照表
| AI概念 | Java后端对应 | 本质 |
|---|---|---|
| System Prompt | 全局配置/常量 | 一次创建,全程不变 |
| 对话历史 | 滑动窗口/deque | 只保留最近N轮 |
| 工具调用 | 策略模式+工厂模式 | 注册→匹配→执行 |
| 错误处理 | try-catch+重试 | 重试→降级→兜底 |
| Agent三元组 | Controller+Service+DAO | 规划+工具+记忆 |
6.2 1对1问答式学习的优势
这次学习我采用了"问答式",发现和传统学习完全不同:
| 传统学习 | 问答式学习 |
|---|---|
| 看视频/文章 | 问问题 |
| 被动接收 | 主动探索 |
| 有问题先记下 | 问题秒回,即时解决 |
| 学完才能实践 | 边学边问边理解 |
| 容易走神 | 保持专注 |
举个例子:
arduino
我问:系统提示词是什么?
AI答:就是Agent的人设,类似全局变量
我追问:那对话历史呢?
AI答:滑动窗口,只保留最近10轮
我再追问:工具调用怎么知道调哪个?
AI答:语义匹配,向量相似度搜索
每个问题都是秒回,不用等,不用查资料
这种"即时反馈"让学习效率翻倍
6.3 学习感悟
AI Agent的学习曲线其实没有想象中陡峭。
作为Java工程师,我们已经有很好的工程基础:
- 理解API调用 → 理解大模型接口
- 理解数据库 → 理解向量数据库
- 理解缓存 → 理解记忆系统
- 理解设计模式 → 理解Agent架构
- 理解异常处理 → 理解错误重试
关键是要用熟悉的视角去理解新概念。
七、明日计划
按照学习计划,明天要:
- 动手实现一个迷你Agent
- 把今天学到的架构落地成代码
- 继续用后端思维拆解AI概念
八、写在最后
学AI不难,难的是坚持。
作为一个"规划狂魔",我太了解那种"规划完就满足"的感觉了。
但这次不一样,我有AI老师陪我学,有问题随时问,有答案即时给。
如果你也是Java工程师,想转AI Agent,欢迎关注我的系列文章。
我们一起,用后端思维,拆解AI世界。
📌 系列目录
- Day 1:环境搭建与大模型API基础
- Day 2:LangChain核心与工具调用
- Day 3:记忆系统与向量数据库
- Day 4:Agent核心架构全解析(本文)
- Day 5:动手实现迷你Agent(即将更新)
标签: #AI Agent #Java工程师 #Agent架构 #工具调用 #错误处理 #学习笔记 #Hermes Agent #1对1学习
关于作者: 宸丶一,28岁Java程序员,规划狂魔,正在用AI学AI。
💬 格言: "代码改不改变世界我不知道,但先让我准时下班。"
🎯 目标: 3个月转AI Agent,用后端思维拆解AI世界。
声明: 本文为原创学习笔记,如需转载请注明出处。