Class ZhipuaiService

All Implemented Interfaces:
SpringAIService

@Service public class ZhipuaiService extends BaseSpringAIService
智谱AI服务类 使用 oapi-java-sdk 实现聊天功能,继承自BaseSpringAIService https://github.com/MetaGLM/zhipuai-sdk-java-v4
  • Field Details

  • Constructor Details

    • ZhipuaiService

      public ZhipuaiService()
      构造函数
  • Method Details

    • createDynamicClient

      private com.zhipu.oapi.ClientV4 createDynamicClient(RobotLlm llm)
      根据机器人配置创建动态的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 class BaseSpringAIService
    • processPromptSync

      protected String processPromptSync(String message, RobotProtobuf robot, String fullPromptContent)
      方式2:同步调用 - 实现BaseSpringAIService的抽象方法(带prompt参数)
      Specified by:
      processPromptSync in class BaseSpringAIService
    • 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 class BaseSpringAIService
    • 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

      private long estimateTokens(String text)
      估算文本的token数量
      Parameters:
      text - 输入文本
      Returns:
      估算的token数量
    • estimateTokenUsageFromMessage

      private ChatTokenUsage estimateTokenUsageFromMessage(String message)
      从消息估算token使用量
      Parameters:
      message - 输入消息
      Returns:
      估算的TokenUsage对象
    • extractTextFromPrompt

      private String extractTextFromPrompt(org.springframework.ai.chat.prompt.Prompt prompt)
      从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

      private boolean isEmptyAssistantMessage(String deltaStr)
      检查是否是空的助手消息 过滤掉 {"role":"assistant","content":"","tool_calls":[]} 这样的空消息
    • extractContentFromDeltaString

      private String extractContentFromDeltaString(String deltaStr)
      从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()
      检查服务健康状态