当前位置: 首页 > article >正文

SpringAI基于API对大语言模型调用

引言

随着人工智能技术的迅猛发展,大型语言模型(LLM)在各个领域的应用越来越广泛。SpringAI作为一个旨在简化AI集成的框架,为开发者提供了高效、便捷的工具来连接和调用这些大模型。本文将详细探讨如何使用SpringAI整合通义千问等大语言模型,并通过实例演示这一过程,最后提供一些扩展建议。

一、SpringAI简介

SpringAI是一个专为AI工程设计的应用框架,旨在将Spring生态系统设计原则应用到AI领域。它支持多种AI模型,包括聊天、文生图、嵌入式模型等,并提供了同步和流式API。SpringAI的目标是简化AI应用的开发,让开发者能够更容易地定义自己的POJO来调用AI接口,进行训练和调用。

二、通义千问等大语言模型概述

通义千问是阿里巴巴推出的一款大型语言模型,具备强大的自然语言处理能力。它能够理解复杂的指令,进行逻辑推理,生成连贯的文本,并在多个领域表现出色。与通义千问类似的其他大语言模型,如GPT系列、BERT等,也在各自的应用场景中发挥着重要作用。

三、SpringAI整合通义千问的步骤
  1. 环境准备

    首先,确保已经安装了Java开发环境,并配置了Maven或Gradle等构建工具。同时,需要准备好Spring Boot项目,并添加SpringAI和通义千问相关的依赖。

  2. 配置maven仓库


<repositories><repository><id>ali-public</id><url>https://maven.aliyun.com/repository/public</url><snapshots><enabled>false</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>
  1. 添加依赖

    在Spring Boot项目的pom.xml文件中,添加SpringAI和通义千问SDK的依赖。例如:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.alibaba.cloud.ai</groupId><artifactId>spring-ai-alibaba-starter</artifactId><version>1.0.0-M2</version></dependency><dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-core</artifactId><version>1.0.0-M2</version></dependency>
</dependencies>
  1. 配置文件

    application.yml中添加通义千问API的配置信息,API-KEY,(
    具体申请方法可以访问官网,右上角选择API-KEY申请即可)

spring:ai:dashscope:api-key: <YOUI_APP_KEY>
  1. 服务层实现

    创建一个服务类,用于封装与通义千问的交互逻辑。在这个类中,可以使用通义千问的SDK来发送请求,并处理响应。

@Service
public class TongyiService {// 提示词模板@Value("classpath:prompt-template.st")private Resource resource;private ChatClient chatClient;public TongyiService(ChatClient.Builder builder) {this.chatClient = builder.build();}public String completion(String message) {return this.chatClient.prompt().system("You are a helpful assistant.").user(message).call().content();}public Flux<String> streamCompletion(String message) {PromptTemplate promptTemplate = new PromptTemplate(resource);Prompt prompt = promptTemplate.create(Map.of("message", message));return chatClient.prompt(prompt).stream().content();}}
  1. 控制器层实现

    创建一个控制器类,用于处理来自前端的请求,并调用服务层的方法获取响应。

@RestController
@RequestMapping("/chat")
public class ChatController {@Resourceprivate TongyiService tongyiService;@GetMappingpublic ResponseEntity<String> chat(@RequestParam String message) {String result = tongyiService.completion(message);return ResponseEntity.ok(result);}@GetMapping(value = "/strem")public ResponseEntity<Flux<String>> streamChat(@RequestParam String message) {Flux<String> result = tongyiService.streamCompletion(message);return ResponseEntity.ok(result);}
}
四、示例演示

启动Spring Boot应用程序,访问`http://localhost:8080/chat?message=讲一个故事

五、扩展建议
  1. 多模型支持

    可以在SpringAI中整合多个大型语言模型,根据需求选择合适的模型进行调用。这可以通过配置文件或数据库来实现模型的动态切换。

  2. 性能优化

    对于高并发的应用场景,可以考虑使用缓存技术来减少API调用次数,提高响应速度。同时,可以对请求进行限流和降级处理,确保系统的稳定性。

  3. 安全性

    在调用通义千问API时,需要注意API Key和Secret Key的安全存储和传输。可以使用环境变量、加密存储等方式来保护敏感信息。

  4. 自定义功能

    根据业务需求,可以在SpringAI中自定义一些功能,如文本预处理、后处理、模型评估等。这可以通过实现SpringAI提供的接口或扩展点来实现。

结语

SpringAI为开发者提供了一个高效、便捷的框架来连接和调用大型语言模型。通过本文的介绍和示例演示,相信读者已经掌握了如何在SpringAI中整合通义千问等大语言模型的方法。同时,本文也提供了一些扩展建议,希望能够帮助读者更好地应用和优化AI技术。

相关文章:

SpringAI基于API对大语言模型调用

引言 随着人工智能技术的迅猛发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;在各个领域的应用越来越广泛。SpringAI作为一个旨在简化AI集成的框架&#xff0c;为开发者提供了高效、便捷的工具来连接和调用这些大模型。本文将详细探讨如何使用SpringAI整合通义千问等…...

0 基础学运维:解锁 K8s 云计算运维工程师成长密码

前言&#xff1a;作为一个过来人&#xff0c;我曾站在技术的门槛之外&#xff0c;连电脑运行内存和内存空间都傻傻分不清&#xff0c;完完全全的零基础。但如今&#xff0c;我已成长为一名资深的k8s云计算运维工程师。回顾这段历程&#xff0c;我深知踏上这条技术之路的艰辛与不…...

在 vscode + cmake + GNU 工具链的基础上配置 JLINK

安装 JLINK JLINK 官网链接 下载安装后找到安装路径下的可执行文件 将此路径添加到环境变量的 Path 中。 创建 JFlash 项目 打开 JFlash&#xff0c;选择新建项目 选择单片机型号 在弹出的窗口中搜索单片机 其他参数根据实际情况填写 新建完成&#xff1a; 接下来设置…...

【全栈】SprintBoot+vue3迷你商城(9)

【全栈】SprintBootvue3迷你商城&#xff08;9&#xff09; 往期的文章都在这里啦&#xff0c;大家有兴趣可以看一下 后端部分&#xff1a; 【全栈】SprintBootvue3迷你商城&#xff08;1&#xff09; 【全栈】SprintBootvue3迷你商城&#xff08;2&#xff09; 【全栈】Spr…...

自动化实现的思路变化

阶段一&#xff1a; 1、成功调用。第一步&#xff0c;一般是用现用的工具&#xff0c;或者脚本成功调用接口 2、解决关联接口的参数传递。有的接口直接&#xff0c;存在参数的传递&#xff0c;一般的思路&#xff0c;就是将这个参数设置为变量。 3、简化代码。总会有些东西是重…...

省市区三级联动

引言 在网页中&#xff0c;经常会遇到需要用户选择地区的场景&#xff0c;如注册表单、地址填写等。为了提供更好的用户体验&#xff0c;我们可以实现一个三级联动的地区选择器&#xff0c;让用户依次选择省份、城市和地区。 效果展示&#xff1a; 只有先选择省份后才可以选择…...

Mac安装Redis并设置launchd自启动

下载和编译redis源码 方便mac同学&#xff0c;不想使用brew方式安装&#xff0c;又想开机自启动redis&#xff0c;简单记录一下。首先下载redis7.0.15.tar.gz源码包 tar -xf tar -zxf redis-7.0.15.tar.gz开始编译源码 cd redis-7.0.15 sudo cp redis.conf /etc/redis.conf …...

Fullcalendar @fullcalendar/react 样式错乱丢失问题和导致页面卡顿崩溃问题

问题描述&#xff1a; 我使用 fullcalendar的react版本时&#xff0c;出现了一个诡异的问题&#xff0c;当我切换到 一个iframe页面时&#xff08;整个页面是一个iframe嵌入的&#xff09;&#xff0c;再切换回来日历的样式丢失了&#xff01;不仅丢失了样式还导致页面崩溃了&…...

dm8在Linux环境安装精简步骤说明(2024年12月更新版dm8)

dm8在Linux环境安装详细步骤 - - 2025年1月之后dm8 环境介绍1 修改操作系统资源限制2 操作系统创建用户3 操作系统配置4 数据库安装5 初始化数据库6 实例参数优化7 登录数据库配置归档与备份8 配置审计9 创建用户10 屏蔽关键字与数据库兼容模式11 jdbc连接串配置12 更多达梦数据…...

Linux MySQL离线安装

一、准备工作 1. 下载MySQL安装包 访问MySQL官方网站&#xff0c;选择适合您Linux系统的MySQL版本进行下载。通常推荐下载Generic Linux (glibc 2.12)版本的.tar.gz压缩包&#xff0c;例如mysql-8.0.33-linux-glibc2.12-x86_64.tar.xz。将下载好的安装包拷贝到Linux服务器的某…...

S4 HANA更改Tax base Amount的字段控制

本文主要介绍在S4 HANA OP中Tax base Amount的字段控制相关设置。具体请参照如下内容&#xff1a; 1. 更改Tax base Amount的字段控制 以上配置用于控制FB60/FB65/FB70/FB75/MIRO的页签“Tax”界面是否可以修改“Tax base Amount”&#xff0c; 如果勾选Change 表示可以修改T…...

JVM堆空间

一、堆空间的核心概述 一个JVM实例只存在一个堆内存&#xff0c;堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建&#xff0c;其空间大小也就确定了。是JVM管理的最大一块内存空间。 堆内存的大小是可以调节的。堆可以处于物理上不连续的内存空间中&#xff…...

《深入解析:DOS检测的技术原理与方法》

DDOS入侵检测与防御 一、实现Linux下DDOS的入侵检测与防御 利用Python编程实现对wrk的泛洪攻击检测&#xff0c;并让程序触发调用Linux命令实现防御: 1、泛洪攻击的检测&#xff0c;可以考虑使用的命令&#xff0c;这些命令可以通过Python进行调用和分析 (1) netstat -ant …...

PID如何调试,如何配置P,I,D值,如何适配pwm的定时器配置,如何给小车配电源

首先你要搞清楚PID公式原理 PID算法解析PID算法解析_pid滤波算法-CSDN博客 然后你要明白调试原理 首先要确定一个电源 电源决定了你后面调试时电机转动速度大小和pwm占空比的关系&#xff0c;电源电压越大那要转到同一速度所需的占空比越小&#xff0c;反之电源电压越小那要…...

小马模拟器-第三方全街机游戏模拟器

链接&#xff1a;https://pan.xunlei.com/s/VOHSiB6st-f3RWlIK01MS2fUA1?pwd44v7# 1.小马模拟器是一款完全免费的游戏模拟器软件&#xff0c;支持街机&#xff08;FBA,MAME,PGM2&#xff09;,3DS,WII,NGC,DC,SS,DOS,MD,WSC,NDS,JAVA,PCE,FC,SFC,GBA,GBC,PSP,PS,N64等多种游戏…...

Qwen2-VL:在任何分辨率下增强视觉语言模型对世界的感知 (大型视觉模型 核心技术 分享)

摘要 我们推出了Qwen2-VL系列,这是对之前Qwen-VL模型的高级升级,重新定义了视觉处理中的常规预设分辨率方法。Qwen2-VL引入了Naive Dynamic Resolution机制,使模型能够动态地将不同分辨率的图像转换为不同的视觉令牌数量。这种方法允许模型生成更高效和准确的视觉表示,紧密…...

微信小程序date picker的一些说明

微信小程序的picker是一个功能强大的组件&#xff0c;它可以是一个普通选择器&#xff0c;也可以是多项选择器&#xff0c;也可以是时间、日期、省市区选择器。 官方文档在这里 这里讲一下date picker的用法。 <view class"section"><view class"se…...

MySQL 基础学习(2): INSERT 操作

在这篇文章中&#xff0c;我们将专注于 MySQL 中的 INSERT 操作&#xff0c;深入了解如何高效地向表中插入数据&#xff0c;并探索插入操作中的一些常见错误与解决方案。 一、基础 INSERT 语法 在 MySQL 中&#xff0c;INSERT 操作用于向表中插入新记录&#xff0c;基本语法如…...

关于opensips的帮助命令的解释

opensips -help以下是 opensips 命令及其选项的中文解释&#xff08;基于 3.6.0-dev 版本&#xff09;&#xff1a; 命令用法 opensips -l 地址 [-l 地址 ...] [选项]选项说明 选项功能-f 文件指定配置文件&#xff08;默认为 /usr/local//etc/opensips/opensips.cfg&#x…...

新项目传到git步骤

1.首先创建远程仓库,创建一个空白项目,即可生成一个克隆URL,可以是http也可以是SSH,copy下这个地址 2.找到项目的本机目录,进入根目录,打开git bash here命令行 3.初始化: git init 4.关联远程地址: git remote add origin "远程仓库的URL" 5.查看关联 git re…...

【力扣每日一题】LeetCode 2412: 完成所有交易的初始最少钱数

LeetCode 2412: 完成所有交易的初始最少钱数 题目解析 问题描述 给定一个二维数组 transactions&#xff0c;每个元素 transactions[i] [costi, cashbacki] 表示一个交易。对于每笔交易&#xff0c;要求你完成该交易时有足够的初始资金 money&#xff0c;并且交易会减少或增…...

【算法】递归型枚举与回溯剪枝初识

递归型枚举与回溯剪枝初识 1.枚举子集2.组合型枚举3.枚举排列4.全排列问题 什么是搜索&#xff1f;搜索&#xff0c;是一种枚举&#xff0c;通过穷举所有的情况来找到最优解&#xff0c;或者统计合法解的个数。因此&#xff0c;搜索有时候也叫作暴搜。搜索一般分为深度优先搜索…...

pytorch 多机多卡训练方法

在深度学习训练中&#xff0c;使用多机多卡&#xff08;多台机器和多块 GPU&#xff09;可以显著加速模型训练过程。 PyTorch 提供了多种方法来实现多机多卡训练&#xff0c;以下是一些常用的方法和步骤&#xff1a; 1. 使用 torch.distributed 包 PyTorch 的 torch.distribut…...

InfiniBand客户端注册机制详解:ib_register_client函数的作用与实现

在Linux内核的InfiniBand(IB)子系统中,ib_register_client函数扮演着至关重要的角色。它允许上层用户(如特定的IB设备驱动程序或相关应用模块)注册为IB客户端,并定义在IB设备添加或移除时应执行的回调函数。这一机制确保了IB设备的动态管理,以及资源的有效分配和回收。本…...

rocketmq-product-send方法源码分析

先看有哪些send方法 首先说红圈的 有3个红圈。归类成3种发送方式。假设前提条件&#xff0c;发送的topic&#xff0c;有3个broker&#xff0c;每个broker总共4个write队列&#xff0c;总共有12个队列。 普通发送。负载均衡12个队列。指定超时时间指定MessageQueue,发送&#…...

centos下设置服务器开机自启动 redis

在客户服务器中&#xff0c;服务器重启&#xff0c;发现 Redis 没有重启&#xff0c; 可以按照类似的步骤来创建自启动脚本&#xff0c;并将它添加到定时任务中。 解决办法&#xff1a; 1. 创建自启动脚本 进入服务器并创建脚本文件&#xff0c;例如 /usr/local/bin/redis_…...

【Linux】APT 密钥管理:官方推荐的解决方案应对 apt-key 弃用

引言 在 Ubuntu 和 Debian 系统中&#xff0c;apt-key 命令用于管理 GPG 密钥&#xff0c;验证来自软件包存储库的包是否合法并且未被篡改。然而&#xff0c;从 Debian 11 和 Ubuntu 22.04 开始&#xff0c;apt-key 被弃用&#xff0c;并将在未来的版本中完全移除。因此&#…...

69.在 Vue 3 中使用 OpenLayers 拖拽实现放大区域的效果(DragPan)

引言 在现代 Web 开发中&#xff0c;地图功能已经成为许多应用的重要组成部分。OpenLayers 是一个功能强大的开源地图库&#xff0c;支持多种地图源和交互操作。Vue 3 是一个流行的前端框架&#xff0c;以其响应式数据和组件化开发著称。本文将介绍如何在 Vue 3 中集成 OpenLa…...

77,【1】.[CISCN2019 华东南赛区]Web4

有句英文&#xff0c;看看什么意思 好像也可以不看 进入靶场 点击蓝色字体 我勒个豆&#xff0c;百度哇 所以重点应该在url上&#xff0c;属于任意文件读取类型 接下来该判断框架了 常见的web框架如下 一&#xff0c;Python 框架 1.Flask URL 示例 1&#xff1a;http://…...

手撕B-树

一、概述 1.历史 B树&#xff08;B-Tree&#xff09;结构是一种高效存储和查询数据的方法&#xff0c;它的历史可以追溯到1970年代早期。B树的发明人Rudolf Bayer和Edward M. McCreight分别发表了一篇论文介绍了B树。这篇论文是1972年发表于《ACM Transactions on Database S…...