1.准备工作
智谱AI开放平台 (bigmodel.cn)
进入智谱AI开放平台,注册登录后,找到右上角API秘钥,生成一个调用的秘钥即可
同时需要注意的是智谱官网会给新用户赠送token包,可以暂时免费体验更聪明更快速的大模型,但这些体验一般来说都是一个月左右**(找到右上角财务点击找到资源包管理可以看到套餐)**
如果只是短期需求可以使用,但如果长期使用的话,建议还是使用也是可以免费调用的API大模型,例如glm-4-flash,下面就以这个模型为例子展开
2.代码开发
(1)pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.4.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>AiChat</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>AiChat</name>
<description>Demo project for Spring Boot</description>
<url/>
<licenses>
<license/>
</licenses>
<developers>
<developer/>
</developers>
<scm>
<connection/>
<developerConnection/>
<tag/>
<url/>
</scm>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.3</version>
</dependency>
<dependency>
<groupId>cn.bigmodel.openapi</groupId>
<artifactId>oapi-java-sdk</artifactId>
<version>release-V4-2.0.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.3</version>
<scope>test</scope>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
</dependencies>
</project>
(2)application.properties文件 (记得把自己的API秘钥填上哈)
spring.application.name=AiChat
zhipuai.api.key= #API密钥
server.port=8066
(3)ZhipuAIService代码 (通过调用 Zhipu AI API 来处理用户消息,获取 AI 的回复并返回。构建请求,发送给 API,解析响应数据,并提取返回的内容)
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zhipu.oapi.ClientV4;
import com.zhipu.oapi.Constants;
import com.zhipu.oapi.service.v4.model.ChatCompletionRequest;
import com.zhipu.oapi.service.v4.model.ChatMessage;
import com.zhipu.oapi.service.v4.model.ModelApiResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@Service
public class ZhipuAIService {
private final ClientV4 client;
private final ObjectMapper objectMapper;
public ZhipuAIService(@Value("${zhipuai.api.key}") String apiKey) {
this.client = new ClientV4.Builder(apiKey).build();
this.objectMapper = new ObjectMapper();
}
//构建信息
public String invokeChatCompletion(String userMessage) {
List<ChatMessage> messages = new ArrayList<>();
ChatMessage chatMessage = new ChatMessage("user", userMessage);
messages.add(chatMessage);
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
//表明使用的模型
.model("glm-4-flash")
//表示不使用流式响应
.stream(Boolean.FALSE)
.invokeMethod(Constants.invokeMethod)
.messages(messages)
.requestId("request-id-" + System.currentTimeMillis())
.build();
ModelApiResponse response = client.invokeModelApi(chatCompletionRequest);
try {
// 将response的数据转换为Map
String jsonString = objectMapper.writeValueAsString(response.getData());
Map<String, Object> dataMap = objectMapper.readValue(jsonString, new TypeReference<Map<String, Object>>() {});
// 提取内容
if (dataMap.containsKey("choices")) {
List<Map<String, Object>> choices = (List<Map<String, Object>>) dataMap.get("choices");
if (!choices.isEmpty()) {
Map<String, Object> firstChoice = choices.get(0);
Map<String, Object> message = (Map<String, Object>) firstChoice.get("message");
if (message != null && message.containsKey("content")) {
return (String) message.get("content");
}
}
}
return "找不到内容";
} catch (Exception e) {
return "响应错误";
}
}
}
(4)ZhipuAiController代码 (**处理 HTTP POST 请求,将用户输入传递给
ZhipuAIService
,并返回 AI 的回复。它对输入进行 URL 解码,以确保正确处理)**
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;
@RestController
@RequestMapping("/chat")
public class ZhipuAiController {
private final ZhipuAIService zhipuAiService;
public ZhipuAiController(ZhipuAIService zhipuAiService) {
this.zhipuAiService = zhipuAiService;
}
@PostMapping("/ask")
public String chat(@RequestBody String userInput) {
try {
// 对接收到的userInput进行URL解码
userInput = URLDecoder.decode(userInput, StandardCharsets.UTF_8.toString());
} catch (UnsupportedEncodingException e) {
return "解码错误";
}
String response = zhipuAiService.invokeChatCompletion(userInput);
return response;
}
}
3.PostMan或者ApiFox测试效果
至此不出意外应该集成AI聊天功能了,当然了如果想用例如GLM-4这种更好的大模型其实也是可以在代码里稍加修改的,就是要记得体验期是有限的哈
.model(Constants.ModelChatGLM4)
为了确保万一,我们还可以在费用账单里查看明细,避免错误扣费
希望可以帮到有需要的小伙伴啦
版权归原作者 无情的肥宅 所有, 如有侵权,请联系我们删除。