- 博客(17)
- 收藏
- 关注
原创 Spring AI Tool Calling源码解析:@Tool注解、ToolCallback接口与ChatModel工具调用机制完整指南
本文深入分析Spring AI中Tool Calling(工具调用)机制的完整实现原理,包括ToolCallback接口设计、@Tool注解自动适配、FunctionCallbackWrapper适配器源码、ChatModel中的多轮交互处理流程、多工具并发执行策略及错误处理机制,并提供大量可运行的代码示例和最佳实践建议。
2026-04-10 14:30:00
180
原创 Spring AI Advisor 详解:自定义拦截器、执行顺序与实战代码(2026最新版)
记录日志:记录每次 AI 请求和响应的内容限流控制:防止 API 调用过于频繁导致费用超支内容安全:过滤敏感词或不当内容记忆管理:将历史对话注入当前请求(多轮对话)缓存处理:相同问题直接返回缓存结果Spring AI 提供了Advisor机制来实现这些功能。Advisor 本质上是一个拦截器(Interceptor),采用经典的责任链模式(Chain of Responsibility)设计。你可能熟悉的技术类似概念核心方法过滤器拦截器Spring AOP切面@Around通知。
2026-04-09 20:00:00
513
原创 多轮对话的记忆心脏:ChatMemory 滑动窗口原理
Spring AI ChatMemory 源码解析 ChatMemory 是 Spring AI 中管理多轮对话上下文的接口,核心功能包括: 通过滑动窗口机制(MessageWindowChatMemory)维护固定数量的历史消息 支持 Token 计数与截断(TokenTextSplitter)避免超出模型上下文限制 使用 ConversationId 实现不同会话的隔离存储 实现特点: 默认窗口大小为100条消息 采用线程安全的ConcurrentHashMap存储会话数据 提供消息添加、检索、清空等基
2026-04-08 11:35:42
267
原创 Message 四分天下:Spring AI 如何统一消息格式
Spring AI 的消息体系设计解析 核心组件: Message接口体系 定义UserMessage、SystemMessage等四种消息类型 每种消息对应不同角色(用户/系统/助手/工具) Prompt数据模型 封装消息列表和对话选项 支持多种构建方式(单消息/列表/Builder模式) PromptTemplate模板引擎 支持动态内容生成 通过占位符实现变量替换 设计特点: 统一消息处理接口 清晰的角色区分 灵活的构建方式 支持模板化内容生成 (全文共148字)
2026-04-07 13:22:09
314
原创 prompt().user().call().content() 背后的完整链路
本文深入分析了Spring AI框架中ChatClient的调用链路,重点介绍了其体系结构、PromptBuilder接口设计以及DefaultChatClient实现。ChatClient通过链式Builder API提供了比ChatModel更友好的编程体验,支持Advisor拦截器链、Prompt模板处理等功能。文章详细解读了ChatClient接口定义、ResponseEntity包装设计理念,以及DefaultChatClient的类结构和Builder模式实现。核心内容包括ChatClient如
2026-04-06 11:19:24
354
原创 Spring AI 源码解读:一次对话请求的完整生命线
本文分析了Spring AI的整体架构设计,主要包含以下要点: 模块化结构:分为核心抽象层、客户端层、模型实现层和存储实现层,核心模块只定义接口,具体实现通过依赖注入完成。 核心接口体系: 顶层Model接口定义泛型调用契约 扩展出ChatModel、EmbeddingModel和ImageModel三大模型接口 StreamingChatModel作为独立子接口实现流式输出 数据模型设计: Prompt封装消息列表和可选参数 Message接口体系区分四种消息类型(用户/助手/系统/工具) 采用极简设计思
2026-04-05 12:03:04
362
原创 Spring AI RAG 进阶:混合检索实战
本文介绍了企业级RAG(检索增强生成)管线的进阶实现方案。文章首先分析了入门篇RAG在真实企业场景中的局限性,包括文档格式单一、分块策略简单、检索方式不足等问题。随后详细阐述了企业级RAG管线的完整架构,包含离线文档摄入管线和在线查询管线两大部分,核心组件涉及多格式文档读取、智能分块、向量存储、关键词索引和混合检索等关键技术。重点讲解了多格式ETL处理流程,展示了Spring AI内置的DocumentReader实现方案,包括PDF、Markdown和文本文件的读取方法,以及元数据注入等增强功能。该方案显
2026-04-03 17:00:00
573
原创 手把手用 Spring AI 做一个智能客服:意图识别 + 工具调用 + 人工无缝切换
本文介绍了基于Spring AI构建智能客服系统的实践方案,重点解决多轮对话、工具调用和人工兜底等核心挑战。系统采用本地模型(Ollama+qwen2.5:7b)实现零成本、离线运行的智能客服,包含意图识别路由、多场景ChatClient、会话状态管理等核心组件。架构设计上通过IntentRouter进行意图分类,结合不同场景的System Prompt和Tools处理具体业务,并引入满意度评分机制实现人工接管。文章详细说明了开发环境配置、业务场景分析、系统架构设计以及意图识别的具体实现方法,为构建企业级智
2026-04-02 14:47:45
567
原创 《Spring AI 实战系列 入门篇》第 6 篇
通义千问是阿里云自研的大语言模型,中文能力强,开源可商用。特点说明🌟开源Qwen 系列开源可商用📝中文强中文理解与生成优秀🔢多版本Qwen2, Qwen2.5, Qwen-VL (多模态)💰价格有免费额度,按量计费智谱 GLM(ChatGLM)是智谱AI开发的开源大模型,国产开源标杆。特点说明🌟开源GLM-4 开源可商用📝中文优针对中文优化🔧微调支持 LoRA 微调💰价格有免费额度文心一言(ERNIE Bot)是百度自研的大模型,企业级应用友好。特点说明🏢企业级企业用户友好📝。
2026-04-01 14:35:34
355
原创 《Spring AI 实战系列 入门篇》第 5 篇
本文介绍了Spring AI中的Advisors(自定义AI中间件)概念,包括其工作原理、核心接口和执行顺序规则。Advisors类似于Web开发中的Filter,可在AI请求处理前后执行特定功能,如日志记录、安全检查、对话记忆等。文章详细讲解了Advisors的执行流程(请求→Advisor链→LLM→响应处理),并列举了内置Advisors(如RAG检索增强、日志记录等)及其使用方法。通过类比Web中间件,帮助开发者理解如何在Spring AI中实现自定义处理逻辑。
2026-03-31 14:17:36
343
原创 《Spring AI 实战系列 入门篇》第 4 篇
本文介绍了Spring AI中结构化输出的实现方式,重点讲解了如何将AI返回结果自动映射为Java对象。主要内容包括: 结构化输出的必要性:AI默认返回字符串,手动解析JSON繁琐且易出错 两种解决方案: BeanOutputConverter:通用转换方案,通过JSON Schema实现自动映射 Native Structured Output:利用AI模型原生支持直接输出JSON 核心用法: 定义POJO类 使用.entity()方法直接获取对象 处理泛型集合(List/Map) 启用原生结构化输出优化
2026-03-30 08:57:21
319
原创 《Spring AI 实战系列 入门篇》第 3 篇
本文介绍了使用Spring AI构建基于RAG(检索增强生成)的私有知识库系统。主要内容包括:RAG解决大模型知识局限性的优势,其工作原理分为数据准备和查询回答两个阶段,关键环节如文档处理、向量转换和存储。文章对比了Spring AI支持的多种向量数据库特点及适用场景,并给出选型建议:小数据量用PGVector,云服务选Pinecone,高性能需求考虑Redis/Qdrant。最后将通过实战演示如何构建文档问答系统,实现企业私有数据的高效检索与智能回答。
2026-03-28 13:08:54
350
原创 《Spring AI 实战系列 入门篇》第 2 篇
Spring AI实战:Tool Calling扩展AI能力 本文是Spring AI实战系列第2篇,介绍如何使用Tool Calling功能让AI调用外部函数。文章首先分析AI模型的局限性(如知识陈旧、无法访问实时信息),提出Tool Calling解决方案。详细讲解其工作原理和执行流程,包括注册工具、用户提问、模型决策等步骤。重点介绍Spring AI中的核心组件和两种工具定义方式:声明式(使用@Tool注解)和编程式。通过天气查询等实际案例,展示如何扩展AI能力边界。最后提供常见问题解答和最佳实践建议
2026-03-27 11:38:25
408
原创 《Spring AI 实战系列 入门篇》第 1 篇
本文为《Spring AI 实战系列 入门篇》第 1 篇,聚焦核心概念与快速上手掌握 Spring AI 核心概念(Model、Prompt、Embedding),并创建你的第一个 AI 项目
2026-03-26 18:21:54
375
原创 Docker容器入门之一:部署SpringBoot项目
一、环境准备: 1、vm虚拟机: Workstation 12 Pro 12.5.7 build-5813279 2、Centos 7在虚拟机上安装好Centos7系统后,就可以开始准备安装Docker了。由于不想每次都敲sudo去获取权限什么的,本人直接是使用root账号登录的。下面开始正文。二、Docker安装和配置 1、安装方式一: [root@localhost ~]# ...
2018-06-14 17:55:25
1896
原创 MyBatis 中 ResultType='map' 遇到的问题
假设现在有一实体类package com.testpublic class Student{ private String name; private Integer age; //省略Get和Set}上述实体类对应数据库里student表,那么使用Mybatis去查询所有记录一般都会这样写:<select id="selectStu" resultType...
2018-06-09 15:51:57
2726
1
原创 JQuery分页插件使用心得
在修改别人的后台代码的时候发现其使用的一款分页插件,于是看了其源代码学习了一下,并将使用的心得整理了一下。 - 插件的源代码如下:(function($, window, document) { // 定义构造函数 function Paging(el, options) { this.el = el; this.options = {
2018-01-02 16:01:50
2625
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅