招聘系统这个题目,看起来是业务题,真正卡人的地方往往在两处:一是接口层怎么写才不乱,二是大模型怎么接进去才不是玩具。这门课把 FastAPI 和 LangChain 两套东西压在一个场景里,做的不是通用聊天机器人,而是简历解析、岗位匹配、候选人问答这类具体环节。如果你只学过其中一个,正好可以拿它补另一块。
先确认你缺的是哪一块
FastAPI 部分不是从零讲语法,起点放在 miniconda 环境管理,然后快速进入入门、Pydantic 基本使用,再到路由传参、Body 传参、Cookie 传参、Header 传参和依赖注入。这几块连起来看,指向的其实是一个问题:一个真实接口要接收的东西从来不止请求体,还有身份、来源、上下文。很多人写接口时只会用 Body,遇到鉴权或灰度标记就临时拼字符串,这段内容补的就是这个口子。
Pydantic 单独给了两节,说明课程没有把它当附属品。简历字段多、层级深、可选值杂,如果没有模型校验,后面接 LangChain 时字段对不上,报错会非常难查。所以这部分不要跳,跳了后面调试成本会翻倍。
LangChain 在这里解决什么
课程没有把 LangChain 讲成一套独立的框架百科,而是放进招聘流程里用。招聘场景的典型链路是:拿到简历文本,先抽取结构化字段,再和岗位描述做匹配,最后生成一段可读的推荐理由或问答回复。这里面既有信息抽取,也有检索和生成,LangChain 负责的是把这些步骤串起来,而不是替你写业务判断。
需要提前想清楚的是:哪些判断应该交给模型,哪些应该用规则兜底。比如学历、年限这类硬条件,用代码判断更稳;匹配理由、追问问题这类软表达,才适合交给模型。课程里把 FastAPI 和 LangChain 放在一起,本质就是让你练习这种分工。
配套练习该怎么做
- 先把 Pydantic 模型写完整,再动手写接口。字段没定清楚就写路由,后面必返工。
- 依赖注入那部分,自己动手加一个「当前用户」依赖,哪怕只是假的,也要走一遍完整流程。
- LangChain 部分不要只跑通示例,换一份自己的简历文本,看抽取结果哪里会崩。
- 每完成一个环节,就补一个失败用例:字段缺失、格式错误、模型返回空。招聘系统的边界情况比正常流程多。
看完应该能回答的问题
学完之后,下面这些问题如果还答不上来,说明对应章节需要回看:FastAPI 里 Body、Cookie、Header 三种传参分别在什么场景用?Pydantic 模型怎么处理可选字段和默认值?依赖注入除了做鉴权还能做什么?LangChain 在招聘流程里承担的是抽取、检索还是生成,或者三者都有?模型输出不稳定时,接口层应该在哪一层做校验和重试?
这门课适合已经会写一点 Python、但对接口规范和 LLM 工程化都不熟的人。如果你已经能熟练写 FastAPI 项目,可以直接从 LangChain 接入那部分看起;如果连 Pydantic 都没用过,建议按顺序走,不要跳。缺什么补什么,比假装什么都会要省时间。
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





