<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[223的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/sw223</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; sw223]]></copyright><item><title><![CDATA[Tool Calling 是什么？用后端接口的思路讲清楚]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163671037</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163671037</guid><author>sw223</author><pubDate>Wed, 21 Oct 2026 15:12:21 +0800</pubDate><description><![CDATA[Tool Calling 听起来像是一个 AI 概念，但用后端接口的思路理解，其实很容易落地。它本质上就是让 Agent 能够调用外部能力，而这些外部能力，很多时候就是我们 Java 后端已经写过的业务接口。Python Agent 负责理解用户问题、选择工具、组织回答；Spring Boot 负责提供稳定接口、校验权限、执行规则、返回准确数据。对 Java 后端来说，Tool Calling 不是一个完全陌生的东西。它更像是把原来的接口能力，换一种方式暴露给 AI 助手使用。]]></description><category></category></item><item><title><![CDATA[Python Agent 调 Java 接口：业务能力怎么变成工具？]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163670265</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163670265</guid><author>sw223</author><pubDate>Sun, 18 Oct 2026 21:34:01 +0800</pubDate><description><![CDATA[Python Agent 调 Java 接口，本质上不是把后端系统推倒重来，而是把原来给前端调用的业务能力，换一种方式提供给 Agent 使用。Java 后端继续负责准确的数据、稳定的接口、权限和业务规则；Python Agent 负责理解用户问题、选择工具、组织回答。这样分工以后，AI 助手就不只是一个会聊天的入口，而是可以逐步连接真实业务系统。对 Java 后端来说，这个方向其实挺自然。我们过去写过的很多接口，未来都可能变成 Agent 可以调用的工具。]]></description><category></category></item><item><title><![CDATA[一个 AI 助手的请求链路：用户提问后，Agent 和后端分别做了什么？]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163669467</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163669467</guid><author>sw223</author><pubDate>Mon, 12 Oct 2026 10:56:28 +0800</pubDate><description><![CDATA[从一次请求链路看，AI 助手并不是简单调用大模型。用户提问后，Agent 要理解意图、选择工具、组织上下文；Java 后端要提供准确数据、校验权限、执行确定性业务逻辑；大模型则负责理解自然语言和生成最终表达。对后端开发者来说，这个拆法会更容易接受。因为它本质上还是请求、接口、服务、数据、日志这些东西，只是中间多了一层 Agent 编排和模型生成。我现在越来越觉得，AI 应用开发真正有意思的地方，不是把所有东西都交给模型，而是让模型和现有业务系统配合起来。]]></description><category></category></item><item><title><![CDATA[AI 助手架构设计：Python Agent 和 Spring Boot 如何分工？]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163669198</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163669198</guid><author>sw223</author><pubDate>Fri, 09 Oct 2026 11:55:37 +0800</pubDate><description><![CDATA[现在我对 AI 助手架构的理解是：不要把它看成一个单独的 AI 功能，而是看成一套“智能层 + 业务层”的组合。Python Agent 负责理解、编排、RAG、Tool Calling 和模型调用；Spring Boot 负责业务接口、权限、数据、缓存、日志和系统稳定性。这不是放弃 Java，也不是完全转 Python，而是让两边各自做更适合的事情。对我这种 Java 后端背景的人来说，这条路线比较自然。过去积累的后端经验不会浪费，同时也能慢慢切入 Agent、RAG 这些 AI 应用开发能力。]]></description><category></category></item><item><title><![CDATA[做 AI 应用开发，为什么选择 Python 做 Agent、Java 做工程支撑？]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163445300</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163445300</guid><author>sw223</author><pubDate>Mon, 21 Sep 2026 18:50:34 +0800</pubDate><description><![CDATA[做 AI 应用开发，我现在不太想纠结“Java 还是 Python 哪个更好”。更重要的问题是：每个部分应该用什么工具更合适。Python 适合做 Agent、RAG、模型调用和快速实验；Java/Spring Boot 适合做业务接口、权限、数据、缓存和稳定性支撑。对我这种 Java 后端背景的人来说，这条路线比较自然。不是放弃 Java，而是把 Java 放在业务底座的位置，再用 Python 去补 AI 应用层的能力。]]></description><category></category></item><item><title><![CDATA[思考 AI 应用架构]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163445154</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163445154</guid><author>sw223</author><pubDate>Tue, 08 Sep 2026 14:37:02 +0800</pubDate><description><![CDATA[现在我对 AI 应用架构的理解还在变化，但有一点越来越清楚：AI 应用不是单纯调用一个大模型接口，也不是把所有业务都交给 Agent。更合理的方式，是把智能能力和业务系统分开看。Python 适合做 Agent、RAG、模型调用和灵活编排；Java/Spring Boot 适合做业务接口、权限、数据、缓存、日志和稳定性支撑。对一个 Java 后端来说，这条路线不是放弃过去的经验，而是把过去的后端能力放到新的 AI 应用架构里继续使用。]]></description><category></category></item><item><title><![CDATA[RAG 是什么？用后端开发的思路讲清楚]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163444838</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163444838</guid><author>sw223</author><pubDate>Wed, 26 Aug 2026 00:11:20 +0800</pubDate><description><![CDATA[RAG 听起来是一个 AI 概念，但从后端开发角度看，它其实是一条比较清晰的业务链路。用户提问，系统检索资料，组装上下文，调用模型，返回答案。它真正解决的问题，是让大模型在回答时能参考我们自己的业务资料，而不是只依赖模型原本的通用知识。对 Java 后端来说，理解 RAG 不一定要先陷进复杂术语里。可以先把它当成一次“带知识检索的增强查询”。等流程跑通后，再逐步深入向量检索、Embedding、召回效果、重排、评估这些内容。下一篇我准备继续往实战方向想一想：思考 AI 应用架构。]]></description><category></category></item><item><title><![CDATA[后端想做 AI 知识库，需要先搞懂哪些东西？]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163444743</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163444743</guid><author>sw223</author><pubDate>Mon, 17 Aug 2026 00:30:00 +0800</pubDate><description><![CDATA[后端想做 AI 知识库，第一步不是急着追各种新概念，而是先搞清楚它背后的流程。文档怎么来，内容怎么解析，文本怎么切分，向量怎么生成，问题怎么检索，Prompt 怎么组装，答案怎么返回，权限怎么控制，日志怎么追踪。这些问题串起来以后，AI 知识库就不再只是一个模糊的概念，而是一条可以被后端逐步实现的业务链路。对 Java 后端来说，这个方向其实挺适合切入。因为它既有 AI 的新东西，也有大量我们熟悉的工程问题。下一篇我准备继续把 RAG 单独拿出来聊聊：RAG 是什么？用后端开发的思路讲清楚。]]></description><category></category></item><item><title><![CDATA[从接口开发角度理解大模型：一次请求背后发生了什么？]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163444621</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163444621</guid><author>sw223</author><pubDate>Fri, 14 Aug 2026 01:15:00 +0800</pubDate><description><![CDATA[从接口开发角度看，大模型并不是一个完全摸不着的东西。它可以先被理解成一个特殊的外部服务：输入是用户问题和上下文，输出是一段生成文本。后端要做的，是把用户请求、业务数据、系统规则整理好，交给模型，再把模型结果稳定地返回给用户。真正的难点不只是“调用模型”，而是怎么让这次调用在业务系统里可控、可追踪、可维护。对 Java 后端来说，这个切入角度会更自然一点。我们不用一开始就把自己放到算法研究的位置，而是先从一次请求开始，把 AI 能力接进熟悉的工程体系里。]]></description><category></category></item><item><title><![CDATA[做 AI 应用时，Prompt 到底算不算“代码”？]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163444448</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163444448</guid><author>sw223</author><pubDate>Tue, 11 Aug 2026 10:37:09 +0800</pubDate><description><![CDATA[做 AI 应用时，Prompt 可能不会像 Java 代码那样被编译，也不会像 SQL 那样有明确的执行结果，但它确实在影响系统输出。如果只是个人试用，可以随便写。但如果要进入业务系统，就应该认真对待。我现在越来越觉得，AI 应用开发的难点不只是“怎么调用大模型”，而是怎么把模型、Prompt、业务数据、后端接口这些东西组合成一个稳定的服务。下一篇我准备从后端视角继续聊：从接口开发角度理解大模型，一次请求背后到底发生了什么。]]></description><category></category></item><item><title><![CDATA[Spring Boot 接入大模型 API：先跑通一个简单问答接]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163444106</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163444106</guid><author>sw223</author><pubDate>Fri, 07 Aug 2026 00:15:00 +0800</pubDate><description><![CDATA[前端或者 Postman 传一个问题过来，后端接收即可。第一版不要急着设计太多字段。等后面真的需要保存 token、模型名称、耗时、会话 ID 时，再慢慢加。这篇只是先跑通一个最简单的问答接口。它不复杂，甚至看起来有点像普通的第三方 API 封装。但我觉得这一步很重要。因为只有先把链路跑起来，后面再去理解 Prompt、上下文、RAG、Agent，才不会一直停留在概念里。]]></description><category></category></item><item><title><![CDATA[后端学习 AI，不一定要先啃算法]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163441302</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163441302</guid><author>sw223</author><pubDate>Tue, 04 Aug 2026 02:30:00 +0800</pubDate><description><![CDATA[后端学习 AI，不一定要先啃算法。如果你的目标是做 AI 应用开发，而不是从零训练模型，那么完全可以先从工程落地开始。先把模型 API 调起来，先做一个问答接口，先把上下文、知识库、业务接口这些东西串起来。算法和原理当然重要，但它们可以在实践过程中逐步补。很多时候，先做出一个能跑的小东西，比一开始追求完整知识体系更有帮助。对 Java 后端来说，AI 应用开发不是把过去的经验推倒重来，而是在原来的后端能力上，接入一种新的智能能力。]]></description><category></category></item><item><title><![CDATA[AI 应用开发：它和传统 CRUD 到底有什么不同？]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/163394274</link><guid>https://blog.youkuaiyun.com/sw223/article/details/163394274</guid><author>sw223</author><pubDate>Sat, 01 Aug 2026 14:52:09 +0800</pubDate><description><![CDATA[AI 应用开发和传统 CRUD 最大的不同，我觉得不是技术名词变多了，而是系统里多了一个会“生成内容”的能力。传统 CRUD 更强调确定性，AI 应用则需要在不确定的模型输出和稳定的业务系统之间做平衡。对 Java 后端来说，这既是新东西，也不是完全陌生的东西。接口设计、数据处理、缓存、日志、异常、权限、限流、系统稳定性，这些经验在 AI 应用里依然有用。只是以后我们可能不只是在写“查数据、改数据”的接口，还会写一些能理解用户问题、组织上下文、调用模型和业务能力的接口。]]></description><category></category></item><item><title><![CDATA[Flowable 工作流引擎实践]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/162468255</link><guid>https://blog.youkuaiyun.com/sw223/article/details/162468255</guid><author>sw223</author><pubDate>Wed, 01 Jul 2026 02:39:45 +0800</pubDate><description><![CDATA[Flowable 工作流引擎实践摘要 本项目基于Flowable 7.1.0构建了完整的业务流程管理系统，主要创新点和实践内容包括： 可视化流程设计：采用仿钉钉/飞书的前端设计器，通过JSON动态生成标准BPMN模型，降低使用门槛。 核心架构：通过自定义ActivityBehavior接管任务分配逻辑，建立候选人策略体系，实现双通道事件监听机制。 多实例审批：支持会签、或签和依次审批三种模式，通过MultiInstanceLoopCharacteristics实现。 状态管理：设计了完整的流程状态追踪体系，]]></description><category></category></item><item><title><![CDATA[NumPy 详细笔记]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/161862548</link><guid>https://blog.youkuaiyun.com/sw223/article/details/161862548</guid><author>sw223</author><pubDate>Wed, 10 Jun 2026 15:35:28 +0800</pubDate><description><![CDATA[用多维数组表达数据，用向量化运算批量处理数据。NumPy 的学习重点不是“背多少函数”，而是形成数组思维。数据是什么 shape？我要沿哪个 axis 算？是逐元素、筛选、聚合、广播，还是矩阵运算？当你能稳定回答这三个问题，NumPy 就不再是零散函数，而是一套清晰的数值计算语言。]]></description><category></category></item><item><title><![CDATA[查看redis原始中文数据]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/158923421</link><guid>https://blog.youkuaiyun.com/sw223/article/details/158923421</guid><author>sw223</author><pubDate>Wed, 11 Mar 2026 13:24:29 +0800</pubDate><description><![CDATA[的容器中，以交互模式启动 Redis 命令行客户端，并使用原始输出格式（以便正确显示中文）。参数确保从 Redis 读取的中文、特殊字符能正常显示，而不是显示为。Redis 自带的命令行工具，用于连接和操作 Redis 服务器。类似 Docker 的容器管理工具，用于创建、运行和管理容器。保持标准输入（stdin）打开，允许你向容器内发送命令。，你需要先安装，或者从宿主机连接（需要映射端口），以便我能在容器内部执行后续命令。的正在运行的容器中，启动一个。的容器内执行命令的关键字。​ 的命令，用于在一个。]]></description><category></category></item><item><title><![CDATA[SpringMVC:过滤器,拦截器 ]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/158652845</link><guid>https://blog.youkuaiyun.com/sw223/article/details/158652845</guid><author>sw223</author><pubDate>Wed, 04 Mar 2026 14:43:54 +0800</pubDate><description><![CDATA[过滤器：过滤器拦截的是request请求，有初始化方法和销毁方法，拦截的是Request、Response请求，粒度很大。过滤器实现Filter接口并提供了三个方法，分别是初始化(init)方法，具体拦截函数(dofilter)方法和销毁(destroy)方法，过滤器随着容器的启动和销毁而初始化和销毁，依赖于servlet容器，]]></description><category></category></item><item><title><![CDATA[容器启动jar,可远程debug]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/157544956</link><guid>https://blog.youkuaiyun.com/sw223/article/details/157544956</guid><author>sw223</author><pubDate>Fri, 30 Jan 2026 17:12:38 +0800</pubDate><description><![CDATA[设置 NACOS_DISCOVERY_IP=服务固定ip 是因为博主使用的本地wsl部署的容器,注册到nacos上的是容器ip,外部应用无法访问。: 生产环境中密码应通过 secrets 管理，而非硬编码在 Dockerfile 中。: 使用 Alpine Linux 的 JRE 版本，镜像体积最小化。: 指定 JDK 17 的特定版本，确保环境一致性。: 官方认可的 OpenJDK 发行版。: 预留的 Java 参数扩展入口。: 监听所有网卡的 5005 端口。: 设置初始堆内存为 512MB。]]></description><category></category></item><item><title><![CDATA[SpringBoot：springboot生成jar和mvn package区别]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/157291677</link><guid>https://blog.youkuaiyun.com/sw223/article/details/157291677</guid><author>sw223</author><pubDate>Fri, 23 Jan 2026 15:16:06 +0800</pubDate><description><![CDATA[repackage 命令，对第一步 打包成的 jar 进行再次打包，将之打成一个 可执行 jar ，通过将第一步打成的 jar 重命名为 *.original 文件。首先 mvn package 命令 对项目进行打包，打成一个 jar，这个 jar 就是一个普通的 jar，可以被其他项目依赖，但是不可以被执行。注：SpringBoot项目默认打包的是可运行jar包，普通项目默认打包的是不可运行的jar包，但是，普通项目也可以打包成可运行jar包。执行之后，这个命令再次打包生成可执行的 jar，同时将。]]></description><category></category></item><item><title><![CDATA[开发资源库]]></title><link>https://blog.youkuaiyun.com/sw223/article/details/157291409</link><guid>https://blog.youkuaiyun.com/sw223/article/details/157291409</guid><author>sw223</author><pubDate>Fri, 23 Jan 2026 13:49:01 +0800</pubDate><description><![CDATA[阿里云Maven库地址https://developer.aliyun.com/mvn/guide]]></description><category></category></item></channel></rss>