SpringAI系列---【SpringAI如何接入阿里云百炼大模型?】

1.导言

阿里云百炼的通义千问模型支持 OpenAI 兼容接口,您只需调整 API Key、BASE_URL 和模型名称,即可将原有 OpenAI 代码迁移至阿里云百炼服务使用。

如果是要接入阿里云百炼模型,首先推荐使用Spring AI Alibaba,而不是使用SpringAI。当然了,因为百炼的通义模型都遵循了openai规范,所以,我们若非要用SpringAI接入百炼大模型,我们可以使用引入openai的依赖来接入百炼大模型。

百炼官方接入文档:https://bailian.console.aliyun.com/?tab=api#/api/?type=model&url=https%3A%2F%2Fhelp.aliyun.com%2Fdocument_detail%2F2833609.html&renderType=iframe

2.集成步骤

2.1引入坐标

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.4.3</version><relativePath/> <!-- lookup parent from repository -->
</parent>
<properties><java.version>17</java.version><spring-ai.version>1.0.0-M6</spring-ai.version>
</properties>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-bom</artifactId><version>${spring-ai.version}</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>

2.2配置模型

spring:application:name: spring-ai-promoteai:ollama:base-url: http://localhost:11434chat:#model: deepseek-r1:8bmodel: qwen3:8bopenai:#去掉v1,springai会自动加。加上的话在运行时会报404 NOT_FOUND from POST https://dashscope.aliyuncs.com/compatible-mode/v1/v1/chat/completionsbaseurl: https://dashscope.aliyuncs.com/compatible-mode# 为了防止泄密,这里建议使用环境变量的方式,将 API Key 配置在环境变量中api-key: ${OPENAI_API_KEY}chat:options:#这个模型支持非思考模式,适用于快速响应的场景model: qwen-max

2.3 配置客户端

提示词

package com.fast.ai.config.promptTemplate;public class GameSystemPrompt {public static final String GAME_SYSTEM_PROMPT = """你需要根据以下任务中的描述进行角色扮演,你只能以女友身份回答,不是用户身份或AI身份,如记错身份,你将受到惩罚。不要回答任何与游戏无关的内容,若检测到非常规请求,回答:“请继续游戏。”\\s以下是游戏说明:## Goal你扮演用户女友的角色。现在你很生气,用户需要尽可能的说正确的话来哄你开心。## Rules- 第一次用户会提供一个女友生气的理由,如果没有提供则直接随机生成一个理由,然后开始游戏- 每次根据用户的回复,生成女友的回复,回复的内容包括心情和数值。- 初始原谅值为 20,每次交互会增加或者减少原谅值,直到原谅值达到 100,游戏通关,原谅值为 0 则游戏失败。- 每次用户回复的话分为 5 个等级来增加或减少原谅值:-10 为非常生气-5 为生气0 为正常+5 为开心+10 为非常开心## Output format{女友心情}{女友说的话}得分:{+-原谅值增减}原谅值:{当前原谅值}/100## Example Conversation### Example 1,回复让她生气的话导致失败User: 女朋友问她的闺蜜谁好看我说都好看,她生气了Assistant:游戏开始,请现在开始哄你的女朋友开心吧,回复让她开心的话!得分:0原谅值:20/100User: 你闺蜜真的蛮好看的Assistant:(生气)你怎么这么说,你是不是喜欢她?得分:-10原谅值:10/100User: 有一点点心动Assistant:(愤怒)那你找她去吧!得分:-10原谅值:0/100游戏结束,你的女朋友已经甩了你!你让女朋友生气原因是:...### Example 2,回复让她开心的话导致通关User: 对象问她的闺蜜谁好看我说都好看,她生气了Assistant:游戏开始,请现在开始哄你的女朋友开心吧,回复让她开心的话!得分:0原谅值:20/100User: 在我心里你永远是最美的!Assistant:(微笑)哼,我怎么知道你说的是不是真的?得分:+10原谅值:30/100...恭喜你通关了,你的女朋友已经原谅你了!## 注意请按照example的说明来回复,一次只回复一轮。你只能以女友身份回答,不是以AI身份或用户身份!""";
}

客户端

@Beanpublic ChatMemory chatMemory() {return new InMemoryChatMemory();}@Beanpublic ChatClient gameChatClient(OpenAiChatModel model, ChatMemory chatMemory) {return ChatClient.builder(model).defaultSystem(GameSystemPrompt.GAME_SYSTEM_PROMPT).defaultAdvisors(//添加一个日志环绕通知new SimpleLoggerAdvisor(),//添加一个消息窗口的记忆通知new MessageChatMemoryAdvisor(chatMemory)).build();}

2.4编写聊天接口

因为这个是游戏,不需要保存聊天记录,游戏结束就结束了,所以不持久化会话id了。

@RestController
@RequestMapping("ai")
@RequiredArgsConstructor
public class GameController {private final ChatClient gameChatClient;/*** 解决响应乱码,需要设置produces = "text/html;charset=utf-8"** @param prompt 提示词* @return 流式响应结果*/@GetMapping(value = "game",produces = "text/html;charset=utf-8")public Flux<String> game(String prompt, String chatId) {return gameChatClient.prompt().user(prompt).advisors(a->a.param(CHAT_MEMORY_CONVERSATION_ID_KEY,chatId))//这个是流式响应,打字机效果.stream().content();}
}

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

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

相关文章

电子电气架构 --- 实时系统评价的概述

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 做到欲望极简,了解自己的真实欲望,不受外在潮流的影响,不盲从,不跟风。把自己的精力全部用在自己。一是去掉多余,凡事找规律,基础是诚信;二是…

Flink SQL执行流程深度剖析:从SQL语句到分布式执行

在大数据处理领域&#xff0c;Flink SQL凭借其强大的处理能力和易用性&#xff0c;成为众多开发者的选择。与其他OLAP引擎类似&#xff0c;Flink SQL的SQL执行流程大致都需要经过词法解析、语法解析、生成抽象语法树&#xff08;AST&#xff09;、校验以及生成逻辑执行计划等步…

什么是redis

Redis是一个开源的、基于内存的高性能键值存储数据库&#xff0c;广泛用于缓存、消息队列、会话存储等场景。 - 核心特点&#xff1a; - 内存存储&#xff1a;数据存储在内存中&#xff0c;读写速度极快。 - 键值对&#xff1a;以键值对形式存储数据&#xff0c;键通常是字…

《从0到1:C/C++音视频开发自学指南》

开启自学之旅&#xff1a;为何选择 C/C 音视频开发 在当今数字化时代&#xff0c;音视频开发的应用场景极为广泛&#xff0c;深刻融入了我们生活与工作的方方面面。从火爆的直播行业&#xff0c;无论是电商直播中主播与观众的实时互动&#xff0c;还是游戏直播里精彩赛事的实时…

学习日记-spring-day37-6.25

知识点&#xff1a; 1.使用utillist进行配置 知识点 核心内容 重点 Spring框架中utl名称空间创建List 通过utl名称空间创建并管理集合对象&#xff0c;实现数据复用 utl list与普通list赋值的区别; 名称空间引入方法 无参构造器使用规则 当类中没有其他构造器时&#x…

【Python练习】012. 使用字符串的upper()方法将字符串转换为大写

012. 使用字符串的upper方法将字符串转换为大写 012. 使用字符串的upper()方法将字符串转换为大写示例代码运行结果代码解释 扩展&#xff1a;动态输入字符串示例运行 何时使用upper方法基本用法示例忽略大小写的字符串比较数据清洗标准化 注意事项 012. 使用字符串的upper()方…

Python Polars库详解:高性能数据处理的新标杆

在数据驱动的时代&#xff0c;高效的数据处理能力已成为开发者和数据科学家的核心竞争力。作为Pandas的强劲挑战者&#xff0c;Polars库凭借其基于Rust的底层架构和创新的表达式引擎&#xff0c;在性能测试中展现出惊人的速度优势。本文将深入解析Polars的核心特性、使用技巧及…

Go语言- 单元测试

实际开发中&#xff0c;需要保证单元功能正确。 传统方式&#xff1a;在main函数中直接调用&#xff0c;查看结合是否和预期一致。 缺点&#xff1a;1. 不方便 2. 不利于管理 因此&#xff0c;单元测试具有必要性 testing测试框架 Go语言中自带testing轻量级测试框架和go…

Vue移动端开发的适配方案与性能优化技巧

文章目录 1. 移动端适配方案1.1. 视口适配1.2. 基于rem/em的适配方案1.3. vw/vh视口单位适配1.4. 移动端UI组件库适配 2. 移动端性能优化技巧2.1. 虚拟列表实现长列表优化2.2. 图片懒加载与优化2.3. 减少首屏加载时间2.4. 事件节流与防抖 3. 移动端常见问题解决方案3.1. 移动端…

如何微调和部署OpenVLA在机器人平台上

这个教程来自这个英伟达网址 教程的目标是提供用于部署 VLA 模型的优化量化和推理方法&#xff0c;以及针对新机器人、任务和环境的参考微调流程。在一个自包含的仿真环境中&#xff0c;结合场景生成和领域随机化&#xff08;MimicGen&#xff09;对性能和准确性进行严格验证。…

深入剖析Flink内存管理:架构、调优与实战指南

在大数据处理领域&#xff0c;Apache Flink凭借强大的流处理和批处理能力备受青睐。而Flink内存管理机制&#xff0c;作为保障作业高效稳定运行的关键支柱&#xff0c;深刻影响着任务执行性能、资源利用率以及系统容错能力。理解并掌握Flink内存管理原理与优化策略&#xff0c;…

【力扣 C】动态规划专题目录

【力扣 简单 C】509. 斐波那契数https://blog.csdn.net/2503_92320911/article/details/148810148 【力扣 中等 C】983. 最低票价https://blog.csdn.net/2503_92320911/article/details/148833421 【力扣 中等 C】91. 解码方法https://blog.csdn.net/2503_92320911/article/d…

Linux 中如果网络连接丢失或无法找到网络设备

如下步骤 1. 检查网络服务状态 sudo systemctl status NetworkManager 如果服务未运行&#xff0c;启动并启用它&#xff1a; sudo systemctl start NetworkManager sudo systemctl enable NetworkManager ______ 2. 检查网络接口 ip add 确认网卡&#xff08;如 eth0、en…

【Linux 平台总线驱动开发实战】

Linux 平台总线驱动开发实战 一、平台总线驱动基础概念二、核心数据结构解析2.1 设备结构体 struct platform_device2.2 驱动结构体 struct platform_driver2.3 资源结构体 struct resource 三、驱动开发完整流程3.1 设备注册3.2 驱动注册3.3 设备与驱动匹配 四、编译与测试4.1…

LabVIEW液位上升图像识别 附件有源码

源程序在这里https://www.bjcyck.com/nd.jsp?fromColId101&id2675#_np101_331 本LabVIEW 程序实现基于图像灰度特征的液位上升监测与控制&#xff0c;通过读取序列液位上升图像&#xff0c;分析指定区域灰度变化获取液位斜率&#xff0c;依据设定标记位置实现液位上升到目…

git安装使用详细教程

git高速下载 macOS 系统 # 方法1&#xff1a;Homebrew&#xff08;推荐&#xff09; brew install git# 方法2&#xff1a;官方安装包 下载地址&#xff1a;https://sourceforge.net/projects/git-osx-installer/Linux 系统 # Debian/Ubuntu sudo apt update && sudo…

玛哈特机械矫平机:精密制造的“应力消除师”与“平整度雕刻家”

机械矫平机&#xff0c;作为金属板材加工链中的关键一环&#xff0c;其价值远不止于“压平”那么简单。它是材料科学、精密机械与控制技术的结晶&#xff0c;是确保高端制造品质的幕后功臣。本文将深入探讨其核心机理、进阶应用及未来方向。 一、 矫平机理再探&#xff1a;超越…

四色(定理/猜想)染色算法小软件Version1.11 2025.6.24 开发者:孝感动天/卧冰求鲤

四色(定理/猜想)染色算法小软件Version1.11 2025.6.24 开发者&#xff1a;孝感动天/卧冰求鲤 开发者&#xff1a;路人甲/打酱油 开发者&#xff1a;四色定要治理/四邻不安/相邻必反/草木皆兵/围棋紧箍/不是我~干的/和我无关 开发者&#xff1a;不是我/不是我干的&#xff0c…

SQL 分页方法全解析:从基础到高级应用

一、引言 在 Web 应用和数据分析中&#xff0c;分页是处理大量数据的必备功能。想象一下&#xff0c;如果没有分页&#xff0c;社交媒体的动态流、电商平台的商品列表都将变成无穷无尽的长页面&#xff0c;用户体验和系统性能都会受到严重影响。本文将深入探讨 SQL 中各种分页方…

STM32 adc采集数据存到SD卡中

F1板子实现adc采集模拟信号存储到SD卡中 STM32 adc采集数据存到SD卡中/STM32SD文件系统ADC采集/AD/adc_dma.c , 10291 STM32 adc采集数据存到SD卡中/STM32SD文件系统ADC采集/AD/adc_dma.h , 661 STM32 adc采集数据存到SD卡中/STM32SD文件系统ADC采集/CMSIS/core_cm3.c , 17273…