spring ai 集成demo

官网

spring-ai网址spring.io/projects/sp...

Spring AI 目前支持将输入和输出处理为语言、图像和音频的模型

spring ai 做什么?

  • 输入和输出类型对几种模型进行了分类

涉及相关概念

模型、提示、提示模板、embedding、token(=钱)、结构输出

  • 提示: 提示作为语言输入的基础,指导AI模型生成特定的输出
  • 提示模板: 创建有效的提示涉及建立请求的上下文,并用用户输入的具体值替换请求的一部分

eg: Tell me a {adjective} joke about {content}.

  • embedding: 向量关系
  • token: 一个文本的编码,每个token对应一个索引,索引对应一个向量
  • 结构输出: json格式、标准输出格式

检索增加RAG

一个ETL(提取、转换和加载)管道

工具调用

允许您注册自己的服务作为工具,将大型语言模型连接到外部系统的API,@Tool-注释的方法提供

基于spring ai 构建聊天demo

spring ai demo源码

gitee.com/kcnf\_open/...

typescript 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <groupId>com.kcnf</groupId>
    <artifactId>spring-ai-sample</artifactId>
    <version>v1</version>
    <packaging>pom</packaging>

    <description>
        项目构建脚手架
    </description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <!-- 或者使用 Java 版本属性 -->
        <java.version>17</java.version>
    </properties>

    <modules>
        <module>ali-ai</module>
        <module>spring-ai</module>
    </modules>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>2.0.16</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </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>1.1.2</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>3.5.11</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-clean-plugin</artifactId>
                <version>3.1.0</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.11.0</version>
                <configuration>
                    <source>17</source>
                    <target>17</target>
                    <release>17</release> <!-- JDK 9+ 推荐使用 release -->
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>3.0.0-M7</version>   <!-- 最后一个兼容 Maven 3.x 的版本,后续版本需 3.6.3+ -->
            </plugin>
        </plugins>
    </build>
</project>


package com.kcnf.ai;

import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatModel;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

import java.util.Map;


@RestController
public class ChatController {

    private final ChatModel chatModel;

    @Autowired
    public ChatController(ChatModel chatModel) {
        this.chatModel = chatModel;
    }

    @GetMapping("/ai/generate")
    public Map generate(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        return Map.of("generation", chatModel.call(message));
    }

    @GetMapping("/ai/generateStream")
    public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "Tell me a joke") String message) {
        var prompt = new Prompt(new UserMessage(message));
        return chatModel.stream(prompt);
    }
}
相关推荐
颜颜颜yan_1 小时前
让数据库学会说“不“——金仓 SQL 防火墙深度解析
数据库·后端
南方的耳朵2 小时前
linux上真实物理网卡和虚拟网络接口设备的区别
后端
南方的耳朵2 小时前
各种虚拟网络设备的收发包流程
后端
独断万古他化2 小时前
【抽奖系统开发实战】Spring Boot 活动模块设计:事务保障、缓存优化与列表展示
java·spring boot·redis·后端·缓存·mvc
程序员爱钓鱼2 小时前
Go图像处理基础: image包深度指南
后端·面试·go
程序员飞哥2 小时前
有个同事因为恐惧 AI 要离职了
java·后端·程序员
CodeSheep2 小时前
魔幻!MiniMax市值正式超越百度,老板曾是百度实习生,网友一针见血。
前端·后端·程序员
清汤饺子2 小时前
Cursor 从 0 到 1 系列《基础篇》:从零上手 Cursor
前端·javascript·后端
SimonKing2 小时前
AI时代,一个Skill如何让Java项目结构自动化?
java·后端·程序员