Spring AI 教程(一)概述

PG Thinker 2024-07-11 12:31:01 阅读 50

前言

我在23年11月那会儿关注了Spring AI项目,当时我恰好正热衷于大语言模型的开发,然而当时主流的开发语言只有Python,Java生态中并没有强大的框架供我们使用。

我当时也是靠一些封装OpenAI接口的SDK包来玩ChatGPT的,但是整体的体验较差。好在我通过一些技术交流群了解了一个正在处于实验阶段的项目:Spring AI。于是果断前往它的Github仓库进行学习,而我也恰好见证了Spring AI从实验项目到正式项目的转变,从最开始的200 Star到如今的近2k Star。

23年11月,我在CSDN上发表了一篇关于Spring AI的入门教程:Spring AI -使用Spring快速开发ChatGPT应用,如今这篇文章的阅读量也即将破万了;但是对于快速发展的Spring AI来说,我的那篇博客文章已经有点过时了,再加上前天突然刷到尚硅谷的直播,并且直播标题以“Spring AI”开头,我觉得我也应该蹭蹭大语言模型的热度,借此机会,特地整理了一个系列专门讲解Spring AI。

本系列将讲述以下内容及实现方式:

基于OpenAI接口实现的对话调用,包括:阻塞式对话和流式对话实现上下文检索,让AI赋予记忆力基于提示词工程,让AI赋予专业能力基于OpenAI接口实现的绘图调用基于AI自查功能,通过文本对话让AI自行判断是对话还是绘图基于OpenAI接口实现文本向量化处理基于文本向量化处理和向量数据库实现RAG(增强式检索)技术基于OpenAI接口实现音频转录功能,赋予AI语音对话能力基于数据库存储实现多Key轮询,突破API请求限制使用OneAPI项目,统一世界主流大语言模型的接口

项目中涉及的所有代码可前往Github查看:https://github.com/NingNing0111/spring-ai-zh-tutorial

语雀在线文档:https://www.yuque.com/pgthinker/spring-ai

概述

Spring AI是Spring生态中应用于人工智能领域的应用框架,它的目标是将Spring 生态系统的设计原则(如可移植性、模块化设计)应用于AI领域,并在AI领域中推广使用POJO(Plain Old Java Objects)作为应用的构建模块。

Spring AI能做什么?

支持目前主流大语言模型平台,例如 OpenAI、Microsoft、Amazon、Google 和 Huggingface;支持阻塞与流式的文本对话;支持图像生成(当前仅限OpenAI的dall-e-*模型和SD);支持嵌入模型;支持LLM生成的内容转为POJO;支持主流的向量数据库或平台:Azure Vector Search, Chroma, Milvus, Neo4j, PostgreSQL/PGVector, PineCone, Qdrant, Redis 和 Weaviate支持函数调用支持自动装配和启动器(与Spring Boot完美集成);提供用于数据处理工程的ETL框架;

相关资料

GitHub仓库:https://github.com/spring-projects/spring-ai官方文档:https://spring.io/projects/spring-ai

本教程使用的大语言模型接口均以OpenAI为例

版本说明:

JDK >= 17Spring 6.x;Spring Boot 3.xSpring AI 0.8.1-SNAPSHOT

准备工作

依赖配置:

父级<code>pom.xml中加入:

<!-- 仓库定义 -->

<repositories>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/milestone</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

<repository>

<id>spring-snapshots</id>

<name>Spring Snapshots</name>

<url>https://repo.spring.io/snapshot</url>

<releases>

<enabled>false</enabled>

</releases>

</repository>

</repositories>

<!-- 依赖管理配置 -->

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.ai</groupId>

<artifactId>spring-ai-bom</artifactId>

<version>0.8.1-SNAPSHOT</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

完整信息:

<?xml version="1.0" encoding="UTF-8"?>code>

<project xmlns="http://maven.apache.org/POM/4.0.0"code>

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"code>

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">code>

<modelVersion>4.0.0</modelVersion>

<parent>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-parent</artifactId>

<version>3.2.3</version>

<relativePath/> <!-- lookup parent from repository -->

</parent>

<groupId>org.ningning0111</groupId>

<artifactId>spring-ai-demo</artifactId>

<version>1.0-SNAPSHOT</version>

<packaging>pom</packaging>

<modules>

<module>spring-ai-chat-demo</module>

</modules>

<properties>

<maven.compiler.source>17</maven.compiler.source>

<maven.compiler.target>17</maven.compiler.target>

<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

<spring-ai.version>0.8.1-SNAPSHOT</spring-ai.version>

</properties>

<dependencies>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-test</artifactId>

</dependency>

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-web</artifactId>

</dependency>

</dependencies>

<dependencyManagement>

<dependencies>

<dependency>

<groupId>org.springframework.ai</groupId>

<artifactId>spring-ai-bom</artifactId>

<version>${spring-ai.version}</version>

<type>pom</type>

<scope>import</scope>

</dependency>

</dependencies>

</dependencyManagement>

<repositories>

<repository>

<id>spring-milestones</id>

<name>Spring Milestones</name>

<url>https://repo.spring.io/milestone</url>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

<repository>

<id>spring-snapshots</id>

<name>Spring Snapshots</name>

<url>https://repo.spring.io/snapshot</url>

<releases>

<enabled>false</enabled>

</releases>

</repository>

</repositories>

</project>



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。