当前位置:   article > 正文

Spring Boot 整合智谱AI_springai对接智谱

springai对接智谱

示例代码

https://github.com/Afterlll/ai-demo

智谱AI官网

https://open.bigmodel.cn/overview

使用智谱API SDK

1. 引入 SDK

  1. <!--https://open.bigmodel.cn/dev/api#sdk_install-->
  2. <dependency>
  3. <groupId>cn.bigmodel.openapi</groupId>
  4. <artifactId>oapi-java-sdk</artifactId>
  5. <version>release-V4-2.0.2</version>
  6. </dependency>

2. 封装智谱AI通用配置类

  1. /**
  2. * 智谱AI配置类
  3. *
  4. * @author wangkeyao
  5. */
  6. @Configuration
  7. @ConfigurationProperties(prefix = "ai")
  8. @Data
  9. public class AiConfig {
  10. private String apiKey;
  11. @Bean
  12. public ClientV4 getClientV4() {
  13. return new ClientV4.Builder(apiKey).build();
  14. }
  15. }

3. 封装智谱AI通用请求方式

  1. /**
  2. * 智谱AI通用方法
  3. *
  4. * @author wangkeyao
  5. */
  6. @Component
  7. public class AiManager {
  8. @Resource
  9. private ClientV4 client;
  10. // 默认的是0.95,认为此时是稳定的
  11. // 较稳定的随机数
  12. public static final float STABLE_TEMPERATURE = 0.05f;
  13. // 不稳定的随机数
  14. public static final float UNSTABLE_TEMPERATURE = 0.99f;
  15. /**
  16. * 通用请求方法
  17. *
  18. * @param aiChatMessages AI聊天消息
  19. * @param stream 是否开启流式
  20. * @param temperature 随机性
  21. * @return AI响应信息
  22. */
  23. public String doRequest(List<ChatMessage> aiChatMessages, Boolean stream, Float temperature) {
  24. ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
  25. .model(Constants.ModelChatGLM4)
  26. .stream(stream)
  27. .invokeMethod(Constants.invokeMethod)
  28. .temperature(temperature)
  29. .messages(aiChatMessages)
  30. .build();
  31. try {
  32. ModelApiResponse invokeModelApiResp = client.invokeModelApi(chatCompletionRequest);
  33. return invokeModelApiResp.getData().getChoices().get(0).getMessage().toString();
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. return "";
  38. }
  39. /**
  40. * 简化消息传递
  41. *
  42. * @param systemMessage 系统信息
  43. * @param userMessage 用户信息
  44. * @param stream 是否开启流式
  45. * @param temperature 随机性
  46. * @return AI响应信息
  47. */
  48. public String doRequest(String systemMessage, String userMessage, Boolean stream, Float temperature) {
  49. // 构造请求
  50. List<ChatMessage> aiChatMessages = new ArrayList<>();
  51. ChatMessage systemChatMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage);
  52. ChatMessage userChatMessage = new ChatMessage(ChatMessageRole.USER.value(), userMessage);
  53. aiChatMessages.add(systemChatMessage);
  54. aiChatMessages.add(userChatMessage);
  55. return doRequest(aiChatMessages, stream, temperature);
  56. }
  57. /**
  58. * 同步请求
  59. *
  60. * @param systemMessage 系统信息
  61. * @param userMessage 用户信息
  62. * @param temperature 随机性
  63. * @return AI响应信息
  64. */
  65. public String doSyncRequest(String systemMessage, String userMessage, Float temperature) {
  66. return doRequest(systemMessage, userMessage, Boolean.FALSE, temperature);
  67. }
  68. /**
  69. * 同步请求(答案较稳定)
  70. *
  71. * @param systemMessage 系统信息
  72. * @param userMessage 用户信息
  73. * @return AI响应信息
  74. */
  75. public String doSyncStableRequest(String systemMessage, String userMessage) {
  76. return doRequest(systemMessage, userMessage, Boolean.FALSE, STABLE_TEMPERATURE);
  77. }
  78. /**
  79. * 同步请求(答案较随机)
  80. *
  81. * @param systemMessage 系统信息
  82. * @param userMessage 用户信息
  83. * @return AI响应信息
  84. */
  85. public String doSyncUnStableRequest(String systemMessage, String userMessage) {
  86. return doRequest(systemMessage, userMessage, Boolean.FALSE, UNSTABLE_TEMPERATURE);
  87. }
  88. /**
  89. * 通用流式请求
  90. *
  91. * @param aiChatMessages AI聊天消息
  92. * @param temperature 随机性
  93. * @return AI响应信息(流式)
  94. */
  95. public Flowable<ModelData> doStreamRequest(List<ChatMessage> aiChatMessages, Float temperature) {
  96. ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
  97. .model(Constants.ModelChatGLM4)
  98. .stream(Boolean.TRUE)
  99. .invokeMethod(Constants.invokeMethod)
  100. .temperature(temperature)
  101. .messages(aiChatMessages)
  102. .build();
  103. ModelApiResponse modelApiResponse = client.invokeModelApi(chatCompletionRequest);
  104. return modelApiResponse.getFlowable();
  105. }
  106. /**
  107. * 通用流式请求(简化消息传递)
  108. *
  109. * @param systemMessage 系统信息
  110. * @param userMessage 用户信息
  111. * @param temperature 随机性
  112. * @return AI响应信息(流式)
  113. */
  114. public Flowable<ModelData> doStreamRequest(String systemMessage, String userMessage, Float temperature) {
  115. List<ChatMessage> aiChatMessages = new ArrayList<>();
  116. ChatMessage systemChatMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage);
  117. ChatMessage userChatMessage = new ChatMessage(ChatMessageRole.USER.value(), userMessage);
  118. aiChatMessages.add(systemChatMessage);
  119. aiChatMessages.add(userChatMessage);
  120. return doStreamRequest(aiChatMessages, temperature);
  121. }
  122. }

4. 配置 application.yml

  1. ai:
  2. apiKey: XXXXXXXXXXXXXXX

5. 测试使用

  1. /**
  2. * @author wangkeyao
  3. */
  4. @SpringBootTest
  5. class AiManagerTest {
  6. @Resource
  7. private AiManager aiManager;
  8. @Test
  9. void doRequest() {
  10. System.out.println(aiManager.doSyncUnStableRequest("使用系统默认", "作为一名营销专家,请为智谱开放平台创作一个吸引人的slogan"));
  11. }
  12. }


注意:使用 Debuger 模式可能会出现以下问题。

此时通过以下的配置解决。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/秋刀鱼在做梦/article/detail/916066
推荐阅读
相关标签
  

闽ICP备14008679号