- 博客(43)
- 资源 (4)
- 收藏
- 关注
原创 超十万字解读Spring AI实战:开篇
大模型技术正以惊人的速度改变世界,2025年的人工智能已不再是科幻,而是现实。大模型如ChatGPT等,正在重塑各行各业,降低技术门槛,使专业能力普及化。SpringAI的出现为Java开发者提供了桥梁,使其能在企业级系统中稳定运行AI,同时保持工程化思维。尽管SpringAI在生态、学习成本和性能上存在不足,但其企业级基因和国产化适配能力使其成为Java开发者的重要工具。本系列文章旨在介绍SpringAI的功能与特性,鼓励更多Java开发者参与AI实践,共同探索AI时代的无限可能。
2025-05-08 23:06:51
1091
原创 Spring AI 实战:第十一章、Spring AI Agent之知行合一
LLM Agent是以大语言模型(Large Language Model, LLM)为核心,结合感知、规划、工具调用和记忆等模块构建的自主智能系统。它能够理解复杂指令、动态决策并执行多步骤任务,模拟人类的问题解决能力,同时通过与环境互动持续优化行为。OpenAI的lilianweng在文章将Agent框架拆分为LLM、工具、规划、记忆、行动等多个模块,其中LLM作为中枢提供推理与规划能力,协同多模块共同构建智能体复旦大学NLP Group在文章。
2025-05-04 22:34:20
1583
原创 Spring AI 实战:第十章、Spring AI RAG之博学多才
在人工智能的发展历程中,大语言模型(LLM)已经展现了惊人的“博闻强记”能力——它们能写诗、编码、解答常识问题,甚至模拟人类对话。然而,当面对专业领域知识或实时更新的信息时,这些模型往往会暴露其局限性:要么“一本正经地胡说八道”,要么无奈承认“我不知道”,此时RAG就要闪亮登场检索增强生成(Retrieval-Augmented Generation, RAG)是当前AI领域最前沿的技术范式之一,它通过结合信息检索与生成模型的优势,有效解决传统大语言模型(LLM)的三大痛点:知识更新滞后、事实准确性不足和领
2025-05-04 22:26:31
1240
原创 Spring AI 实战:第九章、Spring AI MCP之万站直通
MCP是一种开放协议,旨在标准化应用程序向大语言模型(LLM)提供上下文的交互方式。我们可以把 MCP 比作AI 应用的USB-C通用接口,正如USB-C为各类设备提供标准化连接方案,MCP为AI模型与不同数据源/工具建立了统一对接规范自定义MCP Server的测试上面都是基于Cline完成,它作为MCP中的宿主机,内部已集成MCP Client能力,抛开Cline,可以自定义MCP Client(生产环节可在集成大模型应用中添加MCP Client,一个MCP HOST就构建成功)。静态资源。
2025-05-04 22:12:20
2420
原创 Spring AI 实战:第八章、Spring AI Tool Calling之与时俱进
除了利用@Tool注解申明将一个方法定义为工具,还可以利用编程式定义工具;一个普通的获取时间的方法,没有任何注解// 不带注解通过反射获取到该方法,构建后生成工具的回调类,在大模型调用时传递即可;//编程式定义ToolDefinition toolDefinition = ToolDefinition.builder(method).description("获取用户时区的当前日期和时间").build();return chatClient.prompt("明天是星期几?
2025-05-04 22:05:26
1095
2
原创 Spring AI 实战:第七章、Spring AI Advisor机制之记忆大师
从金鱼到最强大脑通过 Spring AI 的记忆功能,我们成功让 AI:记住了用户身份实现了多用户隔离做到了持久化存储最终效果用户:“和上次一样” → AI 秒懂用户:“你知道我的名字吗?” → AI:“当然,张三!AI的进化路线🐟金鱼脑 →🧠最强大脑 →🏛️记忆宫殿管理员。
2025-05-04 21:59:11
1181
原创 Spring AI 实战:第六章、Spring AI源码浅析之一山可容二虎
通过Debug看代码效率更高依赖ChatModel,而ChatModel由各个大模型的提供;通过手动定义多个 ChatClient 解决 NoUniqueBeanDefinitionException;Advisor 机制类似 AOP,可以在调用前后插入逻辑,可以自定义 Advisor 实现日志、缓存、限流等功能;chatModel.call()最终把请求转发到各个大模型的API调用规范实现上。看完代码以后期望你能自行读懂流式请求的操作(核心是Flux的操作,在第一章给出了示例)
2025-05-04 18:46:08
1529
原创 Spring AI 实战:第五章、Spring AI本地模型部署之省钱小能手
白嫖的快乐你想象不到经过这番折腾,我们成功实现了零成本使用大模型完全本地运行保障隐私可视化访问Java生态无缝集成但可能有的小伙伴要吐槽,怎么换个底层模型这次就新建一个工程了呢?不能在以前的工程上开发吗?这样也太不优雅了吧~,我知道你很急,但先别急,等下一章节再来解决这个问题。为什么程序员特别喜欢Ollama?因为它就像一只温顺的羊驼——不花钱还能24小时产出代码!
2025-05-04 18:30:25
752
原创 Spring AI 实战:第四章、Spring AI多模态之看图说话
打交道的开发者,当第一次看到Spring AI可以同时处理图片、音频和文本时,就像看到咖啡机突然开始说话差不多,既惊讶又有点担心它会不会要求加薪。本文将带你探索Spring AI的多模态世界,让代码从"文本单细胞生物"进化为"多媒体变形金刚"~多模态(Multimodal)是指人工智能系统能够同时处理和理解多种类型的数据输入(如文本、图像、音频、视频等),并在此基础上进行综合推理和输出的能力。不过能力越大,责任越大——当你给系统装上"眼睛"和"耳朵"后,它可能会看到你上班摸鱼的秘密!背景失焦,突出了水果。
2025-05-04 17:52:47
741
原创 Spring AI 实战:第三章、Spring AI结构化输出之告别杂乱无章
无论是需要简单的列表、复杂的映射还是完整的Java对象,这些转换器都能帮助我们轻松实现目标。“desc”: “《无间道》是一部2002年上映的香港警匪电影,讲述了警方和黑帮互相派遣卧底的故事,展现了复杂的身份认同和道德困境。“desc”: “《无间道》是2002年上映的一部香港警匪片,讲述了警方和黑帮互相派遣卧底的故事,展现了复杂的身份认同和道德困境。,无需复杂后处理,以结构化的输出才能更精准的控制整个流程以及和用户的交互形态,提升产品用户体验。:现实主义题材,刘德华与叶德娴的细腻演出,斩获多项大奖。
2025-05-03 22:51:06
894
原创 Spring AI 实战:第二章、Spring AI提示词之玩转AI占卜的艺术
引言:程序员的神秘学探索引言:程序员的神秘学探索“下个迭代能按时发布吗?“这次晋升机会有多大?“我写的代码为什么总在半夜出bug?作为一名开发者是否也曾被这些略带玄学问题困扰?那让我们用Spring AI和提示词工程打造一个专属于程序员的"赛博占卜师",让大师来为你占卜一卦吧~一、提示词工程 - 与AI对话的艺术1.1 提示词工程是什么类比一下,AI就像一位刚从名校毕业的高材生它知识渊博但缺乏经验能解决复杂问题但需要明确指引有时会"过度脑补"(专业术语叫"幻觉")
2025-05-03 22:43:10
1341
原创 Spring AI 实战:第一章、Spring AI入门之DeepSeek调用
Spring AI的出现,为Java开发者提供一整套大模型应用研发基础底座,为众多Java生态企业级的应用迈向AI领域开辟一条航向;AI时代已然到来,让我们一起扬帆起航~~~
2025-05-03 22:29:40
2357
原创 如何构建高可用的分布式系统
在公司做了一次高可用的分享,由于keynote的内容为大纲,特此加点注释说明,分享给大家,水平有限,欢迎拍砖~~分布式服务要素 分布式服务主要考虑如下几点:性能主要考虑指标: 响应时间,并发数,吞吐量常用的手段压缩,对传输数据进行压缩(类似合并js,压缩图片
2017-03-25 23:18:46
16637
原创 spring boot实战(第十五篇)嵌入tomcat源码分析
嵌入tomcat源码分析在启动spring boot工程时利用@SpringBootApplication注解,该注解启动@EnableAutoConfiguration自动配置,加载META-INF/spring.factories文件# Auto Configureorg.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2016-08-21 21:53:15
23584
1
原创 zipkin
zipkinzipkin为分布式链路调用监控系统,聚合各业务系统调用延迟数据,达到链路调用监控跟踪。architecture 如图,在复杂的调用链路中假设存在一条调用链路响应缓慢,如何定位其中延迟高的服务呢?日志: 通过分析调用链路上的每个服务日志得到结果zipkin:使用zipkin的web UI可以一眼看出延迟高的服务如图所示,各业务系统在彼此调用时,将特定的跟踪消息传递至zipkin,
2016-07-31 11:18:51
74645
2
原创 consul(第二篇)consul Ops
consul Opsconsul client通过下面的命令可以创建consul clientnohup consul agent -data-dir /tmp/consul -node=liaokailin -bind=192.168.21.48 -join=120.76.145.187 &node 指定client节点名称bind client绑定的ipjoin 指定加入到的consul
2016-06-08 12:16:17
15512
原创 consul(第一篇)consul 入门
consul 入门consul是什么consul包含多个组件,从整体上看可以理解为一个服务发现、配置的工具,包含一下几个特点:服务发现(Service Discovery):客户端通过consul提供服务,其他客户端可以通过consul利用dns或者http发现依赖服务健康检查(Health Checking): consul提供任务的健康检查,可以用来操作或者监控集群的健康,也可以在服务发现时
2016-06-01 21:31:37
33037
原创 springcloud(第九篇)netflix zuul
netflix zuulintroductionzuul用来提供动态路由、监控、授权、安全、调度等等的边缘服务(edge service)ZuulFilterZuulFilter是Zuul中核心组件,通过继承该抽象类,覆写几个关键方法达到自定义调度请求的作用,这里filter不是java web中的filter,不要混淆. new ZuulFilter() {
2016-05-28 17:35:53
66204
原创 springcloud(第八篇)springcloud feign
# spring cloud feignintroductionnetflix feign是一个类似retrofit进行http调用框架,Feign makes writing java http clients easier 使得编写http client代码更加简单netflix feign直接给出一段简单的案例package com.lkl.netflix.feign;import feign
2016-05-21 13:28:01
45037
原创 springcloud(第七篇)springcloud ribbon with eureka
spring cloud ribbon with eurekaintroduction在上一篇中阐述了ribbon的基本用法,但是可以发现服务列表是通过配置得来的,实际 情况通常是由负载均衡+服务发现来实现的,通过服务发现获取服务列表,负载均衡通过rule选择要调用的服务。服务发现可以通过eureka来实现,后期会讲解利用consul做服务发现。eureka discovery serviceeu
2016-05-21 12:24:36
31142
1
原创 springcloud(第六篇)springcloud ribbon
spring cloud ribbon简介ribbon用以实现负载均衡;实现软负载均衡,核心有三点:服务发现,发现依赖服务的列表服务选择规则,在多个服务中如何选择一个有效服务服务监听,检测失效的服务,高效剔除失效服务netflix ribbon一个简单的demo配置文件:# Max number of retries on the same server (excluding the fi
2016-05-10 12:26:30
26453
原创 springcloud(第五篇)springcloud turbine
spring cloud turbine简介turbine是聚合服务器发送事件流数据的一个工具,hystrix的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过 turbine来监控集群下hystrix的metrics情况,通过eureka来发现hystrix服务。netflix turbine使用官方给定的war 放入tomcat中运行,修改turbine-web-1.0.0/WEB
2016-05-08 09:56:22
38509
5
原创 springcloud(第四篇)springcloud hystrix
spring cloud hystrix简介hystrix通过服务隔离、熔断(也可以称为断路)、降级等手段控制依赖服务的延迟与失败。netflix hystrix本篇中主要讲解对spring cloud 对hystrix的集成,至于如何单独使用hystrix可以参考我分享的pdf.spring cloud hystrix引入依赖 <!--hystrix--> <dependenc
2016-05-07 18:35:21
47125
原创 springcloud(第三篇)springcloud eureka 服务注册与发现
spring cloud eurekaeureka 用以服务发现、服务注册,比较流行的有consul简介eureka为netflix开源软件,分为三个部分:eureka服务:用以提供服务注册、发现,已一个war的形式提供 http://search.maven.org/#search%7Cga%7C1%7Ceureka-server 或者编译源码,将war拷贝进tomcat即可提供服务eure
2016-05-04 12:46:58
106234
原创 springcloud(第二篇)springcloud config 修改配置
springcloud(第二篇)springcloud config 修改配置在git端修改配置后如何让客户端生效?访问接口修改refresh post方式执行http://localhost/refresh 会刷新env中的配置restart 如果配置信息已经注入到bean中,由于bean是单例的,不会去加载修改后的配置 需要通过post方式去执行http://localhost/re
2016-05-03 20:48:55
39262
4
原创 springcloud(第一篇)springcloud config 入门
spring cloud config 入门简介Spring cloud config 分为两部门 server client config-server 配置服务端,服务管理配置信息config-client 客户端,客户端调用server端暴露接口获取配置信息config-server创建config-server首先创建config-server工程.文件结构: ├── config-se
2016-05-03 19:48:01
121637
8
原创 spring boot实战(第十四篇)整合RabbitMQ源码分析前言
前言本篇开始讲述Spring Boot如何整合RabbitMQ(实际上Spring就整合了RabbitMQ)。RabbitAdmin在上篇中遗留AmqpAdmin没有讲解,现在来看下该部分代码public AmqpAdmin amqpAdmin(CachingConnectionFactory connectionFactory) { return new
2015-11-01 21:39:16
24053
原创 spring boot实战(第十三篇)自动配置原理分析
前言Spring Boot中引入了自动配置,让开发者利用起来更加的简便、快捷,本篇讲利用RabbitMQ的自动配置为例讲分析下Spring Boot中的自动配置原理。在上一篇末尾讲述了Spring Boot 默认情况下会为ConnectionFactory、RabbitTemplate等bean,在前面的文章中也讲到嵌入的Tomcat默认配置为8080端口这些都属于Spring Boo
2015-11-01 17:22:24
81512
3
原创 spring boot实战(第十二篇)整合RabbitMQ
前言本篇主要讲述Spring Boot与RabbitMQ的整合,内容非常简单,纯API的调用操作。 消息生产者不论是创建消息消费者或生产者都需要ConnectionFactoryConnectionFactory配置创建AmqpConfig文件AmqpConfig.java(后期的配置都在该文件中)@Configurationpublic
2015-11-01 16:44:07
116608
1
原创 spring boot实战(第十一篇)初识RabbitMQ
前言最近几篇文章将围绕消息中间件RabbitMQ展开,对于RabbitMQ基本概念这里不阐述,主要讲解RabbitMQ的基本用法、Java客户端API介绍、Spring Boot与RabbitMQ整合、Spring Boot与RabbitMQ整合源码分析。RabbitMQ安装在使用消息中间件RabbitMQ之前就是安装RabbitMQ。安装erlang:yu
2015-11-01 15:31:04
25561
原创 spring boot实战(第十篇)Spring boot Bean加载源码分析
前言前面的文章描述了Application对应Bean的创建,本篇将阐述spring boot中bean的创建过程refresh首先来看SpringApplication#run方法中refresh()方法// Refresh the context refresh(context);调用的是AbstractApplicationContext中的re
2015-10-13 23:30:30
49123
1
原创 spring boot实战(第九篇)Application创建源码分析
前言通过前面的文章了解到在spring boot的启动时,利用的是编写的Application类,使用了注解@SpringBootApplication,本篇将阐述该Bean的加载过程。@SpringBootApplicationpublic class Application { public static void main(String[] args) {
2015-10-11 15:52:02
20470
原创 spring boot实战(第八篇)上下文的创建
前言本篇主要讲解spring boot上下文的创建,为后续源码的解读打下铺垫ApplicationContext在run方法中执行 context = createApplicationContext();创建上下文 protected ConfigurableApplicationContext createApplicationContext()
2015-10-09 23:39:25
16872
2
原创 spring boot实战(第七篇)内嵌容器tomcat配置
spring boot实战(第七篇)内嵌容器tomcat配置默认容器spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / 通过需要用到的就是端口、上下文路径的修改,在spring boot中其修改方法及其简单;在资源文件中配置: server.port=9090 server.contextPath=/lkl启动spr
2015-10-07 12:30:47
76330
1
原创 spring boot实战(第六篇)加载application资源文件源码分析
前言在上一篇中了解了spring配置资源的加载过程,本篇在此基础上学习spring boot如何默认加载application.xml等文件信息的。ConfigFileApplicationListener在spring boot实战(第三篇)事件监听源码分析中可知在构造SpringApplication时加载相关的监听器,其中存在一个监听器ConfigFileAp
2015-10-03 15:25:54
28246
1
原创 spring boot实战(第五篇)配置源码解析
前言前面的文章都采用markdown编写的,但编辑图片上极其不方便,以后还是采用网页的形式。上一篇中讲述了spring boot配置文件的使用,本篇开始从源码的角度来看看配置文件。环境(Environment)学习过spring的同学都清楚,在bean中注入Enviroment实例即可调用配置资源信息,如以下代码package com.lkl.springb
2015-10-02 22:56:51
17313
原创 spring boot实战(第四篇)分散配置
spring boot实战(第四篇)分散配置前言分散配置是系统必不可少的一部分,将配置参数抽离出来为后期维护提供很大的便利。spring boot 默认支持两个格式的配置文件:.properties .yml。.properties与.yml*.properties属性文件;属于最常见的一种; *.yml是yaml格式的文件,yaml是一种非常简洁的标记语言。在*.properties中定义us
2015-09-13 23:38:29
20040
1
原创 spring boot实战(第三篇)事件监听源码分析
spring boot实战(第三篇)事件监听源码分析前言解读源码,知其然知其所以然···监听源码分析首先来看下上一篇中执行的main方法package com.u51.lkl.springboot;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.Sprin
2015-09-03 14:42:27
22589
原创 spring boot实战(第二篇)事件监听
spring boot 实战 2.事件监听前言spring boot在启动过程中增加事件监听机制,为用户功能拓展提供极大的便利。支持的事件类型四种 ApplicationStartedEvent ApplicationEnvironmentPreparedEvent ApplicationPreparedEvent ApplicationFailedEvent实现
2015-09-02 23:54:25
68964
原创 spring boot实战(第一篇)第一个案例
spring boot实战(第一篇)第一个案例前言写在前面的话一直想将spring boot相关内容写成一个系列的博客,今天终于有时间开始了第一篇文章以后有时间就会继续写下去。spring boot 博客内容规划spring boot 基本用法自动配置技术集成性能监控源码解析spring boot 功能强大,后面会细细道来。第一个案例工程的构建构建spring boot工程一般采用两
2015-08-25 23:29:28
68033
8
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人