如何使用spring-AI?

Spring AI 简介
 

1、概览

Spring 通过 Spring AI 项目正式启用了 AI(人工智能)生成提示功能。本文将带你了解如何在 Spring Boot 应用中集成生成式 AI,以及 Spring AI 如何与模型互动。
 

2、Spring AI 的主要概念

首先回顾一下一些关键的领域术语和概念。

Spring AI 最初专注于处理语言输入和生成语言输出的模型。该项目的理念是为开发人员提供一个抽象接口,为将生成式 AI 作为独立组件纳入应用奠定基础。

接口 AiClient 就是这样一个抽象,它有两个基本实现:OpenAI 和 Azure OpenAI
 

AiClient 为生成函数提供了两个选项。简化版生成函数:generate(String message),使用 String 作为输入和输出,可以避免使用 Prompt 和 AiResponse 类的额外复杂性。

2.1、高级的 Prompt 和 AiResponse

在 AI 领域,Prompt(提示)是指提供给 AI 的文本信息。它由上下文和问题组成,该模型用于生成答案。 从 Spring AI 项目的角度来看,Prompt 是一个参数化 Message 列表。
Prompt 使开发人员能够对文本输入进行更多控制。Prompt 模板就是一个很好的例子,它使用预定义文本和占位符集构建。然后,可以使用传递给 Message 构造函数的 Map<String, Object> 值填充它们。
Message 接口还包含有关 AI 模型可处理的消息(Message)类别的高级信息。例如,OpenAI 实现区分会话角色,通过 MessageType 进行映射。对于其他模型,它可以反映消息格式或其他一些自定义属性。更多详情
 

AiResponse 由 Generation(生成)对象列表组成,每个对象都包含来自相应 Prompt(提示)的输出。此外,Generation 对象还提供 AI 响应的元数据信息。

不过,由于 Spring AI 项目仍处于测试阶段,并非所有功能都已完成并文档化。
 

3、Spring AI 入门

首先,AiClient 与 OpenAI 平台的所有通信都需要 API Key。为此,可以在 “API Keys” 页面上创建一个 Token。

Spring AI 项目定义了配置属性:spring.ai.openai.api-key

可以在 application.yml 文件中进行设置。
 

下一步是配置依赖。Spring AI 项目在 Spring 里程碑库(Spring Milestone Repository)中提供了组件。

因此,需要添加 repository 定义:
 

4、Spring AI 实践

现在,编写一个简单的 REST API 用于演示。它由两个端点组成,可以返回想要的任何主题和流派的诗歌:

  • /ai/cathaiku:实现基本的 generate() 方法,并返回一个关于猫的的俳句(简单的字符串)。
  • /ai/poetry?theme={{theme}}&genre={{genre}}:演示 PromtTemplate 和 AiResponse 类的功能。

4.1、在 Spring Boot 中注入 AiClient

为了简单起见,从 cathaiku 端点开始。通过 @RestController 注解,设置 PoetryController 并添加 GET 方法映射:
 

本文介绍了 Spring AI 项目及其在 REST API 方面的功能,它为生成式 AI 集成到 Spring Boot 应用中提供了一个可靠的接口。在撰写本文时,spring-ai-starter 仍在积极开发中(可以访问快照版本)。

本文介绍了与 Spring AI 的基本集成和高级集成,包括 AiClient 的底层原理,还通过实际案例介绍了 Spring AI 高级功能的示例:PromtTemplateAiResponse 和 BeanOutputParser 以及异常处理。

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

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

相关文章

Qt中的槽(slot)和机器视觉的算子(operator)

Qt中的槽&#xff08;slot&#xff09;和机器视觉中的算子&#xff08;operator&#xff09;都是方法或函数&#xff0c;它们都是在软件中用于执行特定任务的代码块。 在Qt中&#xff0c;槽是一段可以被信号触发的代码&#xff0c;用于响应特定的事件。槽是对象的一部分&#…

十分钟搞定4G转Uart网关:FlexLua低代码助力

在当今的物联网应用中&#xff0c;各种设备之间的连接变得日益重要&#xff0c;而4G转Uart网关设备的出现为设备之间的通信提供了简便的解决方案&#xff0c;推动了物联网技术的不断发展。 4G转Uart网关的通信原理相对简单清晰。它通过4G网络接收数据&#xff0c;然后将数据转换…

Nginx内存池相关源码剖析(六)外部资源释放和内存池销毁

ngx_destroy_pool函数 先执行回调函数释放所有的外部资源&#xff0c;然后free释放所有的大块内存和小块内存。 // 释放外部资源&#xff0c;销毁内存池 void ngx_destroy_pool(ngx_pool_t *pool) {ngx_pool_t *p, *n;ngx_pool_large_t *l;ngx_pool_cleanup_t *…

电脑录制视频软件推荐,帮你找到合适的那一款

随着科技的不断发展&#xff0c;录制视频已成为人们在学习、工作和生活中不可或缺的一部分。电脑录制视频软件作为实现这一目标的重要工具&#xff0c;已经越来越受到用户的青睐。本文将详细介绍三种常用的电脑录制视频软件&#xff0c;帮助用户更好地理解和使用这些工具&#…

大文件上传分片合并java并发开发要点

前面介绍过大文件上传分片合并的nodejs并发示例&#xff0c;主要有mapLimit、Promise、pipeline、fs.createReadStream、fs.createWriteStream(注意&#xff0c;这个设置写入偏移量)等要点&#xff0c;可以实现将文件分片并发写入目标文件的。 java的话&#xff0c;不太熟悉去搜…

高负压采样器

你的未来是你自己创造的&#xff0c;你的路是你自己选择的。走向成功&#xff0c;需要你的勇气和决心&#xff0c;成功不是得到多少&#xff0c;而是付出了多少。当你还在努力时&#xff0c;不要忘记身边的风景——鹤壁永成在你身边 一、高负压瓦斯采取器的用途&#xff1a; 高…

Springboot的配置文件详解:从入门到精通(二)

本系列文章简介&#xff1a; Spring Boot是一种用于构建Java应用程序的开发框架&#xff0c;它提供了一种简化的方式来快速搭建和部署应用程序。在Spring Boot中&#xff0c;配置文件是一种重要的工具&#xff0c;用于配置应用程序的行为和属性。配置文件可以包含各种配置选项&…

MS SQL Server partition by 函数实战 统计与输出

目录 需求 范例运行环境 表及视图样本设计 数据统计实现 小结 需求 假设有一课程项目&#xff0c;我们需要统计该项目中的课件数量&#xff0c;并提取课程信息&#xff0c;如课程标题名称、排序号等&#xff0c;如果使用 GROUP BY 聚合函数&#xff0c;则只能统计返回课件…

Java集合进阶——泛型

1.泛型 介绍&#xff1a; 泛型可以在编译阶段约束操作的数据类型&#xff0c;并进行检查。 应用场景&#xff1a; 如果在定义类、方法、接口的时候&#xff0c;如果类型不确定&#xff0c;就可以使用泛型。 格式&#xff1a; <数据类型> 注意&#xff1a; 泛型只支持引…

数字化社交的引擎:解析Facebook的影响力

Facebook&#xff0c;作为全球最大的社交媒体平台&#xff0c;已经深深地融入了我们的日常生活和文化中。它不仅仅是一个简单的社交工具&#xff0c;更是一个复杂的数字生态系统&#xff0c;影响着我们的社交模式、文化认同以及信息获取方式。在这篇文章中&#xff0c;我们将深…

【华为】Telnet实验配置

【华为】Telnet 实验配置 应用场景三种认证方式配置注意事项拓扑无认证&#xff08;None&#xff09;交换机配置顺序Telnet ServerTelnet Client测试 密码认证&#xff08;Password&#xff09;配置顺序Telnet ServerTelnet Client测试 AAA认证&#xff08;scheme&#xff09;配…

C语言经典例题[24]

文章目录 1.字符串左旋结果2.offsetof宏的实现3.模拟实现atoi4.n的k次方5.字符串逆序 1.字符串左旋结果 题目内容&#xff1a;写一个函数&#xff0c;判断一个字符串是否为另外一个字符串旋转之后的字符串。 例&#xff1a;给定s1 AABCD和s2 BCDAA,返回1 给定s1 abcd和s2…

使用TomCat在idea写一个可以实现分页查询的前后端学生项目04.12

使用TomCat在idea写一个前后端学生项目04.12项目包-CSDN博客 在前端界面需要引入的插件&#xff1a; 在该网站下载需要的插件 Maven Repository: Search/Browse/Explore (mvnrepository.com)https://mvnrepository.com/ 分页查询&#xff1a; 在前端jsp页面使用c:forEach c:…

WordPress 多站点切换域名完整指南:详细步骤和注意事项

因为公司的需要&#xff0c;需要对 WordPress 多站点进行域名切换, 一开始我也找了相关的方案和教程&#xff0c;但是很可惜&#xff0c;国内这一块网上的资料几乎为0&#xff0c;所以我把实现的过程写了一篇文章分享出来&#xff0c;为后来的人铺路。 开始之前&#xff0c;先…

用例设计-微信发红包

功能 1、输入正确的金额&#xff0c;正确的祝福语&#xff0c;给单人发红包&#xff0c;支付成功发送红包后&#xff0c;好友能够正常接收 2、输入正确的金额&#xff0c;正确的祝福语&#xff0c;群发红包&#xff0c;支付成功发送红包后&#xff0c;好友能够正常接收 3、输入…

BCLinux8U6系统基线加固致无法su的问题分析

本文对BCLinux8U6系统进行基线加固致无法su的问题分析。 一、问题现象 对BCLinux8U6系统进行基线加固&#xff0c;su切换用户失败&#xff0c;报错信息如下&#xff1a; [ABCDlocalhost ~]$ su - 密码&#xff1a; su: 模块未知 二、问题分析 1、错误排查 出错前&#xf…

el-table使用show-summary合计,但只需要合并某一列

el-table使用show-summary合计&#xff0c;但只需要合并某一列 这里有两种方法&#xff0c;一种是网上的&#xff0c;我会引用他的链接给你们看。 一种是我自己看源码发现的 方法一 这个就是方法一的链接 点击我跳转方法一 方法二 不需要计算的列 去掉prop 然后用插槽显示即可…

设计模式代码实战-抽象工厂模式

1、问题描述 小明家新开了两个工厂用来生产家具&#xff0c;一个生产现代风格的沙发和椅子&#xff0c;一个生产古典风格的沙发和椅子&#xff0c;现在工厂收到了一笔订单&#xff0c;请你帮他设计一个系统&#xff0c;描述订单需要生产家具的信息。 输入试例&#xff1a; 3 …

SpringBoot 面试题(六)

1. 什么是Docker&#xff1f;如何将SpringBoot应用打包成Docker镜像并部署运行&#xff1f; Docker是一个开源的应用容器引擎&#xff0c;基于轻量级虚拟化技术。它允许开发者将应用程序及其依赖项打包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux或Windows操作…

MonkeyRunner在自动化测试里的应用场景

MonkeyRunner是Android提供的一个自动化测试工具&#xff0c;主要用于对Android设备或模拟器进行功能和压力测试。以下是一些MonkeyRunner在自动化测试中的应用场景及实例代码&#xff1a; 基本操作测试 点击屏幕上的特定位置或元素。 模拟滑动和手势操作。 发送按键事件。…