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

[特殊字符] Python在CentOS系统执行深度指南

[特殊字符] Python在CentOS系统执行深度指南

文章目录 * 1 Python环境安装与配置问题 * 1.1 系统自带Python的限制 * 1.2 安装Python 3的常见问题及解决方案 * 1.3 SSL模块问题解决方案 * 1.4 环境变量配置与管理 * 1.5 软件集合(SCL)替代方案 * 2 包管理与虚拟环境问题 * 2.1 pip包管理器问题与解决方案 * 2.2 虚拟环境的最佳实践 * 2.3 依赖兼容性问题解决 * 2.4 虚拟环境目录结构理解 * 3 模块导入与路径问题 * 3.1 Python模块搜索路径机制 * 3.2 常见模块导入错误与解决 * 3.3 路径配置最佳实践 * 3.4 特殊模块问题处理 * 3.

By Ne0inhk
C语言预处理指令与宏定义的灵活运用

C语言预处理指令与宏定义的灵活运用

C语言预处理指令与宏定义的灵活运用 💡 学习目标:掌握C语言预处理指令的分类与使用方法,熟练编写带参数与不带参数的宏定义,理解条件编译的核心逻辑,能够通过预处理指令优化代码结构;学习重点:宏定义的语法与陷阱、条件编译的常用场景、文件包含的注意事项。 43.1 预处理的概念与工作机制 C语言程序的执行流程分为预处理、编译、汇编、链接四个阶段,预处理是整个流程的第一步,也是构建灵活代码的关键环节。 43.1.1 预处理的核心作用 💡 预处理阶段由预处理器完成,它不参与代码的编译,仅对源代码进行文本替换、文件包含、条件筛选等操作。 预处理的输出是经过处理的C语言源代码,该代码会直接进入编译阶段。 预处理指令的特点: 1. 所有预处理指令都以 # 开头 2. 预处理指令不需要分号结尾 3. 预处理指令的作用域是整个源文件 4. 预处理阶段不进行语法检查,仅做文本处理 43.1.2 预处理指令的分类 C语言的预处理指令主要分为三大类: * 文件包含指令:#include,用于引入头文件 * 宏定义指令:

By Ne0inhk

Python纪念币预约自动化工具:快速上手配置指南

Python纪念币预约自动化工具:快速上手配置指南 【免费下载链接】auto_commemorative_coin_booking 项目地址: https://gitcode.com/gh_mirrors/au/auto_commemorative_coin_booking 还在为纪念币预约手忙脚乱而烦恼?这款基于Python的纪念币预约自动化工具,能够帮助你轻松应对繁琐的预约流程,大幅提升预约成功率。无论是个人收藏还是批量预约,都能让你事半功倍。 工具核心优势对比 与传统手动预约方式相比,Python自动化工具在多个方面展现出明显优势: 功能维度传统方式自动化工具操作效率依赖手速程序自动执行验证码识别人工判断AI智能识别信息填写逐个输入批量自动处理成功率表现随机性高稳定可靠 快速配置实战步骤 环境准备阶段 首先确保你的电脑已安装Python 3.6或更高版本。打开命令行工具,执行以下命令安装必要依赖: pip install selenium pytesseract pymysql opencv-python pillow 项目获取与部署 在命令行

By Ne0inhk
机器学习:数据清洗与预处理 | Python

机器学习:数据清洗与预处理 | Python

个人主页-爱因斯晨 文章专栏-Python学习 文章目录 * 个人主页-爱因斯晨 * 文章专栏-Python学习 * 前言 * 了解数据清洗 * 数据清洗的步骤 * 1. 环境准备与库导入 * 2. 数据加载 * 3. 数据初探与理解 * 4. 缺失值处理 * 5. 重复值处理 * 6. 异常值处理 * 7. 数据类型转换 * 8. 数据标准化 / 归一化(预处理) * 实例实践 * 总结 前言 我们不论在学习机器学习还是数据分析中,都会涉及很多数据。但原数据不可避免有很多杂志,为了确保结果的准确性,我们需要首先进行数据清洗和预处理。 了解数据清洗 数据清洗就像是一场数据的“大扫除”。它是从原始数据中找出并修正那些错误、不完整、重复或不一致的数据。通过数据清洗,能显著提升数据质量,为后续数据分析、挖掘和建模等工作提供准确、可靠、干净的数据基础,从而让基于数据得出的结论更具可信度和价值。 数据清洗的步骤 1. 环境准备与库导入

By Ne0inhk