去年我在某在线教育平台做技术顾问接了一个让人头疼的需求让两个都想学数据分析的学员不要拿到一模一样的课程列表。第一个学员是在财务岗待了两年的Excel老手第二个是刚从前端转行的开发者两个人的时间安排、基础底子、学习习惯完全不一样。课程运营团队当时给的方案很直接——人工排课但一个课程顾问每天最多服务三四十个学员排一条像样的学习路径至少要花四十分钟。这个矛盾让我开始认真琢磨大规模语言模型在个性化学习路径生成中的应用折腾了三个多月踩了不少坑也跑通了一条可复制的路子。这篇文章把我从架构设计到线上踩坑的完整过程写出来适合正在做在线教育产品、学习平台或者想用大模型改造传统教学流程的工程师和产品经理参考哪怕你之前没有系统做过推荐系统也能看懂里面的核心决策逻辑。1. 传统个性化学习路径的三大死结为什么过去十年都没做好先说清楚一件事个性化学习路径不是新概念市面上几乎所有学习平台都声称自己在做。但你真去拆开看绝大多数还是给所有用户推同一个课程序列顶多在首页展示区做点排序差异。这背后不是产品经理偷懒而是传统的技术路线有几个绕不过去的死结。1.1 规则引擎知识图谱很美落地很痛最早做个性化路径的主流方案是规则引擎加知识图谱。团队请课程专家把某个领域的所有知识点拆成节点标注好前置关系——学线性代数之前得有基础代数学数据结构之前得先会一门编程语言。然后系统根据用户的当前水平沿着图谱从目标节点倒推找出一条最短可行路径。问题在于维护成本。一个中等规模的学科方向比如机器学习入门专家能拆出几百个知识点节点和上千条前置关系。但课程内容在持续更新两个月前还是前沿的技术两个月后可能已经有更简单的教学法可以替代。知识图谱一旦跟不上内容迭代排出来的路径就是错的而人工维护图谱的节奏永远追不上业务变化。我们当时找课程专家维护了一份Python学习路径的知识图谱光是把Django 3.x迁移这一条更新到FastAPI 2.x就花了两周中间还因为节点关系冲突返工了三次。1.2 协同过滤推荐了课程却没推荐路径后来业内转向协同过滤就是电商推荐那套逻辑——跟你水平差不多、目标也差不多的人学过什么就把那些课程推给你。这个方案解决了冷启动和内容更新的一部分问题但它本质上是在推荐课程不是在生成路径。推荐系统输出的是一堆离散的课程卡片用户拿到的是一份购物车不是一张地图。学员知道自己该学Python但不知道先学语法还是先学爬虫不知道哪门课是前置必学哪门课可以跳过。课程间的顺序关系、依赖关系、跳过策略协同过滤完全表达不出来。我们内部做过用户访谈有位学员反馈说平台推荐给我的那三门课我都挺喜欢但我先上了最难的一门差点被劝退。1.3 静态路径排完就不再更新就算前面两个问题都解决了还有一个隐性困境大部分系统生成的学习路径是静态的。今天根据你当前水平排了一个月的课表但两周后你因为工作变化突然有了大块时间或者学了一门课之后发现某部分基础特别薄弱原先的课表就应该动态调整。传统方案的调整成本太高规则引擎要改图谱节点协同过滤要重算相似度所以干脆没人做动态更新最后用户拿到的时间表跟他的真实状态越走越偏。这三个死结算下来核心卡点其实是三个关键词内容变化快、路径需要结构化、状态需要动态感知。传统方案在这三个维度上各有短板而大规模语言模型恰好在这三个维度上都有明显的补位能力这也是我决定用大模型来做这件事的根本原因。2. 大模型生成学习路径的系统架构它不是来当搜索引擎的动手之前我和团队内部吵过好几轮。有人觉得大模型就是个更聪明的搜索框——把用户信息和目标丢进去让它列一个课程清单有人觉得应该让大模型完全自由发挥它能生成出比人工更灵活的安排。这两个方向我都不太认同。前者等于拿大模型干规则引擎的活后者无法保证路径的可靠性。2.1 定位问题让模型当课程设计师而不是内容搬运工我的核心判断是大模型在这套系统里的角色不是知识库也不是搜索器而是一个课程设计师。它不需要记住所有课程的具体内容但需要理解教学设计的逻辑——一个目标如何拆解成若干阶段每阶段需要哪些前置能力哪些内容可以并行学、哪些必须串行学学员遇到困难时路径该怎么岔开。这个定位直接决定了后面所有设计。既然模型是设计师它就必须具备两个输入一份教学大纲级别的领域知识和一个学员档案。领域知识告诉它这个领域有哪些学习阶段和里程碑学员档案告诉它这个人的起点在哪里。两个信息交汇模型才能输出一条既符合教学规律、又贴合个人情况的路径。拿数据分析举例子如果只问模型怎么学数据分析它大概率给你列一堆名词统计学、Python、SQL、可视化工具、机器学习……这堆名词单独看都对但凑不成一条路径。但如果我告诉它学员有两年财务经验Excel高级水平每天只有一小时学习时间目标是三个月后能做经营分析报表模型就有条件像一个真正的课程顾问那样设计路径了。2.2 四层架构画像层、知识层、生成层、自适应层整套系统我最后拆成了四个层次画像层负责收集和结构化用户信息包括目标描述、已有基础、可用时间、学习偏好、历史学习行为。这一层输出的是一个标准化的JSON画像不是一段自由文本方便后续直接传给生成层。知识层负责提供领域约束。这一层不追求完整的知识图谱而是维护每个学科方向的里程碑清单和前置依赖表。里程碑是每个阶段结束时学员应该掌握的能力前置依赖是里程碑之间的先后关系。生成层这是大模型真正干活的地方。它接收画像层和知识层的输出通过精心设计的提示词生成一条结构化的学习路径。路径由若干个阶段组成每个阶段有目标、建议周期、学习内容和考核方式。自适应层负责在路径执行过程中做动态调整。学员完成某个阶段的学习后系统根据他的测试结果和行为数据决定是进入下一阶段、回头补基础还是调整学习节奏。这套架构的关键好处是每一层都可以独立替换。知识层的里程碑列表可以由课程专家持续维护更新生成层的模型可以随技术迭代换更强的底座自适应层的规则也可以逐步从人工规则升级为模型判断。我们后期把自适应层的一部分逻辑从纯规则改成了小模型打分架构本身不需要大幅改动。3. 工程实现提示词约束、知识图谱校验与流式输出架构想清楚了真正的硬仗在实现层面。这一节我把工程上最核心的几块写详细一点包括提示词设计、结构化输出、知识约束和内容关联。每一步都有我踩过的坑不把这些坑跳过去系统上线就是个空壳。3.1 提示词设计把课程设计方法论写进系统提示词提示词是整个生成层的灵魂。我见过很多团队直接写一句帮我生成一条学习路径然后抱怨大模型输出太虚。问题不在于模型能力在于你根本没说清楚路径长什么样。我们的系统提示词固定包含四大部分角色定义、输入变量说明、输出格式约束、质量标准。其中最容易被忽略的是质量标准它告诉模型什么样的路径才算合格。我当时在质量标准里明确写了三条路径中的每个节点必须有明确的可验证学习成果节点顺序必须符合前置依赖逻辑每阶段的学习量需要匹配用户可用时间。给你看一个简化版提示词模板的核心结构你是一位资深的课程设计专家。你的任务是根据学员画像和领域知识里程碑设计一条个性化学习路径。 学员画像 {user_profile_json} 领域里程碑与前置依赖 {domain_requirements} 路径设计要求 1. 目标拆解把最终目标拆成3-8个阶段每阶段有清晰的学习成果 2. 前置正确前一阶段的学习成果必须能支撑后一阶段的学习 3. 时间匹配每阶段建议学习时长需符合学员每日可用时间 4. 个人适配考虑学员已有基础可跳过部分节点但必须在reason字段说明原因 输出严格遵循如下JSON结构 {output_schema}有一个细节我特别想提醒千万不要在提示词里让模型自由发挥阶段数量。我一开始没限制阶段数量模型有时候给你拆12个阶段有时候只拆2个完全不可控。限制在3-8个之后输出的结构稳定性明显提升后续下游系统解析的成功率高了非常多。3.2 结构化输出强制模型返回可解析的路径JSON大模型生成路径如果只输出一段自然语言文本后续系统根本没法自动处理。你必须让模型输出结构化数据。我们用的方式是定义一个严格的JSON Schema通过提示词和API参数双重约束。路径JSON的核心结构长这样{ path_id: uuid, target: 学会用Python完成数据分析全流程, estimated_total_hours: 120, stages: [ { stage_id: 1, name: Python基础语法与数据处理, prerequisites: [熟悉Excel数据处理], learning_outcome: 能够用Pandas完成数据清洗和基础统计, suggested_weeks: 3, weekly_hours: 7, materials: [ {type: course, id: course_12345, title: Python数据分析实战入门}, {type: project, id: proj_001, title: 清洗一份销售明细数据} ], assessment: {type: quiz, pass_threshold: 80}, skip_reason: 学员已有Excel数据处理经验Python基础部分重点放在Pandas } ], learning_pace: medium, adaptation_policy: 每阶段完成后重新评估 }你注意看每个阶段里都有prerequisites和skip_reason字段这俩字段是给下游的自适应层用的。学员完成一个阶段后系统可以根据完成情况和路径预先记录的adaptation_policy决定下一步动作。这个结构化设计从一开始就要想清楚不然后面接评测系统和用户进度追踪会非常痛苦。3.3 知识图谱校验用前置关系兜底防幻觉大模型生成内容最大的风险是幻觉——它可能把先学SQL再学Python这种顺序完全搞反。我在前面说过不指望大模型自己记住完整知识图谱但我们需要给它一张约束网同时要在生成后做一次校验。我们的做法是维护一张很轻量的前置依赖表只记录关键里程碑之间的硬性先后关系。比如线代是机器学习的强前置概率统计是深度学习的强前置这类绝对不能搞错的边。生成层输出的路径JSON先不直接入库而是过一个校验器如果路径中存在某个阶段其前置里程碑在依赖表里排在用户目标所要求的位置之后校验器就会打回重生成或者触发一个修正流程让模型基于校验反馈重新调整阶段顺序。这套提示词约束 输出后校验的双保险机制把我们系统里的路径顺序错误率从初期的12%降到了不足1%。双保险的逻辑是大模型负责灵活性规则负责底线两者不是替代关系而是各管一段。3.4 内容关联怎么把学习资料挂到路径节点上生成一条路径只是骨架骨架上得有肉——具体学什么、看什么材料、做什么练习。这里有个务实的选择不要让大模型凭空推荐课程和资料它会编造出不存在的课程名称。我们用的是检索增强生成RAG的思路。在每个阶段确定之后系统拿阶段的learning_outcome、materials里的关键词去平台的课程库里做语义检索召回真实存在的课程、文档和项目再让模型从中筛选匹配度最高的3-5个资源挂到节点上。这样整个路径里的每个学习资源都是平台库里真实可学的不会出现用户点进去发现课程不存在的尴尬。4. 评测闭环好路径的标准不是看着合理做过推荐系统的朋友都知道离线效果和线上表现经常是两码事。学习路径生成比普通推荐更难评测因为用户走完一条路径要几周甚至几个月你不能等那么久才判断路径好不好。我们设计了一套分层的评测机制从离线快速检查、到专家评审、再到线上行为验证三个维度互相补充。4.1 三维度评测体系前置正确性、目标覆盖度、个性化差异度离线评测阶段我们定了三个可量化的维度前置正确性路径里所有课程节点是否满足知识层的前置依赖约束。这个可以用规则校验器自动打分满分100低于90的路径直接不进入下一步。目标覆盖度路径是否覆盖了用户目标中提到的所有关键能力。这个维度我们让生成模型自己对照用户目标做自评同时抽检让课程专家复核。自评的结果整体偏乐观但作为快速漏斗的第一层筛选够用。个性化差异度同一目标下不同画像的用户生成的路径是否真的不同。这个指标最初被我们忽略了后来发现如果所有用户生成的路径都趋同个性化就是空话。我们做了一个简单的向量化比较把两条路径的课程序号、阶段排序转成序列向量算编辑距离低于阈值的路径会在测试集里被标记出来检查。这三个维度里个性化差异度是我最想强调的。很多团队做完上面两个维度就觉得够了但用户感知中最强烈的恰恰是你跟隔壁同学学的是不一样的东西。如果系统只是把所有学员归到五六个模板里那你做的就不是个性化是精细化分班。4.2 用大模型当评委LLM-as-judge的实操细节传统的自动评测很难覆盖路径质量这种开放性问题我们采用了让大模型当评委的做法但有几个操作细节必须处理好。第一评委模型的提示词必须包含评分量表的具体行为描述不能只写好中差。比如前置逻辑分5分要写成5分路径中每个阶段的前置要求都能在前一阶段的学习成果中找到明确支撑3分大部分阶段符合前置要求但有一处明显跳跃。第二必须有多轮抽检机制。我们每批次随机抽10%的生成结果让评委模型打一次分再让一个不同的评委模型打一次分两份分数差异超过阈值的结果进入人工复核。这个机制是为了发现模型评委自身的偏见和波动。第三人工复核的样本要反向抽样。不要只抽高分结果要抽那些评委模型打分差异最大、争议最强的样本。因为高分段样本大家都能达成共识真正的信息量在灰色地带。4.3 线上验证完课率才是最终裁判离线评测跑通之后我们做了一轮为期六周的小流量A/B测试。实验组用大模型生成的个性化路径对照组用原有的静态课程推荐。结果让我重新审视了评测指标。实验组的完课率比对照组高了18%这个数字很漂亮但如果你只看阶段之间的跳转率实验组的跳转率反而降低了——用户更愿意按部就班学完当前阶段再往下走而不是急躁地跳来跳去。这说明什么说明之前的高跳转率不是一个好的用户行为信号它是用户对课程安排不满意的逃离表现。所以我的建议是评测指标要分层看完课率、任务完成度是北极星指标跳转率、放弃率是辅助诊断指标两者要放在一起解读。单看任何一方都可能得出错误结论。5. 上线后踩过的坑幻觉、冷启动与用户信任系统上线三个月我们把能踩的坑基本都踩了一遍。这一节专门讲讲那些你实验室里碰不到、生产环境一定躲不掉的坑以及我们最终的兜底方案。5.1 幻觉问题模型编造出不存在的课程前文提到用RAG方案把真实课程挂到节点上但从实践来看RAG不能完全消灭幻觉。有一次用户生成的路径里出现了一门叫金融科技数据分析进阶的课程搜遍整个课程库都找不到对得上号的。后来查日志发现生成层的模型在RAG召回的结果里没有找到足够匹配的课程于是聪明地自己造了一个名字填了进去。这个问题的根因在于模型被要求必须给每个阶段挂资源但召回结果库存不足时它宁可伪造也不愿意留空。修法有两条第一在提示词里明确如果召回资料不足以匹配阶段目标materials数组可以为空第二在生成后的校验器里加一条规则materials里的每个id必须能在课程库中查到查不到的整条路径打回重生成。两条都做完之后伪造课程的问题彻底消失。5.2 冷启动新用户只有三个标签怎么生成路径新用户注册进来可能只填了目标、每日可用时间和当前职业历史学习行为完全是空的。这时候画像只有三个维度生成的路径个性化程度会大打折扣。一开始我们强行给这批用户生成高度个性化的路径结果他们学起来最吃力。后来我们干脆调整策略画像信息不足时先生成一条稳妥型路径。所谓稳妥型就是严格遵循知识层前置关系、学习节奏偏慢、每个阶段都有明确考核的保守路径。等用户跑完一两个阶段积累了真实行为数据再在自适应层触发一次路径重排。这个策略听起来比高大上的个性化要朴素但实际数据表明冷启动用户的流失率降低了接近三成。在数据不足时稳定比聪明更重要。5.3 用户信任路径生成得越完美用户越不敢跟这条是让我最意外的。我们最初的产品设计把生成的路径包装得非常完整周计划、每日任务、每节课的预期时长看上去就像一份精密的工程蓝图。结果真实用户反馈却是太吓人了我感觉自己像在被机器安排有用户甚至会故意跳过系统推荐的学习顺序。复盘之后我们做了三处调整。第一路径的呈现方式从完整课表改成短期窗口——只展示未来一到两周的安排后面的阶段用概览卡片呈现。第二每个阶段标注了为什么要在这个阶段学这门课把教学设计的逻辑暴露给用户。第三路径允许手动调整用户可以拖拽交换同一阶段内的并行节点系统会在下次生成时学习他的偏好。三处调整上线后用户对路径的主动跟随率明显上升。这件事给我的教训很实在个性化生成的不是一份计划表而是对话的开始。系统要留出用户参与的空间路径太完美反而是反人性的。6. 一些可以少走弯路的建议最后分享几条我在这套系统从零到一的过程中沉淀下来的经验未必适合所有场景但如果你正打算做类似的事情大概率用得上。第一不要把大模型当成唯一的智能。最稳的架构是大模型负责生成和推演、规则负责校验兜底、人在关键节点做评估。大模型的强项是灵活性和语言理解弱项是稳定性和可解释性这三者恰好能被规则引擎和人工介入补上。第二路径生成系统一定要从第一天就设计评测闭环。我们早期只顾着把生成的路径做得漂亮忽略了离线评测体系导致上线后找问题全靠用户投诉非常被动。哪怕先做一个粗颗粒度的离线打分器也比没有强。第三个性化不要追求让每个用户的路径看起来完全不一样。真正的个性化是在该一样的节点一致、在该不同的地方不同——前置依赖不能乱但学习节奏、资源类型、阶段颗粒度可以因人而异。完全自由的生成结果最后反而会让所有用户都一样乱。第四也是最实际的一条别让RAG和生成模型各干各的。内容关联这件事一定要让检索结果回流到生成模型的上下文里让模型基于真实的课程库信息做决策而不是让模型先凭空生成再事后拼接。这一步的工程复杂度高一些但对最终输出质量的提升极其明显。这套系统做了半年多算不上完美但至少证明了一件事大规模语言模型并不是取代了课程设计师而是把课程设计的能力放大到了每个学员身上。我现在的体会是做这类项目别急着追大模型的上限先把规则、数据、评测这些底座打好模型的聪明才有地方使。后续如果再把知识层从人工维护升级成半自动抽取把自适应层完全交给模型实时决策这套架构的天花板还能再高不少。如果你也在做类似的教育产品欢迎顺着这条思路去试尤其建议从小学科、小范围开始验证先跑通闭环再谈规模。