SpringBoot集成AI服务

news2024/11/24 10:32:50

     背景

        在当今这个日新月异的时代,人工智能(AI)正以雷霆万钧之势席卷全球,从学术研究到商业应用,从日常生活到社会管理,无一不在经历着AI革命的洗礼。AI技术的飞速发展,不仅改变了我们的生活方式,更深刻地影响了各行各业的发展趋势。

        即便对于业内变革不那么敏感的雷袭,也在工作生活中的方方面面捕捉到了AI的影子,比如在百度页面提问,答案沙发悄然换上了AI,又比如咸鱼上用AI一键生成商品信息,法院利用AI技术辅助审判,事业单位用AI生成报告,合同,声明等等。

        AI大行其道,对其他行业带来的多是便利,但对于程序员来说却是沉重的挑战。今天,你的领导有没有让你用AI生成代码?有没有让你在系统中集成AI功能?程序员是一个不断学习,拥抱变化的职业,面对AI,我们只能去拥抱它,学习它,驾驭它。关于AI工具的使用,我在之前的博客(程序员免费AI工具分享)中有说明,今天咱们就来实践一下SpringBoot中对于AI服务的轻量级实现。

     代码实践

        在服务中集成和运行AI功能,听起来很高大上,实际上很简单。国内有很多平台都发布了AI大模型,如阿里云,KIMI,如果没有自研大模型的意向,完全可以调用他们的API,借用成熟平台的大模型来实现相关的AI服务,本次实践就是使用阿里云的DashScope灵积模型服务, 在撸代码之前,大家可以通过链接来对它进行了解。

        1、注册/登陆阿里云,开通DashScope服务,创建API Key。大家登入阿里云帐号后,通过阿里云Dashscope进入灵积模型工作台,创建api-key,将api-key复制下来备用

        2、在项目中引入以下依赖(建议用较新一点的版本)

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>dashscope-sdk-java</artifactId>
            <version>2.12.0</version>
        </dependency>

        3、在代码中编写调用大模型的方法和测试接口,如下:

package com.leixi.aidemo.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
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 com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.NoApiKeyException;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author leixiyueqi
 * @since 2024/8/22 19:39
 */
@RestController
public class DemoController {
    
    private String apiKey = "你的API-KEY";

    @GetMapping("/demo")
    public Object demo(@RequestParam(value = "question", required = false) String question) throws Exception {
        return callWithMessage(question);
    }
    
    public String callWithMessage(String question)
            throws NoApiKeyException, ApiException, InputRequiredException {
        Generation gen = new Generation();
        List<Message> messages = new ArrayList<>();
        Message userMsg = Message.builder().role(Role.USER.getValue()).content(question).build();
        messages.add(userMsg);
        GenerationParam param =
                GenerationParam.builder().model(Generation.Models.QWEN_TURBO).messages(messages)
                        .resultFormat(GenerationParam.ResultFormat.MESSAGE)
                        .apiKey(apiKey)
                        .build();
        GenerationResult result = gen.call(param);
        return result.getOutput().getChoices().get(0).getMessage().getContent();
    }
}

        4、启动项目,通过Postman进行测试,从下图大家可以看到,本文的背景内容其实就是AI生成的,也算是很好的呼应了上文了吧(嘿嘿嘿,偷懒使人快乐!)。

      后记

        本次的实践仅是AI上的很简单的一种使用,大家可以结合工作生活中的真实情况,想象下这样的服务的适用场景,比如说从文本内容中提取想要的信息,自动生成报告,合同,请假条,邮件,乃致于检讨书,哄女神开心的小段子等等,不一而足。

        说下我自己的感想吧!从上文的实践可以看出来,要想让AI回答出贴合你期望的答案,怎么对问题进行描述,假设很重要。我看过DashScope的用例(见下图),测试用例中,特意添加了一行Message: you are a helpful assistent,这其实是一个默认的设定:假设你是一个很有帮助的助手,你会怎么回答用户的问题?那么,我们完全可以设置自己的设定,如比说我现在想取悦我的女神,我可以把设定改为:“假设你是一个经验丰富,情商很高的西格玛男人,你该怎么回答女神的问题,才能得到女神的欣赏?”

        按我目前得到了猜想:长期使用同类型的设定,并对AI的答案进行一定的反馈,就可以定向的训练大模型,让大模型在某个领域变得更加专业。所以很多平台上才会有“模型定制”的功能,根据用户的需求训练特殊方向的大模型。如今通用的大模型虽然有很多,但是这个蛋糕那么大,没人能一口吃得下的。咱们完全可以选择某个特定的领域,先行一步,完成专业领域的AI大模型训练,如医疗,教育,财务,情感,娱乐等等,然后就可以用大模型反馈的精准的数据为行业带来便利了。希望未来大家能有这个契机,在某一领域深耕AI,驾驭AI。

        最最后再强调一下,DashScope是收费的!开通前一个月免费,后面就要收费了,为了进行这个实践,我已经破费了好几毛钱了嘤嘤嘤,所以看了博客的大佬们,应该不会吝啬你们的免费的点赞吧,应该不会吧,应该吧!

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

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

相关文章

数据库E-R 图

基础概念 E-R图 (Entity Relationship Diagram)&#xff0c;也称实体关系图。提供了表示实体类型、属性和联系的方法&#xff0c;用来描述现实世界的概念模型。其中各个实体&#xff08;数据模型中的对象&#xff09;可以有属性。 图形含义 1、实体 实体就是现实中存在的东…

博客园-awescnb插件-geek皮肤优化--公众号卡片

简介 博客园-awescnb插件-geek皮肤暂不支持配置展示公众号二维码&#xff0c;此文章目的使用手动注入方式自定义实现公众号卡片效果 效果展示 公众号卡片 动态效果 鼠标移入前为公众号指引页 鼠标移入后显示公众号二维码 切换动画为动态反转 首页展示 实现 在博客日历元…

ES存量数据迁移优化措施

在将存量数据迁移到 Elasticsearch (ES) 时&#xff0c;可以采取多种优化措施&#xff0c;以提高迁移效率、减少对来源系统和目标系统的影响&#xff0c;并确保数据的完整性。以下是一些建议和优化措施&#xff1a; 1. 批量操作 使用 Bulk API&#xff1a;Elasticsearch 提供…

Linux虚拟机磁盘管理-新分区磁盘挂载

挂载mount 注意&#xff1a;挂载前一定要对磁盘进行文件系统创建&#xff0c;否则无法挂载磁盘 比如mkfs.ext4系统文件 磁盘挂载前和挂载后&#xff1a; linux系统重启后磁盘挂载没有了怎么办(不建议&#xff0c;哪怕输错一个字系统起不来&#xff0c;自己操作的时候出现过起不…

Flat Ads:全球金融应用的营销投放洞察

随着移动互联网的普及,金融应用在全球范围内迅速崛起。无论是移动银行、支付服务,还是理财工具,金融类应用已经成为现代生活中不可或缺的一部分。根据最新的行业报告,全球金融应用的下载量和用户活跃度在过去几年里持续增长,尤其是在新兴市场,用户对数字金融服务的需求不断攀升…

远程供水无障碍,管线车助力全面消防防护_鼎跃安全

夏季是各类自然灾害的高发季节&#xff0c;其中森林火灾尤为频繁。这一时期的气候特征是干旱少雨&#xff0c;伴随着高温和强风&#xff0c;使得森林火灾的发生频率大幅增加。由于夏季空气湿度低&#xff0c;植被含水量减少&#xff0c;一旦出现火源&#xff0c;火势极易蔓延。…

Win11搭建Angular开发环境

作为一名后端程序员&#xff0c;无论当前的工作是否需要&#xff0c;会一点点前端无疑对自己是有帮助的。今天就来介绍一下如何搭建Angular的开发环境。我也是摸着石头过河&#xff0c;所以很多东西也不熟悉&#xff0c;先按照Angular官网的介绍来配置吧。 这个是Angular最新版…

科技在日常生活中的革新

在科技日新月异的今天&#xff0c;‌我们的生活正经历着前所未有的变革。‌从智能家居到可穿戴设备&#xff0c;‌科技已经渗透到我们生活的每一个角落&#xff0c;‌深刻地影响着我们的生活方式和社会经济的发展。‌ 智能家居系统的出现&#xff0c;‌无疑是科技改变生活的典…

新手如何找到正确入行 Web3 路径?揭开职业启航新篇章

&#x1f3c4; Web3 新晋开发者如何找到心仪的工作&#xff1f;除了加强自身技术本领&#xff0c;开发创新优质项目以外&#xff0c;拓展社会人脉、接触行业资源同样重要。与此同时&#xff0c;风云变幻的 Web3 行业环境中&#xff0c;我们又该如何寻找优质潜力的项目生态实现深…

【本地网页控制远程开发板】使用Python的Paramiko库通过SSH连接开发板进行通信

最近想要在本地用flask框架创建网页&#xff0c;在网页端与远程开发板进行交互&#xff0c;里面有一项需求就是当我点击网页端的按钮时&#xff0c;开发板会执行相应的脚本文件进行预警。以下演示如何使用Python的Paramiko库来通过SSH连接开发板实现上述功能。 主要的代码思路如…

SSL/TLS协议信息泄露漏洞修复

概述&#xff1a;CVE-2016-2183 是一个涉及 SSL/TLS 协议信息泄露的漏洞&#xff0c;也被称为 "SWEET32" 攻击。该漏洞利用了某些对称加密算法&#xff08;如 3DES&#xff09;的弱点&#xff0c;攻击者可以通过捕获和分析大量的加密流量&#xff0c;可能会恢复明文数…

MySQL 配置免密码登陆(mysql_config_editor Configuration)

当使用mysql, mysqldump, mysqladmin等客户端连接MySQL数据库服务器时&#xff0c;需要提供用户凭证信息。你可以在每次连接时都输入连接信息&#xff08;用户名/密码/地址/端口等&#xff09;或者将用户信息保存在my.cnf配置文件的[client]模块。 第一种方式每次都输入用户密…

JWT 基础知识

目录 什么是JWT JWT 的原理 JWT 的数据结构 Header Payload Signature 参考链接 什么是JWT Json Web Token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准&#xff08;RFC 7519。 该token被设计为紧凑且安全的&#xff0c;特别适用于分布式站…

gsap动画库入门

目录 前言 一、基本用法 (一) 安装 (二) 语法 (三) 简单动画 二、配置 (一) 动画方法 1. to 2. from 3. fromTo 4. set (二) 动画目标 (三) 动画属性 前言 官网&#xff1a;https://gsap.com/ 中文文档&#xff1a;GSAP 中文教程 中文文档 &#xff5c;官方文档 …

JAVA基础知识总结(上)(初识Java)

JDK的下载与环境变量的配置 JDK的下载 首先在官网找到JDK&#xff0c;然后根据电脑配置选择x64或者x32,然后一直next就可以了&#xff0c;不过重要的一点是记住存放的路径&#xff0c;因为后续环境配置需要复制这个路径。 为什么要配置环境变量 第一&#xff1a;JAVA_HOME环…

Vue | Vue 中的 refInForde 用法

refInFor&#xff1a;如果你在渲染函数中给多个元素都应用了相同的 ref 名&#xff0c;那么 $refs.myRef 会变成一个数组。 vue中的refInFor属性是Vue框架中用于在循环渲染的元素上设置引用的一种方式。‌ 在Vue中&#xff0c;‌ref属性通常用于给元素或子组件注册引用信息&am…

vue打包设置 自定义的NODE_ENV

默认NODE_ENV 自定义process.env.NODE_ENV的值_process.node.env的值-CSDN博客 ‌NODE_ENV开发环境下&#xff1a;NODE_ENVdevelopment(默认) 生产环境下&#xff1a;NODE_ENVproduction(默认) NODE_ENV 除了默认的 development 和 production 以外&#xff0c;确实可以自定义…

一款轻量级的Docker日志查看器!!【送源码】

今天给大家分享一款Docker日志查看神器。 背景 作为一名攻城狮&#xff0c;相信大家对Docker并不陌生&#xff0c;特别是现在盛行微服务时代&#xff0c;容器应用技术可谓是满天飞&#xff0c;Docker的好处和便捷就不多说了。 如今管你项目多大&#xff0c;先来个容器部署&a…

在Kubernetes中通过 pod 打开 pod所在宿主机上的shell

昨日一伙计突然问我 在么把自己打好的 docker镜像 上传到 kubernetes 的 节点的 local 镜像池。 现状大约如下&#xff1a; 1&#xff09;只有master节点的登录权限&#xff1b; 2&#xff09;不知道存在哪些worker节点也无法通过 master 借助SSH 登录到 worker节点 &#x…

算法的学习笔记—二叉搜索树的后序遍历序列(牛客JZ33)

&#x1f600;前言 在数据结构与算法的学习中&#xff0c;二叉搜索树&#xff08;BST&#xff09;是一个重要的概念&#xff0c;而后序遍历则是树的遍历方式之一。今天&#xff0c;我们将深入探讨一个经典问题&#xff1a;如何判断一个给定的整数数组是否是某个二叉搜索树的后序…