这套课的名字里有 FastAPI 和 LangChain 两个技术点,但它真正想解决的是一个具体的工作场景:把简历筛一遍、把岗位描述读懂、把人和岗位匹配起来。如果你正好在做招聘相关的产品,或者想找一个能写进简历的后端+AI 项目,这门课值得花时间看看它讲什么、又对你有没有用。

它到底在做一个什么东西

课程围绕一个智能招聘系统展开,不是那种拆成几节语法就结束的教程。整体上,前面用 FastAPI 搭后端的骨架,把接口、参数校验、依赖注入这些基础打牢;后面接入 LangChain,让系统能对岗位描述和简历文本做理解与匹配。换句话说,它把「一个能跑的 Web 服务」和「一个能读懂文本的模型调用链」拼在一起,最终做出一个能对外提供接口的招聘筛选工具。

对上班族和转行者来说,这种完整项目比零散的知识点更接近真实工作:你要考虑接口怎么设计、数据怎么传、模型返回的结果怎么落回业务逻辑。

学完之后你能独立做什么

  • 用 FastAPI 独立写出一套带参数校验、依赖注入和分层结构的接口服务,而不是只会跟着文档跑一个 hello world。
  • 用 Pydantic 定义请求和响应的数据结构,把前端传来的表单、Cookie、Header 这些不同来源的数据处理干净。
  • 用 LangChain 把模型调用串成一条可维护的流程,对简历和岗位描述做结构化提取或语义匹配。
  • 把上面两部分接起来,做出一个能对外提供接口、能处理招聘文本的小系统。

这里要提醒一点:学完不等于能直接上线。真实招聘系统的权限、并发、数据隐私都比课程示例复杂,但作为个人项目或者面试作品,它的完整度是够的。

资料适合什么基础的人

如果你完全没写过 Python,直接上来会有点吃力,建议先把 Python 基础语法和虚拟环境的概念过一遍。如果你写过一点 Python、但没碰过后端框架,这门课是合适的切入点,它从环境管理开始讲,FastAPI 的入门部分也给了缓冲。

LangChain 那部分需要你对「调用大模型接口」这件事有基本认知,比如知道什么是提示词、什么是模型返回的文本。没接触过也没关系,但至少要能理解接口调用和返回值的大致形式,否则后面串流程时会卡住。

已经熟练写 FastAPI 的人,前半部分可以快速过,重点看后半段怎么把模型能力接进业务。只想学 LangChain、对后端没兴趣的人,这门课的重心可能不在你的预期上。

作为一门课程,它的定位

它不是算法课,不会深挖模型原理;也不是纯后端课,重点不在性能调优。它更像是「用一个实际项目把两块技术串起来」的练习。对想转行做 AI 应用开发、或者想在现有岗位里加上 AI 能力的人来说,这种把接口和模型调用打通的经历,比单独会写一个接口或者单独会调一次模型更有说服力。

用这份资料时,建议不要只跟着视频敲一遍就结束。每做完一个模块,试着自己改一改字段、换一换匹配逻辑,把示例往你熟悉的业务场景上靠。这样学完留下的不只是一个能跑的项目,而是一套你能迁移到别处的做法。

FastAPI+LangChain打造智能招聘系统

知了-FastAPI打造智能招聘系统-002

├── {1}--FastAPI

│   ├── [1.0]--【准备】项目介绍.dd

│   ├── [1.1]--【FastAPI】miniconda使用.dd

│   ├── [1.2]--【FastAPI】FastAPI入门.dd

│   ├── [1.3]--【FastAPI】Pydantic基本使用(1).dd

│   ├── [1.4]--【FastAPI】Pydantic基本使用(2).dd

│   ├── [1.5]--【FastAPI】路由传参.dd

│   ├── [1.6]--【FastAPI】Body传参.dd

│   ├── [1.7]--【FastAPI】Cookie传参.dd

│   ├── [1.8]--【FastAPI】Header传参.dd

│   ├── [1.9]--【FastAPI】依赖注入(1).dd

│   ├── [1.10]--【FastAPI】依赖注入(2).dd

│   ├── [1.11]--【FastAPI】APIRouter使用.dd

│   ├── [1.12]--【FastAPI】PostgreSQL安装.dd

│   ├── [1.13]--【FastAPI】数据库连接操作.dd

│   ├── [1.14]--【FastAPI】ORM模型定义.dd

│   ├── [1.15]--【FastAPI】迁移ORM模型.dd

│   ├── [1.16]--【FastAPI】一对一关系.dd

│   ├── [1.17]--【FastAPI】一对多关系.dd

│   ├── [1.18]--【FastAPI】多对多关系.dd

│   ├── [1.19]--【FastAPI】创建AsyncSession对象.dd

│   ├── [1.20]--【FastAPI】删除数据.dd

│   ├── [1.21]--【FastAPI】查找数据.dd

│   └── [1.22]--【FastAPI】修改数据.dd

├── {2}--TypeScript

│   ├── [2.1]--【TypeScript】Node环境搭建.dd

│   ├── [2.2]--【TypeScript】TypeScript介绍.dd

│   ├── [2.3]--【TypeScript】第一个TypeScript程序.dd

│   ├── [2.4]--【TypeScript】数据类型(1).dd

│   ├── [2.5]--【TypeScript】数据类型(2).dd

│   ├── [2.6]--【TypeScript】数据类型(3).dd

│   ├── [2.7]--【TypeScript】类型断言.dd

│   ├── [2.8]--【TypeScript】函数可选和默认参数.dd

│   ├── [2.9]--【TypeScript】函数剩余参数.dd

│   ├── [2.10]--【TypeScript】函数重载.dd

│   ├── [2.11]--【TypeScript】类的定义和实例化.dd

│   ├── [2.12]--【TypeScript】访问修饰符和只读属性.dd

│   ├── [2.13]--【TypeScript】setter和getter.dd

│   ├── [2.14]--【TypeScript】静态成员和this.dd

│   ├── [2.15]--【TypeScript】类的继承.dd

│   ├── [2.16]--【TypeScript】类的多态.dd

│   ├── [2.17]--【TypeScript】接口的定义和使用.dd

│   ├── [2.18]--【TypeScript】接口继承和类实现接口.dd

│   ├── [2.19]--【TypeScript】interface和type对比.dd

│   ├── [2.20]--【TypeScript】泛型基本使用.dd

│   ├── [2.21]--【TypeScript】泛型约束.dd

│   └── [2.22]--【TypeScript】泛型其他.dd

├── {3}--Vue基础

│   ├── [3.1]--【Vue】VSCode插件安装.dd

│   ├── [3.2]--【Vue】Vue项目创建.dd

│   ├── [3.3]--【Vue】vue快捷代码片段.dd

│   ├── [3.4]--【Vue】ref响应式变量.dd

│   ├── [3.5]--【Vue】reactive响应式变量.dd

│   ├── [3.6]--【Vue】模板语法(1).dd

│   ├── [3.7]--【Vue】模板语法(2).dd

│   ├── [3.8]--【Vue】模板语法(3).dd

│   ├── [3.9]--【Vue】计算属性.dd

│   ├── [3.10]--【Vue】监听属性.dd

│   ├── [3.11]--【Vue】生命周期函数.dd

│   ├── [3.12]--【Vue】组件-定义属性.dd

│   ├── [3.13]--【Vue】组件-定义事件.dd

│   ├── [3.14]--【Vue】组件-定义v-model.dd

│   ├── [3.15]--【Vue】组件-定义插槽.dd

│   ├── [3.16]--【Vue】VueRouter-基本使用.dd

│   ├── [3.17]--【Vue】VueRouter-嵌套路由.dd

│   ├── [3.18]--【Vue】VueRouter-路由传参.dd

│   ├── [3.19]--【Vue】VueRouter-编程式导航.dd

│   ├── [3.20]--【Vue】VueRouter-导航守卫.dd

│   └── [3.21]--【Vue】Pinia的使用详解.dd

├── {4}--LangChain

│   ├── [4.1]--【LangChain】准备工作.dd

│   ├── [4.2]--【LangChain】创建模型对象.dd

│   ├── [4.3]--【LangChain】模型配置和token统计.dd

│   ├── [4.4]--【LangChain】消息类型.dd

│   ├── [4.5]--【LangChain】工具定义和注册.dd

│   ├── [4.6]--【LangChain】工具定义参数配置.dd

│   ├── [4.7]--【LangChain】ToolRuntime-State.dd

│   ├── [4.8]--【LangChain】ToolRuntime-Context.dd

│   ├── [4.9]--【LangChain】ToolRuntime-Store.dd

│   ├── [4.10]--【LangChain】ToolRuntime-Config.dd

│   ├── [4.11]--【LangChain】短期记忆-概述.dd

│   ├── [4.12]--【LangChain】短期记忆-实现.dd

│   ├── [4.13]--【LangChain】短期记忆-PostgreSQL实现.dd

│   ├── [4.14]--【LangChain】短期记忆-消息裁剪.dd

│   ├── [4.15]--【LangChain】短期记忆-消息删除.dd

│   ├── [4.16]--【LangChain】短期记忆-消息总结.dd

│   ├── [4.17]--【LangChain】短期记忆-工具.dd

│   ├── [4.18]--【LangChain】短期记忆-中间件.dd

│   ├── [4.19]--【LangChain】流式输出-基本使用.dd

│   ├── [4.20]--【LangChain】流式输出-三种模式.dd

│   ├── [4.21]--【LangChain】流式输出-混合模式.dd

│   ├── [4.22]--【LangChain】流式输出-异步事件流.dd

│   ├── [4.23]--【LangChain】结构化输出-智能体输出.dd

│   ├── [4.24]--【LangChain】结构化输出-错误处理.dd

│   ├── [4.25]--【LangChain】中间件-人工介入.dd

│   ├── [4.26]--【LangChain】中间件-模型工具调用限制.dd

│   ├── [4.27]--【LangChain】中间件-模型工具重试机制.dd

│   ├── [4.28]--【LangChain】中间件-敏感信息检测.dd

│   ├── [4.29]--【LangChain】中间件-复杂任务拆解.dd

│   ├── [4.30]--【LangChain】中间件-大量工具选择优化.dd

│   ├── [4.31]--【LangChain】自定义中间件-概述.dd

│   ├── [4.32]--【LangChain】自定义中间件-装饰器.dd

│   ├── [4.33]--【LangChain】自定义中间件-类定义.dd

│   └── [4.34]--【LangChain】自定义中间件-案例分析.dd

├── {5}--LangGraph

│   ├── [5.1]--【LangGraph】基本使用.dd

│   ├── [5.2]--【LangGraph】State使用详解.dd

│   ├── [5.3]--【LangGraph】Edge边-条件+Send+Command.dd

│   ├── [5.4]--【LangGraph】可视化Graph.dd

│   ├── [5.5]--【LangGraph】持久化-checkpointer.dd

│   ├── [5.6]--【LangGraph】持久化-时间旅行.dd

│   ├── [5.7]--【LangGraph】持久化-长期记忆.dd

│   ├── [5.8]--【LangGraph】持续运行-概念讲解.dd

│   ├── [5.9]--【LangGraph】持续运行-interrupt.dd

│   ├── [5.10]--【LangGraph】持续运行-异常后恢复.dd

│   ├── [5.11]--【LangGraph】流式输出-基本使用.dd

│   ├── [5.12]--【LangGraph】流式输出-token.dd

│   ├── [5.13]--【LangGraph】流式输出-custom.dd

│   ├── [5.14]--【LangGraph】子图-节点中调用.dd

│   └── [5.15]--【LangGraph】子图-当作节点.dd

└── {6}--项目实战

   ├── [6.1]--【准备】项目介绍.dd

   ├── [6.2]--【后端】项目初始化.dd

   ├── [6.3]--【后端】连接数据库.dd

   ├── [6.4]--【后端】ORM模型创建.dd

   ├── [6.5]--【后端】将ORM同步到数据库中.dd

   ├── [6.6]--【后端】git管理项目.dd

   ├── [6.7]--【后端】User&Department Repo.dd

   ├── [6.8]--【后端】初始化数据.dd

   ├── [6.9]--【后端】登录功能实现.dd

   ├── [6.10]--【后端】测试登录API.dd

   ├── [6.11]--【后端】访问限制依赖实现.dd

   ├── [6.12]--【后端】FastAPI使用Redis缓存.dd

   ├── [6.13]--【后端】邮件发送配置.dd

   ├── [6.14]--【后端】邀请用户.dd

   ├── [6.15]--【后端】注册功能实现.dd

   ├── [6.16]--【后端】员工列表实现.dd

   ├── [6.17]--【后端】修改员工状态.dd

   ├── [6.18]--【后端】获取部门列表.dd

   ├── [6.19]--【后端】钉钉OAuth2-准备工作.dd

   ├── [6.20]--【后端】钉钉OAuth2-生成登录链接.dd

   ├── [6.21]--【后端】钉钉OAuth2-获取token.dd

   ├── [6.22]--【后端】钉钉OAuth2-获取用户信息.dd

   ├── [6.23]--【后端】获取钉钉账号信息.dd

   ├── [6.24]--【后端】分配HR管理的部门.dd

   ├── [6.25]--【后端】添加职位信息.dd

   ├── [6.26]--【后端】获取职位列表.dd

   ├── [6.27]--【后端】删除职位.dd

   ├── [6.28]--【后端】邮箱机器人.dd

   ├── [6.29]--【后端】简历上传.dd

   ├── [6.30]--【后端】PaddleOCR服务集成.dd

   ├── [6.31]--【后端】创建简历OCR解析任务.dd

   ├── [6.32]--【后端】获取简历解析任务状态.dd

   ├── [6.33]--【后端】候选人信息智能体完成.dd

   ├── [6.34]--【后端】添加候选人.dd

   ├── [6.35]--【后端】创建候选人智能体架子.dd

   ├── [6.36]--【后端】候选人评分工具.dd

   ├── [6.37]--【后端】获取面试官空闲时间工具.dd

   ├── [6.38]--【后端】发送面试时间工具.dd

   ├── [6.39]--【后端】确认面试时间工具.dd

   ├── [6.40]--【后端】拒绝面试工具.dd

   ├── [6.41]--【后端】获取当前时间工具.dd

   ├── [6.42]--【后端】测试候选人智能体.dd

   ├── [6.43]--【后端】定时调度智能体.dd

   ├── [6.44]--【后端】集成智能体到路由中.dd

   ├── [6.45]--【后端】获取候选人列表.dd

   ├── [6.46]--【后端】更新候选人状态.dd

   ├── [6.47]--【后端】获取候选人AI得分信息.dd

   ├── [6.48]--【后端】获取最近7天候选人数量.dd

   ├── [6.49]--【前端】集成Tailwind和ElementPlus.dd

   ├── [6.50]--【前端】创建userStore.dd

   ├── [6.51]--【前端】登录页面实现.dd

   ├── [6.52]--【前端】登录功能实现.dd

   ├── [6.53]--【前端】注册功能完成.dd

   ├── [6.54]--【前端】主页面布局完成.dd

   ├── [6.55]--【前端】dashboard页面完成.dd

   ├── [6.56]--【前端】职位列表完成.dd

   ├── [6.57]--【前端】职位管理完成.dd

   ├── [6.58]--【前端】PaddleOCR Bug解决.dd

   ├── [6.59]--【前端】获取候选人列表.dd

   ├── [6.60]--【前端】添加候选人.dd

   ├── [6.61]--【前端】员工管理.dd

   ├── [6.62]--【前端】HR管理.dd

   ├── [6.63]--【部署】购买云服务器.dd

   ├── [6.64]--【部署】云服务器上安装相关软件.dd

   ├── [6.65]--【部署】上线准备-后端.dd

   ├── [6.66]--【部署】上线准备-前端.dd

   └── [6.67]--【部署】部署完成.dd