SpringAI + 智谱
春哥的魔法书 2024-08-28 16:01:03 阅读 58
1.智谱AI
网站 : https://bigmodel.cn/overview 智谱AI开放平台 (bigmodel.cn)
1.1.介绍
智谱 AI 是一家中国的人工智能公司,成立于 2019 年 6 月,总部位于北京。公司致力于打造认知智能大模型,专注于做大模型的中国创新。
智谱 AI 具有以下特点和优势:
全链路自主可控:实现了大模型生成 AI 的全链路自主可控,自研了具有完全知识产权的预训练框架 GLM,并自建训练平台。强大的技术实力:2022 年合作研发了中英双语千亿级超大规模预训练模型 GLM-130B,在斯坦福大学大模型中心的评测中表现优异。多样化的产品矩阵:拥有包括 AI 提效助手智谱清言、高效率代码模型 CodeGeeX、多模态理解模型 CogVLm 和文生图模型 CogView 等在内的 AIGC 模型及产品矩阵。广泛的应用场景:通过认知大模型链接物理世界的亿级用户,为千行百业带来持续创新与变革。开源开放:开源了部分模型,如 GLM-130B、CodeGeeX 等,促进了技术的共享和发展。
以下是一些关于智谱 AI 的最新动态:
2024 年 1 月,智谱 AI 举办首届技术开放日,发布了新一代基座大模型 GLM-4。2024 年 7 月,智谱 AI 开源视频理解模型 CogVLM2-Video。
总的来说,智谱 AI 在人工智能领域具有一定的技术实力和影响力,其产品和技术在自然语言处理、计算机视觉等领域有着广泛的应用前景。
已经与 Spring AI 进行整合
1.2.获取API-KEY
注册智谱账号可以获取
查看位置 : https://bigmodel.cn/usercenter/apikeys 智谱AI开放平台 (bigmodel.cn)
1.3.项目依赖
创建 SpringBoot 项目中 选择 SpringWeb , AI
在pom.xml文件中增加
<code> <dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-zhipuai-spring-boot-starter</artifactId>
</dependency>
1.4.配置
spring:
application:
name: zhipuai
ai:
zhipuai:
api-key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
base-url: https://open.bigmodel.cn/api/paas
server:
port: 9090
2.ZhiPuAiChatModel 对话
https://docs.spring.io/spring-ai/reference/api/chat/zhipuai-chat.html ZhiPu AI Chat :: Spring AI Reference
2.1.对话
controller 类
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.chat.prompt.PromptTemplate;
import org.springframework.ai.zhipuai.ZhiPuAiChatModel;
import org.springframework.ai.zhipuai.ZhiPuAiChatOptions;
import org.springframework.ai.zhipuai.api.ZhiPuAiApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.Map;
@RestController
public class ZhiPuChatController {
@Autowired
private ZhiPuAiChatModel chatModel;
/**
* 模型调用 : 最简
* @param message
* @return
*/
@GetMapping("/zp/generate")
public Map generate(@RequestParam(value = "message", defaultValue = "中国的首都是哪里") String message) {
return Map.of("generation", chatModel.call(message));
}
/**
* 模型调用 prompt 设置对话属性
* @param message
* @return
*/
@GetMapping("/zp/generatePrompt")
public Map generatePrompt(@RequestParam(value = "message", defaultValue = "中国的首都是哪里") String message) {
Prompt prompt = new Prompt(
message ,
ZhiPuAiChatOptions.builder()
.withModel(ZhiPuAiApi.ChatModel.GLM_4.getValue())
.withTemperature(0.5f)
.withUser("用户id")
.build()
);
String content = chatModel.call(prompt).getResult().getOutput().getContent();
return Map.of("generation", content );
}
/**
* 模型调用 prompt 使用对话模板
* @param message
* @return
*/
@GetMapping("/zp/generateMessage")
public Map generateMessage(@RequestParam(value = "message", defaultValue = "中国") String message) {
PromptTemplate promptTemplate = new PromptTemplate( "{message}的首都是哪里?." , Map.of("message", message ));
Prompt prompt = promptTemplate.create();
String content = chatModel.call(prompt).getResult().getOutput().getContent();
return Map.of("generation", content );
}
}
2.2.流式输出
Spring AI中流式对话接口采用的是Spring WebFlux异步网络框架实现的.
2.2.1.controller
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.zhipuai.ZhiPuAiChatModel;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
@RestController
public class ZhiPuChatController {
@Autowired
private ZhiPuAiChatModel chatModel;
/**
* 模型调用 stream 流式输出
* @param message
* @return
*/
@GetMapping(value = "/zp/generateStream", produces = "text/event-stream" )
public Flux<ChatResponse> generateStream(@RequestParam(value = "message", defaultValue = "糖醋排骨怎么做") String message) {
var prompt = new Prompt(new UserMessage(message));
return chatModel.stream(prompt);
}
}
2.2.2.前端页面
<!DOCTYPE html>
<html lang="en">code>
<head>
<meta charset="UTF-8">code>
<title>Title</title>
</head>
<body>
<a href="index.html">返回</a> <br>code>
<div id="chat"></div>code>
<hr>
<textarea id="msg">如何玩五子棋</textarea>code>
<button id="btn" onclick="send()">发送</button>code>
</body>
<script>
function send() {
let msg = document.getElementById('msg').value;
var source = new EventSource("http://localhost:9090/zp/generateStream?message=" + msg);
source.onmessage = function(event) {
let innerText = document.getElementById('chat').innerText;
document.getElementById('chat').innerText = innerText + JSON.parse(event.data).result.output.content;
};
}
</script>
</html>
这是一个简单的例子 更多的异常处理等需要进一步完善
3.ZhiPuAiImageModel
https://docs.spring.io/spring-ai/reference/api/image/zhipuai-image.html ZhiPuAI Image Generation :: Spring AI Reference
import org.springframework.ai.image.ImagePrompt;
import org.springframework.ai.image.ImageResponse;
import org.springframework.ai.zhipuai.ZhiPuAiImageModel;
import org.springframework.ai.zhipuai.ZhiPuAiImageOptions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class ZhiPuImageController {
@Autowired
private ZhiPuAiImageModel zhiPuAiImageModel;
@GetMapping("/zp/image")code>
public String generate(@RequestParam(value = "message", defaultValue = "画一幅向日葵的图片") String message) {
ImageResponse response = zhiPuAiImageModel.call(
new ImagePrompt(
message,
ZhiPuAiImageOptions.builder()
.withModel("cogview-3")
.build())
);
return response.getResult().getOutput().getUrl();
}
}
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。