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

devtools/2024/10/22 15:20:04/

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.ppmy.cn/devtools/127867.html

相关文章

域控制器计算机如何使用Active Directory用户添加管理域帐户

本地用户和组Error&#xff1a; 计算机 xxxx.xxx.com 是域控制器。在域控制器上不能使用该管理单元。管理域帐户可以用Active Directory 用户和计算机管理单元。 解决方法&#xff1a; 域控制器计算机不同于平常电脑那样添加管理本地用户帐户和计算机管理单元&#xff0c;需要…

如何移除JavaScript数组的最后一个元素

这篇文章的标题是《如何移除JavaScript数组的最后一个元素》。以下是文章的翻译内容: 我们在数组上执行的最频繁操作之一就是移除最后一个元素。有几种不同的方法可以做到这一点,但最常见的一种就是使用pop()方法。假设你有以下数组: let myArr = [ "🍎", &qu…

刷题训练之多源 BFS

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;熟练掌握多源 BFS算法。 > 毒鸡汤&#xff1a;学习&#xff0c;学习&#xff0c;再学习 ! 学&#xff0c;然后知不足。 > 专栏选自&#xff1a;刷…

机器人学 目录

目录 【机器人学】1-1.六自由度机器人运动学正解 【附MATLAB代码】 【机器人学】1-2. MATLAB机器人工具箱的安装与问题处理 【机器人学】1-3.六自由度机器人工作空间 【附MATLAB代码】 【机器人学】2-1.六自由度机器人运动学逆解【附MATLAB机器人逆解代码】 【机器人学】3…

【命令操作】信创终端系统上timedatectl命令详解 _ 统信 _ 麒麟 _ 方德

原文链接&#xff1a;【命令操作】信创终端系统上timedatectl命令详解 | 统信 | 麒麟 | 方德 Hello&#xff0c;大家好啊&#xff01;今天给大家带来一篇关于如何在信创终端系统上使用timedatectl命令的详细介绍。timedatectl 是Linux系统中非常实用的时间管理工具&#xff0c;…

Spring Boot技术栈的电影评论网站构建

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

学DCGAN对抗网络之前--转置卷积(附代码解读)

了解DCGAN需要学习一下转置卷积 转置卷积和之前学的卷积的区别是转置卷积是上采样,普通的卷积是下采样 上采样和下采样: 下采样&#xff1a;池化操作就是经典的下采样&#xff0c;将一张图片缩小&#xff0c;采用不同的方法将像素点合并从而获得更小分辨率的照片就叫做下采…

研发运营一体化(DevOps)能力成熟度模型

目录 应用设计 安全风险管理 技术运 持续交付 敏捷开发管理 基于微服务的端到端持续交付流水线案例 应用设计 安全风险管理 技术运 持续交付