April 2025

Spring 对于Chat模型的API支持

ref-nobody 创建时间 2025年4月30日 | 本文最后更新于 2025年5月2日 No Comments

spring ai 1.0.0-SNAPSHOT Chat Model API 为开发者提供了将智能对话补全能力集成至应用程序的接口。该API基于预训练语言模型(如GPT生成式预训练变换器),可生成符合人类语言习惯的交互响应。 其标准工作流程是:应用程序向AI模型发送提示信息或对话片段,模型根据训练数据对自然语言模式的理解生成对话补全内容,最终将结构化响应返回给调用方,供终端用户展示或后续业务处理。 Spring AI Chat Model API 采用简洁可移植的设计理念,通过统一接口实现对多种AI模型的调用,开发者仅需极少的代码调整即可切换不同模型。这一设计完美契合Spring框架模块化与可互换性的核心思想。 通过Prompt(输入封装)和ChatResponse(输出处理)等配套类的协作,该API实现了与AI模型通信的标准化。它封装了请求构建与响应解析的复杂性,为开发者提供了开箱即用的简洁接口。…

Read More

检索增强生成(RAG)

ref-nobody 创建时间 2025年4月30日 | 本文最后更新于 2025年4月30日 No Comments

检索增强生成(Retrieval Augmented Generation,RAG)是一种有助于克服大型语言模型在处理长篇内容、事实准确性以及上下文感知方面所面临限制的技术。 Spring AI 通过提供一种模块化架构来支持 RAG,这种架构允许你自行构建定制的 RAG 流程,或者使用通过Advisor API 提供的现成 RAG 流程。 Advisors Spring…

Read More

向量数据库

ref-nobody 创建时间 2025年4月30日 | 本文最后更新于 2025年4月30日 No Comments

代码已上传至github仓库:https://github.com/itaiit/spring-ai-learn 向量数据库是一种专门类型的数据库,在人工智能应用中发挥着关键作用。 在向量数据库中,查询与传统关系型数据库有所不同。它们不是寻找精确匹配,而是执行相似性搜索。当给出一个向量作为查询时,向量数据库会返回与查询向量“相似”的向量。 向量数据库用于将您的数据与人工智能模型集成。使用它们的第一步是将您的数据加载到向量数据库中。然后,当要将用户查询发送给人工智能模型时,会先检索一组相似的文档。这些文档随后作为用户问题的上下文,并与用户的查询一起发送给人工智能模型。这种技术被称为检索增强生成(Retrieval Augmented Generation,RAG)。 要将数据插入向量数据库,需将其封装在一个 Document 对象内。Document 类封装了来自数据源(如 PDF 或 Word 文档)的内容,并包含以字符串形式表示的文本。它还包含以键值对形式呈现的元数据,包括诸如文件名等详细信息。 当插入向量数据库时,文本内容会通过嵌入模型转换为数值数组,即浮点数数组(float),这被称为向量嵌入(vector…

Read More

使用Spring Ai调用DeepSeek

ref-nobody 创建时间 2025年4月29日 | 本文最后更新于 2025年4月30日 No Comments

使用spring ai调用deepseek来完成对于模型的基本使用,熟悉一下spring ai的开发方式。使用的版本信息: spirng boot 3.4.5 spring-ai-bom 1.0.0-M7 spring-cloud-alibaba-dependencies 2021.0.4.0 项目中使用nacos作为配置中心保存openai key的配置,因此引入了spring-cloud-alibaba-dependencies。 搭建项目依赖 版本依赖管理: application.yml文件配置:…

Read More

AI的概念

ref-nobody 创建时间 2025年4月28日 | 本文最后更新于 2025年5月3日 No Comments

模型 AI 模型是设计用于处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式和洞察,这些模型可以进行预测、生成文本、图像或其他输出,从而在各个行业中增强各种应用程序的功能。 有许多不同类型的 AI 模型,每种模型都适用于特定的用例。尽管 ChatGPT 及其生成式 AI 功能通过文本输入和输出吸引了用户,但许多模型和公司提供了多种输入和输出方式。在 ChatGPT 之前,许多人对文本到图像生成模型(如 Midjourney 和 Stable…

Read More

第一个Netty程序

ref-nobody 创建时间 2025年4月21日 | 本文最后更新于 2025年4月21日 No Comments

最近在看dubbo的源代码,看到了org.apache.dubbo.rpc.protocol.tri.TripleProtocol#refer方法通过exchange->transporter->client的链路获取到了表示客户端连接的Client对象,里面使用到了netty4。因此参考dubbo创建Client的流程写一个netty的示例程序。 服务端搭建 简单使用命令在本地启动一个监听端口的服务端程序:nc -l 30888 我这里监听的30888端口。 客户端搭建 示例代码: 结果验证 启动客户端程序之后,可以看到服务端成功打印客户端发送的请求:

Read More

Dubbo的spi代理对象生成原理

ref-nobody 创建时间 2025年4月13日 | 本文最后更新于 2025年4月26日 No Comments

前言 通过调试可以观察到dubbo中spi拓展生成的对象都有$Adaptive的后缀,例如protocol的spi实例化对象为: 下面来看看这个代理对象是如何生成的:首先我们获取spi的代理对象可以通过ExtensionLoader中的两个方法getExtension和getAdaptiveExtension来获取,这两者的区别是: – getExtension 方法用于获取指定名称的扩展点实现类实例; – getAdaptiveExtension 方法用于获取一个自适应的扩展点实例。这个实例会根据运行时的参数动态地选择具体的扩展点实现类;1. 在代码中,使用getExtensionLoader(type)首先会获取到对应类型的spi接口的ExtensionLoader实例,如果不存在则创建,并进行缓存存放到ExtensionLoader类的extensionLoadersMap成员变量中。创建对应类型的ExtensionLoader很简单,使用map的putIfAbsent方法,将new出来的ExtensionLoader放入缓存map中:extensionLoadersMap.putIfAbsent(type, new ExtensionLoader(type, this, scopeModel));2. 然后调用创建出来的ExtensionLoader的getAdaptiveExtension方法获取自适应的实例。创建的流程是首先动态生成自适应的spi类的java代码,即图中的code变量;然后对动态生成的代码进行编译Compile生成Class对象。有了Class对象之后,即可通过反射创建实例对象。…

Read More

Dubbo生成消费方接口代理对象

ref-nobody 创建时间 2025年4月13日 | 本文最后更新于 2025年5月13日 No Comments

消费者端接口引用 从消费者端来进行分析,定义消费者的接口的时候可以定义返回ReferenceBean的@Bean: @Bean@DubboReference(group = "demo", filter = "-mytest,refFilter1")public ReferenceBean<DemoService> referenceBean() { HashMap<String, Object> props =…

Read More

Macos中安装python后,python命令版本不一致的问题

ref-nobody 创建时间 2025年4月11日 | 本文最后更新于 2025年4月19日 No Comments

例如使用brew安装了python3.10之后,使用python3命令得到的版本却是3.9.6的版本: macOS 预装的 /usr/bin/python3 通常是较旧的 Python 3.x 版本(例如 Python 3.8 或 3.9),因为苹果倾向于使用稳定的系统版本,而非最新版。这是出于系统兼容性和稳定性考虑,不建议直接修改或删除系统自带的 Python。 查看python3的路径,可以知道是在/usr/bin下面。其实还有一个路径是/usr/local/bin,通过echo $PATH查看环境变量,可以看到/usr/local/bin在前,因此优先级高。…

Read More