带你用 Java 接入一个无限免费使用的大模型

2,011 阅读3分钟

前言

大家好,我是雪荷。随着 AI 越来越火,我们越来越离不开 AI 了,作为一个程序员 AI 既是我们的工具,但也加速了计算机行业的内卷和发展。平常的话,我们能在线访问和使用 AI,但通过代码直接访问 AI 确实有些限制和门槛,接下来我会带领大家用 Java 接入一个无限免费使用的 AI 大模型。

大模型介绍

本次使用的是智谱 AI,诞生于清华大学实验室,提供了许多出色和强大的大模型,支持上下文对话、图像生成和视频生成等等。

image-20250111153857161

我们先访问智谱 AI 的控制台(bigmodel.cn/console/ove…),先登录再点击红框的“🔑”,有 API Key 的直接复制,没有点击右上角“添加新的 API Key”,有了 API Key,我们才能在代码中调用智谱 AI。

image-20250111154623844

创建一个 Spring Boot 项目

创建 Spring Boot 项目的具体过程我就不演示了,直接用 IDEA 建立就好了。

首先先引入智谱 AI 依赖,我用的是 Maven 来管理依赖的。

        <dependency>
            <groupId>cn.bigmodel.openapi</groupId>
            <artifactId>oapi-java-sdk</artifactId>
            <version>release-V4-2.0.2</version>
        </dependency>

然后,建立 ChatGML4 智谱 AI 客户端,将你刚复制的 API Key 替换掉“ZhiPuAIConstant.ZHIPU_AI_API_KEY”。

@Configuration
public class ChatGLM4Config {
    @Bean
    public ClientV4 clientV4() {
        return new ClientV4.Builder(ZhiPuAIConstant.ZHIPU_AI_API_KEY).build();
    }
}

接着建立一个 ZhiPuAIManager,将其注册为 spring 的一个 bean,想要调用 AI 的话直接调用对应的方法就行。

package com.hjj.lingxibi.manager;
​
import com.hjj.lingxibi.common.ErrorCode;
import com.hjj.lingxibi.constant.AIConstant;
import com.hjj.lingxibi.exception.BusinessException;
import com.zhipu.oapi.ClientV4;
import com.zhipu.oapi.Constants;
import com.zhipu.oapi.service.v4.model.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
​
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
​
@Slf4j
@Component
public class ZhiPuAIManager {
​
    @Resource
    private ClientV4 clientV4;
​
    public String doChat(ChatMessage chatMessage) {
        List<ChatMessage> messages = new ArrayList<>();
        if (chatMessage == null) {
            throw new BusinessException(ErrorCode.SYSTEM_ERROR);
        }
        messages.add(chatMessage);
        ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
                .model("glm-4-flash")
                .stream(Boolean.FALSE)
                .invokeMethod(Constants.invokeMethod)
                .messages(messages)
                .build();
        ModelApiResponse invokeModelApiResp = clientV4.invokeModelApi(chatCompletionRequest);
        String result = invokeModelApiResp.getData().getChoices().get(0).getMessage().getContent().toString();
        log.info("ZhiPuAI Response: {}", result);
        return result;
    }
​
}
​

通过调用 ZhiPuAIManager 的 doChat 方法即可调用智谱 AI 了,注意以上用的模型是”glm-4-flash“,这个模型是完全免费,想要其他模型的话是收费的,但官方定价还是很便宜的,甚至还可以邀请新人获取 token。

image-20250111160024520

image-20250111155925454

调用结果如下:

@SpringBootTest
public class ZhipuAITest {
    @Resource
    private ZhiPuAIManager zhiPuAIManager;
  
      @Test
    public void testZhiPuAI() {
        String response = null;
        try {
            response = zhiPuAIManager.doChat(new ChatMessage(ChatMessageRole.USER.value(), "你好,你是谁?"));
        } catch (Exception e) {
            throw new BusinessException(ErrorCode.THIRD_SERVICE_ERROR);
        }
        System.out.println(response);
    }
 
}

image-20250111160203917

如果你想要给 AI 定义 prompt 的话,只要添加一个 system 的 role,并将其 add 到 list 就好了。具体实现如下:

    public String doChat(ChatMessage chatMessage) {
        List<ChatMessage> messages = new ArrayList<>();
        ChatMessage prompt = new ChatMessage(ChatMessageRole.SYSTEM.value(), "将我的输入的内容生成为英文," +
                "并且不要生成多余内容");
        messages.add(prompt);
        if (chatMessage == null) {
            throw new BusinessException(ErrorCode.SYSTEM_ERROR);
        }
        messages.add(chatMessage);
        ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
                .model("glm-4-flash")
                .stream(Boolean.FALSE)
                .invokeMethod(Constants.invokeMethod)
                .messages(messages)
                .build();
        ModelApiResponse invokeModelApiResp = clientV4.invokeModelApi(chatCompletionRequest);
        String result = invokeModelApiResp.getData().getChoices().get(0).getMessage().getContent().toString();
        log.info("ZhiPuAI Response: {}", result);
        return result;
    }

调用效果如下:

image-20250111160525358

开源项目

网址:厚米匹配系统

前端地址:GitHub - dnwwdwd/homieMatching-fronted: homie 匹配系统前端,基于 vuehomie 匹配系统是一个移动端网页的在线云交友平台。实现了按标签匹配、查找用户,基于 Redis GEO 实现搜索附近用户,同时个人还可以建队、组队以打造个人学习队伍。除了添加好友、搜索好友外,还基于 Websocket 实现好友间私聊,方便用户寻找志同道合的学习搭子。

后端地址:GitHub - dnwwdwd/homieMatching: homie 匹配系统是一个移动端网页的在线云交友平台。实现了按标签匹配、查找用户,基于 Redis GEO 实现搜索附近用户,同时个人还可以建队、组队以打造个人学习队伍。除了添加好友、搜索好友外,还基于 Websocket 实现好友间私聊,方便用户寻找志同道合的学习搭子。

欢迎👏大家体验网站也帮忙给我点点🌟哈,真的十分感谢各位,如果任何讲的不对的地方请及时指正。另外,最近在重构 BI 项目(GitHub - dnwwdwd/Lingxi-BI: 灵犀BI-专业的智能生成商业报表的项目),感兴趣的可以点点🌟,谢谢大家。