SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识

SpringAI 大模型应用开发篇-SpringAI 项目的新手入门知识
🔥博客主页: 【小扳_-ZEEKLOG博客】
❤感谢大家点赞👍收藏⭐评论✍

文章目录

        1.0 SpringAI 概述

        1.1 大模型的使用

        2.0 SpringAI 新手入门

        2.1 配置 pom.xml 文件

        2.2 配置 application.yaml 文件

        2.3 配置 ChatClient

        2.4 同步调用

        2.5 流式调用

        2.6 System 设定

        2.7 日志功能

        2.8 会话记忆功能

        2.8.1 ChatMemory

        2.8.2 添加会话记忆功能


        1.0 SpringAI 概述

        目前大模型应用开发最常见的框架就是 LangChain,然而 LangChain 是基于 Python 语言,虽然有 LangChain4j,但是对于大量使用 Spring 生态的应用来说,适配性就稍微差了些。

        而 Spring 公司推出的 SpringAI 框架,充分利用了 Spring 框架中 AOP、IOC 的能力,可以与现有的 Java 项目无缝融合,非常方便。

        当然,SpringAI 要求的 JDK 版本至少是 JDK17,SpringBoot 也必须是 3.x 的版本才可以,所以如果想要使用 SpringAI,必须先升级 JDK 和 SpringAI 版本才行。

        如果是比较老的项目,也可以使用 LangChain4j,它要求的最低 JDK 版本为 JDK8。

        1.1 大模型的使用

        首先要明确一点,大模型应用开发并不是在浏览器中跟 AI 聊天。而是通过访问模型对外暴露的 API 接口,实现与大模型的交互。

        因此,企业首先需要有一个可访问的大模型,通常有三种选择:

        1)使用开放的大模型 API;

        本次演示的都是使用开放的大模型 API,只需要选择自己合适的大模型,创建出自己的 API Key 就能免费使用很长时间了:

        2)在云平台部署稀有大模型;

        3)在本地服务器部署稀有大模型;

        2.0 SpringAI 新手入门

        2.1 配置 pom.xml 文件

        首先,在 SpringBoot 项目中引入 SpringAI 起步依赖:

        接着,在项目 pom.xml 中添加 SpringAI 的版本信息:

        然后,添加 SpringAI 的依赖管理项:

        最终,完整 pom.xml 依赖如下:

        除了以上 SpringAI 的依赖之外,我还额外引入了在之后的项目开发中所用到的依赖。

        2.2 配置 application.yaml 文件

        我们现在使用的是开放大模型的 API,需要添加以下内容:

        2.3 配置 ChatClient

代码解读:
    ChatClient.builder: 会得到一个 ChatClient.Builder 工厂对象,利用它可以自由选择模型、添加各种自定义配置。

        2.4 同步调用

        接下来,我们定义一个 Controller,在其中接收用户发送的提示词,然后把提示词发送给大模型,交给大模型处理,拿到结果后返回。

        注意,基于 call() 方法的调用属于同步调用,需要所有响应结果全部返回后才能返回给前端。

启动项目,在浏览器中访问:http://localhost:8080/ai/chat?prompt=你好

        2.5 流式调用

        同步调用需要等待很长时间页面才能看到结果,用户体验不好。为了解决这个问题,我们可以改进调用方式为流式调用。

        在 SpringAI 中使用了 WebFlux 技术实现流式调用。

        重启测试,再次访问:

        2.6 System 设定

        可以发现,当我们询问 AI 你是谁的时候,它回答自己是 DeepSeek-R1,这是大模型底层的设定。如果我们希望 AI 按照新的设定工作,就需要给它设置 System 背景信息。

        在 SpringAI 中,设置 System 信息非常方便,不需要在每次发送时封装到 Message,而是创建 ChatClient 时指定即可:

        2.7 日志功能

        默认情况下,应用于 AI 的交互时不记录日志的,我们无法得知 SpringAI 组织的提示词到底长什么样,有没有问题。这样不方便我们调试。

        SpringAI 基于 AOP 机制实现与大模型对话过程的增强、拦截、修改等功能。所有的增强通知都需要实现 Advisor 接口。

        Spring 提供了一些 Advisor 的默认实现,来实现一些基本的增强功能:

        1)SimpleLoggerAdvisor:日志记录的 Advisor。
        2)MessageChatMemoryAdvisor:会话记忆的 Advisor。
        3)QuestionAnswerAdvisor:实现 RAG 的 Advisor。

        只需要在配置 ChatClient  添加日志记录 Advisor:

        接下来,修改日志级别:

        重启项目,再次和 AI 聊天就可以在控制台上看到 AI 的日志输出了。

        2.8 会话记忆功能

        现在,我们的 AI 聊天机器人是没有记忆功能的,上一次聊天的内容,下一次就忘掉了。我们之前说过,让 AI 有会话记忆的方式就是把每一次历史对话内容拼接到 Prompt 中,一起发送过去。是不是还挺麻烦的。别担心,好消息是,我们并不需要自己来拼接,SpringAI 自带了会话记忆功能,可以帮我们把历史会话保存下来,下一次请求 AI 时会自动拼接,非常方便。

        2.8.1 ChatMemory

        会话记忆功能同样是基于 AOP 实现,Spring 提供了一个 MessageChatMemoryAdvisor 的通知,我们可以像之前添加日志通知一样添加到 ChatClient 即可。

        不过,要注意的是,MessageChatMemoryAdvisor 需要指定一个 ChatMemory 实例,也就是会话历史保存的方式。

ChatMemory 接口声明如下:

        可以看到,所有的会话记忆都是与 conversationid 有关联的,也就是会话 Id,将来不同会话 id 的记忆自然是分开管理的。

        目前,在 SpringAI 中有两个 ChatMemory 的实现:
        1)InMemoryChatMemory:会话历史保存在内存中
        2)CassandraChatMemory:会话保存在 Cassandra 数据库中(需要引入额外依赖,并且绑定了向量数据库,不够灵活)

        2.8.2 添加会话记忆功能

        首先注册 chatMemory 对象:

        然后添加到 ChatClient 中:

        最后在和 AI 聊天的时候,为了区分每一个用户对应着不同的会话记录,因此需要传入用户 ID 进行区分:

Read more

深入解读 AI 编程工具 — Cursor

在 AI 工具爆发的时代,各类辅助编程产品层出不穷。而其中 Cursor 因其独特的设计与对开发者真实问题的深度关注,正在成为开发者群体热议的焦点。 本文将带你清晰了解:什么是 Cursor?它如何工作?真正解决了哪些痛点?为何能成为行业快速增长的工具?  一、Cursor 的起源与快速成长 Cursor 背后的初创公司 Anysphere 成立于 2022 年,而 Cursor 的首个版本在 2023 年 3 月推出。仅仅两年时间,Anysphere 就完成了 9 亿美元的 C 轮融资,公司估值高达 99 亿美元!更令人惊讶的是,Cursor 的年收入已经突破 5 亿美元,这在开发工具领域几乎前所未有——据我所知,没有其他公司能在推出第一款产品后的两年内达到这样的规模。 Cursor 的快速普及也得益于企业级市场的认可:

前端Canvas:让你的网站更具视觉冲击力

前端Canvas:让你的网站更具视觉冲击力 毒舌时刻 前端Canvas?这不是游戏开发才用的吗? "Canvas性能差,我不用"——结果错过了丰富的视觉效果, "Canvas太复杂了,我学不会"——结果只能用静态图片, "我用CSS就够了,要Canvas干嘛"——结果无法实现复杂的动画效果。 醒醒吧,Canvas不是游戏开发的专利,前端也可以用它来创建丰富的视觉效果! 为什么你需要这个? * 丰富的视觉效果:创建动态图形、动画和游戏 * 高性能:直接操作像素,性能优异 * 交互性:支持鼠标、触摸等交互 * 数据可视化:绘制图表、仪表盘等 * 跨平台:在所有现代浏览器中运行 反面教材 // 反面教材:简单的Canvas绘制 function drawCircle() { const canvas = document.getElementById('canvas'

手把手教你用ESP32-S3开发板打造小智AI语音助手(含DeepSeek/Qwen接入指南)

手把手教你用ESP32-S3开发板打造小智AI语音助手(含DeepSeek/Qwen接入指南) 几年前,当我第一次把一块小小的ESP32开发板连接到电脑上,看着它闪烁的LED灯时,我完全没想到,今天我会用它来构建一个能听懂我说话、能和我智能对话的AI伙伴。硬件开发曾经是那么遥不可及,需要复杂的电路知识、昂贵的设备和漫长的学习曲线。但现在,一切都变了。 ESP32-S3这颗芯片,以其强大的处理能力、丰富的接口和亲民的价格,正在重新定义AI硬件开发的门槛。结合开源的语音识别框架和如今触手可及的大语言模型,我们每个人都能在自家的工作台上,亲手打造一个属于自己的智能语音助手。这不再是科技巨头的专利,而是每个硬件爱好者和AI初学者都能实现的梦想。 这篇文章,就是为你准备的实战指南。无论你是第一次接触ESP32的硬件新手,还是对AI应用充满好奇的开发者,我都会带你一步步走完整个流程——从硬件选型到固件烧录,从网络配置到模型接入,最后实现一个真正能用的、支持离线/在线混合模式的智能语音交互系统。我们不仅会使用现成的方案,更会深入探讨如何实现本地化部署,让你对自己的AI助手有完全的控制权。

A2UI与AG-UI深度对比:两大AI界面协议的异同与选择

A2UI与AG-UI深度对比:两大AI界面协议的异同与选择

名字相似,目标不同:一个让AI画界面,一个让AI连接应用 开篇:一个容易混淆的问题 如果你最近在关注AI智能体技术,可能会遇到两个名字非常相似的协议:A2UI和AG-UI。 第一次看到这两个名字,很多人都会困惑: * 这是同一个东西吗? * 如果不是,它们有什么区别? * 我应该用哪一个? 这种困惑是完全可以理解的。毕竟,它们的名字只差一个字母,都和"AI"、"UI"有关,而且都是2024-2025年才出现的新协议。 但实际上,A2UI和AG-UI是两个完全不同的协议,解决的是不同层面的问题。 让我用一个简单的比喻来说明: * A2UI就像是一种"UI设计语言",告诉前端"应该画一个什么样的界面" * AG-UI就像是一条"通信管道",负责在智能体和前端应用之间传递各种信息 一个关注"画什么",一个关注"