项目实训记录

使用Zhipu API进行GLM模型调用的示例

本文旨在介绍如何使用Zhipu API调用GLM模型。我们将展示如何通过Java代码实现不同类型的模型调用,包括同步、异步调用和函数调用等。本文代码主要使用了Zhipu提供的Java SDK,并结合了Jackson库进行JSON处理。

  • V4OkHttpClientTest 类:负责调用Zhipu API进行模型的各种操作。
  • defaultObjectMapper 方法:配置Jackson的ObjectMapper。

依赖

<dependencies>
    <!-- Zhipu API Client -->
    <dependency>
        <groupId>com.zhipu</groupId>
        <artifactId>oapi-client</artifactId>
        <version>4.0.0</version>
    </dependency>
    <!-- Jackson -->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
    </dependency>
</dependencies>

代码详解

ObjectMapper 配置

我们需要配置Jackson的ObjectMapper,以处理JSON数据。

private static final ObjectMapper mapper = defaultObjectMapper();

public static ObjectMapper defaultObjectMapper() {
    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
    mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
    mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
    return mapper;
}

V4OkHttpClientTest 类

V4OkHttpClientTest 类包含了各种调用Zhipu API的方法。

package com.sprint.questai.glm;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhipu.oapi.ClientV4;
import com.zhipu.oapi.Constants;
import com.zhipu.oapi.service.v4.embedding.EmbeddingApiResponse;
import com.zhipu.oapi.service.v4.embedding.EmbeddingRequest;
import com.zhipu.oapi.service.v4.model.ChatMessage;
import com.zhipu.oapi.service.v4.model.ChatMessageRole;
import com.zhipu.oapi.service.v4.model.ChatTool;
import com.zhipu.oapi.service.v4.model.ChatToolType;
import com.zhipu.oapi.service.v4.model.ModelApiResponse;
import io.reactivex.Flowable;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class V4OkHttpClientTest {

    private static final String API_KEY = System.getenv("ZHIPU_API_KEY");
    private static final ClientV4 client = new ClientV4.Builder(API_KEY).build();
    private static final ObjectMapper mapper = defaultObjectMapper();
    private static final String requestIdTemplate = "mycompany-%d";

    public static void main(String[] args) throws Exception {
        testSseInvoke();
    }

    // SSE调用示例
    private static void testSseInvoke() {
        List<ChatMessage> messages = new ArrayList<>();
        messages.add(new ChatMessage(ChatMessageRole.USER.value(), "详细介绍java"));
        messages.add(new ChatMessage(ChatMessageRole.USER.value(), "你更擅长什么"));

        String requestId = String.format(requestIdTemplate, System.currentTimeMillis());

        List<ChatTool> chatToolList = new ArrayList<>();
        ChatTool chatTool = new ChatTool();
        chatTool.setType(ChatToolType.FUNCTION.value());
        chatToolList.add(chatTool);

        ModelApiResponse sseModelApiResp = client.invokeModelApi(
                Constants.ModelChatGLM4, 
                requestId, 
                messages, 
                chatToolList, 
                "auto"
        );

        if (sseModelApiResp.isSuccess()) {
            Flowable<ChatMessage> flowable = sseModelApiResp.getFlowable();
            flowable.subscribe(
                chatMessage -> System.out.print(chatMessage.getContent()),
                throwable -> System.err.println("Error: " + throwable),
                () -> System.out.println("Complete")
            );
        }
    }

    private static ObjectMapper defaultObjectMapper() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
        return mapper;
    }
}

方法解析

  1. SSE调用:使用 testSseInvoke 方法进行SSE调用模型,获取实时响应。
  2. 对象映射:配置 ObjectMapper 以处理JSON数据,支持忽略未知属性和非空属性的序列化。

运行代码

将以上代码保存为 V4OkHttpClientTest.java,运行 main 方法以执行SSE调用示例。

总结

本文介绍了如何使用Zhipu API进行GLM模型调用,包含了同步、异步和函数调用等操作。通过配置 ObjectMapper 和使用Zhipu提供的Java SDK,可以方便地进行各种模型调用和数据处理。这种方法可以有效地集成到不同的Java项目中,提供强大的模型调用能力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值