SpringAI + 智谱

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文件中增加

        <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">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="index.html">返回</a> <br>
<div id="chat"></div>
<hr>
<textarea id="msg">如何玩五子棋</textarea>
<button id="btn" onclick="send()">发送</button>

</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")
    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();
    }
}
  • 18
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值