Package com.bytedesk.ai.zhipuai
Class ZhipuaiService
java.lang.Object
com.bytedesk.ai.springai.service.BaseSpringAIService
com.bytedesk.ai.zhipuai.ZhipuaiService
- All Implemented Interfaces:
SpringAIService
智谱AI服务类
使用 oapi-java-sdk 实现聊天功能,继承自BaseSpringAIService
https://github.com/MetaGLM/zhipuai-sdk-java-v4
-
Nested Class Summary
Nested classes/interfaces inherited from class com.bytedesk.ai.springai.service.BaseSpringAIService
BaseSpringAIService.PromptResult
-
Field Summary
FieldsFields inherited from class com.bytedesk.ai.springai.service.BaseSpringAIService
applicationEventPublisher, chunkElasticService, chunkVectorService, faqElasticService, faqVectorService, messagePersistCache, messageRestService, messageSendService, robotMessageCache, robotRestService, textElasticService, textVectorService, threadRestService, uidUtils
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate com.zhipu.oapi.ClientV4
根据机器人配置创建动态的ClientV4实例private com.zhipu.oapi.service.v4.model.ChatCompletionRequest
createDynamicRequest
(RobotLlm llm, String message, boolean stream) 根据机器人配置创建动态的聊天选项private com.zhipu.oapi.service.v4.model.ChatCompletionRequest
createDynamicRequestFromPrompt
(RobotLlm llm, org.springframework.ai.chat.prompt.Prompt prompt, boolean stream) 根据机器人配置创建动态的聊天选项(支持完整的Prompt对象)private long
estimateTokens
(String text) 估算文本的token数量private ChatTokenUsage
estimateTokenUsageFromMessage
(String message) 从消息估算token使用量private ChatTokenUsage
estimateTokenUsageFromResponse
(com.zhipu.oapi.service.v4.model.ModelApiResponse response) 估算token使用量(当无法从API获取实际token信息时使用)private String
extractContentFromDeltaString
(String deltaStr) 从delta字符串中提取content字段 处理JSON格式的ChatMessage字符串,如:{"role":"assistant","content":"的","tool_calls":[]}private String
extractTextFromPrompt
(org.springframework.ai.chat.prompt.Prompt prompt) 从Prompt中提取文本内容private ChatTokenUsage
extractTokenUsageFromAccumulator
(com.zhipu.oapi.service.v4.model.ChatMessageAccumulator accumulator) 从ChatMessageAccumulator中提取token使用情况private ChatTokenUsage
extractZhipuaiTokenUsage
(com.zhipu.oapi.service.v4.model.ModelApiResponse response) 手动提取智谱AI的token使用情况 从ModelApiResponse中提取token使用信息private boolean
isEmptyAssistantMessage
(String deltaStr) 检查是否是空的助手消息 过滤掉 {"role":"assistant","content":"","tool_calls":[]} 这样的空消息boolean
检查服务健康状态private io.reactivex.Flowable<com.zhipu.oapi.service.v4.model.ChatMessageAccumulator>
mapStreamToAccumulator
(io.reactivex.Flowable<com.zhipu.oapi.service.v4.model.ModelData> flowable) 将流式响应转换为Accumulator,参考官方示例protected void
processPromptSse
(org.springframework.ai.chat.prompt.Prompt prompt, RobotProtobuf robot, MessageProtobuf messageProtobufQuery, MessageProtobuf messageProtobufReply, org.springframework.web.servlet.mvc.method.annotation.SseEmitter emitter, String fullPromptContent) 方式3:SSE方式调用 - 实现BaseSpringAIService的抽象方法(带prompt参数)protected String
processPromptSync
(String message, RobotProtobuf robot, String fullPromptContent) 方式2:同步调用 - 实现BaseSpringAIService的抽象方法(带prompt参数)protected void
processPromptWebsocket
(org.springframework.ai.chat.prompt.Prompt prompt, RobotProtobuf robot, MessageProtobuf messageProtobufQuery, MessageProtobuf messageProtobufReply, String fullPromptContent) 方式1:异步流式调用 - 实现BaseSpringAIService的抽象方法(带prompt参数)void
测试content提取功能Methods inherited from class com.bytedesk.ai.springai.service.BaseSpringAIService
createDynamicOptions, extractFullPromptContent, extractTextFromResponse, extractTokenUsage, getTokenUnitPrice, handleSseError, isEmitterCompleted, persistMessage, persistMessage, persistMessage, persistMessage, processDirectLlmRequest, processLlmResponseWebsocket, publishAiTokenUsageEvent, recordAiTokenUsage, searchKnowledgeBase, sendMessageWebsocket, sendSseMessage, sendStreamEndMessage, sendStreamMessage, sendStreamStartMessage, sendSyncMessage, sendWebsocketMessage
-
Field Details
-
llmProviderRestService
-
-
Constructor Details
-
ZhipuaiService
public ZhipuaiService()构造函数
-
-
Method Details
-
createDynamicClient
根据机器人配置创建动态的ClientV4实例- Parameters:
llm
- 机器人LLM配置- Returns:
- 配置了特定参数的ClientV4
-
createDynamicRequest
private com.zhipu.oapi.service.v4.model.ChatCompletionRequest createDynamicRequest(RobotLlm llm, String message, boolean stream) 根据机器人配置创建动态的聊天选项 -
createDynamicRequestFromPrompt
private com.zhipu.oapi.service.v4.model.ChatCompletionRequest createDynamicRequestFromPrompt(RobotLlm llm, org.springframework.ai.chat.prompt.Prompt prompt, boolean stream) 根据机器人配置创建动态的聊天选项(支持完整的Prompt对象) -
processPromptWebsocket
protected void processPromptWebsocket(org.springframework.ai.chat.prompt.Prompt prompt, RobotProtobuf robot, MessageProtobuf messageProtobufQuery, MessageProtobuf messageProtobufReply, String fullPromptContent) 方式1:异步流式调用 - 实现BaseSpringAIService的抽象方法(带prompt参数)- Specified by:
processPromptWebsocket
in classBaseSpringAIService
-
processPromptSync
方式2:同步调用 - 实现BaseSpringAIService的抽象方法(带prompt参数)- Specified by:
processPromptSync
in classBaseSpringAIService
-
processPromptSse
protected void processPromptSse(org.springframework.ai.chat.prompt.Prompt prompt, RobotProtobuf robot, MessageProtobuf messageProtobufQuery, MessageProtobuf messageProtobufReply, org.springframework.web.servlet.mvc.method.annotation.SseEmitter emitter, String fullPromptContent) 方式3:SSE方式调用 - 实现BaseSpringAIService的抽象方法(带prompt参数)- Specified by:
processPromptSse
in classBaseSpringAIService
-
extractZhipuaiTokenUsage
private ChatTokenUsage extractZhipuaiTokenUsage(com.zhipu.oapi.service.v4.model.ModelApiResponse response) 手动提取智谱AI的token使用情况 从ModelApiResponse中提取token使用信息- Parameters:
response
- ModelApiResponse对象- Returns:
- TokenUsage对象
-
estimateTokenUsageFromResponse
private ChatTokenUsage estimateTokenUsageFromResponse(com.zhipu.oapi.service.v4.model.ModelApiResponse response) 估算token使用量(当无法从API获取实际token信息时使用)- Parameters:
response
- ModelApiResponse对象- Returns:
- 估算的TokenUsage对象
-
estimateTokens
估算文本的token数量- Parameters:
text
- 输入文本- Returns:
- 估算的token数量
-
estimateTokenUsageFromMessage
从消息估算token使用量- Parameters:
message
- 输入消息- Returns:
- 估算的TokenUsage对象
-
extractTextFromPrompt
从Prompt中提取文本内容 -
mapStreamToAccumulator
private io.reactivex.Flowable<com.zhipu.oapi.service.v4.model.ChatMessageAccumulator> mapStreamToAccumulator(io.reactivex.Flowable<com.zhipu.oapi.service.v4.model.ModelData> flowable) 将流式响应转换为Accumulator,参考官方示例 -
isEmptyAssistantMessage
检查是否是空的助手消息 过滤掉 {"role":"assistant","content":"","tool_calls":[]} 这样的空消息 -
extractContentFromDeltaString
从delta字符串中提取content字段 处理JSON格式的ChatMessage字符串,如:{"role":"assistant","content":"的","tool_calls":[]} -
extractTokenUsageFromAccumulator
private ChatTokenUsage extractTokenUsageFromAccumulator(com.zhipu.oapi.service.v4.model.ChatMessageAccumulator accumulator) 从ChatMessageAccumulator中提取token使用情况 -
testContentExtraction
public void testContentExtraction()测试content提取功能 -
isHealthy
public boolean isHealthy()检查服务健康状态
-