ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI笔记本课堂编程工作流:从需求拆解到结果留痕

AI笔记本课堂编程工作流:从需求拆解到结果留痕 在课堂里使用 AI 笔记本辅助编程已经不是 “要不要用” 的问题而是 “怎么用才不翻车” 的问题。一方面学生能通过 AI 助手快速完成代码补全、报错解释、需求拆解另一方面如果只是把 AI 当成“答案生成器”课堂练习就会变成复制粘贴大赛完全失去了编程训练的意义。本文基于华硕弘道 AI 笔记本的实际课堂场景整理了一条从需求拆解、AI 辅助编码、自动运行验证到结果留痕的完整编程工作流并给出可复用的 Python 示例代码。文章适合三类读者准备把 AI 编程工具引入课堂的教师、正在寻找高效学习方式的编程初学者以及想在公司内部做“AI 工作流”落地的开发人员。读完你会掌握一套不依赖某个特定 AI 产品的通用方法如何用 AI 笔记本搭建本地 Python 环境如何把任务拆给 AI 助手如何用工作流把“写代码、跑代码、看结果、存记录”串起来以及如何避开 AI 编程中最常见的几个坑。1. 为什么在课堂上需要一条“AI 编程工作流”1.1 课堂编程的现状痛点传统课堂编程课的典型流程是教师讲知识点学生跟着敲代码运行出结果提交作业。听起来很顺畅但实际执行起来问题很多学生水平差距大。有的学生几分钟就能完成练习有的学生卡在环境配置上半小时。报错信息看不懂。很多初学者遇到Traceback就手足无措不知道去哪里查也不敢问。教师精力有限。一个班几十人逐个看代码、帮调试效率很低。练习结果无法沉淀。学生跑完程序截图交作业过程性数据丢失教师也很难判断哪些环节普遍容易出错。这些痛点的本质是课堂编程缺少一条把“辅助、编码、验证、反馈”串起来的标准化流程。而 AI 编程工具的出现正好补上了“辅助”和“反馈”两个关键环节。1.2 什么是“课堂编程工作流”工作流听起来很专业其实可以理解为把完成一件事的步骤固定下来让每一步都有输入、输出和检查标准。放到课堂编程场景一条最小可用的工作流长这样步骤内容工具/输出1接收任务拆解需求自然语言描述AI 对话记录2生成代码或代码片段AI 编程助手生成.py文件3本地运行验证Python 解释器运行结果4检查与修改单元测试或手动测试5结果留痕运行日志、截图、测试报告在传统模式下步骤 2 靠学生自己写步骤 4 靠教师检查效率都很低。引入 AI 笔记本之后步骤 2 可以由 AI 辅助完成步骤 4 可以结合自动测试脚本批量检查。这就是“AI 编程工作流”在课堂场景中的核心价值。1.3 AI 笔记本在其中的角色华硕弘道这类 AI 笔记本在这里承担的是“本地算力 本地开发环境 AI 助手入口”三位一体的角色。本地算力意味着部分 AI 模型可以离线运行比如代码补全模型、本地向量检索不依赖网络适合课堂这种网络环境不稳定的场景。本地开发环境意味着Python、VS Code、Jupyter Notebook 都部署在本机学生代码不会因为云端环境限制而跑不起来。AI 助手入口则提供了对话式编程支持。在华硕弘道 AI 笔记本上既可以打开网页版 AI 助手也可以使用本地部署的模型服务或者直接在编辑器里安装 AI 插件。这种灵活性让教师可以根据课程内容自由选择 AI 接入方式。有一点要特别说明本文不会锁定某个具体 AI 产品因为课堂环境差异太大AI 工具更新太快。我们重点讲清楚“怎么设计工作流”而不是“某个工具怎么用”。2. 环境准备与版本说明2.1 硬件环境本文示例基于华硕弘道 AI 笔记本。需要注意不同配置的笔记本性能差异较大示例中的本地 AI 模型选择应当根据实际硬件调整。为了避免误导这里不写具体参数只给出通用建议如果笔记本支持本地运行 7B 以下参数量的模型可以把代码补全类小模型部署在本机。如果硬件资源有限不要强行跑大模型优先使用云端 AI 接口。内存建议至少 16GB否则同时启动代码编辑器、Python 解释器和本地模型服务会比较吃力。2.2 软件环境本文所有示例代码基于以下软件环境版本号需要根据你的实际情况调整Windows 11 或 Ubuntu 22.04华硕弘道 AI 笔记本出厂一般预装 Windows但编程环境与操作系统关系不大Python 3.9 及以上VS Code 或 PyCharm 作为代码编辑器Git 作为代码版本管理工具浏览器端 AI 助手或编辑器 AI 插件这里不写死具体版本号主要是因为 Python 和编辑器的版本迭代太快而且课堂环境往往由教师统一部署不同学校差异较大。核心思路是只要能正常创建虚拟环境、安装第三方库、运行 Python 脚本就满足本文的工作流要求。2.3 项目目录结构为了让课堂练习具备可复现性建议每个学生都遵循同一个项目目录结构。下面是一个推荐的课堂练习项目结构classroom-workflow/ ├── requirements.txt # 第三方依赖清单 ├── src/ # 源代码目录 │ └── attendance.py # 课堂点名/作业管理主程序 ├── tests/ # 测试脚本目录 │ └── test_attendance.py ├── data/ # 数据文件目录 │ └── students.txt # 学生名单 ├── output/ # 运行结果输出目录 └── prompts/ # AI 提示词存档目录 └── 01-需求拆解.md之所以要建立这样一套结构是为了让 AI 编程工作流的每一步都有明确的文件落点需求文档放prompts代码放src测试放tests运行结果放output。这样教师检查作业时不需要满屏找文件学生自己复习时也知道哪里该放什么。3. 核心原理拆解AI 辅助编程与工作流编排3.1 本地代码补全与对话式编程助手AI 辅助编程主要有两种形态。第一种是代码补全型。你在编辑器里写代码AI 会根据上下文自动补全下一行或下一段代码。这种工具适合已经有一定编程基础的学生它能减少敲键盘的时间但不能代替你思考。第二种是对话式编程助手。你可以用自然语言描述需求AI 会生成整段代码、解释报错、推荐修复方案。这种工具对初学者非常友好但也容易让学生产生依赖。在课堂场景中我建议两种结合使用写代码时开补全遇到问题先尝试自己定位再用对话助手询问思路而不是直接索要完整答案。3.2 工作流编排把 AI 能力串起来AI 编程助手解决的是“单点问题”比如生成一段函数、解释一个报错。但课堂练习是一个完整流程从拿到需求到提交结果中间有很多环节。如果每个环节都靠人肉切换效率提升有限。这才是“工作流编排”的作用所在。所谓编排就是把 AI 能力和其他编程工具组合起来形成一条自动化的流水线。常见的编排方式有三种脚本级编排用 Python 脚本调用多个 AI 接口或本地工具按顺序处理任务。编辑器级编排在 VS Code 里通过任务Task功能串联“格式化代码、运行测试、查看结果”。平台级编排使用 Dify、Coze、n8n 这类工作流平台把 AI 节点、代码节点、数据节点拖拽连接。对于课堂场景脚本级编排和编辑器级编排最实用因为它们不依赖额外平台学生只需要一台笔记本和 Python 环境就能跑起来。平台级编排更适合做项目展示或者教师用来制作自动出题、自动批改的工作流。3.3 为什么选择“本地开发 AI 辅助”的混合模式很多学生习惯直接在网页上写代码比如各种在线编辑器。但到了真实的课程项目和后续工作中代码必然会落到本地和文件系统、数据库、第三方库打交道。因此在课堂上坚持“本地开发 AI 辅助”的混合模式是一种刻意训练。好处有三个学生能真正看到代码文件在磁盘上的组织方式而不是网页里的一块编辑区。本地运行能暴露真实环境问题比如依赖缺失、路径错误、编码问题。这些问题虽然烦人但都是未来工作中必须面对的。AI 助手可以提供帮助但环境搭建和调试的主动权仍然在学生手里不会变成“AI 全包”。对于华硕弘道这类 AI 笔记本本地开发还有一层优势AI 能力可以嵌入本地环境比如本地知识库检索、本地代码索引、离线代码补全这些能力在断网或网络受限时依然可用。4. 完整实战从需求到可运行 Python 小项目下面我们从一个具体的课堂练习出发完整走一遍 AI 编程工作流。这个练习是用 Python 写一个课堂随机点名与作业提交记录小工具。4.1 场景与需求定义假设课堂上有 30 名学生教师需要每次上课随机抽 1 到 3 名学生回答问题。记录每位学生的作业提交状态已交/未交。能查看某个学生的历史提交记录。注意这不是一个复杂系统但它非常适合作为课堂练习包含文件读写、列表操作、随机选择、函数封装、命令行交互知识点覆盖完整难度适中。我们把需求整理成一份简单的需求卡片这也是 AI 编程工作流的第一步——让 AI 理解我们要做什么。需求描述 1. 从 students.txt 读取学生名单。 2. 支持随机点名可指定抽取人数。 3. 支持录入某位学生的作业提交状态。 4. 支持查询某位学生的作业提交记录。 5. 数据保存在本地文件中程序重启后不丢失。这份需求卡片可以直接复制给 AI 助手作为生成代码的提示词。使用[变量]这种方式也可以课堂场景保持简单即可。4.2 用 AI 助手辅助生成代码把上面的需求描述发给 AI 助手它会生成类似下面的代码。这里需要特别强调AI 生成的代码不一定完全正确我们必须逐行看懂并经过本地运行验证才能使用。下面是用 AI 辅助生成的课堂点名工具完整代码。为了便于阅读我添加了注释并做了一点结构调整。# 文件路径src/attendance.py import random import os from collections import defaultdict DATA_DIR data STUDENTS_FILE os.path.join(DATA_DIR, students.txt) RECORDS_FILE os.path.join(DATA_DIR, records.txt) def load_students(): 从 students.txt 读取学生名单。 with open(STUDENTS_FILE, r, encodingutf-8) as f: return [line.strip() for line in f if line.strip()] def save_record(name, status): 保存一条作业提交记录。 with open(RECORDS_FILE, a, encodingutf-8) as f: f.write(f{name},{status}\n) def random_pick(students, count): 随机抽取 count 名学生。 return random.sample(students, min(count, len(students))) def load_records(): 读取所有记录按学生姓名聚合。 records defaultdict(list) if not os.path.exists(RECORDS_FILE): return records with open(RECORDS_FILE, r, encodingutf-8) as f: for line in f: line line.strip() if not line: continue name, status line.split(,) records[name].append(status) return records def query_student(name, records): 查询某个学生的提交记录。 return records.get(name, []) def main(): students load_students() records load_records() while True: print(\n 课堂点名与作业记录 ) print(1. 随机点名) print(2. 记录作业提交) print(3. 查询学生记录) print(4. 退出) choice input(请输入操作编号).strip() if choice 1: count_text input(请输入抽取人数默认 1).strip() count int(count_text) if count_text else 1 picked random_pick(students, count) print(被抽到的同学, 、.join(picked)) elif choice 2: name input(请输入学生姓名).strip() status input(请输入状态已交/未交).strip() if status not in (已交, 未交): print(状态只能输入已交 或 未交) continue save_record(name, status) print(f已记录{name} - {status}) elif choice 3: name input(请输入学生姓名).strip() history query_student(name, records) if not history: print(f{name} 暂无提交记录。) else: print(f{name} 的历史记录) for i, status in enumerate(history, 1): print(f {i}. {status}) elif choice 4: print(已退出再见) break else: print(无效输入请重新选择。) if __name__ __main__: main()这段代码的结构并不复杂load_students()负责从文本文件读取学生名单返回列表。save_record()负责把作业提交记录追加写入文件。random_pick()使用random.sample随机抽取返回被抽中的学生列表。load_records()读取所有记录并按学生姓名聚合。query_student()查询单个学生的历史记录。main()是命令行交互主循环。这样拆分函数的好处是每个函数职责单一既方便 AI 生成也方便课堂讲解。你还可以让 AI 助手为每个函数补充单元测试。4.3 创建数据文件创建一个students.txt文件每行一个学生姓名# 文件路径data/students.txt 张三 李四 王五 赵六 孙七 周八 吴九 郑十创建完数据文件后先手动运行一次程序确认基本功能正常cd classroom-workflow python src/attendance.py预期会看到菜单提示输入数字可以执行对应功能。由于records.txt文件还不存在程序第一次运行时不会有记录这是正常现象。4.4 编写自动化测试脚本为了让课堂练习更规范可以加入测试环节。这里使用 pytest 编写简单的单元测试。首先安装 pytestpip install pytest然后创建测试文件# 文件路径tests/test_attendance.py import os import tempfile import sys sys.path.append(os.path.join(os.path.dirname(__file__), .., src)) from attendance import load_students, random_pick, save_record, load_records def test_load_students(): with tempfile.TemporaryDirectory() as tmpdir: student_file os.path.join(tmpdir, students.txt) with open(student_file, w, encodingutf-8) as f: f.write(张三\n李四\n王五\n) # 临时修改读取路径 import attendance original_file attendance.STUDENTS_FILE attendance.STUDENTS_FILE student_file students attendance.load_students() attendance.STUDENTS_FILE original_file assert students [张三, 李四, 王五] def test_random_pick(): students [张三, 李四, 王五, 赵六] picked random_pick(students, 2) assert len(picked) 2 assert picked[0] in students assert picked[1] in students这里先不过多解释 pytest 的高级用法。要点是AI 生成的代码必须经过这样的自动化测试再应用到课堂场景。教师在课前可以提前运行测试脚本避免课堂上出现低级错误。运行测试cd classroom-workflow python -m pytest tests/ -v如果测试通过会看到类似输出tests/test_attendance.py::test_load_students PASSED tests/test_attendance.py::test_random_pick PASSED4.5 搭建一条“自动运行 结果留痕”的工作流代码能运行、测试能通过还只是“单机版”工作流。课堂场景还要求“结果可追溯、过程可复盘”所以我们需要一条简单的工作流把刚才的步骤串联起来。这里不使用复杂的工作流引擎而是用一个 Python 脚本作为工作流调度器。它依次执行检查数据文件是否存在。运行测试脚本。运行点名程序并自动输入指令。把运行日志写入output目录。# 文件路径scripts/run_workflow.py import os import subprocess import datetime BASE_DIR os.path.dirname(os.path.dirname(os.path.abspath(__file__))) OUTPUT_DIR os.path.join(BASE_DIR, output) def ensure_output_dir(): os.makedirs(OUTPUT_DIR, exist_okTrue) def run_command(command, description): print(f[工作流] {description} ...) result subprocess.run(command, shellTrue, cwdBASE_DIR, capture_outputTrue, textTrue) print(result.stdout) if result.returncode ! 0: print(f[工作流] 步骤失败{description}) print(result.stderr) return False print(f[工作流] 步骤完成{description}) return True def main(): ensure_output_dir() timestamp datetime.datetime.now().strftime(%Y%m%d_%H%M%S) log_file os.path.join(OUTPUT_DIR, fworkflow_{timestamp}.log) steps [ (python -m pytest tests/ -v, 运行单元测试), (python src/attendance.py, 运行课堂点名程序), ] all_success True logs [] for command, desc in steps: logs.append(f {desc} ) result subprocess.run(command, shellTrue, cwdBASE_DIR, capture_outputTrue, textTrue) logs.append(result.stdout) if result.stderr: logs.append(result.stderr) if result.returncode ! 0: all_success False logs.append(f[工作流] 步骤失败{desc}) break logs.append(f[工作流] 步骤完成{desc}) with open(log_file, w, encodingutf-8) as f: f.write(\n.join(logs)) print(f[工作流] 日志已保存到{log_file}) print(f[工作流] 整体状态{成功 if all_success else 失败}) if __name__ __main__: main()运行工作流脚本cd classroom-workflow python scripts/run_workflow.py这个脚本的逻辑很直观按顺序执行测试和主程序把标准输出和标准错误都收集起来写入带时间戳的日志文件。这样一来学生每次练习都会在output目录下留下一份执行记录教师可以随时查看。需要注意的是自动运行交互式程序时如果程序有input()等待用户输入subprocess方式会卡住。课堂演示时可以先用简单测试参数替代交互输入或者把点名功能做成命令行参数模式。这里的工作流脚本更多演示的是“自动串联步骤 日志留痕”的思路实际使用时可以根据程序特点调整。4.6 运行结果说明运行完整工作流后output目录下会生成类似这样的日志文件 运行单元测试 tests/test_attendance.py::test_load_students PASSED tests/test_attendance.py::test_random_pick PASSED [工作流] 步骤完成运行单元测试 运行课堂点名程序 这里会卡在 input 等待用户输入实际课堂演示建议改为参数模式 [工作流] 步骤失败运行课堂点名程序由此可见交互式程序直接接入自动化工作流会有一个“等待输入”的问题。这是课堂落地时必须处理的实际问题。最直接的解决方案是把主程序扩展成支持命令行参数这样自动化脚本可以传入参数直接跑通。比如给attendance.py增加一个命令行入口# 文件路径scripts/run_attendance_demo.py import sys import os sys.path.append(os.path.join(os.path.dirname(__file__), .., src)) from attendance import load_students, random_pick def main(): students load_students() picked random_pick(students, 3) print(随机点名结果, 、.join(picked)) if __name__ __main__: main()将这个脚本加入工作流步骤steps [ (python -m pytest tests/ -v, 运行单元测试), (python scripts/run_attendance_demo.py, 运行随机点名演示), ]这样工作流就能自动化跑通不再卡在input()。5. 常见问题与排查思路使用 AI 笔记本搭建编程工作流时最常见的几个问题如下。问题现象常见原因解决思路AI 代码补全无响应网络连接问题或 AI 插件未正确登录检查网络重启编辑器查看插件日志本地 Python 环境缺包没有在虚拟环境安装依赖先创建虚拟环境再用pip install -r requirements.txt安装AI 生成的代码运行报错提示词描述不完整缺少边界条件处理补充异常处理手动修改后再运行中文输出乱码Windows 终端默认编码不是 UTF-8在代码开头加# -*- coding: utf-8 -*-或调整终端编码工作流脚本卡住程序里有input()等待用户输入改造为命令行参数模式或使用自动化输入工具本地模型运行慢模型参数量超出硬件能力换更小的模型或改用云端 AI 接口pytest 找不到模块没有把src目录加入 Python 路径使用sys.path.append或配置 pytest 的pythonpath下面重点讲两个高频问题。5.1 AI 生成的代码运行报错这是最普遍的情况。AI 生成的代码经常看起来逻辑完整但一运行就出问题。原因通常是AI 默认了你没有提供的上下文比如假设某个文件存在、某个库已安装。AI 使用了过于高级或过时的 API与本地版本不兼容。AI 没有处理边界条件比如文件为空、数据格式不正确。遇到这种情况不要直接复制报错让 AI 重写而是先手动分析。建议先在代码里加一些print()调试看数据是否按预期流动再决定怎么改。5.2 中文编码问题在 Windows 下运行含有中文的 Python 程序经常遇到UnicodeDecodeError。这是由终端默认编码和文件编码不一致造成的。解决办法有三种Python 文件统一使用 UTF-8 编码保存。在读取文件时明确指定encodingutf-8。在 Windows 终端执行chcp 65001切换到 UTF-8 编码。在本文的示例代码中凡是涉及文件读写的函数都显式传入了encodingutf-8就是为了规避中文乱码问题。5.3 如何避免 AI 越帮越忙AI 编程工具很容易让学生产生“不会思考”的问题。教师可以在工作流中设计“禁止 AI 直接给完整答案”的环节比如第一轮只允许 AI 提供思路和伪代码学生必须自己写出完整代码。学生提交代码后AI 才能做代码评审指出潜在问题。代码评审之后学生要写一份简单的运行说明解释代码的每个函数作用。这样 AI 就从“答案生成器”变成了“学习陪练”。6. 最佳实践与工程建议6.1 把大任务拆解成 AI 能理解的小任务AI 生成代码的质量很大程度上取决于你给它的任务粒度。直接让它“写一个课堂管理系统”生成的代码往往结构混乱但如果拆成“写一个读取学生名单的函数”“写一个随机抽选 n 名学生的函数”生成结果就可靠得多。在课堂工作流中建议把项目拆成一个个小型任务卡每张任务卡对应一个函数或一个小模块。这样既方便 AI 生成也方便学生理解和测试。6.2 代码审查永远不能交给 AI 全权处理AI 生成的代码可能存在逻辑漏洞、安全问题或性能隐患。尤其是涉及文件写入、数据删除、网络请求等操作时AI 很可能生成不安全代码。在课堂环境中要强调一条原则AI 可以生成代码但学生必须逐行理解教师必须抽查代码。这里涉及安全话题——如果是生产环境删除数据、修改权限等操作必须经过人工审查、备份和最小权限控制。课堂练习虽然不会涉及高权限操作但养成“不盲信 AI 代码”的习惯非常重要。6.3 课堂数据与隐私安全课堂点名和作业记录涉及学生姓名等个人信息。在实际教学中应该使用脱敏数据做测试避免真实姓名直接写入公共代码仓库。可以考虑用学号代替姓名或者在示例数据中只放测试用的虚拟姓名。如果将来把课堂工作流扩展到考试场景一定要设置严格的权限管理确保只有教师账号能写入考试结果学生只能查看自己的记录。这里再次强调最小权限原则AI 助手和自动化脚本都不应该拥有超出任务范围的数据访问权限。6.4 工作流的可复用性工作流脚本一旦写好就不要一学期只服务一个练习。可以设计成通用模板数据文件放在data/每次练习换数据即可。主程序放在src/每次练习写新的业务逻辑。测试放在tests/每次练习针对新功能写测试。输出日志统一放在output/方便教师按时间查看。这样学生从第二次练习开始就能把注意力放在业务逻辑上而不是反复配置环境。6.5 从“AI 生成代码”到“AI 解释代码”的教学价值除了生成代码AI 更大的教学价值在于“解释”。当学生看不懂某段代码时可以让 AI 逐行解释当测试报错时可以让 AI 帮忙分析错误栈。这种用法让学生拥有了 24 小时助教而且不涉及抄袭问题。建议在课堂作业中增加一个固定环节“用 AI 解释你提交的代码并记录下 AI 的解释”。这一方面检验学生是否真懂自己提交的代码另一方面也把 AI 使用过程变成了学习过程。6.6 课堂场景的异步化扩展有些课堂采用“异步编程”理念学生在课后利用 AI 笔记本继续完成练习教师通过工作流日志了解学习情况。异步在这里有两层含义时间上的异步学生不同步在教室学习教师通过日志和测试结果进行反馈。技术上的异步AI 助手在后台异步处理代码补全请求不阻塞学生写作和编辑。如果是平台级的工作流实践可以关注 Dify、Coze、n8n 这类工具。它们可以把 AI 节点、代码节点和数据库节点连接起来自动完成“学生提交代码 → 自动运行测试 → AI 给出评分 → 结果通知教师”这样的完整流程。不过这类平台通常需要服务器部署对课堂场景来说可以在项目展示环节引入不作为日常练习的必需配置。7. 总结与学习路线本文从一个具体的课堂场景出发完整拆解了“用华硕弘道 AI 笔记本搭建课堂编程工作流”的方法。核心收获可以概括为四点理解课堂编程的痛点知道工作流如何解决这些问题。掌握 AI 辅助编程的两种形态代码补全和对话式助手。通过一个课堂点名小项目实践了从需求拆解、AI 生成代码、本地运行、自动化测试到日志留痕的完整闭环。学会了常见问题排查思路以及 AI 编程在课堂中的边界和安全意识。下一步可以继续探索的方向把工作流脚本升级为平台级工作流尝试使用 Dify 或 n8n 搭建自动化课堂批改系统。深入学习 Python 测试框架 pytest把课堂练习的测试覆盖度逐步提升。尝试把 Spring AI 这类框架引入后端项目让工作流具备更强大的服务端能力。如果对“异步编程”在 AI 工作流中的应用感兴趣可以阅读 Python asyncio 相关文档了解如何并发调用多个 AI 接口加快批量代码分析速度。最后提醒一句AI 笔记本是工具AI 助手是助手真正让课堂编程变得有价值的是你如何使用它们。第一次尝试时不必追求完美先把一条最小可运行的工作流跑通再逐步迭代。如果你照着本文搭了一条课堂工作流欢迎在留言区分享你的实际体验和遇到的问题。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进