大家好,我是秃头哥,一名 Java 后端程序员,每天开心撸 CRUD、调 RAG 问答、搭 Spring Boot+Elasticsearch 知识库,本来安安稳稳过日子。

然后,今天突变…

老板直接把我叫到工位,甩下死命令

“咱们派聪明现在只能做 RAG 问答,你立刻马上给它升级成 Agent,要能自己 tool use、自己 ReAct 那种!限你一天搞定!

WC,WC,WC……

一天?你当 Agent 是装个插件就完事的?我当场就想甩脸反抗,说这根本不可能!

结果老板根本不懂技术,只知道市面上 “Agent” 满天飞,所有项目必须蹭 Agent 概念,反抗直接无效

我低声说:“老板,一天根本做不完,Agent 要工具调用、决策循环、记忆管理,很复杂……”

老板大声吼:“不会就学!招新不要钱吗?不想干就 G!”

想到上有老下有小,打工人只能低头

唉,只能硬着头皮猛猛干!

好在我之前肝过一个类似 Claude Code 的 Agent 项目 ——PaiCLI,从 ReAct 循环到 Chrome Devtools MCP 都跑通了,工具调用、决策循环、记忆管理全熟。

赶紧掏出Claude Code+DeepSeek V4 / Codex+GPT-5.5,开干!

先搞懂:派聪明 RAG 原本是啥?

基于Spring Boot 3.4 + Elasticsearch 8.10 + DeepSeek API的 RAG 知识库,核心流程就 4 步:

用户提问 → 混合检索 → 拼装上下文 → 大模型生成回答

整个问答入口在 ChatHandler.java,关键方法是 processMessage

public void processMessage(String userId, String userMessage,                            WebSocketSession session) {     // 1. 拿到对话历史     List<Map<String, String>> history = getConversationHistory(userId);     // 2. 混合检索:向量相似度 + BM25 关键词     List<SearchResult> results = hybridSearchService         .searchWithPermission(userMessage, userId, 5);     // 3. 把检索结果拼成上下文     String context = buildContext(results);     // 4. 调 DeepSeek 生成回答,流式返回     deepSeekClient.streamResponse(userId, userMessage, context,         history, chunk -> sendToWebSocket(session, chunk)); }

检索用的是 HybridSearchService,策略是KNN 向量搜索 + BM25 重打分 + 权限过滤

public List<SearchResult> searchWithPermission(String query,                                                String userId, int topK) {     // KNN 向量搜索(30x 候选窗口)+ BM25 重打分     SearchResponse response = elasticClient.search(s -> s         .index("knowledge_chunks")         .knn(k -> k.field("embedding").queryVector(embedQuery(query))             .numCandidates(topK * 30).k(topK * 5))         .query(q -> q.bool(b -> b             .should(textMatch(query))             .filter(permissionFilter(userId))         )),         SearchResult.class     );     return parseResults(response, topK); }

原来的致命问题:

用户说 “帮我把知识库里关于 Spring AI 的文档整理成一份摘要”,派聪明只能做一次检索然后把原文片段返回,不会判断、不会合并、不会结构化输出

这就是RAG 和 Agent 的根本区别

RAG 是被动问答;Agent 是主动决策加执行,能自己动手干活!

第一步:给 RAG 加上工具调用(Tool Calling)

原理:给大模型配一组 Tool,定义名称、功能、输入参数,让模型自己判断用哪个工具。

直接复用 PaiCLI 的ToolRegistry,注册4 个核心 Tool

  1. 1.search_knowledge:知识库文档搜索
  2. 2.generate_summary:摘要生成
  3. 3.submit_feedback:答案反馈
  4. 4.knowledge_stats:知识库统计

核心search_knowledge工具代码:

tools.put("search_knowledge", new Tool(     "search_knowledge",     "在知识库中搜索相关文档片段,返回最匹配的结果",     createParameters(         new Param("query", "string", "搜索关键词", true),         new Param("topK", "integer", "返回结果数量,默认5", false)     ),     args -> {         int topK = args.containsKey("topK") ?             Integer.parseInt(args.get("topK")) : 5;         List<SearchResult> results = hybridSearchService             .searchWithPermission(args.get("query"), currentUserId, topK);         return formatSearchResults(results);     } ));

这一步干完,派聪明从 “只会答” 变成 “能主动干活”!

用户让整理 RAG 摘要,Agent 直接调用generate_summary,先搜再总结,输出结构化内容。

第二步:加上 ReAct 决策循环

ReAct = Reasoning + Acting,核心思想:思考该做什么 → 执行操作 → 观察结果 → 再思考下一步,直到任务完成。

PaiCLI 的Agent.java里核心逻辑约 100 行,靠while(true)循环驱动:

// 简化版ReAct循环 while (true) {     // 1. 传入对话历史+工具列表,让大模型决策     ModelResponse resp = deepSeekClient.call(history, tools);     // 2. 判断是否需要调用工具     if (resp.hasToolCalls()) {         // 执行工具,把结果加入历史         ToolResult result = toolRegistry.execute(resp.getToolCalls());         history.add(buildToolMessage(result));         // 推送状态到前端         sendToolStatus(session, resp.getToolCalls().get(0).getName(), "executing");     } else {         // 3. 无工具调用,直接返回最终答案         sendFinalAnswer(session, resp.getContent());         break;     }     // 预算控制:防止死循环     if (agentBudget.isExceeded()) break; }

真实任务流程示例:用户:帮我搜一下知识库里有没有 RAG 相关的文档,有的话整理成一份摘要。

  1. 1.第一轮:思考→调用search_knowledge搜 RAG
  2. 2.第二轮:观察有结果→调用generate_summary生成摘要
  3. 3.第三轮:任务完成→返回最终回答

关键兜底:设最大循环次数 + token 上限,不确定就问用户,不瞎调用工具!

第三步:加上 Memory 记忆管理

原来的对话只存最近几轮,跨会话就忘,升级双层记忆

  1. 1.短期记忆:管理当前任务上下文,token 超了就压缩早期对话为摘要
  2. 2.长期记忆:存 Redis,记用户偏好,跨会话也能记住

短期记忆:复用conversationHistory,token 超阈值则保留最近 3 轮,早期转摘要。

长期记忆:存入 Redis,key=ltm:{userId}:{timestamp},30 天过期,新会话自动注入。

第四步:Review + 测试,一天极限搞定

先用 Claude Code+Opus 4.7 做代码 Review,重点查:

  1. 1.ReAct 循环死循环风险
  2. 2.Tool 执行异常处理
  3. 3.WebSocket 线程安全
  4. 4.记忆持久化数据一致性

然后跑4 个核心测试用例,全量通过:

最后:这个项目怎么写进简历?

帮大家整理好简历直抄版,面试直接用:

项目名称:派聪明 AI 知识库(PaiSmart)

项目简介:基于 Spring Boot 3.4 + Elasticsearch 8.10 + DeepSeek API 的企业级 AI 知识库系统,从纯 RAG 架构升级为 Agent 架构。

技术栈:Spring Boot 3.4、Spring WebFlux、Elasticsearch 8.10、Redis 7.0、MinIO、DeepSeek V4 API、WebSocket

核心职责

  1. 1.构建混合检索引擎,KNN 向量 + BM25 重打分,问答召回准确率 92%
  2. 2.设计 Tool Calling 框架,注册 4 个核心工具,支持自主执行
  3. 3.实现 ReAct 决策循环,完成多步复合任务无人工干预
  4. 4.设计双层记忆架构,短期压缩 + 长期 Redis 持久化
  5. 5.基于 WebSocket 实时推送 Agent 思考与工具调用状态

打工人真心感慨:

谁懂啊,老板不懂技术乱提需求,一天极限升级 Agent,全靠之前的技术积累 + AI 工具硬撑!

等我技术再牛逼点,再也不接这种拍脑袋的紧急需求!

学AI大模型的正确顺序,千万不要搞错了

🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!

有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!

就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

在这里插入图片描述

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇

学习路线:

✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经

以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!

我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

在这里插入图片描述

Logo

更多推荐