背景
在传统的教学模式中,教师往往难以兼顾每位学生的个性化需求,学习信息的收集与分析也受限于时间和精力的限制,难以做到全面而深入。然而,每位学生都是独一无二的个体,他们拥有不同的学习风格、兴趣偏好以及理解能力,这些因素直接影响到他们的学习效果和成长速度。
为了打破这一瓶颈项目应运而生。该项目旨在通过构建一套高效的学习信息收集与AI反馈系统,实现对学生学习状态的精准洞察与个性化指导。具体而言,项目首先通过多样化的渠道(如在线平台、智能设备等)广泛收集学生的学习信息,包括但不限于学习进度、作业完成情况、课堂参与度、测试成绩以及自我评估等。
随后,这些海量且复杂的学习数据被传输至先进的AI分析系统。该系统运用机器学习、深度学习等前沿技术,对学生的学习行为、能力水平及潜在需求进行深度挖掘与分析。基于这些分析结果,AI能够生成个性化的学习建议、资源推荐及反馈报告,帮助每位学生量身定制最适合自己的学习计划和方法。
步骤
源码地址:
gitee源码
1、搭建项目引入pom文件
jdk17 springboot3.3.0
<?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>3.3.0</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.XXXXj</groupId>
<artifactId>ai</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>metaverse-ai</name>
<description>metaverse-ai</description>
<properties>
<java.version>17</java.version>
<spring-ai.version>1.0.0-M1</spring-ai.version>
<spring-cloud.version>2023.0.0</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-openai-spring-boot-starter</artifactId>
</dependency>
<!-- <dependency>-->
<!-- <groupId>org.springframework.ai</groupId>-->
<!-- <artifactId>spring-ai-zhipuai-spring-boot-starter</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.30</version>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--nacos注册与发现-->
<!-- <dependency>-->
<!-- <groupId>com.alibaba.cloud</groupId>-->
<!-- <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>-->
<!-- <version>2023.0.1.0</version>-->
<!-- </dependency>-->
<!--nacos配置中心来做配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2023.0.1.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>3.0.3</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
2、配置文件
server:
port: 8180
spring:
ai:
openai:
# 全局配置
api-key: sk-this-is-key # 申请的api-key
base-url: https://api.smnet1.asia/ #代理地址,可以通过我的推荐链接注册:https://api.smnet1.asia/register?aff=xg61,会赠送¥1000 token
# 嵌入API配置
embedding:
options:
model: kimi #我使用的代理支持多种模型,所以这里填写自己想用的模型就可以
# 聊天API配置
chat:
#指定某一个API配置(覆盖全局配置)
api-key: sk-this-is-key # 申请的api-key
base-url: https://api.smnet1.asia/ #openAi访问地址(不写默认)
options:
model: kimi #我使用的代理支持多种模型,所以这里填写自己想用的模型就可以
zhipuai:
api-key: this-is-zhipu-key # 申请的api-key
base-url: https://open.bigmodel.cn/api/paas/ #填写zhipu的访问地址
chat:
enabled: true
以智普举例来说,想要获得api-key ,需要登陆智普官网,进行注册即可获得key,但是时效是一个月,公司使用的话交钱即可。
https://open.bigmodel.cn/usercenter/apikeys
真正使用方式:我们项目会根据学生的颗粒回复生成词云,然后可以根据词云中的信息给到AI,AI结合这些关键字给老师反馈。帮助老师更好地了解学生的学习情况。
Controller
package com.tfjybj.metaverseai.controller;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.model.ChatResponse;
import org.springframework.ai.chat.model.Generation;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.openai.OpenAiChatModel;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.zhipuai.ZhiPuAiChatModel;
import org.springframework.ai.zhipuai.ZhiPuAiChatOptions;
import org.springframework.ai.zhipuai.api.ZhiPuAiApi;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.http.codec.ServerSentEvent;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;
import java.util.Objects;
@RestController
@RequestMapping("/ai")
public class ChatController {
@Autowired
private OpenAiChatModel chatClient;
@Autowired
private ZhiPuAiChatModel zhipuChatModel;
@GetMapping(value = "/easyAnswer", params = "studentAnswer", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public String easyAnswer(@RequestParam String textQuestion,@RequestParam String studentAnswer) {
String systemPrompt = "你是一个优秀的全科老师,\n" +
"学生在上课的时候对问题进行了回答,我们根据学生的回答生成了词云,\n" +
"我会告诉你问题和学生回答的词频统计,\n" +
"请你根据问题和学生回答的词频统计,通过分析同学们的回答,生成一篇文章,来给同学们阅读。\n";
String message = systemPrompt+"问题: '''" + textQuestion + "'''\n\n" +
"学生回答的词频统计:''' " + studentAnswer + "'''\n";
// System.out.println(message);
Prompt prompt = new Prompt(message, OpenAiChatOptions.builder()
.withModel("kimi") //大模型用哪个
.withTemperature(0.5f) //温度高,更发散,准确性降低,温度低,更保守,准确性高
.build());
Prompt zhipuPrompt = new Prompt(message, ZhiPuAiChatOptions.builder()
.withModel(ZhiPuAiApi.ChatModel.GLM_3_Turbo.getValue())
.withTemperature(0.5f)
.build());
// ChatResponse response= chatClient.call(prompt);
ChatResponse response= zhipuChatModel.call(zhipuPrompt);
System.out.println(response.getResult().getOutput().getContent());
return response.getResult().getOutput().getContent();
}
}
访问
http://localhost:8180/ai/easyAnswer?textQuestion=你能不能说说你知道的植物呢&studentAnswer=玫瑰花
得到如下反馈:
总结
这里只是举了一个小例子,实际在项目中使用的时候万变不离其宗。