赞
踩
https://github.com/Afterlll/ai-demo
https://open.bigmodel.cn/overview
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 模式可能会出现以下问题。
此时通过以下的配置解决。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。