- 博客(314)
- 资源 (5)
- 收藏
- 关注
原创 SpringAI系列 - 升级1.0.0-M8
模式会将大模型的响应拆分成多条记录,导致Spring AI无法正确提取到工具调用的上下文。版本后,实测工具调用不生效,查看源码后发现需通过。之前版本中的Spring AI中。,今天(25年5月1日)就发布。版本时,Spring AI的。模型的工具调用的,由于采用。异步响应stream。异步响应stream。
2025-05-01 11:14:16
112
原创 SpringAI系列 - 升级1.0.0-M7版本遇到的问题
底层的一些实现类的包名可能发生了变化,可删除原import后再重新导入。之前早些时候(25年2月的时候),按照Spring AI官网提示使用。之前版本的Spring AI底层的解析Tool参数的工具类。截止到本文发布前(25年4月30日),目前最新的稳定版为。最近在升级版本时,发现Spring AI官网提示的使用。目前Spring AI的最新特性都位于快照版本。参数,则要求所有的Tool方法(即便不需要。版本,说说升级过程中的一些注意事项。版本这个问题已被官方修复,不需要。版本(及之后版本)已发布到。
2025-04-30 10:49:56
57
原创 Byte-Buddy系列 - 第4讲 byte-buddy无法读取到SpringBoot Jar中的类
大力出奇迹,可以在byte-buddy中自定义SpringBoot的类加载器实现,即自行遍历的所有jar来加载类,具体自定义/*** SpringBoot复合类加载器*//*** 获取SpringBoot复合类加载器* @return SpringBoot复合类加载器*/try {= null) {} else {", ioe);/*** 转换资源为ClassFileLocator* @param resource 资源。
2025-04-25 10:14:45
558
原创 Byte-Buddy系列 - 第3讲 byte-buddy与jacoco agent冲突问题
配置Jacoco插件避开 ByteBuddy 要处理的类,即在jacoco中通过。ByteBuddy 与 JaCoCo 同时使用时出现。
2025-04-23 13:44:23
363
原创 Java注解不同ElementType说明及示例
在Java注解系统中,没有直接的ElementType类型可以限制注解"只能作为其他注解的属性"。当注解作为另一个注解的属性时,它实际上是作为一个"值"使用,而不是作为传统的注解应用于程序元素。是Java 8引入的注解目标类型,它比其他ElementType类型具有更广泛的应用范围,可用于几乎所有类型出现的位置。这是Java注解系统的一个局限性,没有直接的方式来声明"只能作为其他注解属性使用"的限制。:应用于方法参数声明。:应用于构造函数声明。:应用于注解类型声明。:应用于类型参数声明。
2025-04-22 08:59:44
644
原创 SpringAI系列 - MCP篇(一) - 什么是MCP
由client中的用户自行选择及使用相应的模版或指令,用于引导client中的用户与语言模型进行交互(例如在client端通过输入。
2025-04-20 15:57:51
272
原创 如何使用SpringApplicationRunListener在Spring Boot 应用的不同生命周期阶段插入自定义逻辑
starting方法方法在run方法刚开始时立即调用,用于非常早期的初始化操作。方法在环境准备好但尚未创建之前调用。此方法可以用于在环境配置完成后执行逻辑。方法在创建并准备好,但尚未加载资源之前调用。方法在加载完成但尚未刷新之前调用。started方法在上下文刷新后,应用启动完成,但和尚未执���时调用。ready方法在run方法即将结束时调用,此时应用上下文已刷新,所有和已执行。failed方法如果应用启动过程中发生异常,则调用此方法。是 Spring 框架中一个抽象类,位于包下。
2025-04-17 11:01:07
710
原创 SpringBoot集成H2 Console管理界面
这个 URL 配置了一个运行在内存中的 H2 数据库,兼容 MySQL,表名和列名自动转为小写,并且设置了数据库在连接关闭或 JVM 退出时不会自动关闭。
2025-04-14 09:09:48
710
原创 Byte-Buddy系列 - 第2讲 方法拦截与委托实现
由于这种组织方式,您应该总是最后注册更具体的方法匹配器。否则,之后注册的任何不太具体的方法匹配器可能会阻止应用之前定义的规则。与此方法匹配器成功匹配的方法永远不会被覆盖。默认情况下,Byte Buddy不覆盖任何合成方法。Byte Buddy以堆栈形式组织重写方法的规则。这意味着每当你注册一个新规则来覆盖一个方法时,都会被推到这个堆栈的顶部,并且总是首先应用(),直到添加了一个新的规则,这个规则的优先级更高。中的方法名也可以不一样,则会自动根据。定义,更具体的参数类型(相较于。)会优先生效,使用如下。
2025-04-09 16:56:05
938
原创 Byte-Buddy系列 - 第1讲 关于类的相关操作
Java 代理实现为一个简单的 jar 文件,其入口点在 jar 文件的 manifest 文件中指定,正如链接资源中所述。Byte Buddy 是一个用于在 Java 应用程序运行时创建和修改 Java 类的代码生成和操作库,无需编译器的帮助。此外,Byte Buddy 提供了一个方便的 API,可以手动、更改类,使用 Java 代理或在构建期间进行更改。Byte Buddy 支持从 Java 5 到最新版本的 Java,并且是一个轻量级库,仅依赖于 Java 字节码解析库 ASM 的访问者 API。
2025-04-09 16:55:21
803
转载 【转载】maven profile 使用/教程/示例
本文用示例说明maven的profile的使用。mavan的profile作用Maven中的profile能让你为不同的环境定义不同的构建;Maven中的profile是一组可选的配置,可以用来设置或者覆盖配置默认值。一个Profiles下面允许出现的元素</</</</</</</</</</</</</</</</</</</maven的profile与SpringBoot的profile的区别SpringBoot的profile作用:运行的时候,把哪几个配置包含进来。
2025-03-11 15:32:37
249
原创 SpringAI系列 - ToolCalling篇(二) - 如何设置应用侧工具参数ToolContext(有坑)
在使用AI大模型的工具调用机制时,工具参数都是由大模型解析用户输入上下文获取的,由大模型提供参数给本地工具调用。传递额外的应用侧(客户端)参数给工具调用,如此应用侧在执行工具调用的过程中,便可获取到应用侧层传递的上下文参数,同时又可获取到AI大模型模型传递的工具参数。参数的,这个参数是Spring AI自身用来设置应用侧参数的,并不需要大模型提供。来解析工具参数,查看其源码发现目前并没有预留排除参数定义的方式。,如此在将工具描述上传给大模型时,大模型会认为工具同时需要。获取应用侧的上下文参数。
2025-02-19 15:15:23
778
原创 SpringAI系列 - Tool Calling篇(一)- @Tool集成、Function集成
如果您不提供描述,则将使用方法名称作为工具描述。强烈建议提供详细描述,因为这对于模型理解工具的目的和如何使用它是至关重要的。注解,并在提示选项中提供它(单个提示中可以定义和引用多个工具),以便模型可以使用。在大模型无法回答我们的问题时,会自动检测用户输入时提供的工具并调用相应的工具,Spring AI框架会自动处理会话中的工具调用,通过调用。模式会将大模型的响应拆分成多条记录,导致Spring AI无法正确提取到工具调用的上下文。同样以之前发送警报的工具调用为例,调整为使用Function集成的方式,
2025-02-18 08:38:33
908
1
原创 SpringAI系列 - RAG篇(四) - QuestionAnswerAdvisor
大语言模型是无法直接回答私有知识领域的问题,我们可以借助RAG技术和私有知识文档构建所谓的智能体应用,构建一个能回答私有领域问题的大模型问答应用。至此,RAG中2个阶段的所有工具均已介绍完毕,接下来我们便可以使用SpringAI集成大模型实现我们自己的AI知识库了。,该组件目前处于孵化中的状态,后续可能会改变,可自行进行学习和了解。Spring AI 为上述的 RAG 流程提供开箱即用的支持,即。即可以理解为跟用户输入类似的文档,即答案。可以理解为用户的输入,即用户的问题,而。也可以从简只使用2级层次。
2025-02-18 08:37:32
321
原创 SpringAI系列 - RAG篇(三) - ETL
主要负责知识的提取和管理。ETL 框架是检索增强生成(RAG)数据处理的核心,其将原始数据源转换为结构化向量并进行存储,确保数据以最佳格式供 AI 模型检索。具体组件的使用可点击相关链接进行查看。整个ETL管道操作的核心数据结构为。,该框架对应我们之前提到的。,如图片、音频和视频,
2025-02-18 08:36:38
296
原创 SpringAI系列 - RAG篇(二) - VectorStore
Apache Cassandra、Azure Cosmos DB、Azure Vector Search、Chroma、GemFire、Milvus、MongoDB Atlas、Neo4j、OpenSearch、PineCone、Qdrant、SAP Hana、Typesense和Weaviate,大家可根据需要。元数据即对应ETL阶段生成的Document中的metadata中的属性,在使用VectorStore相关操作时,可通过。当给定一个向量作为查询时,向量数据库返回与查询向量“相似”的向量。
2025-02-18 08:35:23
410
原创 SpringAI系列 - RAG篇(一) - Embedding Model
我们亦可以通过HTTP接口调用的方式对EmbeddingMode发起调用,我们将文本发送给EmbeddingModel,然后EmbeddingModel将向量化后的多维浮点数数组返回给我们。加载到向量数据库的过程中,最重要的转换之一是将原始文档拆分成较小的部分。考虑到模型的令牌限制,我们需要具备过滤相关数据的能力,并将过滤出的数据填充到在模型交互的上下文窗口中,这种方法俗称。这种将高维数据映射到低维空间的技术在机器学习中非常有用,因为它可以将复杂的数据表示为简单的向量,从而便于计算和分析。
2025-02-18 08:33:33
247
原创 Spring AI系列 - Chat Client & Chat Model
例如,在聊天机器人中,用户输入问题后,模型可以逐步生成和返回回答,而不是一次性返回完整答案。:流式响应允许模型在处理数据的同时逐步返回结果,而不是等待整个任务完成后再返回。相较于ChatModel,ChatClient提供了通用的流式的API,提高了开发者的编程体验,且支持同步和流式编程模型。:对于用户来说,流式响应可以显著改善体验,特别是在处理复杂查询或生成长文本时,用户可以逐步看到结果,而不必长时间等待。:通过逐步返回结果,流式响应可以减少内存和计算资源的占用,因为不需要一次性处理和存储所有数据。
2025-02-18 08:32:06
261
原创 SpringAI系列 - 通过Ollama本地安装大模型
目前市面上提供了大量的Chat UI开源实现,比如Open WebUI、Cherry Studio、AnythingLLM等,启动后亦可停止ollama运行,配置完环境变量后再通过运行ollama app.exe重启ollama即可。应该至少有 8 GB 可用 RAM(内存)来运行 7B 型号,以下关于Ollama环境变量的详细说明由Copilot根据。16 GB 来运行 13B 型号,32 GB 来运行 33 B 型号。
2025-02-11 13:38:13
942
原创 SpringAI系列 - 使用LangGPT编写高质量的Prompt
文件夹下提供了更多例子,包括 Prompt 以及和 ChatGPT 的完整对话,帮助你更好的上手使用 LangGPT。你也可以借鉴结构化的思想在 LangGPT 提供的模板基础上自行添加、删除、修改得到自己的 Prompt。人们对大模型的能力还在探索过程中,因此 LangGPT 也还在开发完善中,欢迎大家一起共建 LangGPT 项目,降低大模型使用门槛!上面的诗人 Prompt 就是通过用 LangGPT 的 Role 模板设计的。上面的例子都是使用 Role 模板编写的,
2025-02-06 10:10:46
1488
原创 Spring AI系列 - 核心概念
例如,最近的一篇研究论文发现,最有效的Prompt之一可以以“深呼吸一下,分步进行此任务”开头。渲染后的字符串成为传递给AI模型的Prompt的内容。然而,即使对于机器学习专家来说,这是一个具有挑战性的过程,而且由于 GPT 等模型的大小,它极其耗费资源。从最初的简单字符串开始,Prompt逐渐演变为包含多条消息的格式,其中每条消息中的每个字符串代表模型的不同角色。这种复杂性导致了一个专门领域的出现,涉及创建 Prompt 以产生预期的输出,然后将生成的简单字符串转换为可用于应用程序集成的数据结构。
2025-01-13 08:46:48
1351
转载 【转载】用于软件架构的 C4 模型
是一位专门从事软件架构的独立顾问,也是“Software Architecture for Developers”(面向开发人员的软件架构、技术领导力和敏捷性平衡的指南)的作者。他还是 C4 软件架构模型的创建者,这是一种创建代码映射的简单方法。没有预定义任何特定的符号,你在这些示例图中看到的是一个个简单的符号,适用于白板、纸张、便签、索引卡片和各种图表工具。软件架构图是一种非常好的表达方式,可以用它们来表达你将如何构建一个软件系统(预先设计)或者现有的软件系统是如何工作的(回顾文档、知识分享和学习)。
2025-01-08 14:03:47
141
原创 Docker部署Kafka
新版Kafka直接基于Kraft,无需再使用zookeeper。必须设置外部连接Kafka broker的地址,通过Docker进行部署,部署前需修改启动脚本中的。,服务器部署时设置为。服务器宿主机ip地址。
2025-01-03 13:12:50
302
原创 如何解决Git Clone时无法识别Https证书的问题
下载并安装缺失的根证书。你可以从证书颁发机构的网站下载根证书,然后将其添加到系统的证书存储中。这个问题通常是由于本地计算机无法验证远程服务器的SSL证书引起的。:你可以临时配置Git忽略SSL验证,但这不推荐用于生产环境,因为会降低安全性。:确保你使用的是最新版本的Git,因为较新的版本可能已经修复了这个问题。推荐使用第三种或第四种方法来解决这个问题,以确保连接的安全性。
2024-12-19 09:20:55
511
原创 不同查询构建器的使用方式(Mybatis、Mybatis-Plus、Mybatis-Flex、Spring Data JPA、QueryDsl)
针对同样的SQL查询需求,分别使用Mybatis、Mybatis-Plus、Mybatis-Flex、Spring Data JPA、QueryDsl等方式进行实现。
2024-11-25 17:16:34
844
原创 Redis Search系列 - 第七讲 Windows(CygWin)编译Friso
它提供了一个大型的 GNU 和 Open Source 工具集合,这些工具可以在 Windows 上运行,并且提供了类似于 Linux 的功能。完全基于模块化设计和实现,可以很方便的植入其他程序中, 例如:MySQL,PHP,并且提供了php5, php7, ocaml, lua的插件实现。3)进入src目录,删除原有的 Makefile, 更改 Makefile.cygwin 为 Makefile,注意删除Makefile中的。4)打开 cygwin 的终端,cd 到 src 目录,运行。
2024-11-20 18:39:45
969
原创 GraphQL系列 - 第2讲 Spring集成GraphQL
在目录下创建): Person): Personid: ID!age: Int。
2024-10-29 16:52:24
1402
原创 GraphQL系列 - 第1讲 GraphQL语法入门
GraphQL是一种用于 API 的查询语言以及一个用于执行查询的服务器端运行时。它由 Facebook 开发,并在 2015 年开源。GraphQL 的主要目的是提供一种更高效、灵活的数据查询方式,替代传统的 REST API。基本功能基本功能描述类型系统使用强类型系统定义 API 的数据结构。查询客户端可以通过查询请求精确地获取所需的数据,减少数据传输量。变更(Mutation)支持变更操作,用于创建、更新或删除数据。订阅(Subscription)
2024-10-28 13:59:26
1509
原创 DDD系列 - 番外篇1 记一些常用的架构设计原则
将多个组件链接成一个独立可执行文件(war、jar、ext),并以动态加载的插件形式来部署(组件化的插件式架构)。组件是软件的部署单元,是整个软件系统在部署过程中可以独立完成部署的最新小实体(jar、dll)。设计良好的组件都应该永远保持可被独立部署的特性,同时也意味着这些组件应该可以被单独开发。在这些情况下,“软件模块”指的就是一组紧密相关的函数和数据结构。大部分情况下,其最简单的定义就是指一个源代码文件,既然改变不可避免,那就将变化隔离在单独的组件,让变去依赖不变(不稳定依赖稳定),
2024-10-25 09:01:26
146
原创 Redis Search系列 - 第六讲 基准测试 - Redis Search VS. MongoDB VS. ElasticSearch
测试项MongoDB结果对比100%写吞吐量:69672/秒平均耗时:0.341毫秒吞吐量:7911/秒平均耗时:7.818毫秒吞吐量:37985/秒平均耗时:1.001毫秒Redis JSON比MongoDB快5.4倍比ElasticSearch在单独写方面快200倍99%的Redis请求在不到1.5ms的时间内完成100%读吞吐量:178364/秒平均耗时:0.172毫秒吞吐量:11281/秒平均耗时:5.578毫秒吞吐量:62933/秒平均耗时:0.768毫秒。
2024-10-22 13:36:28
1308
原创 Redis Search系列 - 第五讲 基准测试 - Redis Search VS. ElasticSearch
一个简单的维基百科用例我们发现RedisSearch在索引上快了58%,在索引数据集上执行双词搜索时快了4倍。一个更高级的多租户用例Redis Search在201秒内创建了50k个索引,而ElasticSearch在创建921个索引后崩溃了。组件RediSearch搜索引擎基于现代和优化数据结构的专用引擎基于Lucene引擎编程语言基于C,极度优化Java内存技术本地运行在DRAM和持久内存上基于磁盘并有缓存选项协议优化的RESP(REdis序列化协议)HTTP。
2024-10-22 13:35:26
1138
原创 Redis Search系列 - 第四讲 支持中文
如果你希望使用自定义词典,可以在加载Redis Search模块时在模块级别进行设置。FRISOINI设置可以指向包含相关设置和词典文件路径的 friso.ini 文件。请注意,没有默认的 friso.ini 文件位置。RediSearch 自带的 friso.ini 和词典文件在构建时已编译到模块二进制文件中。在该dict/UTF-8目录下新建自定义的字典,如下图新建,在该自定义文件中输入业务专属的词条及其同义词集合,# 格式:词条/同义词集合# 示例格式1(无同义词): 你好/null。
2024-10-18 13:42:20
1313
原创 Redis Search系列 - 第三讲 拼写检查
从v1.4开始,Redis Search可以为拼写错误的查询术语(term)生成替代的方案。为拼写错误的搜索词提供建议。例如,术语“reids”可能是“redis”的拼写错误版本。成为拼写建议,每个拼写建议根据其在索引中的出现次数给出一个标准化分数。是指两个字符串之间,由一个转成另一个所需的最少编辑操作次数。允许的编辑操作包括插入一个字符、删除一个字符和替换一个字符。关于Spellchecking中自定义字典相关的命令。关于Spellchecking的相关命令。备选项根据它们与拼错词之间的。
2024-10-18 13:38:39
636
原创 Redis Search系列 - 第二讲 同义词
后续在搜索时若term属于某个同义词组,则包含同义词组内的任何一个词的文档均能被检索到。在Redis Search中支持为某个index设置。关于同义词相关操作命令。
2024-10-18 13:37:30
442
原创 Redis Search系列 - 第一讲 创建索引
Redis Search 是 Redis 的一个模块,用于提供全文搜索和二级索引功能。:停用词是指在索引和搜索过程中被忽略的常见词,如 “the”、“is”、“and” 等。:术语是索引中的一个条目,表示一个唯一的词元。:索引是一个数据结构,用于快速查找包含特定词的文档。它通常是一个倒排索引(inverted index),其中存储了每个词及其在文档中的位置。:文档是索引中的基本单位。创建索引后,Redis Stack会自动索引存储在数据库中的任何现有的、修改的或新创建的JSON文档。
2024-10-18 13:34:56
2570
转载 【转载】RabbitMQ 死信机制真的可以作为延时任务这个场景的解决方案吗?
其实就平时可能遇见的场景而言,使用RabbitMQ 的死信机制就已经足够了。毕竟大部分延时任务都是固定时间的,比如下单后半小时未支付则关闭订单这种场景。只要场景是有着固定时间的延时任务的话,RabbitMQ无疑可以很好的承担起这个需求。RabbitMQ 死信机制能作为延时任务这个场景的解决方案但是,由于 RabbitMQ 消息死亡并非异步化,而是阻塞的。所以无法作为复杂延时场景 -需要每条消息的死亡相互独立这种场景下的解决方案。
2024-09-14 09:53:26
225
原创 MySql批量迁移数据库
的多个单独的SQL脚本,每个SQL脚本名称即为数据库名(如my_db.sql脚本的数据库名为my_db),且排除内置的mysql、sys、information_schema、performance_schema数据库,具体导出脚本。中,每个sql脚本名称即为数据库名(如my_db.sql脚本的数据库名为my_db),批量建库、导入SQL脚本的。将备份目录(SQL_DIR)下的多个sql脚本恢复到。中的所有数据库(表结构、数据)导出到。
2024-09-12 10:44:41
771
原创 记一次用户认证代码重构中设计模式及设计原则的使用
接入AuthServer框架,预留UniLoginUserDetailsService接口,负责用户登录认证逻辑,RBAC支持多种用户登录认证,如账号密码、LDAP用户,且后续支持扩展其他的登录认证方式如手机验证码等。且这些业务规则适用于所有的认证类型,为了避免在每个认证实现类中都添加上述逻辑,则使用了模板方法模式。
2024-08-09 10:26:58
805
pagenote.crx
2021-12-03
kubekey-v1.2.0-linux-amd64.tar.gz
2021-11-30
android存储
2013-05-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人