平台智能化

目录

一、接入AI模块

1.智谱 AI 介绍

2.使用智谱 AI SDK

Java 中使用 SDK

其他用法

3、封装 AI 模块

二、AI 生成题目

1.需求分析

2.方案设计

1、明确输入参数

2、明确AI返回结果

3、编写和调试 Prompt

4、注意事项

3.后端开发

4.前端开发

1.抽屉组件

2.引入组件

5.验证测试

6.扩展思路

三、AI 智能评分

1.方案设计

1、明确输入参数

2、明确返回结果

3、编写和调试 Prompt

2.后端开发

3.前端开发

4.验证测试

5.扩展思路


一、接入AI模块

在智谱 AI 开放平台页面 进行题目生成的演示,然后后端 sdk 引入。

1.智谱 AI 介绍

智谱 AI 开放平台:智谱AI开放平台

创建应用:应用 = 预定义了一些规则的大模型

在线体验:可用来测试不同大模型和参数的效果,支持 AI 绘画

2.使用智谱 AI SDK

需要阅读官方文档

使用指南:智谱AI开放平台

可以看到很多能力,比如知识库、网络搜索等

接口文档:智谱AI开放平台

有 3 种调用方式,SDK、HTTP 和第三方框架。

比较推荐 SDK,方便,不用自己构造 HTTP 请求并构造响应对象。

跟着官方文档去学习使用即可:智谱AI开放平台

Java 中使用 SDK

1)引入 maven:

 <dependency>
    <groupId>cn.bigmodel.openapi</groupId>
    <artifactId>oapi-java-sdk</artifactId>
    <version>release-V4-2.0.2</version>
</dependency>

2)创建单元测试来跑通 Demo

注意配置 apiKey,在智谱开放平台查看:智谱AI开放平台

package com.yupi.yudada;

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.ChatMessageRole;
import com.zhipu.oapi.service.v4.model.ModelApiResponse;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@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)
                .build();
        ModelApiResponse invokeModelApiResp = clientV4.invokeModelApi(chatCompletionRequest);
        System.out.println("model output:" + invokeModelApiResp.getData().getChoices().get(0));
    }
}

每个参数的含义可以参考官方文档:智谱AI开放平台

其他用法

异步调用:相当于提交任务,可以之后查询任务状态并获取结果。

SSE 调用:流式、实时地获取到结果直到结束,可以优化用户体验。

3、封装 AI 模块

目的是更快速灵活地调用 AI 的能力,各项目都可以复用。

1)在 application.yml 中定义 AI 配置

ai:
  apiKey: xxx

2)定义 AI 配置类,加载配置文件,初始化调用智谱的 Client 并将其注册为 bean。

@Configuration
@ConfigurationProperties(prefix = "ai")
@Data
public class AiConfig {

    /**
     * apiKey,需要从开放平台获取
     */

    private String apiKey;

    @Bean
    public ClientV4 getClientV4() {
        return new ClientV4.Builder(apiKey).build();
    }
}

可以自己定制客户端的一些配置,后续 service 即可注入使用,不用再重复创建 Client 了。

3)智谱 SDK 提供的客户端已经很方便了,但我们仍然可以根据实际业务需求,封装本项目内通用的 AI 请求构建模块。

比如将复杂的消息、请求构建、从返回值中获取结果的过程进行封装。

一般建议先封装通用的方法,然后提供不同参数默认值的简化调用方法,层层简化。

最通用的方法,可自定义消息、是否流式、随机数:

在manager包下(区别于工具类给整个项目提供一种能力)

/**
     * 通用请求
     *
     * @param messages
     * @param stream
     * @param temperature
     * @return
     */
    public String doRequest(List<ChatMessage> messages, Boolean stream, Float temperature) {
        // 构建请求
        ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder()
                .model(Constants.ModelChatGLM4)
                .stream(stream)
                .temperature(temperature)
                .invokeMethod(Constants.invokeMethod)
                .messages(messages)
                .build();
        try {
            ModelApiResponse invokeModelApiResp = clientV4.invokeModelApi(chatCompletionRequest);
            return invokeModelApiResp.getData().getChoices().get(0).toString();
        } catch (Exception e) {
            e.printStackTrace();
            throw new BusinessException(ErrorCode.SYSTEM_ERROR, e.getMessage());
        }
    }

通用请求,简化了消息传递:

    /**
     * 通用请求(简化消息传递)
     *
     * @param systemMessage
     * @param userMessage
     * @param stream
     * @param temperature
     * @return
     */
    public String doRequest(String systemMessage, String userMessage, Boolean stream, Float temperature) {
        List<ChatMessage> chatMessageList = new ArrayList<>();
        ChatMessage systemChatMessage = new ChatMessage(ChatMessageRole.SYSTEM.value(), systemMessage);
        chatMessageList.add(systemChatMessage);
        ChatMessage userChatMessage = new ChatMessage(ChatMessageRole.USER.value(), userMessage);
        chatMessageList.add(userChatMessage);
        return doRequest(chatMessageList, stream, temperature);
    }

通用同步请求:

    /**
     * 同步请求
     *
     *
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值