Spring AI项目Open AI对话接口开发指导
文章目录
- 创建Spring AI项目
- 配置项目pom、application文件
- controller接口开发
- 接口测试
创建Spring AI项目
- 打开IDEA创建一个新的spring boot项目,填写项目名称和位置,类型选择maven,组、工件、软件包名称可以自定义,JDK选择17+即可,java语言标准和JDK相同即可

- 配置Spring Boot版本和开发所需的依赖,主要如下图所示
- Spring Boot版本可以选择3.2.5或者更高的版本(作者使用3.2.5和3.2.6(SNAPSHOT)可以正常开发)
- Spring Boot DevTools:spring项目热部署工具,修改完代码(不含application和pom配置文件)即刻热部署项目
- Lombok:通过配置快速配置对象的get、set、toString
- Spring AI:Spring AI是一个用于AI工程的应用框架

- 创建完成后,项目结构大体如下(这里删除了无用的maven文件内容、修改application的文件格式为yaml)

配置项目pom、application文件
- 注意:修改pom文件,重新下载spring ai依赖需要科学上网,请确保网络连接没有问题
- 打开项目的pom文件,修改spring ai的版本(项目默认使用稳定版0.8.1)
- 主要注意默认的spring ai版本和配置依赖jar包仓库(maven仓库中还没有spring ai的依赖)
<properties><java.version>21</java.version><spring-ai.version>0.8.1</spring-ai.version>
</properties><repositories><repository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></repository><repository><id>spring-milestones</id><name>Spring Milestones</name><url>https://repo.spring.io/milestone</url><snapshots><enabled>false</enabled></snapshots></repository>
</repositories><pluginRepositories><pluginRepository><id>spring-snapshots</id><name>Spring Snapshots</name><url>https://repo.spring.io/snapshot</url><releases><enabled>false</enabled></releases></pluginRepository>
</pluginRepositories>
- 配置application文件(api-key的获取参考Spring AI开发前期开发指导)
spring:application:name: Chatai:openai:api-key: hk-xxxbase-url: https://api.openai-hk.com #请根据自己的api-key自定义配置chat:options:model: gpt-3.5-turbo #默认model为 gpt-3.5-turbotemperature: 0.5
server:port: 8080
controller接口开发
- 这里列举可常用接口的使用方法,更详细的配置请参考官网的开发文档
import jakarta.annotation.Resource;
import org.springframework.ai.chat.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;@RestController
public class ChatController {@Resourceprivate OpenAiChatClient openAiChatClient;@RequestMapping("/ai/chat")public String chat(@RequestParam(value = "msg") String msg){return openAiChatClient.call(msg);}@RequestMapping("/ai/chat2")public String chatCall(@RequestParam(value = "msg") String msg){ChatResponse response = openAiChatClient.call(new Prompt(msg));return response.getResult().getOutput().getContent();}@RequestMapping("/ai/chat4")public String chatCall2(@RequestParam(value = "msg") String msg){//可选参数可以覆盖 项目配置文件中的参数(以代码中内容为准)ChatResponse response = openAiChatClient.call(new Prompt(msg,OpenAiChatOptions.builder().withModel("gpt-4-vision-preview") //gpt版本 可以填写字符串或者使用OpenAiApi.ChatModel中提供的常量.withTemperature(0.8F) //温度高,回答创新型越高;越低,越准确.build()));return response.getResult().getOutput().getContent();}@RequestMapping("/ai/chat5")public Object chatStream(@RequestParam(value = "msg") String msg){Flux<ChatResponse> flux = openAiChatClient.stream(new Prompt(msg,OpenAiChatOptions.builder().withModel(OpenAiApi.ChatModel.GPT_4_VISION_PREVIEW.getValue()) //gpt版本 "gpt-4-vision-preview".withTemperature(0.5F) //温度高,回答创新型越高;越低,越准确.withMaxTokens(4096) //显示最大token.build()));flux.toStream().forEach(chatResponse -> {System.out.print(chatResponse.getResult().getOutput().getContent());});return flux.collectList();}
}
接口测试
http://localhost:8080/ai/chat4?msg=河南大学大礼堂被烧毁了,请作一首诗表示悲痛

相关文章:
Spring AI项目Open AI对话接口开发指导
文章目录 创建Spring AI项目配置项目pom、application文件controller接口开发接口测试 创建Spring AI项目 打开IDEA创建一个新的spring boot项目,填写项目名称和位置,类型选择maven,组、工件、软件包名称可以自定义,JDK选择17即可…...
决策规划仿真平台的搭建
以下内容笔记据来自于b站up主忠厚老实的老王,视频;链接如下: 自动驾驶决策规划算法第二章第一节 决策规划仿真平台搭建_哔哩哔哩_bilibili 使用到的软件有matlab、prescan、carsim以及visual stadio。 我电脑上软件的版本是matlab2022a&am…...
RustGUI学习(iced/iced_aw)之扩展小部件(十八):如何使用badge部件来凸显UI元素?
前言 本专栏是学习Rust的GUI库iced的合集,将介绍iced涉及的各个小部件分别介绍,最后会汇总为一个总的程序。 iced是RustGUI中比较强大的一个,目前处于发展中(即版本可能会改变),本专栏基于版本0.12.1. 概述 这是本专栏的第十八篇,主要讲述badge标记部件的使用,会结合实…...
触摸播放视频,并用iframe实现播放外站视频
效果: html: <div:style"{ height: homedivh }"class"rightOne_content_div_div"mouseenter"divSeenter(i)"mouseleave"divLeave(i)"click"ItemClick(i)"><!-- isUser是否是用户上传 --><divv-if…...
接口自动化-requests库
requests库是用来发送请求的库,本篇用来讲解requests库的基本使用。 1.安装requests库 pip install requests 2.requests库底层方法的调用逻辑 (1)get / post / put / delete 四种方法底层调用 request方法 注意:data和json都…...
队列的实现与OJ题目解析
"不是你变优秀了, 那个人就会喜欢你." 文章索引 前言1. 什么是队列2. 队列的实现3. OJ题目解析4. 总结 前言 感情可以培养是个伪命题. 如果有足够多的时间和爱, 就可以让另一个人爱上你的话, 那谁和谁都可以相爱了. 爱情之所以会让人死去活来, 是因为, 答案都写在了…...
中北大学软件学院javaweb实验三JSP+JDBC综合实训(一)__数据库记录的增加、查询
目录 1.实验名称2.实验目的3.实验内容4.实验原理或流程图5.实验过程或源代码(一)编程实现用户的登录与注册功能【步骤1】建立数据库db_news2024和用户表(笔者使用的数据库软件是navicat)【步骤2】实现用户注册登录功能(与上一实验报告不同的是࿰…...
高通QCS6490开发(一): 广翼智联FV01 AI板卡简介
《高通QCS6490开发》是一系列AIoT应用开发文章,我们将会在系列文章中陆续介绍基于QCS6490平台上的AIoT应用开发,在文章中,我们选择了广翼智联(FAIOT)公司的FV01产品作为开发板,介绍如何从底层的硬件板卡接线…...
【知识拓展】大白话说清楚:IP地址、子网掩码、网关、DNS等
前言 工作中常听别人说的本地网络是什么意思?同一网段又是什么意思?它俩有关系吗? 在工作中内经常会遇到相关的网络问题,涉及网络通信中一些常见的词汇,如IP地址、子网掩码、网关和DNS等。具体一点:经常会…...
Java 高级面试问题及答案2
Java 高级面试问题及答案 问题 1: 请解释 Java 中的多线程和并发的区别,并举例说明如何避免常见的并发问题。 答案: 多线程是指程序中有多个线程同时执行,而并发是指程序设计中允许多个操作看起来是同时执行的,即使它们可能不是…...
2024年网络安全威胁
随着2024年的到来,数字世界的版图正在以前所未有的速度扩张,引领我们进入一个技术革新的新时代。然而,这飞速的发展同时也催生了一系列错综复杂的网络安全挑战。在这个数字平台与我们生活日益紧密交织的时代,深入了解这些新兴的威…...
应用层之 HTTP 协议
HTTP 协议 HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的 应用层协议。所谓 "超文本" 的含义, 就是传输的内容不仅仅是文本(比如 html, css 这个就是文本), 还可以是一些 其他的资源, 比如图片, 视频, 音频等二进制的数据。浏览器获取到网页&#…...
解决Word文档中页眉有部分有,有部分没有的问题
问题描述:一个Word文档中,在页眉上添加文档名称和页码,但是有的有,有的没有,选择“链接到前一节”也无法解决该问题。 原因分析:页眉页脚中,勾选了“首页不同”的选项,如下图&#…...
Python爬虫基础知识学习(以爬取某二手房数据、某博数据与某红薯(书)评论数据为例)
一、爬虫基础流程 爬虫的过程模块化,基本上可以归纳为以下几个步骤: 1、分析网页URL:打开你想要爬取数据的网站,然后寻找真实的页面数据URL地址; 2、请求网页数据:模拟请求网页数据,这里我们介…...
JavaScript-输入输出语句
输出语句 document.write( 输出的内容 ) 语法:document.write( 输出的内容) 作用:内容会显示在网页上 如果输出的内容是标签,也会被解析为网页元素 代码: <!DOCTYPE html> <html lang"en"> <head>&…...
peft+llama3训练自定义数据
要微调自己的模型训练 LLaMA 3,则需要准备一个 JSON 格式的数据集,其中每个条目包含输入文本和相应的标签(如果有的话)。以下是一个 JSON 数据集的示例格式: [{"input": "这是一个输入样本。",&q…...
vue+ts+vite+pinia+less+echarts 前端可视化 实战项目
1.初始化前端 输入 npm init vuelatest 命令 然后 选择需要的插件2.构建完成后 在终端切换到vue-project文件夹下 npm install 下载依赖 3.下载 less样式 npm install less less-loader -D 4.下载axios npm install axios 5.下载echarts npm install echarts -S 6.引入中国…...
文心一言指令多样化,你知道的有哪些?
文心一言的指令非常多样化,可以根据用户的需求和场景进行灵活调整。以下是一些常见的文心一言指令示例: 知识问答: 帮我解释一下什么是芯片?中国的历史上有哪些重要的朝代?人工智能在未来会有哪些发展趋势?…...
QT状态机8-使用恢复策略自动恢复属性
当状态分配的属性不再活动时,可能希望将其恢复到初始值,通过设置全局的恢复策略可以使状态机进入一个状态而不用明确制定属性的值。 QStateMachine machine; machine.setGlobalRestorePolicy(QStateMachine::RestoreProperties);当设置了恢复策略以后,状态机将自动恢复所有…...
第83天: 代码审计-PHP 项目RCE 安全调试追踪代码执行命令执行
案例一:CNVD拿1day-RCE命令执行-百家CMS 这里用代码审计系统搜索system,可以利用的是第一种 打开看细节 查找函数引用 查找$_file第一次出现的地方 这个时候就明白了,必须上传文件,然后利用文件名,去执行system命令 …...
BilibiliDown:如何高效批量下载B站视频并实现离线收藏管理?
BilibiliDown:如何高效批量下载B站视频并实现离线收藏管理? 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.…...
AI集成开发工程师的技术实践与转型之路
第一章:技术架构演进与AI融合趋势 1.1 传统开发范式的演进 现代软件开发正经历从单一业务系统向智能化业务系统的转型。传统的.NET技术栈作为企业级应用开发的基石,其技术架构也在不断演进: // 典型的三层架构示例 public class BusinessLogic {private readonly IDataAc…...
终极中文语义理解指南:text2vec-base-chinese如何让AI真正读懂中文
终极中文语义理解指南:text2vec-base-chinese如何让AI真正读懂中文 【免费下载链接】text2vec-base-chinese 项目地址: https://ai.gitcode.com/hf_mirrors/ai-gitcode/text2vec-base-chinese 还在为中文文本相似度计算而烦恼吗?text2vec-base-c…...
炉石传说HsMod插件:55+功能全面优化你的游戏体验
炉石传说HsMod插件:55功能全面优化你的游戏体验 【免费下载链接】HsMod Hearthstone Modify Based on BepInEx 项目地址: https://gitcode.com/GitHub_Trending/hs/HsMod HsMod是一款基于BepInEx框架的开源炉石传说模改插件,为玩家提供超过55项实…...
突破音乐加密限制:Unlock Music实现跨平台音频自由解决方案
突破音乐加密限制:Unlock Music实现跨平台音频自由解决方案 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: …...
[特殊字符] GLM-4V-9B企业级方案:客户上传截图问题自动诊断
GLM-4V-9B企业级方案:客户上传截图问题自动诊断 1. 引言 想象一下这个场景:你是一家SaaS公司的技术支持工程师,每天的工作就是处理海量的客户工单。其中,有相当一部分问题描述是模糊的,比如“我的页面显示不正常”、…...
即时通讯私有化,BeeWorks让每一次内网沟通都安全、安心、高效
BeeWorks以全维度安全防护体系为支撑,将安全设计深度融入每一项核心功能,让员工在日常办公中既能享受高效协同,又能全程守护企业核心数据安全。同时,规范的使用操作是发挥安全优势的关键,本文将重点介绍BeeWorks核心功…...
从编译错误到版本管理:C语言“商人过河”游戏代码的现代化改造之旅
1. 从古董代码到现代项目:一场技术考古与修复之旅 第一次打开那份"商人过河"的C语言游戏代码时,我仿佛穿越回了二十年前。满屏的编译错误、过时的函数调用、混乱的格式,还有那些早已被现代编译器抛弃的写法。这让我想起刚入行时接手…...
AugmentCode无限续杯插件:突破登录限制的自动化解决方案
AugmentCode无限续杯插件:突破登录限制的自动化解决方案 【免费下载链接】free-augment-code AugmentCode 无限续杯浏览器插件 项目地址: https://gitcode.com/gh_mirrors/fr/free-augment-code 痛点解析:开发者的账户管理困境 在软件开发与测试…...
W25Q16 Flash存储器:从基础概念到SPI通信实战
1. 认识W25Q16 Flash存储器 第一次接触W25Q16是在做一个智能家居项目时,需要保存用户的WiFi配置和房间温湿度记录。当时试过用单片机内部的EEPROM,但容量太小不够用,后来发现了这款性价比超高的外部Flash芯片。简单来说,W25Q16就像…...
