Spring boot集成通义千问大模型

Spring boot集成通义千问大模型

背景

我在用idea进行java开发时发现了通义灵码这款免费的智能代码补全插件,用了一段时间了,感觉很不错。就想着在自己的项目中也能集成通义千问大模型实现智能回答,毕竟对接openai需要解决网络问题,这个问题是真烦。

开通阿里云账号

访问阿里云官网,如果没注册就注册登录进去,然后搜索通义千问。
在这里插入图片描述
如果你之前还没有开通,就点击立即开通,开通是免费的,无脑操作就行。开通之后,进入产品控制台
在这里插入图片描述
可以看到,每期都有一定的免费额度,对于个人来说肯定是够了。当然对于第一次进来的人,是看不到这个信息,你还需要申请api_key,操作过程如下
在这里插入图片描述
再之后,我们可以点击文档中心,查看具体集成过程了。
在这里插入图片描述我们进入操作指南下的模型体验中心,进入页面点击通义千问API详情,这里就有具体的api和java代码的操作方式。
在这里插入图片描述

代码实操

引入maven依赖

java无论用什么第三方功能,第一步就是引入依赖。

        <!-- 对接通义千问大模型 --><dependency><groupId>com.alibaba</groupId><artifactId>dashscope-sdk-java</artifactId><version>2.14.4</version></dependency>
配置api_key

把key配置到yml中,按官方的意思,key应该放环境变量中,我这只是演示,就直接放这里了,要是生产环境使用,要放环境变量中,或者在配置中加密保存。

# 通义千问的apikey
ai:api_key: sk-************
代码实现

我就在controller层实现对话功能,代码如下

package org.syx.dts.controller;import com.alibaba.dashscope.aigc.generation.Generation;
import com.alibaba.dashscope.aigc.generation.GenerationParam;
import com.alibaba.dashscope.aigc.generation.GenerationResult;
import com.alibaba.dashscope.common.Message;
import com.alibaba.dashscope.common.Role;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.syx.dts.dto.Dto;import java.util.Arrays;@RestController
@RequestMapping("chat")
@Slf4j
public class ChatController {@Value("${ai.api_key}")private String apiKey;@PostMapping("ask")public String ask(@RequestBody Dto dto) throws Exception {Generation generation = new Generation();Message userMessage = Message.builder().role(Role.USER.getValue()).content(dto.getAsk()).build();GenerationParam param = GenerationParam.builder().model("qwen-turbo").messages(Arrays.asList(userMessage)).resultFormat(GenerationParam.ResultFormat.MESSAGE).topP(0.8).apiKey(apiKey).enableSearch(true).build();GenerationResult generationResult =generation.call(param);;return generationResult.getOutput().getChoices().get(0).getMessage().getContent();}}
前端代码
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html xmlns:th="http://www.thymeleaf.org"><head><title>aaaaa</title><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><link rel="stylesheet" type="text/css"th:href="@{/css/style.css}" /><script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script></head><body><div id="wrap"><div id="top_content"><div id="header"><div id="rightheader"><p>2024/07/20<br /></p></div><div id="topheader"><h1 id="title"><a href="#">aaaa</a></h1></div><div id="navigation"></div></div><div id="content"><p id="whereami"></p><h1>大模型:</h1>条件: <input id="query_name" type="text"  name="ask" /><input type="button" class="button"  id="query_submit" value="查询" /><br><textarea rows="20" cols="100" id="response" name="response" readonly="readonly"></textarea><p><a href="employee/lists">返回列表</a></p><script>$(function(){$('#query_submit').click(function(){var ask = $('#query_name').val();$.ajax({url: '[[@{/chat/ask}]]',type: 'POST',contentType: 'application/json',data: JSON.stringify({ask:ask}),success: function(data) {$('#response').val(data);},error: function(data) {$('#response').val(data);}});});});</script></div></div><div id="footer"><div id="footer_bg">aaaaa.com</div></div></div></body>
</html>
效果展示

在这里插入图片描述

总结

总体集成过程还是比较简单的,官方文档也是很充实的,更多高级功能,后面再探索吧。

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

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

相关文章

战略合作 | 竹云赋能雁塔区数字经济高质量发展

2024年5月30日&#xff0c;由西安市数据局指导&#xff0c;中共西安市雁塔区委、西安市雁塔区人民政府主办的 “雁塔区企业数字化转型发展大会” 在西安开幕。 本次活动以“数智雁塔&#xff0c;引领未来”为主题&#xff0c;特邀业内150余位政府、数字化服务企业、传统行业企…

Kubernetes 之 DaemonSet 基本原理

Kubernetes 之 DaemonSet 基本原理 DaemonSet 定义 DaemonSet 确保全部&#xff08;或者某些&#xff09;节点上运行一个 Pod 的副本。 当有节点加入集群时&#xff0c; 也会为他们新增一个 Pod 。 当有节点从集群移除时&#xff0c;这些 Pod 也会被回收。删除 DaemonSet 将会…

先导微型数控桌面式加工中心

随着数控技术、传感器技术、人工智能等技术的不断发展&#xff0c;制造业的快速发展和技术的不断进步&#xff0c;小型五轴加工中心的性能将不断提升&#xff0c;五轴联动技术作为解决异性复杂零件高效优质加工问题的重要手段&#xff0c;使其具有更广泛的应用前景。小型五轴加…

【启明智显分享】国产自主ZX7981P Wi-Fi6 5G-CPE开发板有哪些优势?

在当前竞争激烈的智能设备市场中&#xff0c;高性能与低功耗的开发板已然成为各大产品追求的关键优势。 今天我们从国产自主研发的ZX7981P Wi-Fi6 5G-CPE开发板的特点出发&#xff0c;分析他是否满足市场追求的特点。 主要特点&#xff1a; 1. 强大配置&#xff0c;稳定可靠 …

5.30 学习总

刷题记录(Codeforces Round 947 &#xff08;Div. 1 Div. 2&#xff09;B,C题)和Codeforces Round 948 &#xff08;Div. 2&#xff09;B题 一.B. 378QAQ and Mochas Array B. 378QAQ and Mochas Array time limit per test 1 second memory limit per test 256 megabytes in…

长难句5.30

Researchers measured people’s cortisol, which is a stress marker, while they were at work and while they were at home and found it higher at what is supposed to be a place of refuge. 研究人员测量了人们在工作中和在家里的皮质醇(压力的一种标志)&#xff0c;结…

在 JavaScript 中循环遍历数组的多种方法

在JavaScript编程中,遍历数组是一个非常常见的操作。根据不同的需求和JavaScript的不同版本,我们有多种方法来完成这一操作。本文将介绍几种有效的方法,包括现代的和传统的方式,同时分析每一种方法的优缺点。 1. 使用 for...of 语法 for...of 是在 ECMAScript 2015(ES6)…

Spring Boot集成statemachine快速入门demo

1.什么是statemachine&#xff1f; Spring Statemachine 是应用程序开发人员在 Spring 应用程序中使用状态机概念的框架&#xff0c;从设计层面分析&#xff1a;状态机目的是解决复杂的状态管理流程&#xff0c;保证程序单一原则和开闭原则&#xff1b;业务角度分析&#xff1…

【面试】什么是Java虚拟机

目录 1. 说明2. 关键点 1. 说明 1.Java虚拟机&#xff08;Java Virtual Machine&#xff0c;简称JVM&#xff09;是运行所有Java程序的抽象计算机&#xff0c;是Java语言的运行环境。2.JVM是Java平台无关性的关键&#xff0c;它允许Java程序在任何支持JVM的硬件和操作系统上运…

【大数据面试题】34 手写一个 Flink SQL 样例

一步一个脚印,一天一道大数据面试题 博主希望能够得到大家的点赞收,藏支持!非常感谢~ 点赞,收藏是情分,不点是本分。祝你身体健康,事事顺心! 我们来看看 Flink SQL大概流程和样例: 流程: 1.创建 流处理环境 StreamExecutionEnvironment env 2.创建 表环境 StreamTab…

为啥装了erlang,还报错erl: command not found?

转载说明&#xff1a;如果您喜欢这篇文章并打算转载它&#xff0c;请私信作者取得授权。感谢您喜爱本文&#xff0c;请文明转载&#xff0c;谢谢。 问题背景&#xff1a; 在一台不通外网的服务器上装rabbitmq&#xff0c;然后在启动的时候&#xff0c;遇到了报错 “/usr/lib/…

C#中使用Mapster

Mapster是一个开源的.NET对象映射库&#xff0c;它提供了一种简单而强大的方式来处理对象之间的映射。 多个映射框架的性能对比&#xff1a; 第一步安装Mapster 使用方法 public class Test {public string name { get; set; }public string sex { get; set; }public string…

C语言数据结构(超详细讲解)| 二叉树的实现

二叉树 引言 在计算机科学中&#xff0c;数据结构是算法设计的基石&#xff0c;而二叉树&#xff08;Binary Tree&#xff09;作为一种基础且广泛应用的数据结构&#xff0c;具有重要的地位。无论是在数据库索引、内存管理&#xff0c;还是在编译器实现中&#xff0c;二叉树都…

记录Win11安装打印机驱动过程

1. 首先下载打印机对应型号的驱动 可以从这里下载&#xff1a;打印机驱动,打印机驱动下载 - 打印机驱动网 2. 下载 3. 打开控制面板-->设备和打印机 找到目标打印机添加设备即可 新增打印纸张尺寸

B站稿件生产平台高可用建设分享

背景 B站作为国内领先的内容分享平台&#xff0c;其核心功能之一便是支持UP主们创作并分享各类视频内容。UP主稿件系统作为B站内容生产的关键环节&#xff0c;承担着从内容创作到发布的全过程管理。为了满足不同创作者的需求&#xff0c;B站提供了多种投稿渠道&#xff0c;包括…

方差分析的七种类型

方差分析&#xff08;ANOVA&#xff09;是一种用于检验两个以上样本均数差别的显著性统计方法。根据不同的研究设计和数据类型&#xff0c;方差分析可以分为以下7种类型。 一、单因素方差分析 ①单因素方差分析说明 单因素方差分析用于研究一个定类数据&#xff08;自变量&am…

【原创教程】MES服务器与成品打标机控制说明

1 实现的功能及应用的场合 MES即制造执行系统(manufacturing execution system,简称MES),即在加强MRP计划的执行功能,把MRP计划同车间作业现场控制,通过执行系统联系起来。 MES是一个生产管理智能化的一个系统,是用于生产时记录数据、产量等信息的智能管理系统。 该项…

SpockMockStatic方法

SpockMockStatic方法 参考: https://blog.csdn.net/knighttools/article/details/44630975 ‍ static方法 import com.meituan.mafka.client.producer.IProducerProcessor; import com.meituan.mdp.langmodel.api.message.AssistantMessage; import com.sankuai.gaigc.arrang…

文件批量重命名001到100如何操作?这几个文件改名小技巧学起来

文件批量重命名001到100怎么操作&#xff1f;作为打工一族&#xff0c;每天都需要跟很多文件打交道&#xff0c;有时文件太多了&#xff0c;查找起来像是大海捞针&#xff0c;特别是图片文件。这个时候我们就需要对大量文件进行整理和排序&#xff0c;这样有助于提高我们的工作…

微信小程序 自定义 tabBar

自定义 tabBar | 微信开放文档 本文案例使用的Taro 非原生微信小程序 使用流程 1. 配置信息 在 app.json 中的 tabBar 项指定 custom 字段&#xff0c;同时其余 tabBar 相关配置也补充完整。所有 tab 页的 json 里需声明 usingComponents 项&#xff0c;也可以在 app.json 全局…