【案例共创】基于MaaS结合开发者空间Astro低代码平台完成学生成绩评价系统

本案例由开发者:风吹雨提供

一、概述

1. 案例介绍

通过实际操作,了解如何利用Astro低代码平台开发应用。在这个过程中,学习从模型集成、界面操作、页面布置到逻辑实现以及应用打包一系列关键步骤,从而掌握Astro低代码平台的基本使用方法及与大模型的结合,体验其在应用开发中的优势。

开发者空间Astro低代码开发平台通过平台提供的界面、逻辑、对象等可视化编排工具,以“拖、拉、拽”的方式来快速构建应用,从而实现所见即所得的应用开发构建体验。

华为开发者空间,是为全球开发者打造的专属开发者空间,致力于为每位开发者提供一台云主机、一套开发工具和云上存储空间,汇聚昇腾、鸿蒙、鲲鹏、GaussDB、欧拉等华为各项根技术的开发工具资源,并提供配套案例指导开发者从开发编码到应用调测,基于华为根技术生态高效便捷的知识学习、技术体验、应用创新。

ModelArts Studio(MaaS)平台是华为云推出的一款大模型即服务平台,可以一站式的对业界主流开源大模型进行部署托管,同时开放大模型API服务,可以结合业界主流Agent开发框架,轻松构建AI Agent应用。

2. 适用对象

  • 企业
  • 个人开发者
  • 高校学生

3. 案例时间

本案例总时长预计90分钟。

4. 案例流程

说明:

  1. 领取华为开发者空间,登录华为开发者空间-低代码应用开发平台
  2. 新建低代码应用,进入Astro轻应用服务控制台主页,开发应用。

5. 资源总览

本案例预计花费0元。

资源名称规格单价(元)时长(分钟)
MaaS 平台商用模型DeepSeek-R1 轻量体验包(¥7.00)/ DeepSeek-V3 轻量体验包(¥3.50)领券免费90
华为开发者空间 - 低代码应用开发平台系统标配免费90

二、环境准备

1. 领取注册开发者空间

开发者空间是开发者专属的云上成长空间,预置免费华为根技术工具和资源,为开发者提供从学习、开发到部署的全旅程支持。

点击免费领取,立即领取开发者空间。

注意:领取开发者空间,需要登录华为账号,如果没有,请注册华为账号并完成实名认证。

2. 领取百万tokens代金券

参考案例《Versatile Agent中自定义接入大模型配置华为云Maas指导》中的“一、 领取”章节内容,领取华为开发者空间百万token代金券福利,购买ModelArts Studio DeepSeek-V3 轻量体验包(¥3.50)。开通商用模型服务,最后获取模型名称和API Key的参数值。

注意:记录API Key模型名称留作后面步骤使用。

三、学生成绩评价系统构建

1. 新建低代码应用

点击新建低代码应用:

点击标准应用,点击确定:

输入命名空间:

输入应用名称:score,标签:人工智能,分类:AI,点击确认按钮。

点击新建页面,弹窗中输入标签:学生分数统计,名称:statistics。

点击上一步添加按钮:

2. 数据对象建立

点击数据->对象旁边的“”:

输入对象名称:学生成绩,唯一标识:StudentScore

点击确定后,点击以下图标,对学生成绩对象进行编辑:

添加语文字段:

显示名称:语文,唯一标识:yuwen,字段类型:数字,数据长度:10,小数位数:1

添加数学字段:

添加外语字段:

添加历史字段:

添加生物字段:

添加化学字段:

添加建议字段:

点击数据->结构体旁边的“”,创建结构体:AImessage。

编辑添加结构体AImessage,用于后续大模型AI调用。

保存结构体详情:

3. 学生分数统计界面开发

拖入表单:

表单与对象模型建立连接:

新建模型,模型名称:scoreData,来源:对象,点击下一步:

配置相关模型:

完成模型新增:

选择相关模型(只绑定模型):

拖入表单标题:学生成绩评估。

配置姓名输入框:

姓名字段与数据模型中的name绑定:

配置语文成绩输入框:

语文成绩与数据模型中Astro_Project_yuwen_CST绑定:

其他科目配置方式及绑定方式和语文类似:

拖入容器用于容纳提交按钮:

拖入按钮组件:

为按钮添加事件:

添加自定义JS代码并保存:

JS代码需要自行编写,可参考下面,该代码包含json数据处理,大模型提示词生成,新界面调用等。

完整代码如下:

// 序列化表单数据
var model = context.$model.ref("scoreData").getData();
var modelCopy = JSON.parse(JSON.stringify(model));

// 处理非字符串字段
Object.keys(modelCopy).forEach(item => {
    if (modelCopy[item] && typeof modelCopy[item] !== "string") {
        modelCopy[item] = JSON.stringify(modelCopy[item]);
    }
});

// 提取问题字段值
var questionCodes = [];
var subjects = ["name","yuwen", "shuxue", "waiyu", "lishi", "shengwu", "huaxue"];

subjects.forEach(function(subject) {
    var fieldName = "Astro_Project__" + subject + "__CST";
    questionCodes.push(modelCopy[fieldName] || "");
});

// 构建提示文本
var suggestionText = `学生${questionCodes[0]}的各科成绩如下:
- 语文:${questionCodes[1]}/150分
- 数学:${questionCodes[2]}/150分 
- 外语:${questionCodes[3]}/150分
- 历史:${questionCodes[4]}/100分
- 生物:${questionCodes[5]}/100分
- 化学:${questionCodes[6]}/100分

请根据以上成绩情况分析该学生的学习特点,并给出针对性的学习建议,200字以内。`.replace(/"/g, "'");


//modelCopy.Astro_Test__questionCode7__CST = suggestionText;
// 初始化Flow
var _flow = context.flow("Astro_Project__process");
// 调用AI服务获取建议
try {
    // 提示信息
    context.$message.info("信息分析中,正在生成建议。。。。。。");

    const resp = await _flow.run({ input: suggestionText });
    const reader = resp.body.getReader();
    const decoder = new TextDecoder();

    let buffer = '';
    let msg = '';

    while (true) {
        const { done, value } = await reader.read();
        if (done) break;

        buffer += decoder.decode(value);
        const lines = buffer.split('\n');

        // 保留最后一行(可能不完整)
        buffer = lines.pop() || '';

        for (const line of lines) {
            if (!line.trim()) continue;

            try {
                const jsonStr = line.startsWith('data: ') ? line.substring(6) : line;
                if (jsonStr.trim() === '[DONE]') continue;

                const obj = JSON.parse(jsonStr);
                const newMsg = obj?.choices[0]?.delta?.content || '';
                if (newMsg) msg += newMsg;
            } catch (err) {
                console.warn('解析JSON失败,保留到下一轮处理:', err.message);
                buffer = line + '\n' + buffer;
            }
        }
    }
    // 最终保存结果
    modelCopy.Astro_Project__suggestions__CST = msg;
    context.$model.ref("scoreData").setData(modelCopy);

    // 提交数据
    const saveResult = await context.$model.ref("scoreData").save();
    if (saveResult.resCode == 0) {
        const recordId = saveResult.result[0]?.id;
        if (recordId) {
            context.$page.loadStdPage('Astro_Project__result', "recordId=" + recordId);
            // 成功消息
            context.$message.success('生成成功');
        }
    }
} catch (error) {
    console.error("AI服务调用失败:", error);
    // 可以添加错误处理逻辑,如显示错误信息
}

注意:代码中涉及到的命名空间(Astro_Project),需要修改为您自己项目工程的命名空间。

4. 集成大模型

点击集成->连接器实例->MaaS云平台,点击“”添加大模型:

填写基本信息:

标签:AI,名称:Score_AI,模型名称和API Key。

注意:模型名称和API Key要替换成步骤“二、 环境准备中的2.领取百万tokens代金券”获取的模型名称和API Key。

测试大模型:

5. 建立服务编排

创建新的服务编排:

点击逻辑->编排旁边的“”,添加编排服务,标签为process

配置输入输出变量:

点击全局上下文->变量旁边的“”,配置输入输出变量。

配置对象变量:

配置出参、入参:

拖入赋值图标,添加连接线:

赋值模块配置:

messages[0].role的值为user。

大模型连接器配置:

配置相关大模型参数:

按照以下顺序保存:

6. 学生成绩结果页面开发

新建结果页:

拖入表单:

同样引入模型:

模型名称:resultForm,来源:对象,点击下一步。

选择学生成绩对象,勾选所有字段:

选择只绑定模型:

拖入多行输入框,标签:根据您的成绩,提供以下建议,行数:15行。

多行输入框数据绑定,绑定Astro_Project_suggestions_CST字段。

多行输入框事件绑定:

点击事件->加载旁边的“”,添加事件绑定。

编写JS代码并保存:

JS完整代码如下:

// json化方法
function parseJSON(str) {
    var flag = false;
    try {
        JSON.parse(str);
        flag = true
    } catch (err) {
        flag = false;
    }
    return flag;
}

console.log('start')

var recordId = context.$page.params.recordId;
if (!recordId) return;
console.log('middle')

try {
    // 获取Object对象
    var _object = context.object('Astro_Project__StudentScore__CST');
    console.log(_object)

    // 查询满足条件数据
    var _condition = {
        conjunction: 'AND',
        conditions: [{
            field: 'id',
            operator: 'eq',
            value: recordId
        }]
    };

    const res = await _object.query(_condition);

    if (res.resCode !== '0' || !res.result || res.result.length === 0) return;

    const data = res.result[0];

    // 解析JSON字符串字段
    Object.keys(data).forEach(item => {
        if (data[item] && parseJSON(data[item])) {
            try {
                const parsed = JSON.parse(data[item]);
                data[item] = parsed;
            } catch (e) {
                // 不是有效JSON,保持原值
            }
        }
    });
    $model.ref("resultForm").setData(data);
} catch (err) {
    console.error("数据查询或处理失败:", err);
}

注意:代码中涉及到的命名空间(Astro_Project),需要修改为您自己项目工程的命名空间。

7. 测试体验学生成绩评价系统

点击以下预览图标:

输入相关内容:

点击提交按钮后,大模型会对数据进行分析并返回相关建议:

至此,基于MaaS结合开发者空间Astro低代码平台完成学生成绩评价系统的案例已全部完成。

四、反馈改进建议

如您在案例实操过程中遇到问题或有改进建议,可以到论坛帖评论区反馈即可,我们会及时响应处理,谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值