使用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;
}
}
方法解析
- SSE调用:使用
testSseInvoke
方法进行SSE调用模型,获取实时响应。 - 对象映射:配置
ObjectMapper
以处理JSON数据,支持忽略未知属性和非空属性的序列化。
运行代码
将以上代码保存为 V4OkHttpClientTest.java
,运行 main
方法以执行SSE调用示例。
总结
本文介绍了如何使用Zhipu API进行GLM模型调用,包含了同步、异步和函数调用等操作。通过配置 ObjectMapper
和使用Zhipu提供的Java SDK,可以方便地进行各种模型调用和数据处理。这种方法可以有效地集成到不同的Java项目中,提供强大的模型调用能力