切换日光/暗黑模式
032. AI 简历后端表结构与 OpenAI 格式代理
学习目标
这一节完成 AI 简历项目的后端基础,包括简历模板、用户简历和 OpenAI 格式代理。
学完后,你应该能理解:
- AI 简历为什么要保存模板源码;
- 预览图和导出图为什么可能不同;
- 简历模板表和用户简历表分别存什么;
- 为什么长文本字段要用
longtext; - 通用 CRUD Router 如何快速生成接口;
lambda app注册路由是什么写法;- LangChain / LangGraph 接口格式和 OpenAI 格式有什么差异;
- 为什么要加 OpenAI 格式代理。
模板需要保存源码
AI 简历模板不只是一个图片。
它需要保存模板源码。
原因是:
- 前端要根据源码渲染模板;
- AI 修改模板时,改的是源码;
- 用户选择模板时,本质上选择的是一份可编辑结构;
- 后续导出图片或 PDF 也依赖模板源码。
所以模板表里要有字段保存源码内容。
这类字段通常会比较长,不能用普通短字符串。
预览图和导出图
模板会有预览图。
预览图通常会经过压缩,用来在列表里快速展示。
但用户真正导出的图片不一定压缩。
可以理解成:
| 图片类型 | 用途 |
|---|---|
| 预览图 | 列表展示,体积小,加载快 |
| 导出图 | 最终使用,质量更高 |
所以模板表里要区分源码、预览资源和最终导出效果。
不要把“预览图片”当成模板本身。
简历模板表
简历模板表保存的是可复用模板。
它通常包括:
- 模板 ID;
- 模板名称;
- 模板源码;
- 预览图;
- 创建时间;
- 更新时间;
- 其他描述信息。
模板是公共资源,多个用户都可以基于同一个模板创建自己的简历。
用户简历表
用户简历表保存的是用户自己的简历数据。
它通常包括:
- 用户简历 ID;
- 所属用户;
- 使用的模板;
- 简历源码;
- 简历数据;
- 预览或导出信息。
用户简历和模板不是一回事。
模板是“样式和结构”,用户简历是“某个人填写后的具体内容”。
为什么用 longtext
简历源码和简历数据都可能很长。
普通字符串字段不够用。
MySQL 里有多种文本类型,例如:
tinytext;text;mediumtext;longtext。
longtext 能容纳更长文本,适合保存大段源码、JSON、富文本或 AI 生成内容。
虽然 longtext 也有上限,但对几万到几十万字符的学习项目内容通常足够。
创建表和导入数据
后端先执行 SQL 创建简历模板表,再导入模板数据。
用户简历表也一样:
- 执行建表 SQL;
- 导入初始化数据;
- 在数据库工具里确认数据存在;
- 创建对应 model 类;
- 注册通用 CRUD 路由。
这样前端就可以通过接口查询模板和用户简历。
注册通用路由
有了通用 CRUD 封装后,新增表不需要手写所有接口。
只要提供:
- model 类;
- 路由前缀;
- 查询参数;
- 新建参数;
- 更新参数。
通用函数就能注册对应接口。
这就是前面抽 BasicModel 和通用 Router 的价值。
lambda app 是什么
注册路由时会看到类似 lambda app: ... 的写法。
它本质上就是一个匿名函数。
可以把它理解成:
py
def register(app):
add_model_routes(app, ...)写成 lambda 只是为了让注册配置更短。
如果你不熟悉 lambda,可以先把它看成“传一个函数进去,后面再执行”。
后端项目不必拆太碎
多个实战功能可以放在同一个后端项目里。
原因是很多能力会复用:
- 文件上传;
- 模型调用;
- 用户信息;
- 通用 CRUD;
- 数据库连接;
- 认证能力。
如果每个小项目都单独建后端,就要重复部署、重复写上传、重复维护环境。
学习阶段把多个项目能力合到一个后端,更容易复用基础能力。
前端 AI 对话组件的格式问题
AI 简历前端会用到对话组件。
有些对话组件默认只认识 OpenAI 格式的请求和响应。
但 LangChain、LangGraph 或不同模型平台的格式不一定完全一致。
如果直接把 LangGraph 的工具调用结果丢给组件,它可能无法正确显示:
- 工具调用;
- 工具中断;
- 工具执行结果;
- 多轮状态恢复。
要完整支持 LangGraph,需要专门封装前端组件。
为什么先做 OpenAI 格式代理
AI 简历项目为了先把功能跑通,会增加一个 OpenAI 格式代理接口。
它的目标是:
- 入参尽量符合 OpenAI 格式;
- 出参也尽量符合 OpenAI 格式;
- 前端对话组件可以直接使用;
- 暂时不深度改造前端组件。
这是一种工程取舍。
完整封装 LangGraph 组件会更强,但会花更多时间。当前先用 OpenAI 格式代理,把 AI 简历核心功能推进起来。
关闭不必要的深度思考
某些模型支持控制是否启用深度思考。
如果当前任务不需要深度思考,开启它可能只会增加等待时间和 token 消耗。
所以代理层可以根据模型能力传入对应参数,把不需要的思考过程关掉。
不同模型平台的参数名可能不同,不是所有模型都支持同一个参数。
AI 简历后端完成范围
到这里,AI 简历后端主要能力已经具备:
- 简历模板表;
- 用户简历表;
- 通用查询接口;
- 新建、更新、删除接口;
- 文件上传接口;
- OpenAI 格式代理接口。
后续重点会转向前端。
AI 简历的复杂度主要在前端:模板编辑、预览、对话、源码更新、图片导出和用户交互都会集中在前端实现。