示例代码
https://github.com/Afterlll/ai-demo
智谱AI官网
https://open.bigmodel.cn/overview
使用智谱API SDK
1. 引入 SDK
<!--https://open.bigmodel.cn/dev/api#sdk_install-->
<dependency>
<groupId>cn.bigmodel.openapi</groupId>
<artifactId>oapi-java-sdk</artifactId>
<version>release-V4-2.0.2</version>
</dependency>
2. 封装智谱AI通用配置类
/**
* 智谱AI配置类
*
* @author wangkeyao
*/
@Configuration
@ConfigurationProperties(prefix = "ai")
@Data
public class AiConfig {
private String apiKey;
@Bean
public ClientV4 getClientV4() {
return new ClientV4.Builder(apiKey).build();
}
}
3. 封装智谱AI通用请求方式
/**
* 智谱AI通用方法
*
* @author wangkeyao
*/
@Component
public class AiManager {
@Resource
private ClientV4 client;
// 默认的是0.95,认为此时是稳定的
// 较稳定的随机数
public static final float STABLE_TEMPERATURE = 0.05f;
// 不稳定的随机数
public static final float UNSTABLE_TEMPERATURE = 0.99f;
/**
* 通用请求方法
*
* @param aiChatMessages AI聊天消息
* @param stream 是否开启流式
* @param temperature 随机性
* @return AI响应信息
*/
public String doRequest(List<ChatMessage> aiChatMessages, Boolean stream, Float temperature) {
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model(Constants.ModelChatGLM4)
.stream(stream)
.invokeMethod(Constants.invokeMethod)
.temperature(temperature)
.messages(aiChatMessages)
.build();
try {
ModelApiResponse invokeModelApiResp = client.invokeModelApi(chatCompletionRequest);
return invokeModelApiResp.getData().getChoices().get(0).getMessage().toString();
} catch (Exception e) {
e.printStackTrace();
}
return "";
}
/**
* 简化消息传递
*
* @param systemMessage 系统信息
* @param userMessage 用户信息
* @param stream 是否开启流式
* @param temperature 随机性
* @return AI响应信息
*/
public String doRequest(String systemMessage, String userMessage, Boolean stream, Float temperature) {
// 构造请求
List<ChatMessage> aiChatMessages = new ArrayList<>();
ChatMessage systemChatMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage);
ChatMessage userChatMessage = new ChatMessage(ChatMessageRole.USER.value(), userMessage);
aiChatMessages.add(systemChatMessage);
aiChatMessages.add(userChatMessage);
return doRequest(aiChatMessages, stream, temperature);
}
/**
* 同步请求
*
* @param systemMessage 系统信息
* @param userMessage 用户信息
* @param temperature 随机性
* @return AI响应信息
*/
public String doSyncRequest(String systemMessage, String userMessage, Float temperature) {
return doRequest(systemMessage, userMessage, Boolean.FALSE, temperature);
}
/**
* 同步请求(答案较稳定)
*
* @param systemMessage 系统信息
* @param userMessage 用户信息
* @return AI响应信息
*/
public String doSyncStableRequest(String systemMessage, String userMessage) {
return doRequest(systemMessage, userMessage, Boolean.FALSE, STABLE_TEMPERATURE);
}
/**
* 同步请求(答案较随机)
*
* @param systemMessage 系统信息
* @param userMessage 用户信息
* @return AI响应信息
*/
public String doSyncUnStableRequest(String systemMessage, String userMessage) {
return doRequest(systemMessage, userMessage, Boolean.FALSE, UNSTABLE_TEMPERATURE);
}
/**
* 通用流式请求
*
* @param aiChatMessages AI聊天消息
* @param temperature 随机性
* @return AI响应信息(流式)
*/
public Flowable<ModelData> doStreamRequest(List<ChatMessage> aiChatMessages, Float temperature) {
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model(Constants.ModelChatGLM4)
.stream(Boolean.TRUE)
.invokeMethod(Constants.invokeMethod)
.temperature(temperature)
.messages(aiChatMessages)
.build();
ModelApiResponse modelApiResponse = client.invokeModelApi(chatCompletionRequest);
return modelApiResponse.getFlowable();
}
/**
* 通用流式请求(简化消息传递)
*
* @param systemMessage 系统信息
* @param userMessage 用户信息
* @param temperature 随机性
* @return AI响应信息(流式)
*/
public Flowable<ModelData> doStreamRequest(String systemMessage, String userMessage, Float temperature) {
List<ChatMessage> aiChatMessages = new ArrayList<>();
ChatMessage systemChatMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage);
ChatMessage userChatMessage = new ChatMessage(ChatMessageRole.USER.value(), userMessage);
aiChatMessages.add(systemChatMessage);
aiChatMessages.add(userChatMessage);
return doStreamRequest(aiChatMessages, temperature);
}
}
4. 配置 application.yml
ai:
apiKey: XXXXXXXXXXXXXXX
5. 测试使用
/**
* @author wangkeyao
*/
@SpringBootTest
class AiManagerTest {
@Resource
private AiManager aiManager;
@Test
void doRequest() {
System.out.println(aiManager.doSyncUnStableRequest("使用系统默认", "作为一名营销专家,请为智谱开放平台创作一个吸引人的slogan"));
}
}
注意:使用 Debuger 模式可能会出现以下问题。
此时通过以下的配置解决。