Spring AI 整体介绍_关键组件快速入门_prompt_embedding等

news2024/10/18 22:04:14

Spring AI:Java开发者的AI集成新利器

在过去,Java开发者在构建AI应用时面临着缺乏统一框架的问题,导致不同AI服务的集成过程复杂且耗时。Spring AI应运而生,旨在为基于Java的应用程序提供一个标准化、高效且易于使用的AI开发平台。它继承了Spring生态系统的设计原则,如可移植性和模块化,使得开发者能够利用熟悉的POJOs(Plain Old Java Objects)来快速搭建智能应用。通过Spring AI,开发者只需编写一次代码,就能轻松切换不同的AI服务提供商,极大简化了项目迁移和技术栈升级的过程。此外,Spring AI还提供了对多种生成式AI模型的支持,包括文本生成、图像处理等,并引入了诸如Prompt Template等功能以增强人机交互体验,完美融合了现代AI技术与传统的Java面向对象编程范式。

Spring AI核心能力概览

Spring AI 拥有以下主要能力,这些能力旨在简化AI应用的开发过程,并确保开发者能够高效地利用不同AI服务和模型。

关键概念一句话介绍:

模型(Model)

一句话说明:支持多种生成式模型的接入与切换。

  • 输入:用户提供的文本、图片或语音等数据。

  • 输出:基于所选模型生成的对应类型的数据,如对话回复、图片或语音文件。

  • 关键要素:支持阿里云通义系列模型,包括但不限于对话、文生图、文生语音等。

提示(Prompt)与提示词模板(Prompt Template)

一句话说明:通过预定义的模板生成特定格式的提示,以指导模型产生期望的结果。

  • 输入:动态参数值。

  • 输出:根据模板生成的具体提示字符串。

  • 关键要素:使用@Value加载模板文件,并通过PromptTemplate.create()方法结合实际参数生成最终的提示。

嵌入(Embedding)

一句话说明:将文本转换成固定长度的向量表示。

  • 输入:任意长度的文本。

  • 输出:一个定长的浮点数数组。

  • 关键要素:适用于需要进行语义相似度计算或分类任务的场景,虽然在提供的资料中没有直接提及,但这是许多AI框架的基本功能之一。

结构化输出(Structured Output)

一句话说明:从模型返回的非结构化文本中提取结构化信息。

  • 输入:模型产生的原始输出。

  • 输出:按照预设格式组织好的结构化数据。

  • 关键要素:利用OutputParser实现自动从字符串到POJO对象的映射,简化了后续处理步骤。

检索增强生成(RAG)

一句话说明:结合外部知识库检索和生成模型,提供更准确的答案。

  • 输入:查询请求以及相关文档内容。

  • 输出:基于检索结果和上下文生成的回答。

  • 关键要素:需设置VectorStore用于存储和检索向量表示的知识项,同时配置DocumentRetriever以获取最相关的文档片段。

函数调用(Function Calling)

一句话说明:允许模型调用外部定义的功能,以执行特定的任务。

  • 输入:符合函数签名要求的参数。

  • 输出:函数执行后的返回值。

  • 关键要素:定义Java函数并通过@Bean注解注册,然后在聊天时告知模型可用的功能列表,模型将决定何时调用它们。

向量存储

一句话说明:为RAG等高级特性提供必要的基础设施支持。

  • 输入:待索引的文档或其他形式的数据。

  • 输出:可被快速检索的向量数据库条目。

  • 关键要素:向量相似度作为Key的一个key value存储 ,负责管理所有已索引项目的向量表示。

Spring Cloud Alibaba子项目:AI集成利器

Spring AI Alibaba是Spring Cloud Alibaba的一个子项目,专为集成AI能力而设计。它基于Spring生态系统的设计原则,旨在简化与不同AI提供商(如阿里云、OpenAI等)的接口对接过程。通过Spring AI Alibaba,开发者可以实现一次编码、多模型支持的目标,只需调整配置即可切换不同的AI服务提供者。其核心优势在于标准化了各种AI服务的调用方式,极大降低了开发和迁移成本。此外,Spring AI Alibaba还支持流式输出及多种实用功能,如Prompt Template、OutputParser等,进一步丰富了应用开发的可能性。

Spring AI Alibaba打造聊天应用详细体感例子

为了实现一个基于Spring AI Alibaba、支持Prompt和流式返回的聊天API,您需要遵循以下步骤。这些步骤将指导您从环境配置到具体代码实现,以确保可以成功集成Spring AI Alibaba完成目标功能。

1. 确认开发环境
  • JDK版本:至少为JDK 17。
  • Spring Boot版本:推荐使用3.3.x或更高版本。
2. 在阿里云申请通义千问的API Key

访问阿里云百炼页面,登录账号并按照指引开通“百炼大模型推理”服务。获取API Key后,请妥善保存,因为后续配置中需要用到它。

3. 配置系统变量

在本地环境中设置AI_DASHSCOPE_API_KEY环境变量,并将其值设为您刚才获得的API Key。例如,在Linux或MacOS上,您可以运行:

export AI_DASHSCOPE_API_KEY=您的API-Key

同时,通过application.properties文件注入此API Key:

spring.ai.dashscope.api-key=${AI_DASHSCOPE_API_KEY}
4. 添加Maven仓库与依赖

由于Spring AI Alibaba当前版本可能未被添加至主流Maven仓库,因此需额外指定Spring官方的仓库地址。在您的pom.xml中加入如下配置:

<repositories>
    <repository>
        <id>sonatype-snapshots</id>

        <url>https://oss.sonatype.org/content/repositories/snapshots</url>

        <snapshots>
            <enabled>true</enabled>

        </snapshots>

    </repository>

    <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>

接着,添加对spring-ai-alibaba-starter及其所需其他依赖项的支持:

<dependencies>
    <dependency>
        <groupId>com.alibaba.cloud.ai</groupId>

        <artifactId>spring-ai-alibaba-starter</artifactId>

        <version>1.0.0-M2</version>

    </dependency>

    <!-- Spring Boot starter web for REST API -->
    <dependency>
        <groupId>org.springframework.boot</groupId>

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

    </dependency>

</dependencies>
5. 创建ChatController处理请求

定义一个ChatController类来处理用户的输入,并利用ChatClient进行响应。这里展示了一个基本示例,包括如何使用Prompt模板以及如何流式地返回结果给客户端。

@RestController
@RequestMapping("/chat")
public class ChatController {

    private final ChatClient chatClient;
    @Value("classpath:prompt-template.st")
    private Resource promptResource;

    public ChatController(ChatClient.Builder builder) {
        this.chatClient = builder.build();
    }

    @GetMapping(value = "/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    public Flux<String> chatStream(@RequestParam String input) {
        PromptTemplate promptTemplate = new PromptTemplate(promptResource);
        Prompt prompt = promptTemplate.create(Map.of("input", input));
        return chatClient.prompt(prompt).stream().content();
    }
}

其中,prompt-template.st是放置在src/main/resources下的提示词模板文件,内容如下所示:

You are a helpful assistant. Respond to the following message:
{input}
6. 启动应用

现在,您已经完成了所有必要的配置与编码工作。启动您的Spring Boot应用程序,并通过访问http://localhost:8080/chat/stream?input=您的消息来测试您的聊天API是否按预期工作。

以上步骤详尽地介绍了如何构建一个具备Prompt处理能力并且能够以流形式返回聊天结果的应用程序。确保每一步都准确无误地执行,特别是环境变量设置和依赖管理部分,这对于项目的顺利运行至关重要。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2218052.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

51单片机的超声波视力保护仪【proteus仿真+程序+报告+原理图+演示视频】

1、主要功能 该系统由AT89C51/STC89C52单片机LCD1602显示模块温度传感器光照传感器超声波传感器按键、LED、蜂鸣器等模块构成。适用于视力保护仪、坐姿矫正器、超声波防近视等相似项目。 可实现功能: 1、LCD1602显示温度、光照、距离和学习时间 2、超声波传感器采集头部与探…

如何做好SQL 数据库安全

随着信息技术的迅猛发展&#xff0c;数据库在现代信息系统中的重要性日益凸显。无论是电子商务平台、金融系统还是社交媒体应用&#xff0c;数据库都是其核心组件之一。其中&#xff0c;SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;数据库…

效率飞跃 | SOLIDWORKS 2025:草图与装配体设计再升级!

一年一度的SOLIDWORKS新版本已经发布&#xff0c;快来看看SOLIDWORKS 2025这些让您眼前一亮的新功能&#xff0c;它们将为您的研发过程增添强大助力。 一、草图绘制 1、通过 XYZ 点生成的曲线可以选取坐标系统 新版本可选择曲线起点位置 2、转换实体作为构造几何体 转换实体…

Science Robotics 通过新材料打造FiBa软机器人 可实现四种形态进化

近几年由于材料科学的进步&#xff0c;软机器人相关技术近几年研究成果显著&#xff0c;与传统的刚性机器人相比&#xff0c;软机器人的设计灵感来源于自然界中的生物系统&#xff0c;如蠕虫、章鱼、壁虎和青蛙等。这些生物利用柔软、有弹性的材料&#xff0c;在复杂环境中展现…

微服务基础架构(图)

微服务基础架构是一种现代化的软件架构模式&#xff0c;旨在将大型复杂的应用程序拆分为多个小型、独立的服务。每个微服务专注于特定的业务功能&#xff0c;可独立开发、部署和扩展。 在微服务基础架构中&#xff0c;通常会使用轻量级的通信机制&#xff0c;如 RESTful API 或…

C++简易日志系统:打造高效、线程安全的日志记录工具

目录 引言&#xff1a; 1.日志的基本概念 1.1.什么是日志&#xff1f; 1.2.我们为什么需要日志&#xff1f; 2.自己实现一个简易日志 2.1.日志的等级 2.2日志的格式 2.3.获取时间的方法 2.4.日志的主体实现 参数&#xff1a; 代码解析&#xff1a; 问题&#xff1a…

C++新手入门指南:从基础概念到实践之路

C 继承了 C 语言的高效性和灵活性&#xff0c;同时新增了面向对象编程的特点。这使得 C 既可以进行底层系统编程&#xff0c;又能进行面向对象的软件设计。在面向对象编程方面&#xff0c;C 支持封装、继承和多态三大特性。 &#x1f4af;C 初印象 语言的发展就像是练功打怪…

用Java爬虫API,轻松获取电商商品SKU信息

在电子商务的精细化运营时代&#xff0c;SKU信息的重要性不言而喻。SKU&#xff08;Stock Keeping Unit&#xff09;信息不仅包含了商品的规格、价格、库存等关键数据&#xff0c;还直接影响到库存管理、价格策略和市场分析等多个方面。如何高效、准确地获取这些信息&#xff0…

STM32—SPI通信外设

1.SPI外设简介 STM32内部集成了硬件SPI收发电路&#xff0c;可以由硬件自动执行时钟生成、数据收发等功能&#xff0c;减轻CPU的负担可配置8位/16位数据帧、高位先行/低位先行时钟频率&#xff1a;fpclk/(2,4,8,16,32,64,128,256)支持多主机模型、主或从操作可精简为半双工/单…

【GESP】C++一级练习BCQM3049,细胞分裂

GESP一级知识点整形int和for循环练习。 题目题解详见&#xff1a;【GESP】C一级练习BCQM3049&#xff0c;细胞分裂 | OneCoder 【GESP】C一级练习BCQM3049&#xff0c;细胞分裂 | OneCoderGESP一级知识点整形int和for循环练习。https://www.coderli.com/gesp-1-bcqm3049/ C …

微服务--Ribbon负载均衡器

Nacos 本身里面就内置了Rabbion&#xff0c; 所以 不需要额外添加 添加LoadBalanced注解&#xff1a; Rabbion 内置的有好几种 负载均衡器 可以根据业务去选择&#xff0c;我们一般不会额外配置 都是默认的轮询&#xff0c;因为我们是基于docker发布的 大家的资源都是平等的 若…

Vue.js + Element UI 实现多方式登录功能(账号/手机号验证码登录)

引言 在现代Web应用中&#xff0c;提供多种登录方式已成为一种标准做法&#xff0c;这不仅能提升用户体验&#xff0c;还能满足不同用户的需求。本文将详细介绍如何使用Vue.js框架结合Element UI组件库&#xff0c;实现一个包含账号登录和手机号验证码登录两种方式的登录页面。…

Leetcode 单词规律

即判断给定的模式字符串&#xff08;pattern&#xff09;和单词字符串&#xff08;s&#xff09;是否遵循相同的对应规则。具体来说&#xff0c;就是要判断 pattern 中的字符与 s 中的单词是否存在一一对应的关系&#xff0c;即双射&#xff08;bijection&#xff09;。 算法思…

ant design vue TimePicker时间选择器不点击确认也可以设置值

文章目录 前言一、背景二、操作步骤1.复现前的准备工作&#xff08;1&#xff09;vue版本和ant design vue 版本&#xff08;2&#xff09;任意ant design vue TimePicker的demo 2.解决问题&#xff08;1&#xff09;使用change时间&#xff08;无效&#xff09;&#xff08;2&…

【学习】word保存图片

word中有想保存的照片 直接右键另存为的话&#xff0c;文件总是不清晰&#xff0c;截屏的话&#xff0c;好像也欠妥。 怎么办? 可以另存为 网页 .html 可以得到&#xff1a; 原图就放到了文件夹里面

在线白板:为远程课堂注入活力的协作工具

在线白板作为一种协作平台&#xff0c;极大地丰富了远程教学的互动性和创造性。在即时白板的帮助下&#xff0c;教师能够与学生共同在虚拟空间中创作和交流&#xff0c;实现知识的共享与思维的碰撞。 https://js.design/?sourcecsdn&planjh1018 首先&#xff0c;在线白板…

Spring Security 基础配置详解(附Demo)

目录 前言1. 基本知识2. Demo3. 实战 前言 基本的Java知识推荐阅读&#xff1a; java框架 零基础从入门到精通的学习路线 附开源项目面经等&#xff08;超全&#xff09;【Java项目】实战CRUD的功能整理&#xff08;持续更新&#xff09; 1. 基本知识 HttpSecurity 是 Spri…

【计算机网络 - 基础问题】每日 3 题(四十五)

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4e3;专栏地址&#xff1a;http://t.csdnimg.cn/fYaBd &#x1f4da;专栏简介&#xff1a;在这个专栏中&#xff0c;我将会分享 C 面试中常见的面试题给大家~ ❤️如果有收获的话&#xff0c;欢迎点赞…

基于Spring Cloud的电商系统设计与实现——用户与商品模块的研究(上)

操作系统&#xff1a;Windows Java开发包&#xff1a;JDK1.8 项目管理工具&#xff1a;Maven3.6.0 项目开发工具&#xff1a;IntelliJIDEA 数据库&#xff1a;MySQL Spring Cloud版本&#xff1a;Finchley.SR2 Spring Boot版本&#xff1a;2.0.6.RELEASE 目录 用户模块—user-…

机器学习-RBF

径向基函数内核 – 机器学习 内核在将数据转换为更高维空间方面发挥着重要作用,使算法能够学习复杂的模式和关系。在众多的内核函数中,径向基函数(RBF)内核作为一种多功能且强大的工具脱颖而出。在本文中,我们深入探讨了RBF内核的复杂性,探讨了它的数学公式、直观理解、…