学伴(KnowAI)项目开发实战:从零构建一个AI驱动的在线教育平台
学伴KnowAI项目开发实战从零构建一个AI驱动的在线教育平台前言我为什么要做这个项目作为一名开发者我一直对“AI如何改变教育”这个话题感兴趣。市面上不缺课程——B站有海量免费视频、慕课有几千门名校课程。但有两个问题始终没解决用户看完视频不知道学没学会。没有反馈没有验证。用户不知道下一步学什么。碎片化学习东一榔头西一棒子。所以我想做一个平台让AI像学伴一样全程陪伴学习、验证效果、规划路径。这就是“学伴KnowAI”的由来。学伴的核心价值不是“提供内容”而是“提供学会的保障”。经过2个星期的开发项目已经基本完成部署在阿里云ECS上。这篇文章将完整记录开发过程、技术选型、踩坑经验和最终成果。当前进度项目已完整开发完成目前正在部署上线阶段服务器已购买待完成Docker部署和域名配置即可公网访问。一、项目全景学伴是什么1.1 一句话定位学伴是一个AI驱动的个性化学习平台——让每个学习者拥有专属的AI学伴。1.2 解决的三个核心问题问题学伴的解决方案学而不练AI智能出题学完章节自动生成测验学而不伴24小时AI对话助手随时解答疑问学而不精基于学习历史的个性化课程推荐1.3 用户角色学员购买课程、看视频、做测验、问AI、记笔记讲师发布课程、管理章节、上传知识库、看销售数据管理员审核课程、管理用户、配置秒杀1.4 一个完整的学习流程注册 → 浏览课程 → 加入购物车 → 下单支付 → 学习课程 → AI出题验证 → 获得反馈 → 推荐下一门课二、技术栈全览这个项目最大的特点就是全栈——从最前端的Vue界面到最底层的向量数据库都是我自己写的。2.1 技术栈表格层级技术用途前端框架Vue 3.4 TypeScript Vite响应式UIUI组件Element Plus Vant ECharts后台管理移动端图表后端框架FastAPI SQLAlchemy 2.0(异步)RESTful API ORM主数据库MySQL 8.0用户、课程、订单、库存文档数据库MongoDB 6聊天记录、学习笔记缓存Redis 7会话、购物车、秒杀、首页缓存搜索引擎Elasticsearch 8.10课程全文搜索消息队列RabbitMQ秒杀订单异步处理AI框架LangChain LangGraph ChromaDBRAG知识库、多Agent工作流AI模型DeepSeek API SiliconFlow BGE大语言模型 向量嵌入容器化Docker Compose一键部署所有服务2.2 为什么这样选型为什么用FastAPI而不是Django原生支持异步在调用AI API、操作Redis/ES时性能更好自动生成OpenAPI文档前后端联调省时间类型提示友好Pydantic校验让代码更健壮为什么用LangGraph而不是直接调LLM多Agent协作一个Agent负责理解用户意图一个负责检索知识库一个负责生成回答状态管理LangGraph的状态图让每个Agent能看到之前的处理结果可观测性每一步都有记录方便调试为什么用MongoDB存聊天记录对话数据是非结构化的MongoDB的文档模型很自然支持嵌套结构一条聊天记录包含多轮对话TTL索引可以自动清理过期数据三、架构设计3.1 系统架构图3.2 数据流向用户请求→ Nginx → FastAPI读操作→ 优先Redis缓存 → 缓存未命中则查MySQL/ES写操作→ MySQL → 异步同步到ES/Redis/MongoDBAI请求→ FastAPI → LangGraph工作流 → 检索ChromaDB → 调用DeepSeek → 返回结果秒杀请求→ Redis预扣库存 → RabbitMQ排队 → 异步Worker下单四、核心功能实现4.1 用户认证JWT Redis黑名单认证系统的核心逻辑用户登录成功后后端生成JWT并存入Rediskey:token:{user_id}:{jti}每次请求验证JWT签名 检查Redis中是否存在该token用户退出时从Redis删除该token实现黑名单注销# auth.py 核心逻辑asyncdefget_current_user(token:strDepends(oauth2_scheme),db:AsyncSessionDepends(get_db),redis:RedisDepends(get_redis),)-User:token_datadecode_token(token)# 检查Redis黑名单ifawaitredis.exists(ftoken:{token_data.user_id}:{token_data.jti})0:raiseHTTPException(status_code401,detailToken已失效)# 查数据库获取用户userawaitdb.get(User,token_data.user_id)returnuser设计要点Token本身不存数据库减少DB查询注销只需删除Redis keyO(1)复杂度Token有效期7天可配置4.2 秒杀系统防止超卖的完整方案秒杀是电商的经典场景也是这个项目最复杂的功能之一。我设计了一套“四层防护”方案第一层限流令牌桶每分钟只允许3000个请求进入超过的直接返回“活动太火爆”第二层Redis预扣库存活动开始前5分钟将库存加载到Redis (String类型) 抢购时执行原子DECR操作库存为0则直接返回“已抢光”第三层异步排队RabbitMQ抢到名额的用户ID写入RabbitMQ队列立即返回“排队中” 不阻塞用户提升体验第四层异步Worker下单消费者从队列读取消息真正扣减MySQL库存、生成订单 保证最终一致性恢复机制如果订单超时未支付或被取消会自动恢复Redis库存和MySQL库存让名额回到池中。代码结构# seckill.py - 抢购入口router.post(/{activity_id})asyncdefsubmit_seckill(activity_id:int,current_user:User):# 1. 限流检查ifnotawaitallow_token_bucket(redis,key,3000,3000):raiseHTTPException(429,请求过于频繁)# 2. Redis原子扣库存stockawaitredis.decr(fseckill:stock:{activity_id})ifstock0:raiseHTTPException(400,已抢光)# 3. 写入队列queue_iduuid.uuid4().hexawaitredis.rpush(seckill:queue,json.dumps({queue_id:queue_id,activity_id:activity_id,user_id:current_user.id}))return{queue_id:queue_id,status:queued}4.3 AI学伴LangGraph RAG这是项目最核心、最亮眼的功能。下面详细展开。4.3.1 知识库构建讲师上传课件PDF/DOCX/TXT后系统自动构建向量知识库文档加载使用LangChain的文档加载器读取各类格式文本分块按500 token分块重叠50 token保持语义完整性向量化使用BGE嵌入模型将文本转为向量存储存入ChromaDB持久化# 核心流程defbuild_knowledge_base(course_id:int,file_paths:list[str]):documents[]forpathinfile_paths:docsload_document(path)# 支持PDF/DOCX/TXTdocuments.extend(docs)text_splitterRecursiveCharacterTextSplitter(chunk_size500,chunk_overlap50)chunkstext_splitter.split_documents(documents)vectorstoreChroma.from_documents(documentschunks,embeddingembeddings,persist_directoryf./chroma_db/course_{course_id})4.3.2 智能出题工作流学员学完章节后点击“生成练习题”触发LangGraph工作流用户请求 → 意图解析 → 检索知识库 → 生成题目 → 校验题目 → 返回用LangGraph实现的多Agent协作# 状态定义classWorkflowState(TypedDict):messages:list[BaseMessage]retrieved_docs:list[Document]generated_questions:list[dict]validation_result:dict# 构建工作流图workflowStateGraph(WorkflowState)workflow.add_node(retrieve,retrieve_relevant_docs)workflow.add_node(generate,generate_questions)workflow.add_node(validate,validate_questions)workflow.add_edge(retrieve,generate)workflow.add_edge(generate,validate)效果用户点击出题后5-10秒内得到5道选择题每题包含4个选项和正确答案。前端渲染后学员可以直接作答系统自动评分。4.3.3 智能推荐工作流用户输入学习目标如“我想成为一名数据科学家需要学Python和机器学习”系统通过多Agent工作流分析意图解析Agent提取关键词Python、机器学习、数据科学家课程检索Agent从MySQL搜索匹配课程 从知识库检索相关内容推荐排序Agent综合课程销量、评分、匹配度排序生成推荐理由输出示例根据你的目标“成为数据科学家”推荐以下课程Python基础入门匹配度92%- 数据科学必备语言机器学习实战匹配度88%- 核心技能数据分析与可视化匹配度85%- 日常工作必备4.3.4 AI对话助手用户在任何页面都可以打开AI助手对话框用自然语言提问。系统按以下顺序处理知识库检索从课程知识库中搜索相关内容RAG联网搜索如果知识库找不到使用DuckDuckGo联网搜索大模型兜底以上都没有用DeepSeek生成回答特点是回答会标注来源知识库/联网/大模型让用户知道信息的可靠性。用户真实使用场景用户在学习《Python基础》时问AI“列表和元组有什么区别”AI从课程知识库中找到对应内容回答“根据课程第二章第3节的讲解列表是可变的可变序列元组是不可变的不可变序列…”4.4 秒杀崩溃恢复机制这是系统稳定性的关键设计。线上环境可能因各种原因导致秒杀处理失败需要一套保障机制问题场景Worker进程崩溃正在处理的秒杀消息丢失网络抖动导致消息处理超时数据库连接断开导致事务回滚解决方案每个秒杀消息处理时设置Redis锁TTL 30秒独立的Recovery Worker每60秒扫描一次检查是否有消息被遗忘如果发现消息的锁已过期自动将其重新入队# 崩溃恢复逻辑asyncdefrecovery_worker():whileTrue:awaitasyncio.sleep(60)forworker_idinrange(WORKER_COUNT):keyfseckill:processing:{worker_id}itemsawaitredis.lrange(key,0,-1)forrawinitems:payloadjson.loads(raw)lock_keyfseckill:lock:{payload[queue_id]}ifnotawaitredis.exists(lock_key):# 锁已过期重新入队awaitredis.rpush(seckill:queue,raw)awaitredis.lrem(key,1,raw)print(f恢复: 重新入队{payload[queue_id]})4.5 课程搜索Elasticsearch使用ES实现课程的全文检索索引设计包含titletext、descriptiontext、categorykeyword、price_minfloat、salesinteger中文分词使用IK分词器搜索更精准同步机制课程数据变更时通过RabbitMQ异步同步到ES支持的搜索方式关键词搜索支持分词分类筛选价格区间筛选排序销量/价格/最新前端体验输入关键词 → 1秒内返回匹配课程列表高亮显示匹配片段。4.6 订单超时自动取消用户下单后30分钟未支付系统自动取消并恢复库存实现方式后台独立协程每30秒扫描一次数据库查找statuspending且expire_time now()的订单逐个取消并恢复库存asyncdefscan_expired_orders():whileTrue:awaitasyncio.sleep(30)asyncwithAsyncSessionLocal()asdb:# 查找过期订单resultawaitdb.execute(select(Order).where(Order.statusOrderStatus.pending,Order.expire_timedatetime.now()))fororderinresult.scalars():# 恢复库存、更新状态awaitcancel_order(db,order)awaitdb.commit()五、踩坑与解决5.1 Dify迁移到LangGraph初期使用Dify工作流但遇到定制化困难问题Dify的节点编排灵活但无法精细控制每一步的输入输出格式解决迁移到LangGraph LangChain完全代码可控可以自定义每个Agent的逻辑5.2 Windows上调用SSL证书错误开发环境是Windows调用Dify API时遇到SSL证书验证失败问题httpx在Windows上对Cloudflare的SSL验证失败解决检测到Windows平台时自动降级为curl命令调用dify_client.py中实现了fallback5.3 DeepSeek API连接超时偶尔出现连接超时问题DeepSeek API不稳定解决实现重试机制最多3次并配置超时时间30秒降级如果DeepSeek完全不可用返回模拟数据保证功能不中断六、部署实战正在进行中6.1 为什么选择阿里云国内访问速度快学生优惠一年100多块支持Docker部署6.2 部署架构使用Docker Compose编排7个服务服务镜像端口MySQLmysql:8.03306MongoDBmongo:627017Redisredis:7-alpine6379Elasticsearchelasticsearch:8.109200RabbitMQrabbitmq:3-management5672/15672Backend自定义FastAPI镜像8000FrontendNginx托管Vue静态文件80/4436.3 部署步骤1. 购买阿里云ECS2核4G以上 2. 安装Docker和Docker Compose 3. 将项目代码推送到服务器 4. 配置.env环境变量 5. 执行 docker-compose up -d 6. 配置Nginx反向代理和SSL证书6.4 一键部署脚本# 项目根目录下执行docker-composeup-d# 查看服务状态docker-composeps# 查看日志docker-composelogs-fbackend6.5 遇到的问题内存不足ES和MySQL同时启动占用内存较大需要调整JVM参数域名解析需要配置域名解析到服务器IP等待DNS生效10-30分钟七、成果展示7.1 功能清单用户注册登录手机号密码JWT认证 Redis黑名单注销课程列表、搜索、详情ES学习计划购物车下单支付支付宝模拟秒杀活动RedisRabbitMQ订单管理学习进度追踪AI对话助手LangGraphRAGAI智能出题AI作业批改AI课程推荐讲师后台课程管理管理员后台首页缓存RedisDocker一键部署7.2 代码量后端Python代码约8000行前端Vue代码约6000行配置文件约500行八、未来优化方向8.1 短期优化视频直接上传目前视频上传依赖讲师提供外部链接后续可支持直接上传MP4并转码学习路径自动规划用户输入目标AI自动生成完整学习计划课程证书系统学完课程生成NFT证书8.2 长期扩展直播教学集成实时音视频支持直播互动移动端APP用Flutter或React Native开发独立APP学习成就系统通过ECharts生成学习数据看板九、一些思考9.1 关于AI辅助编程这个项目大量使用了AI辅助编程Copilot、ChatGPT、Cursor等。我的感受是AI能帮你写80%的模板代码但设计决策需要你自己做AI生成的代码必须逐行review否则会有隐藏bug真正有价值的是你对项目的整体理解9.2 关于全栈开发全栈开发不是“什么都会一点”而是能独立设计数据库表结构能写干净的后端API能做出能用的前端界面能把项目部署到服务器上学伴项目让我真正理解了“全栈”的含义。9.3 技术选型的思考能用的技术 ≠ 适合的技术。比如Dify虽然用起来简单但定制化困难最后迁移到了LangGraph。先跑通再优化。很多功能我是先用简单实现跑通再逐步优化。文档是最好的朋友。LangChain、FastAPI、Vue的官方文档帮了大忙。9.4 关于AI原生应用这个项目让我深刻体会到AI不是加一个聊天窗口就叫AI应用。真正的AI原生应用是把AI能力嵌入到产品的核心流程中学完自动出题 → AI学完推荐下一门 → AI有疑问立即解答 → AIAI不是外挂而是产品的一部分。十、常见问题Q部署需要什么配置的服务器A最低2核4G建议4核8GMySQL和ES比较吃内存。QDeepSeek API免费吗A注册送500万tokens正常使用够用很久。Q项目做完了可以商用吗A代码是个人项目如果商用建议替换掉ES使用费和DeepSeek API调用费。Q我想自己做一个类似的从哪里开始A建议先看一遍需求文档然后按以下顺序搭建先跑通后端FastAPI 注册登录再加课程管理再加购物车和订单再加搜索ES最后加AI功能先简单接API再考虑LangGraph写在最后从零开始做一个完整的全栈项目确实不容易。中间踩过无数坑但也学到了很多。如果你也在做类似的项目希望这篇文章能给你一些参考。几个建议代码要能跑功能再多跑不起来都是零AI是工具不是答案能用AI提高效率但别让它替你思考坚持到底做到最后你会发现最难的其实是“坚持做下去”项目还在不断完善中欢迎交流讨论。如果对部署有兴趣可以关注后续的部署实战文章。项目地址https://github.com/lcm-git/zhixue-ai 私有仓库可联系获取访问权限在线演示https://knowai.你的域名.com 部署中如果你在开发过程中遇到类似的问题欢迎在评论区交流。

相关新闻

Pixelle-Video终极指南:3分钟学会AI全自动视频制作

Pixelle-Video终极指南:3分钟学会AI全自动视频制作

Pixelle-Video终极指南:3分钟学会AI全自动视频制作 【免费下载链接】Pixelle-Video 🚀 AI 全自动短视频引擎 | AI Fully Automated Short Video Engine 项目地址: https://gitcode.com/GitHub_Trending/pi/Pixelle-Video 想要制作专业级短视频却苦…

2026/7/7 18:16:24 阅读更多 →
3步解锁离线Minecraft:UltimMC启动器完全指南

3步解锁离线Minecraft:UltimMC启动器完全指南

3步解锁离线Minecraft:UltimMC启动器完全指南 【免费下载链接】Launcher Offline Minecraft launcher. 项目地址: https://gitcode.com/gh_mirrors/lau/Launcher 你是否曾经因为网络不稳定而无法启动《我的世界》?是否希望在旅行、学校或网络受限…

2026/7/7 18:14:24 阅读更多 →
Scikit-learn 1.4 随机森林调参实战:GridSearchCV 优化 5 个核心参数,准确率提升 3%

Scikit-learn 1.4 随机森林调参实战:GridSearchCV 优化 5 个核心参数,准确率提升 3%

Scikit-learn 1.4 随机森林调参实战:GridSearchCV 优化 5 个核心参数,准确率提升 3%随机森林作为集成学习的经典算法,在实际项目中往往能提供稳定且优秀的预测性能。但在默认参数下,模型可能无法充分发挥潜力。本文将深入探讨如何…

2026/7/7 18:14:24 阅读更多 →

最新新闻

论客观真理的绝对刚性与形式主义学术构建的寄生异化——基于“1+1=2”宇宙底层铁律对哥德尔定理、皮亚诺公理及波普尔范式的降维审视

论客观真理的绝对刚性与形式主义学术构建的寄生异化——基于“1+1=2”宇宙底层铁律对哥德尔定理、皮亚诺公理及波普尔范式的降维审视

论客观真理的绝对刚性与形式主义学术构建的寄生异化——基于“112”宇宙底层铁律对哥德尔定理、皮亚诺公理及波普尔范式的降维审视摘要近代以来,以形式主义数学、前沿理论物理和当代科学哲学为代表的学术圈,逐渐陷入了一种本末倒置的思维怪圈。学者们往往…

2026/7/7 19:34:47 阅读更多 →
为什么选择百度网盘提取码智能获取工具:3秒破解密码的完整实战指南

为什么选择百度网盘提取码智能获取工具:3秒破解密码的完整实战指南

为什么选择百度网盘提取码智能获取工具:3秒破解密码的完整实战指南 【免费下载链接】baidupankey 在线查询网盘提取码(维护中 rm repo) 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘资源提取码而烦恼吗&a…

2026/7/7 19:30:46 阅读更多 →
车辆平顺性仿真:3 种路面时域生成方法(滤波白噪声/谐波叠加/ARMA)对比

车辆平顺性仿真:3 种路面时域生成方法(滤波白噪声/谐波叠加/ARMA)对比

车辆平顺性仿真:三种路面时域生成方法深度对比与技术选型指南在车辆研发的虚拟验证环节中,路面激励的准确建模直接决定了平顺性仿真的可信度。当工程师需要在有限算力与工程精度之间寻找平衡点时,滤波白噪声法、谐波叠加法和ARMA模型这三种主…

2026/7/7 19:30:46 阅读更多 →
英雄联盟玩家的终极游戏智能助手:自动化战绩分析与BP辅助工具

英雄联盟玩家的终极游戏智能助手:自动化战绩分析与BP辅助工具

英雄联盟玩家的终极游戏智能助手:自动化战绩分析与BP辅助工具 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 在英雄联盟的竞技世界中,信息就是胜利的关键。Seraphine作为一款基于官方…

2026/7/7 19:28:46 阅读更多 →
基于NE555制作的电池内阻测量电路软件仿真

基于NE555制作的电池内阻测量电路软件仿真

简 介: 文章通过LTspice仿真分析了基于NE555的电池内阻测量电路特性。该电路利用NE555产生方波,通过恒流源和无极性电容耦合交流信号至待测电池,测量其两端交流电压有效值以反映内阻。仿真发现: 输入电压需超过10V才能稳定输出电流…

2026/7/7 19:28:46 阅读更多 →
英雄联盟智能游戏辅助工具:5分钟实现自动化战绩查询与BP决策

英雄联盟智能游戏辅助工具:5分钟实现自动化战绩查询与BP决策

英雄联盟智能游戏辅助工具:5分钟实现自动化战绩查询与BP决策 【免费下载链接】Seraphine 英雄联盟战绩查询工具 项目地址: https://gitcode.com/gh_mirrors/se/Seraphine 还在为BP阶段手忙脚乱地查队友战绩而烦恼吗?还在因为信息不对称而输掉本该…

2026/7/7 19:28:46 阅读更多 →

日新闻

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

鸿蒙新特性:图片画廊与轮播导航——构建沉浸式图片浏览体验

图片浏览是移动应用中最高频的场景之一。从社交应用的照片流到电商平台的商品图集,从旅游应用的景点相册到摄影作品展示——用户对图片浏览的体验要求不断提高:流畅的切换动画、直观的缩略图导航、便捷的收藏操作、自动播放模式。HarmonyOS NEXT ArkUI 虽…

2026/7/7 0:05:16 阅读更多 →
24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V DC-DC降压芯片PW2312B/PW2815,SOT23-6到SOP8-EP方案对比

24V稳压芯片完整选型指南 PW8600 PW75XX PW2815 PW2312B LDODC/DC全方案 一、24V稳压方案概述 24V直流电源在工业自动化、门禁系统、电梯控制、汽车电子、LED驱动、监控设备等场景中应用极广,是最常见的中压直流母线电压。要将24V母线稳定降压至下游MCU、传感器…

2026/7/7 0:05:16 阅读更多 →
RAG+知识图谱混合检索与Graph RAG核心对比

RAG+知识图谱混合检索与Graph RAG核心对比

做企业RAG落地的团队,往往容易卡在一容易踩坑的选型难题: 当需求单纯靠向量RAG搞不定、单纯靠知识图谱也搞不定,必须同时依赖「文本语义理解 实体关系推理」时,到底是做「向量图谱混合检索」就够了,还是必须上「Grap…

2026/7/7 0:07:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/7 14:24:45 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/7 12:34:47 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/7 15:59:06 阅读更多 →

月新闻