背景
在当今这个日新月异的时代,人工智能(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是收费的!开通前一个月免费,后面就要收费了,为了进行这个实践,我已经破费了好几毛钱了嘤嘤嘤,所以看了博客的大佬们,应该不会吝啬你们的免费的点赞吧,应该不会吧,应该吧!