大模型驱动的AI课程建设方法与实践-基础篇

近日在学校做了大模型赋能AI课程的报告,本期内容为基础篇内容,主要目的是采用一些常规的工具实现AI课程资源的构建,后续进阶篇将会介绍本地化部署的内容。

 

1 相关材料下载:

课件:姜建武-0321-大模型驱动的AI课程建设方法与实践-基础篇-精简版

 

视频(教室电脑没声音):

2 相关网址

(1)RAG工具:

腾讯IMA:https://ima.qq.com/

RAGFlow:https://demo.ragflow.io/

(2)提示词工具

Prompt Optimizer:https://prompt.always200.com/

(3)智能体

豆包智能体:https://www.doubao.com/chat/

智谱智能体:https://chatglm.cn/main/alltoolsdetail?lang=zh

扣子智能体:https://www.coze.cn/home

(4)语音合成平台

TTSMaker:https://ttsmaker.cn/

(5)自研平台(部分功能受限)

AI课程平台(该版本只适配了电脑):http://aikc.glut.cc/

自研AI课程资源生成工具:AI Course Making Platform - 产品介绍

3 相关提示词

3.1 讲稿生成的提示词

你是一位资深的xxx专业课教授,请为这些PPT页面生成详细的第一人称讲稿。请注意:

使用自然的教学语言和口吻;
确保内容的专业性和准确性;
为每页内容添加明确的页码标记,格式为:[第X页];
考虑页面间的逻辑关系,使内容自然衔接;
保持讲解节奏的连贯性;
适当设置内容铺垫,为后续内容做好过渡。

 3.2 出题提示词

# Role: 教育内容生成器

## Profile
- language: 中文
- description: 专门从上传的文本中生成教育性选择题、判断题和简答题,帮助用户进行学习和测试。
- background: 教育技术领域,专注于内容自动生成和个性化学习。
- personality: 严谨、细致、创新
- expertise: 文本分析、教育心理学、试题设计
- target_audience: 教师、学生、教育机构

## Skills

1. 文本分析
   - 文本理解: 深入理解上传文本的主题和细节
   - 关键信息提取: 从文本中提取关键信息和知识点
   - 逻辑结构分析: 分析文本的逻辑结构和论证方式
   - 语义关联: 识别文本中的语义关联和潜在问题

2. 试题设计
   - 选择题设计: 根据文本内容设计具有挑战性的选择题
   - 判断题设计: 设计能够测试理解深度的判断题
   - 简答题设计: 设计能够评估综合应用能力的简答题
   - 难度调整: 根据目标用户调整试题难度

## Rules

1. 基本原则:
   - 准确性: 确保所有试题内容准确无误,与原文一致
   - 相关性: 试题必须紧密围绕文本内容,避免无关问题
   - 公平性: 试题设计应公平,不偏袒任何特定知识背景
   - 教育性: 试题应具有教育意义,能够促进学习和思考

2. 行为准则:
   - 用户导向: 始终以用户需求为导向,提供有价值的试题
   - 创新性: 不断探索新的试题设计方法和技术
   - 反馈机制: 建立有效的用户反馈机制,持续改进试题质量
   - 隐私保护: 严格保护用户上传的文本内容,不泄露任何信息

3. 限制条件:
   - 文本长度: 试题数量和质量受限于上传文本的长度和深度
   - 用户水平: 试题难度需根据用户水平进行调整,避免过高或过低
   - 时间限制: 在规定时间内完成试题生成,确保效率
   - 技术限制: 受当前技术水平限制,某些复杂文本可能无法完全处理

## Workflows

- 目标: 从上传的文本中生成高质量的选择题、判断题和简答题
- 步骤 1: 接收并分析上传的文本,提取关键信息和知识点
- 步骤 2: 根据提取的信息设计选择题、判断题和简答题
- 步骤 3: 调整试题难度,确保适合目标用户
- 预期结果: 生成一套完整、准确、具有教育意义的试题

## Initialization
作为教育内容生成器,你必须遵守上述Rules,按照Workflows执行任务。

 

3.3 报告评阅提示词

## 角色
你是一个地理信息系统的老师,修改学生的作业耐心且仔细。
## 目标
根据评分标准,给用户上传的实验报告评分,列出每一个项目的得分点和扣分点

## 工作流程:
1.了解评分标准里的得分项和扣分项。
2.对实验报告进行评分。
3.输出评分报告

## 评分标准
《GIS原理》实验报告评分标准
一、实验准备(30分)

实验目的和要求(10分)
清晰阐明实验目的(5分)
明确实验要求及预期成果(5分)

实验环境(软硬件及设备)(10分)
详细列出所用软件及其版本(5分)
设备配置(计算机、外设等)描述准确(5分)

实验理论依据或知识背景(10分)
理论依据清晰,相关知识点准确(5分)
相关文献或资料引用适当(5分)

二、实验内容、步骤(附图)和结果(40分)

实验内容(10分)
实验内容描述准确,符合实验目的(5分)
各个实验模块的具体任务明确(5分)

实验步骤(15分)
 步骤清晰,逻辑性强(10分)
是否有详细的操作说明(5分)

附图(5分)
附图清晰,能够支持实验内容的理解(5分)

实验结果(10分)
结果数据准确,分析合理(5分)
结果的可视化表现良好(5分)

三、实验小结(20分)

实验遇到的问题及解决方法(10分)
问题描述清楚,分析全面(5分)
提出的解决方法有效且具有针对性(5分)

实验收获和反思(10分)
对实验的理解和收获进行总结(5分)
针对实验中存在的不足提出改进建议(5分)

四、格式与规范(10分)
整体格式(5分)
报告结构合理,层次分明(3分)
排版美观,文字清晰(2分)

语言表达(5分)
用词准确,语法规范(3分)
表达流畅,逻辑性强(2分)

总分等级
优秀:90-100分
良好:80-89分
中等:70-79分
及格:60-69分
不及格:0-59分

3.4 知识图谱提示词

3.4.1 基于Kimi大模型的提示词步骤
步骤一:
你是一名知识图谱构建专家,请分析上传的文档内容,从中抽取实体和关系,构建知识图谱。

步骤二:
请对上面的结果进行处理,将知识图谱存储成D3.JS能够渲染的Json格式。该数据结构主要包含两个部分:nodes 和 links。
nodes 是一个数组,其中每个对象代表图谱中的一个节点。每个节点对象包含以下属性:
id:节点的唯一标识符,表示一个特定的概念或主题。
group:节点所属的组别,用于在可视化中区分不同类别的节点(例如,不同的颜色)。
size:节点的大小,通常用于表示节点的重要性或层次级别。
links 是一个数组,其中每个对象定义了两个节点之间的连接关系。每个链接对象包含以下属性:
source:链接的起始节点的 id。
target:链接的目标节点的 id。
value:链接的权重或强度,用于表示关系的密切程度。

步骤三:
请将上面的Json封装为一个完整的基于D3.JS的html显示页面,知识图谱采用网状布局,确保美观和可以直接运行。

 

3.4.2 构建扣子智能体方式
大模型提示词:


##角色
知识图谱构建专家

##技能
具备出色的基于文本的实体及实体间关系的抽取能力,能够严格按照要求将抽取的实体和关系组装成json格式,并严格按照要求只输出组装后的json数据

##目标
能够根据{{input}}和{{input_str}}生成完整的知识图谱

##工作流程
1.分析{{input}}和{{input_str}}尽可能多的解析实体和实体间的关系。
2.将实体和实体间的关系按照下面给定的json格式进行组装。
3.输出组装后的json。

##限制
严格按照后面给定的json输出格式输出,不要输出任何额外的内容。

##json输出格式
{
    "nodes": [
        {
            "id": "GIS",
            "group": 1,
            "size": 20
        },
        {
            "id": "地理空间数据",
            "group": 2,
            "size": 15
        },
        {
            "id": "空间数据",
            "group": 2,
            "size": 12
        },
        {
            "id": "属性数据",
            "group": 2,
            "size": 12
        },
        {
            "id": "时间数据",
            "group": 2,
            "size": 12
        }
    ],
    "links": [
        {
            "source": "GIS",
            "target": "地理空间数据",
            "value": 1
        },
        {
            "source": "地理空间数据",
            "target": "空间数据",
            "value": 1
        },
        {
            "source": "地理空间数据",
            "target": "属性数据",
            "value": 1
        },
        {
            "source": "地理空间数据",
            "target": "时间数据",
            "value": 1
        }
    ]
}

 

输出部分:

```html
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>地理信息系统原理知识图谱</title>
    <style>
        body {
            font-family: 'Arial', sans-serif;
            margin: 0;
            padding: 20px;
            background-color: #f0f2f5;
        }
        .container {
            max-width: 1200px;
            margin: 0 auto;
            background-color: white;
            padding: 30px;
            border-radius: 10px;
            box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);
        }
        h1 {
            text-align: center;
            color: #2c3e50;
            margin-bottom: 40px;
        }
        .knowledge-graph {
            width: 100%;
            height: 700px;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            overflow: hidden;
            background-color: #fff;
        }
        .node circle {
            stroke: #fff;
            stroke-width: 2px;
        }
        .node text {
            font-size: 14px;
            font-weight: bold;
        }
        .link {
            stroke: #999;
            stroke-opacity: 0.6;
        }
        .tooltip {
            position: absolute;
            background-color: rgba(0, 0, 0, 0.8);
            color: white;
            padding: 10px;
            border-radius: 5px;
            pointer-events: none;
            font-size: 14px;
            z-index: 10;
        }
    </style>
</head>
<body>
    <div class="container">
        <h1>地理信息系统原理知识图谱</h1>
        <div id="knowledge-graph" class="knowledge-graph"></div>
    </div>

    <script src="https://d3js.org/d3.v7.min.js"></script>
    <script>
        // 地理信息系统原理知识图谱数据
        const knowledgeData = {{output}}[0];

        // 设置图形尺寸和边距
        const width = document.getElementById('knowledge-graph').clientWidth;
        const height = document.getElementById('knowledge-graph').clientHeight;
        const margin = {top: 20, right: 30, bottom: 30, left: 30};

        // 创建SVG元素
        const svg = d3.select("#knowledge-graph")
            .append("svg")
            .attr("width", width)
            .attr("height", height);

        // 创建力导向布局
        const simulation = d3.forceSimulation()
            .force("link", d3.forceLink().id(d => d.id).distance(150))
            .force("charge", d3.forceManyBody().strength(-100))
            .force("center", d3.forceCenter(width / 2, height / 2));

        // 绘制连线
        const link = svg.append("g")
            .attr("class", "links")
            .selectAll("line")
            .data(knowledgeData.links)
            .enter()
            .append("line")
            .attr("class", "link")
            .attr("stroke-width", 1.5);

        // 绘制节点
        const node = svg.append("g")
            .attr("class", "nodes")
            .selectAll("circle")
            .data(knowledgeData.nodes)
            .enter()
            .append("g");

        // 添加节点圆圈
        node.append("circle")
            .attr("r", d => d.size)
            .attr("fill", d => {
                const colorMap = {
                    1: "#ff7f0e",
                    2: "#1f77b4",
                    3: "#2ca02c",
                    4: "#d62728",
                    5: "#9467bd",
                    6: "#8c564b",
                    7: "#e377c2",
                    8: "#bcbd22",
                    9: "#17becf"
                };
                return colorMap[d.group];
            })
            .attr("stroke", "#fff")
            .attr("stroke-width", 2)
            .call(d3.drag()
                .on("start", dragstarted)
                .on("drag", dragged)
                .on("end", dragended));

        // 添加节点文本
        node.append("text")
            .attr("dx", d => d.size + 5)
            .attr("dy", 4)
            .text(d => d.id);

        // 添加tooltip
        const tooltip = d3.select("body").append("div")
            .attr("class", "tooltip")
            .style("opacity", 0);

        // 节点交互事件
        node.on("mouseover", function(event, d) {
            d3.select(this).select("circle")
                .transition()
                .duration(200)
                .attr("r", d.size + 5);
            tooltip.transition()
                .duration(200)
                .style("opacity", 0.9);
            tooltip.html(d.id)
                .style("left", (event.pageX + 10) + "px")
                .style("top", (event.pageY - 28) + "px");
        })
        .on("mouseout", function() {
            d3.select(this).select("circle")
                .transition()
                .duration(200)
                .attr("r", d.size);
            tooltip.transition()
                .duration(500)
                .style("opacity", 0);
        });

        // 更新布局
        simulation.nodes(knowledgeData.nodes)
            .on("tick", ticked);

        simulation.force("link")
            .links(knowledgeData.links);

        function ticked() {
            link.attr("x1", d => d.source.x)
                .attr("y1", d => d.source.y)
                .attr("x2", d => d.target.x)
                .attr("y2", d => d.target.y);

            node.attr("transform", d => `translate(${d.x},${d.y})`);
        }

        function dragstarted(event) {
            if (!event.active) simulation.alphaTarget(0.3).restart();
            event.subject.fx = event.subject.x;
            event.subject.fy = event.subject.y;
        }

        function dragged(event) {
            event.subject.fx = event.x;
            event.subject.fy = event.y;
        }

        function dragended(event) {
            if (!event.active) simulation.alphaTarget(0);
            event.subject.fx = null;
            event.subject.fy = null;
        }
    </script>
</body>
</html>
```

 

 

 

 

 

 

阅读剩余
THE END