游乐游手机版
首页/AI教程/文章详情

后端思维拆解Agent核心架构三元组工具调用错误处理

时间:2026-06-04 17:38
Agent核心架构由规划、工具、记忆三元组构成。系统提示词作为全局配置,对话历史采用滑动窗口管理。工具调用分四步:注册、语义匹配、参数提取、执行。错误处理采用重试、备选方案、直接摊牌三策略。

前言

大家好,我是宸一,一位28岁的Java后端开发工程师。

Day 4:用后端思维拆解Agent核心架构——三元组、工具调用、错误处理

今天进入学习计划的第4天,我们将深入剖析Agent的核心架构。

前三天我们已经完成了以下基础学习:

  • Day 1:大模型API基础
  • Day 2:LangChain与工具调用
  • Day 3:记忆系统与向量数据库

今天的目标是将这些分散的知识点串联起来,从整体上理解一个完整Agent的工作机制。

本次学习采用了“1对1问答式”交互方法,即直接向AI老师提问,立即获得回复,并通过持续追问来深化理解。相比传统的“观看视频→记录笔记→逐渐遗忘”模式,这种“提问→回答→理解→再追问→再深入”的方式能带来更好的学习效果。以下内容是今天通过问答形式碰撞出的核心干货。

一、Agent三元组:规划、工具、记忆

1.1 最简模型

一个Agent的核心功能可以抽象为三个基本模块:

flowchart LRUser["? 用户"]Agent["? Agent"]Planning["? Planning"]Action["? Action"]Memory["? Memory"]User --> AgentAgent --> PlanningPlanning --> ActionAction --> MemoryMemory --> PlanningPlanning --> Result["✅ 输出结果"]classDef main fill:#3B82F6,color:white,stroke:noneclassDef agent fill:#111827,color:white,stroke:noneclassDef result fill:#10B981,color:white,stroke:noneclass Planning,Action,Memory mainclass Agent agentclass Result result

1.2 后端开发视角的理解

Agent概念Java后端对应说明
PlanningService层业务逻辑负责任务拆解,定义执行流程
Action调用外部API/工具类执行具体的功能操作
Memory数据库 + 缓存存储历史记录与上下文信息

这其实就是后端工程师日常的工作流程:

  1. 接收用户请求 → 理解其意图
  2. 查询数据库 → 获取历史对话上下文
  3. 执行核心业务逻辑 → 调用各类Service
  4. 返回最终结果 → 生成并输出回答

二、系统提示词:全局变量

2.1 什么是System Prompt?

系统提示词(System Prompt)相当于Agent的“人设”或“角色定义”,在对话过程中一次性设定,全程保持不变。

# 就像Java中的全局常量public static final String ROLE = "再战Ja va工程师的28岁程序员";# 或者Python中的配置项SYSTEM_PROMPT = """你是一个正在学习AI Agent的Ja va工程师,名叫宸一。你的特点是:用后端思维理解AI概念。"""

2.2 它的重要性

System Prompt决定了Agent的“性格”和“能力范围”:

没有System Prompt的Agent:用户:你是谁?Agent:我是一个AI助手有System Prompt的Agent:用户:你是谁?Agent:我是宸一,一个28岁的Ja va程序员,正在学习AI Agent

2.3 后端开发视角的理解

System Prompt就像全局配置对象或应用程序常量。

// Java中类似全局配置管理@Configurationpublic class AgentConfig {@Value("${agent.role}")private String role;// "再战Ja va工程师"@Value("${agent.max_history}")private int maxHistory;// 10}

它仅需初始化一次,在整个会话生命周期内都不会改变。

三、对话历史:滑动窗口

3.1 为什么需要滑动窗口策略?

由于大模型的上下文窗口存在容量限制,无法无限期地保留所有历史对话。

flowchart LRclassDef problem fill:#FFEBEE,stroke:#C62828,color:#B71C1C,stroke-width:2pxclassDef solution fill:#E8F5E9,stroke:#2E7D32,color:#1B5E20,stroke-width:2pxclassDef node fill:#FFFFFF,stroke:#90A4AE,stroke-width:1pxsubgraph Problem["❌ 问题"]P1["用户聊了100轮对话"]P2["全部塞给大模型"]P3["Token爆炸 ?
费用爆炸 ?"]P1 --> P2 --> P3class P1,P2,P3 nodeendsubgraph Solution["✅ 解决方案"]S1["100轮对话"]S2["滑动窗口
只保留最近10轮"]S3["Token可控 ✅
费用可控 ✅"]S1 --> S2 --> S3class S1,S2,S3 nodeendProblem -.->|采用| Solutionclass Problem problemclass Solution solution

3.2 实现方案

from collections import dequeclass 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 后端开发视角的理解

滑动窗口本质上是一个固定大小的环形缓冲区。

┌─────────────────────────────────────────────────────────┐│conversation_history (maxlen=10) │├─────────────────────────────────────────────────────────┤│ [0] 最旧条目 → 新消息加入时自动移除 ││ [1] ... ││ ... ││ [8] ... ││ [9] 最新条目 ← 新消息追加至此 │└─────────────────────────────────────────────────────────┘数据结构选型分析:- 数组:头部删除为O(n),性能较差,不推荐- 链表:头部删除为O(1),但Python中缺乏原生高效实现- deque:最优选择!支持两端O(1)操作

四、工具调用:四步流程

4.1 完整执行流程

flowchart TDclassDef start fill:#1E3A5F,stroke:#0D47A1,color:#FFFFFF,stroke-width:2pxclassDef answer fill:#2E7D32,stroke:#1B5E20,color:#FFFFFF,stroke-width:2pxclassDef step fill:#E3F2FD,stroke:#1565C0,color:#1565C0,stroke-width:2pxclassDef node fill:#FFFFFF,stroke:#90A4AE,stroke-width:1pxclassDef success fill:#C8E6C9,stroke:#388E3C,stroke-width:1pxclassDef fail fill:#FFCDD2,stroke:#D32F2F,stroke-width:1pxStart["? 用户输入
帮我查一下明天北京天气"]class Start startsubgraph Step1["第1步:工具注册表"]TR["? get_weather / search_web"]class TR nodeendsubgraph Step2["第2步:语义匹配"]SM["? 意图分析"]SM1["查询天气 → 0.95"]SM2["搜索网页 → 0.32"]SM --> SM1SM --> SM2class SM nodeclass SM1 successclass SM2 failendsubgraph Step3["第3步:参数提取"]PE["? NLP解析"]PE1["city: 北京"]PE2["date: 明天"]PE --> PE1PE --> PE2class PE nodeclass PE1,PE2 nodeendsubgraph Step4["第4步:调用执行"]EX["⚡ get_weather(北京, 明天)"]RES["? 25°C / 晴"]EX --> RESclass EX nodeclass RES successendAnswer["? 明天北京天气晴,25°C,适合出行~"]class Answer answerStart --> Step1 --> Step2 --> Step3 --> Step4 --> Answerclass Step1,Step2,Step3,Step4 step

4.2 后端开发视角的理解

工具调用机制类似于结合了策略模式与工厂模式的设计。

// 定义策略接口public interface Tool {String getName();String getDescription();Object execute(Map params);}// 创建工具注册表(工厂角色)public class ToolRegistry {private Map 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 {@Overridepublic Object execute(Map params) {String city = (String) params.get("city");// 实际调用外部天气APIreturn weatherApi.getWeather(city);}}

4.3 两种工具选择方式对比

方式原理优点缺点
向量匹配基于语义相似度进行搜索灵活性高,能处理模糊表达需要部署向量数据库
大模型直接选择将工具描述列表输入给LLM实现简单,LLM本身掌握语义工具数量过多会导致Prompt过长

目前业界主流采用方式2(OpenAI的Function Calling即基于此原理):

# 将工具描述直接提供给大模型prompt = f"""你有以下工具可用:1. get_weather - 查询指定城市的天气2. search_web - 搜索网页信息用户问题:{user_query}请选择合适的工具并提取参数。"""

五、错误处理机制:三板斧

5.1 完整处理流程

flowchart TDclassDef start fill:#1E3A5F,stroke:#0D47A1,color:#FFFFFF,stroke-width:2pxclassDef success fill:#2E7D32,stroke:#1B5E20,color:#FFFFFF,stroke-width:2pxclassDef fail fill:#C62828,stroke:#B71C1C,color:#FFFFFF,stroke-width:2pxclassDef retry fill:#F57C00,stroke:#E65100,color:#FFFFFF,stroke-width:1pxclassDef fallback fill:#7B1FA2,stroke:#4A148C,color:#FFFFFF,stroke-width:1pxclassDef decision fill:#FFFFFF,stroke:#90A4AE,stroke-width:2pxStart["? 查一下东京天气"]class Start startR1["? 第1次调用
get_weather(东京)"]D1{"成功?"}class R1 retryclass D1 decisionR2["? 第2次调用"]D2{"成功?"}class R2 retryclass D2 decisionR3["? 第3次调用"]D3{"成功?"}class R3 retryclass D3 decisionFB["? 备选方案
search_web(东京天气)"]D4{"成功?"}class FB fallbackclass D4 decisionGD["⚠️ 兜底
网络异常,请稍后再试"]OK["✅ 返回结果"]class GD failclass OK successStart --> R1 --> D1D1 -->|是| OKD1 -->|否| R2 --> D2D2 -->|是| OKD2 -->|否| R3 --> D3D3 -->|是| OKD3 -->|否| FB --> D4D4 -->|是| OKD4 -->|否| GD

5.2 三板斧策略总结

策略术语说明
重试3次Retry with Backoff给予系统恢复时间
失败后切换工具Fallback Strategy尝试备用方案
直接告知用户Graceful Degradation诚实地向用户说明情况

5.3 后端开发视角的理解

这与后端工程师熟悉的异常处理逻辑完全一致:

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 核心概念对照表

graph LRclassDef root fill:#1E3A5F,stroke:#0D47A1,color:#FFFFFF,stroke-width:2pxclassDef branch fill:#E3F2FD,stroke:#1565C0,color:#1565C0,stroke-width:1pxclassDef leaf fill:#F5F7FA,stroke:#90A4AE,color:#37474FRoot["Agent核心架构"]class Root rootRoot --> P["System Prompt
全局配置/常量"]Root --> H["对话历史
滑动窗口/deque"]Root --> T["工具调用
策略模式+工厂模式"]Root --> E["错误处理
try-catch+重试"]Root --> A["Agent三元组
Controller+Service+DAO"]class P,H,T,E,A branch

AI概念Java后端对应本质
System Prompt全局配置/常量仅初始化一次,全程不变
对话历史滑动窗口/deque只保留最近的N轮对话
工具调用策略模式+工厂模式注册→匹配→执行
错误处理try-catch+重试机制重试→降级→兜底
Agent三元组Controller+Service+DAO规划+工具+记忆

6.2 1对1问答式学习的优势

本次采用“问答式”学习方法,与传统方式相比效果显著不同:

flowchart LRclassDef old fill:#FFEBEE,stroke:#C62828,color:#B71C1C,stroke-width:2pxclassDef new fill:#E8F5E9,stroke:#2E7D32,color:#1B5E20,stroke-width:2pxclassDef node fill:#FFFFFF,stroke:#90A4AE,stroke-width:1pxsubgraph Traditional["? 传统学习"]T1["看视频/文章"]T2["被动接收"]T3["有问题先记下"]T4["学完才能实践"]T5["容易走神 ?"]T1 --> T2 --> T3 --> T4 --> T5class T1,T2,T3,T4,T5 nodeendsubgraph QA["❓ 问答式学习"]Q1["问问题"]Q2["主动探索"]Q3["问题秒回,即时解决"]Q4["边学边问边理解"]Q5["保持专注 ?"]Q1 --> Q2 --> Q3 --> Q4 --> Q5class Q1,Q2,Q3,Q4,Q5 nodeendTraditional -.->|升级| QAclass Traditional oldclass QA new

传统学习问答式学习
看视频/文章主动提问
被动接收信息主动探索未知
遇到问题先记录问题即时解答,消除疑惑
完成学习后才实践边学边问,同步理解
容易分心保持高度专注

例如:

问:系统提示词是什么?AI答:就是Agent的“人设”,类似于全局变量追问:那对话历史呢?AI答:使用滑动窗口机制,只保留最近10轮对话再追问:工具调用如何知道该选哪个?AI答:通过语义匹配,进行向量相似度搜索每个问题都能得到即时反馈,无需等待或自行查阅资料这种"即时反馈"模式极大地提升了学习效率

6.3 学习心得

AI Agent的学习曲线实际上并没有想象中那么陡峭。

flowchart LRclassDef ja va fill:#FFF3E0,stroke:#F57C00,color:#E65100,stroke-width:2pxclassDef ai fill:#E3F2FD,stroke:#1565C0,color:#0D47A1,stroke-width:2pxclassDef arrow fill:#FFFFFF,stroke:#90A4AE,stroke-width:1pxsubgraph Ja va["☕ Java工程师已有基础"]J1["API调用"]J2["数据库"]J3["缓存"]J4["设计模式"]J5["异常处理"]class J1,J2,J3,J4,J5 ja vaendsubgraph AI["? AI Agent对应概念"]A1["大模型接口"]A2["向量数据库"]A3["记忆系统"]A4["Agent架构"]A5["错误重试"]class A1,A2,A3,A4,A5 aiendJ1 --> A1J2 --> A2J3 --> A3J4 --> A4J5 --> A5class Ja va ja vaclass AI ai

作为Java开发者,我们已经具备了扎实的工程基础:

  • 掌握API调用 → 可快速理解大模型接口
  • 熟悉数据库操作 → 可迁移理解向量数据库
  • 了解缓存机制 → 可对应理解记忆系统
  • 精通设计模式 → 可类比理解Agent架构
  • 擅长异常处理 → 可轻松理解错误重试机制

关键在于用自己熟悉的视角去解读和关联新概念。

七、明日计划

按照既定的学习规划,明天的任务包括:

  • 动手实现一个迷你版Agent原型
  • 将今天所学的架构知识转化为实际代码
  • 继续运用后端思维解构AI技术概念

八、写在最后

学习AI技术本身并不难,真正的挑战在于坚持。作为“规划狂”,大家或许都熟悉那种“制定完计划就获得满足感”的状态。但这次有了AI老师的陪伴学习,让我可以随时提问、即时获得答案。用后端开发的思维,来拆解和掌握AI世界的知识。

标签: #AI Agent #Java工程师 #Agent架构 #工具调用 #错误处理 #学习笔记 #Hermes Agent #1对1学习

来源:https://juejin.cn/post/7646684767057264682
上一篇智谱GLM-5开源,高级程序员也面临职业危机 下一篇从Claude Code切换到Kimi K2.5后回不去了
本站内容用于信息整理与展示,如有侵权或内容问题请及时联系处理。

相关推荐

补充同频道和同主题内容,方便继续浏览更多相关内容。

同类最新

继续查看同栏目最近更新的文章。

更多
科研人员必读:多肽、蛋白质、重组蛋白区别及定制指南
AI教程 · 2026-07-07

科研人员必读:多肽、蛋白质、重组蛋白区别及定制指南

Section 01 多肽 VS 蛋白质 VS 重组蛋白 多肽、蛋白质和重组蛋白,本质上是同宗同源的东西——都是氨基酸串起来的生物大分子。三者的核心区别,说到底无非是三个维度:分子大小、折叠形态,以及生产方式。 接下来是一张清晰的对比图,帮你快速建立直觉: ![对比图1](https:

知识图谱与本体语义建模的核心区别解析
AI教程 · 2026-07-07

知识图谱与本体语义建模的核心区别解析

谈到人工智能如何“理解”知识,有两个概念常被放在一起讨论:知识图谱与本体语义建模。不少人以为它们是同一事物,或者认为后者是前者的进化版。实际上,两者的分工完全不同——打个比方,一个是“记事的本子”,另一个是“写本子之前先定好的规矩”。 1 本体语义建模:先绘制一张“通用分类蓝图” 设想一下,你要整

强烈推荐工作搭子WorkBuddy
AI教程 · 2026-07-07

强烈推荐工作搭子WorkBuddy

一次偶然的机会,从朋友那里了解到WorkBuddy这个工具。说实话,在AI产品扎堆的今天,能遇到一个下载即用的助手,确实值得推荐给每一个被日常琐事缠身的人。 安装过程没什么难度,双击安装包默认安装即可。需要留意的是,如果在Windows7上折腾了半天没反应,别慌——这工具在高版本Windows下运行

跨境电商系统自动化测试与CI/CD流水线构建指南
AI教程 · 2026-07-07

跨境电商系统自动化测试与CI/CD流水线构建指南

技术方向:自动化测试与DevOps实践关键词:日本代购、一站式日淘、雅虎代拍系统、煤炉自动代拍 一、测试分层策略详解 不少人刚开始就想直接搞E2E测试,觉得跑通完整流程才够“真实”。然而,测试金字塔这么多年仍不过时,原因很简单——不同层级的测试各有分工,缺少任何一层都会不稳。来看看这张金字塔图: ┌

中小企业AI营销矩阵工具推荐:赛诺贝斯智域蒲公英
AI教程 · 2026-07-07

中小企业AI营销矩阵工具推荐:赛诺贝斯智域蒲公英

天天刷着别人的爆款内容,自己却“有心无力”——这才是2026年绝大多数中小企业运营社交媒体的真实写照。说白了,社交媒体如今早已不是“要不要做”的选择题,而是“怎么做才能真正见效”的生存考验。现实情况是,团队人力就那么几个,预算也紧巴巴,却要同时运营抖音、小红书、知乎、头条、百家号等多个阵地……文案、