本阶段任务
借助 智谱AI,为市场平台提供智能化生成App的功能。
- 接入 Al 模块
- Al 生成题目
- Al 智能评分
接入 AI 模块
根据 智谱 AI 接口文档 使用 SDK 的方式接入(这种方式比较简便,不用自己构造 HTTP 请求和响应对象)。
- 在添加依赖后,使用
@SpringBootTest
注解进行了单元测试,验证正确接入 AI 模块:
@SpringBootTest
public class ZhiPuAiTest {
@Resource
private ClientV4 clientV4;
@Test
public void test(){
// 初始化客户端
// ClientV4 client = new ClientV4.Builder(KeyConstant.KEY).build();
// 构建请求
List<ChatMessage> messages = new ArrayList<>();
ChatMessage chatMessage = new ChatMessage(ChatMessageRole.USER.value(), "作为一名营销专家,请为智谱开放平台创作一个吸引人的slogan");
messages.add(chatMessage);
// String requestId = String.format(requestIdTemplate, System.currentTimeMillis());
ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
.model(Constants.ModelChatGLM4)
.stream(Boolean.FALSE)
.invokeMethod(Constants.invokeMethod)
.messages(messages)
// .requestId(requestId)
.build();
ModelApiResponse invokeModelApiResp = clientV4.invokeModelApi(chatCompletionRequest);
System.out.println("model output:" + invokeModelApiResp.getData().getChoices().get(0));
}
}
- 测试正确之后,封装模块:
1)在 application.yml 中定义配置:
ai:
api-key: 自己的API密钥
2)定义 AI 配置类:
@Configuration
@ConfigurationProperties(prefix = "ai")
@Data
public class AiConfig {
/**
* api key,需要从开放平台获取
*/
private String apiKey;
@Bean
public ClientV4 getClientV4(){
return new ClientV4.Builder(apiKey).build();
}
}
3)在 AiManager 类中定义各类请求方法
AI 生成题目
可以使用 Al 根据已经填写的应用信息,自动生成题目,然后再由人工进行编辑确认,提高创建题目的效率。
Al 生成内容精准的核心要点在于编写 Prompt。总体而言,首先明确我们能提供或者需要输入给Al的参数,然后构建 Prompt 并输入给 AI,让 AI 生成题目并处理成我们需要的格式。
1)调试定义 Prompt:智谱AI-Prompt 工程文档
遵循 Prompt 工程指南中的技巧,编写出系统 Prompt 和用户 Prompt 。
系统Prompt如下:
你是一位严谨的出题专家,我会给你如下信息:
应用名称,
[[[应用描述]]],
应用类别,
要生成的题目数,
每个题目的选项数
请你根据上述信息,按照以下步骤来出题:
xxxxxxxxxxxxxxxxx
xxxxxxxxxxx
用户Prompt按照顺序提供信息即可,示例Prompt如下:
测评类应用:
MBTI性格测试,
[[[MBTI性格测试]]],
测评类,
10,
2
注意:得到的结果可能会包含额外的开头和结尾字符串。可以通过字符串查找,找到开头和结尾的[ ],进行截取,最后,将JSON字符串转换为题目对象,返回给前端即可。
2)定义 AI 生成题目请求类,和系统/用户消息模板,并在QuestionController中定义 AI 题目生成接口。
3)前端开发:
使用 acro design 中提供的抽屉组件,并在题目页面中引入
并引入 const submitting
来向用户提示题目正在生成中
AI 评分
原本我们设计的题目评分策略需要让应用创建者自己创建评分结果,并且给题目选项设置得分和对应的属性,比较麻烦:
因此可以使用 Al根据应用信息题目和用户的答案进行分析,直接返回评分结果。
基本开发步骤同 AI 生成题目类似。
这种评分策略更适用于测评类应用,提高创建应用效率的同时,给结果更多的可能性,所以下面我们主要实现测评类应用的Al评分策略,暂时不关注得分类应用的Al评分结果,后续也可以在前端做一些控制,如果是得分类应用,不支持选择AI评分策略等。
扩展知识
Spring AI 用于在 Spring 应用程序中集成人工智能(AI)和机器学习(ML)功能。Spring AI 旨在简化 AI/ML 模型的开发、部署和管理,使开发人员能够更加高效地构建智能应用程序。
简单来说就是适配了市面上主流的Al模型,提供统一接口便于我们的开发
。
注意:整个Spring Al是基于jdk 17构建的。
此外,Spring AI也整合了智谱AI:github地址