
每到选课季教务系统的访问高峰能把人逼疯。页面卡顿、课程秒没、好不容易挤进去提交结果第二天一查周三下午两门课撞在同一个节次。手动对照培养方案、教室分布、周次循环往往是拿笔在纸上划来划去划到最后反而把自己绕晕。不少同学开始尝试用AI来画一份无冲突课表这里面的门道其实不少选什么工具、怎么喂数据、提示词怎么写、冲突规则怎么定义每一步都有讲究。这篇文章就是我实测之后整理出来的完整方案不绕弯子直接用一套可复制的流程教你把“人肉查重”这件事彻底交给AI。这篇文章适合所有在校大学生尤其是选课规划时不想熬夜翻课表的同学。就算你是第一次用AI工具、完全没接触过提示词工程也能照着下面的模板一步步操作。整套流程的核心就一句话把课表数据整理成结构化表格让AI用明确的规则去计算冲突最后再人工复核一遍。1. 核心思路拆解为什么选课排课非常适合交给AI1.1 选课排课的底层逻辑很多人以为AI排课需要多复杂的算法其实换个角度看选课冲突检测就是一个典型的约束满足问题。你需要满足的条件非常明确课程名称、上课时间、上课周次、节次范围这些字段一旦摆清楚规则就是“同一时间不能出现两门课程”。这种规则驱动型的任务恰恰是大语言模型的舒适区。我测试下来最直观的感受是AI在“理解自然语言”和“按格式输出”这两件事上表现非常稳定。你把课程列表扔给它告诉它“周一1-2节和周三3-4节算不同时间但同一时间不能出现两门课”它能老老实实地把冲突列表列出来速度比你手动翻Excel快得多。但这不意味着AI能完全替代人工。大模型的本质是“根据上下文推测最优回答”它不像程序那样有绝对确定的计算逻辑。所以正确的姿势是让AI做初筛和整理人工做最终确认。这个定位想清楚之后整个操作流程就不会跑偏。1.2 课程数据整理决定了输出质量的上限有句老话叫“垃圾进垃圾出”在AI排课这个场景里体现得淋漓尽致。我见过不少同学直接把教务系统截图丢给AI然后抱怨AI回答得乱七八糟。实际上问题不在AI而是输入数据没有结构化。AI处理一段混杂了课程编号、学分、教师、备注的连续文本时很容易漏掉信息或者理解错位。但如果你先把课程整理成统一格式的表格让AI按照字段去读取出错的概率就会大幅下降。这里的关键字段包括课程名称用于识别和展示课程编号防止同名课程混淆学分不参与冲突检测但关系到选课容量任课教师有些同学会刻意避开某些老师上课周次比如1-8周、1-16周直接影响冲突范围星期几周一至周日节次范围如1-2节、3-4节上课地点跨校区选课时尤其重要我可以很直接地说数据整理这一步占整个选课流程百分之六十的工作量。但这一步做得越细AI后续的表现就越稳。别嫌麻烦这就像你要让外卖小哥准确送达至少得把门牌号写清楚。1.3 冲突规则要自己先定义清楚这里有一个容易被忽略的坑AI本身并不知道你学校的作息时间和周次规则。你以为“周二9-10节”和“周二第10节”是一回事但对AI来说这是两个不同的输入它只会机械地比较字段是否一致。所以在和AI沟通之前你心里得有几条明确的判断规则同一星期、同一节次、上课周次有重叠就判定为冲突跨校区课程即使时间不撞也要考虑通勤时间是否足够单双周课程和周次循环课程需要把具体周次列出来让AI知道哪些周次重叠线上课程不受地点约束但也占时间把这些规则写进提示词里AI的输出才会符合你的真实需求。我见过有同学只写了“帮我检查冲突”结果AI只查了星期和节次完全没管单双周最后出来的结果看似完美实际上一堆周次重叠。这不是AI笨是需求没写清楚。2. 实操准备与提示词设计手把手教你把AI变成排课助理2.1 工具选型不同AI都能干但体验有差别实测下来ChatGPT、Claude、Kimi、豆包、文心一言这些主流大模型产品都能完成排课冲突检测。但基于我的使用体验可以给你一些选型参考如果打算让AI直接分析表格或文档优先选带附件上传功能的工具。比如Claude可以直接读取Excel或CSV省去复制粘贴的麻烦。如果希望AI不仅能排课还能帮你写一个Python校验脚本那就要选带代码解释器或Artifacts能力的工具比如ChatGPT的Code Interpreter或Claude的Artifacts。如果只是快速做一次自然语言的冲突询问那么国内的大模型产品完全够用响应速度快而且中文理解更贴合校园场景。我自己的习惯是用支持附件上传的工具把课程表整理成CSV文件直接喂进去然后配合自然语言追问。这样比粘贴大段文本要省心得多AI对表格数据的解析准确率也更高。2.2 一份可直接复制的完整提示词模板考虑到很多人第一次接触提示词我直接贴一份我调试过多次的模板。核心思路是“分三步走”第一步让AI整理数据第二步让AI逐条检查冲突第三步让AI生成最终课表。第一步提示词你是一名教务排课助理请根据我提供的课程清单把每一门课的信息整理成标准格式并按“星期几”从周一到周五排序。标准格式为课程名称 | 课程编号 | 学分 | 任课教师 | 上课周次 | 星期 | 节次 | 上课地点。注意不要修改我提供的任何原始信息如果发现信息缺失在对应位置标注“待补充”。第二步提示词接在上一步后面现在请你根据以下规则检查上述课程之间是否存在时间冲突规则1两门课上课星期相同、节次范围有重叠、上课周次有重叠视为冲突规则2单双周课程按已标注的周次判断未标注则默认每周上课规则3同一课程编号且同一上课时间的重复条目不视为冲突可能是多个教学班需要保留。请逐条输出有冲突的课程对并说明冲突原因标准格式为课程A星期/节次/周次 vs 课程B星期/节次/周次冲突原因XXX。第三步提示词请在上一步冲突检查的基础上优先保留必修课和专业核心课然后从选修课中做取舍生成一份无冲突的推荐课表。要求每周总学分尽量不低于18学分课程时间尽量分布均匀避免出现连续三天满课或一天之内只有一节课的情况。输出格式为Markdown表格行是星期一至星期五列是节次范围例如1-2节、3-4节、5-6节、7-8节、9-10节单元格内写课程名称和上课地点。这个模板最大的好处是把模糊需求变成了明确指令。AI在每一步都知道自己要干什么而不需要去猜你的意图。2.3 进阶玩法让AI帮你写一个冲突校验脚本如果你对代码不排斥我强烈建议试试进阶玩法——让AI生成一段Python脚本用程序逻辑做二次校验。这算是一个“双重保险”因为大模型的语言理解再强偶尔也有算错的时候但脚本的逻辑是确定的。我让AI生成过一版简化脚本核心逻辑其实不复杂把所有课程解析成“星期节次集合”然后两两比较是否存在交集。代码大致长这样courses [ {name: 高等数学A, weekday: 1, start: 1, end: 2, weeks: 1-16周}, {name: 大学英语, weekday: 3, start: 3, end: 4, weeks: 1-16周}, {name: 体育篮球, weekday: 3, start: 3, end: 4, weeks: 1-16周}, ] def expand_slots(course): return set(range(course[start], course[end] 1)) def has_week_overlap(weeks_a, weeks_b): # 这里根据实际周次字符串解析简化版默认全部重叠 return True conflicts [] for i in range(len(courses)): for j in range(i 1, len(courses)): a, b courses[i], courses[j] if a[weekday] b[weekday] and has_week_overlap(a[weeks], b[weeks]): if expand_slots(a) expand_slots(b): conflicts.append((a[name], b[name])) print(检测到冲突, conflicts if conflicts else 无冲突)不需要你完全看懂你只需要把这段代码复制到任何在线Python运行环境里然后把课程数据替换成自己的就能得到一个无情的“冲突检测机器”。脚本的结果不是用来替代AI而是用来排查AI漏掉的问题两个结果一致你才能放心。3. 完整实战演示从原始课表到无冲突课表全流程3.1 第一步把教务系统的数据整理成标准表格这是我踩过最多坑的一步。教务系统里导出的课程列表常见有两种格式一种是每个教学班一行包含完整字段另一种是混合在同一个页面的文本信息里需要手动提取。遇到第二种情况我建议先复制到Excel再用分列功能处理别手动一个个敲。整理时一个小技巧是把星期统一映射成数字比如周一用1周二用2这样后面给AI或者脚本处理都方便。节次范围统一写成“1-2”“3-4”这种格式不要写成“第一大节”“第二大节”不同学校描述习惯不同统一格式能减少AI理解偏差。下面是我用来做演示的课程清单模拟了一个普通大学生最常见的选课情况课程名称课程编号学分教师上课周次星期节次地点高等数学AMATH1014张老师1-16周11-2教1-101线性代数MATH1023刘老师1-16周13-4教1-102程序设计基础CS1013赵老师1-16周25-6实验楼301大学英语ENGL2013李老师1-16周33-4教2-201体育篮球PE1021王老师1-16周33-4操场中国近代史纲要HIST1012周老师1-8周47-8教3-105计算机导论CS1002吴老师1-8周单周55-6实验楼302创新创业基础INNO2011陈老师9-16周55-6教4-201你注意看这个表格里藏着两个冲突点。大学英语和体育篮球都在周三3-4节这是明显的直接冲突。计算机导论是单周上课创新创业基础是9-16周虽然都是周五5-6节但如果单周落在9、11、13、15周这两门课在数值上也会撞上。这种隐藏冲突靠人眼很难快速识别但AI按规则来算就很轻松。3.2 第二步用两轮对话完成冲突检测我把上面的表格直接粘贴给AI然后依次执行第一段和第二段提示词。以我的实测为例AI的第一轮输出会把课程按周一到周五排好数据字段完整无遗漏。第二轮输出则会明确列出冲突对并给出解释。这里有一点值得注意AI在遇到“单周”“双周”这种中文描述时有时候会偷懒直接当成每周都上。所以我会在第二步末尾追加一句追问“严格按照我标注的单周/双周/周次范围来判断不要默认每周都上课。”这句话可以显著降低误报漏报的概率。针对上面这份课程清单AI给出的冲突检测结果应该是大学英语周三3-4节1-16周 vs 体育篮球周三3-4节1-16周冲突原因时间完全重叠计算机导论周五5-6节1-8周单周 vs 创新创业基础周五5-6节9-16周冲突原因第9、11、13、15周的重叠需要确认单双周第一组冲突没悬念第二组则取决于学校单周的具体定义。如果你所在的学校单双周规则是“开学第1周为单周”那么9周是单周二进制的“单周”和“1-8周单周”不一定在同一周重叠需要再对照校历确认。3.3 第三步人工复核与最终课表生成AI跑完冲突清单之后别急着生成最终课表建议做一轮人工复核。我自己的复核习惯是打印一张空课表拿彩色笔标记各门课。这个做法看着原始但极其有效尤其是对于那些AI容易搞混的单双周细节。复核确认没问题之后再用第三段提示词让AI生成推荐课表。我把大学英语调到周二3-4节把体育保留在周三3-4节创新创业基础和计算机导论保留其中一个调整之后AI给出的最终课表示意如下时间周一周二周三周四周五1-2节高等数学A3-4节线性代数大学英语体育篮球5-6节计算机导论7-8节中国近代史纲要9-10节生成课表时我还发现一个小细节如果你不问AI默认只把星期一到星期五排满周末完全不排。如果你有周末课程记得在提示词里写明“包含周末课程”否则它会自动忽略。4. 避坑指南与常见问题AI排课的五大翻车现场4.1 AI幻觉它真的会编造课程AI幻觉在大模型领域是个绕不开的话题在排课场景里就是AI会“理直气壮”地生成一门你根本没选的课或者把一个课程的上课时间改成了完全不同的时间。我遇到过最夸张的一次AI在没有输入的情况下自动补了一门“马克思主义基本原理”进去还配了周三5-6节的时间。仔细看才发现它是在模仿我提供的课程列表格式但从某个隐藏的推理里“脑补”了一门类似课程。应对方法很简单明确要求AI“只能使用我提供的课程信息不要新增或修改任何字段”然后人工做一次总数核对。数一下AI输出的课程条数和你输入的条数是否一致一旦数量对不上基本可以断定发生过幻觉。4.2 漏课课程越多越容易漏当你的课程清单超过十门时AI漏掉一门课的概率会明显上升。这像人看密密麻麻的表格会眼花一样大模型对超长上下文的注意力也会分散。针对这个问题我推荐的做法是“分批处理”。把课程按专业必修课、公共选修课、通识课分成三批每批做一次冲突检查最后再把所有结果合并。虽然多了几步操作但每一步的准确率都会明显提升。如果你把所有课程一次性塞进去得到的结果虽然快但你可能需要花更长时间去检查它漏了什么。4.3 死板处理单双周信息大多数通用大模型对“单周”“双周”这种周期性描述并不敏感。你把“单周”写进去它能识别出来但一旦课程数量增多它往往会忘记前文设定又默认成每周上课。我的解决方案是在提示词里把所有周次信息数值化。比如“计算机导论1-8周单周”改成“计算机导论第1、3、5、7周上课”把单双周转换成具体周次列表AI理解起来就不费劲了。这一步虽然需要你自己花点时间换算但比事后排查AI的误判要节省太多时间。4.4 输出格式不统一如果你的提示词里没有对输出格式做严格限制AI给你的内容可能是多段文字夹杂着各种冒号、箭头和缩进。等你想要复制到表格里时格式已经乱成一团。解决办法是在提示词里指定Markdown表格或CSV格式。以我的经验“输出为Markdown表格列名固定为课程名称、时间、地点”这句话比任何“请整理清楚”都管用。大模型对格式指令的遵循能力比对内容语义的把握更可靠。4.5 高峰期页面卡顿误把AI结果当最终答案还有个现实问题很多高校教务系统在选课高峰期会卡死页面加载不出选课结果。有些同学会着急用AI排出的课表去估算学分然后在系统恢复后忘了重新核对实际选课结果。这里必须强调AI排课只是决策辅助你最终的课表一定要以教务系统里的选课记录为准。AI的职责是帮你做规划、查冲突而系统里显示的教学班信息才是你真正需要去上课的班级。每次选课结束后抽五分钟把教务系统里的最终课表导出来再和AI生成的推荐课表做一次比对这个习惯能避免后面整学期的麻烦。5. 进阶玩法从AI排课延伸到时间管理5.1 用同一套方法做一周时间管理掌握了AI排课的方法论之后你会发现自己简直打开了一个新世界。因为“约束满足”这个模型不只适用于课表还适用于几乎所有的时间规划场景。比如你想把课程学习、社团例会、兼职工作和运动健身都统筹安排好就可以把每一项活动都当成一门“课程”填入时间、地点和优先级然后让AI帮你生成一份“全周时间规划表”。我在学期中就把周一晚上的社团例会、周三晚上的篮球训练、周五下午的兼职都交给AI统一规划输出的结果比我手动调配快很多而且AI会主动避开时间冲突不用我提醒。5.2 让AI基于推荐课表输出学习计划更有意思的玩法是在生成无冲突课表之后把课表作为上下文告诉AI你的目标比如“这学期要准备四级考试”或“期末要考专业前20%”AI就能基于课表的空余时段生成一份学习计划。我用这个功能做过一次实验效果出奇地好。AI会把自己的推荐课表、没选课的空闲时间段、甚至晚自习时间都利用起来把复习任务拆成一份带有明确时间和内容安排的清单而且它会优先把难度高的科目安排在精力充沛的上午时段。这套流程已经超出了选课本身变成了个人效率助手。5.3 对AI结果保持合理预期进阶玩法虽然爽但还是那句话AI的能力边界在于它没有真正的判断力。它能帮你发现时间冲突但是它不会知道你在周三下午连续上三节课会不会觉得累它能帮你排出一份周一到周五分布均匀的课表但它不知道你周四有社团换届大会需要提前离校。所以在使用AI做任何时间规划时都需要在提示词里加入“我的实际限制条件”。比如“周四晚上不排课”“希望周三下午留出运动时间”这些偏好越早告诉AI输出的结果越接近你真正想要的。不要等到AI输出了完整方案再让它重做那样既浪费token又打击使用热情。写在最后的一点小建议我用AI排课表这个流程走了快两学期最大的感受是工具本身并不神奇真正的效率提升来自于把问题定义清楚。你会发现当你能把课程数据整理成结构化的表格把冲突规则一条条写明白把输出格式提前跟AI约定好AI的可靠性会直线上升。反过来如果输入模糊、规则含糊那么AI给出的结果就是在浪费时间。还有一个非常实用的小技巧想分享给你每次让AI处理完数据之后记得把对话记录保存成书签或导出成文本。因为选课期间你可能会反复调整课程这时候直接在新的对话里重新喂一遍课表太麻烦了不如把上一轮已经整理干净的结构化课程清单复制出来改几个条目再发给AI。省下的时间虽然不多但在选课截止前那种紧张氛围里每一分钟都珍贵。