SpringAi学习之ChatModel API
写在前面ChatClient API为开发者提供了将人工智能驱动的聊天补全功能集成到其应用程序中的能力。它利用预训练的语言模型(如GPT,即生成式预训练转换器),以自然语言生成类人化的用户输入响应。
API的工作原理通常是向AI模型发送提示或部分对话,然后AI模型会根据其训练数据和对自然语言模式的理解生成对话的补全或延续内容。之后,生成的完整响应会返回给应用程序,应用程序可以将其呈现给用户,或用于进一步处理。
<font style="color:rgb(25, 30, 30);">Spring AI ChatModel API</font> 旨在成为一个简单且可移植的接口,用于与各种 AI 模型 交互,使开发人员能够以最少的代码更改在不同模型之间切换。这种设计符合 Spring 的模块化和可互换性理念。
此外,借助诸如用于输入封装的<font style="color:rgb(25, 30, 30);">Prompt</font>和用于输出处理的<font style="color ...
SpringAi学习之Advisors API
顾问 APISpring AI Advisors API 提供了一种灵活且强大的方式,用于拦截、修改和增强 Spring 应用程序中由 AI 驱动的交互。通过利用 Advisors API,开发人员能够创建更复杂、可重用且易于维护的 AI 组件。
其主要优势包括封装重复出现的生成式人工智能模式、转换与大型语言模型(LLMs)之间发送和接收的数据,以及在各种模型和用例中提供可移植性。
开发者可以使用ChatClient API配置现有的顾问,如下例所示:
123456789101112131415161718ChatMemory chatMemory = ... // Initialize your chat memory storeVectorStore vectorStore = ... // Initialize your vector storevar chatClient = ChatClient.builder(chatModel) .defaultAdvisors( MessageChatMemoryAdvisor.builder(chatMemory) ...
SpringAi学习之ChatClient API
写在前面本篇开始学习学习Spring Ai提供的Chat Client Api,通过它可以很轻松的与大模型进行交互。
ChatClient API**ChatClient**为与AI模型进行通信,提供了一个流畅的API。它同时支持同步和流式编程模型。
流畅的API具有构建提示词组成部分的方法,该提示词会作为输入传递给AI模型。Prompt包含用于指导AI模型输出和行为的指令性文本。从API的角度来看,提示词由一系列消息组成。
AI模型处理两种主要类型的消息:
用户消息,即用户的直接输入。
系统消息,由系统生成以指导对话。
这些消息通常包含占位符,这些占位符在运行时会根据用户输入进行替换,以自定义AI模型对用户输入的响应。
还可以指定一些提示选项,如:
AI模型的名称,即要使用的AI模型的名称。
温度设置,控制生成输出的随机性或创造性。
这些功能使得ChatClient成为一个强大的工具,允许开发者以灵活的方式与AI模型进行交互,并通过定制化的提示和消息来优化AI模型的响应。
创建ChatClientChatClient是使用ChatClient.Builder对象创建的。你可以 ...
SpringAi学习之快速入门
写在前面本篇开始使用Spring Ai,注意Spring Ai支持Spring Boot3.4.x版本,当Spring Boot 3.5.x版本发布时,也将提供支持。
Spring Initializr前往start.spring.io,选择你想要在新应用中使用的人工智能模型和向量存储。
Artifact RepositoriesMilestones - Use Maven Central从1.0.0-M6版本开始,发行版已在Maven中央仓库提供。无需修改您的构建文件。
Snapshots - Add Snapshot Repositories要使用Snapshot(以及1.0.0-M6里程碑之前的)版本,你需要在构建文件中添加以下快照仓库。
将以下仓库定义添加到您的Maven或Gradle构建文件中:
Maven
123456789101112131415161718192021<repositories> <repository> <id>spring-snapshots</id> <name>Spring ...
SpringAi学习之核心概念
写在前面本篇开始我们进入Spring Ai的学习,建议多浏览 官方文档,加深印象,使用的Spring Ai版本为1.0.0.
模型(Models)人工智能模型是设计用来处理和生成信息的算法,通常模仿人类的认知功能。通过从大型数据集中学习模式和洞察力,这些模型可以做出预测,生成文本、图像或其他输出,增强各行各业的各种应用。
有许多不同类型的人工智能模型,每种都适合特定的用例。虽然 ChatGPT 及其生成式人工智能能力通过文本输入和输出吸引了用户,但许多模型和公司提供了多样化的输入和输出方式。在ChatGPT出现之前,很多人就对Midjourney和Stable Diffusion等文本到图像生成模型很感兴趣。
下表根据输入和输出类型对几个模型进行了分类:
Spring AI目前支持处理语言、图像和音频作为输入和输出的模型。表中最后一行接受文本作为输入并输出数字,这通常被称为文本嵌入,代表了AI模型中使用的内部数据结构。Spring AI支持嵌入功能,以实现更高级的用例。
像GPT这类模型的独特之处在于其预训练特性,正如GPT(即生成式预训练Transformer)中的“P”所表明的那 ...
SpringBoot+MCP实现本地工具调用实战
写在前面前面我们学习了MCP以及其中的三个角色,包含客户端、服务端和资源端,对应的解释如下:
(1)客户端:可理解为是Ai应用层,如聊天对话框。用户输入信息后,由客户端接口接收,再由客户端调用服务端调配资源处理;
(2)服务端:可理解为注册中心,请注意所有的工具都是注册在服务端;
(3)资源端:资源端就是大模型解析之后的用户需求的服务,即实际的处理逻辑。资源端可以和服务端部署在一起,也可以单独部署。
资源端第一步,新建一个名为ai-mcp-server的SpringBoot项目,注意SpringBoot版本为3.4.2,JDK版本为17。之后pom.xml文件信息如下所示:
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162<?xml version="1.0" encoding="UTF-8"?><project xmlns="http:/ ...
聊一聊最近很火的MCP协议
写在前面笔者最近在用Dify调用工具,但是发现效果非常不好,而且内部都是封装好的,不知道它是如何调用工具的。而现在公司恰好有些需求是要求让大模型直接调用本地文件,目前只能将文件上传上去,但是大模型的数据通常都是截止到某个时间点的,即训练的数据集始终是落后且固定的,无法实时获取数据。
当然我们可以使用联网搜索,也可以使用知识库,接口等方式将自己的数据上传给大模型,但是感觉使用起来还是差点意思,无法做到架构的统一化。鉴于此,MCP协议诞生了。
什么是MCPMCP全称(Model Context Protocol),即模型上下文协议,是美国一家Ai初创公司Anthropic于2024年11月推出的一种开放协议,旨在标准化大模型(LLM)与外部数据源、工具的交互方式。Anthropic也是大语言模型Claude的母公司。
MCP的主要目的在于解决当前AI模型因数据孤岛限制而无法充分发挥潜力的难题,MCP可以使AI应用能够在安全控制下,访问及操作本地和远程数据,为AI应用提供了连接万物的接口。
即MCP可直接在AI与数据(包括本地数据和互联网数据)之间架起一座桥梁,通过MCP服务器和MCP客 ...
如何在本地搭建LLM并使用
写在前面本篇来学习如何在Windows上安装属于开发者自己的大模型,主要以Ollama为例进行介绍。Ollama 是一款优秀的开源工具,让开发者可以在本地轻松运行和管理各种大型语言模型(LLMs)。
Ollama介绍Ollama 是一个简化大型语言模型(LLM)部署和使用的工具。它具有以下特点:
本地运行: 模型完全在您的本地计算机上运行,无需联网,保护您的隐私和数据安全。
简单易用: 通过简单的命令行指令,即可下载、运行和管理各种 LLM。
模型丰富: 支持 Llama 2、Deepseek、Mistral、Gemma 等多种流行的开源模型。
跨平台: 支持 macOS、Windows 和 Linux 系统。
开放API:支持与OpenAI兼容的接口,可以和其他工具集成。
安装OllamaWindows平台安装点击 Ollama官网,选择合适的版本:
之后笔者将其下载到F盘,但是笔者希望将Ollama安装到E盘的指定目录下,此时可以是以如下方式进行安装目录自定义:
执行该命令,之后就会将Ollama安装到自定义目录下。
MacOS平台安装点击 Ollama官网,选择合适的版本 ...
聊一聊常用的3种实时技术
写在前面我们知道,早期网站只展示静态内容,但是现在我们更希望实时更新、即时聊天、通知推送和动态仪表盘等功能,因此就有必要学习目前常用的3种实时技术了。
常用的有SSE、WebSocket和Long Polling这三种,下面将分别进行介绍:
(1)SSE(Server-Send Events):轻量级单向数据流;
(2)WebSocket:全双工双向通信;
(3)Long Polling(长轮询):传统过渡方案。
假设现在我们有如下三个业务场景,它们都需要实现数据实时更新:
股票交易仪表盘;
即时聊天平台;
实时新闻推送。
面对这些需求,我们该如何选择合适的方案呢?接下来我们将从实战、架构、性能和扩展性角度来进行分析。
Long Polling(长轮询)原理长轮询的原理就是客户端持续地询问服务器,有点类似于吃饭排队时,站在店门口,每隔几分钟询问是否轮到你吃饭了么,可见效率非常低下。
优点(1)实现简单,标准的REST;(2)兼容性最好。
缺点(1)高延迟;(2)浪费大量资源,存在大量的空请求;(3)扩展性差。
适用场景当系统无法使用WebSocket或者SSE,且需要支持对老旧浏览 ...
MySQL同步ES的6种方式
写在前面我们知道,在分布式系统日益发展的今天,MySQL与Elasticsearch的协同已成为解决高并发查询与复杂检索的标配组合。但是,如何实现两者间数据的高效同步,已成为架构设计中不可忽视的问题。笔者结合实际工作经验和一些参考文章,给出常用的6种可行的同步方式,以供在后续架构设计中作参考。
小批量数据同步方式同步双写【适用场景】对数据实时性要求较高,且业务逻辑较为简单的场景,如支付记录同步等。
【实现方式】在代码中同时写入MySQL和ES。
【示例代码】以下是同步双写的示例代码:
12345678910@Transactional public void createRecord(TRecord trecord) { // 写入MySQL trecordMapper.insert(trecord); // 同步写入ES IndexRequest request = new IndexRequest("records") .id(trecord.getId()) .source ...
