模型工厂、三层容错装饰器与JWT认证:从基础设施到可用服务
2026-07-03 · 第三章收官 · LlamaFactory统一模型管理 + 容错装饰器 + JWT无状态认证
0. 上下文衔接
Day 3 完成了基础设施层:config配置中心、SQLAlchemy异步连接、get_db会话注入、结构化日志、统一异常体系。今天在这些地基上砌墙,解决三个核心问题:
- 模型怎么管:5个Agent每个都要初始化LLM客户端,参数重复、无法统一切换模型 → LlamaFactory工厂模式
- 出错怎么办:大模型API超时/限流/网络抖动是常态,不能直接500 → 三层兜底装饰器
- 用户怎么认证:接口不能裸奔,需要登录鉴权 → JWT + bcrypt
前三章的知识脉络先快速过一遍,避免后面代码看不懂:
| 模块 | 核心要点 |
|---|---|
| LangGraph四要素 | State(TypedDict+Reducer) / Node(函数) / Edge(固定+条件) / Checkpointer(thread_id记忆) |
| Python异步 | async def/await / asyncio.gather并发 / create_task强引用防GC / run_in_executor包装同步代码 |
| Pydantic | BaseModel + Field校验 / with_structured_output绑定大模型结构化输出 |
| FastAPI | Depends依赖注入 / UploadFile文件上传 / EventSourceResponse流式SSE |
| SQLAlchemy异步 | Engine/SessionFactory/Session三层 / text()+字典传参 / async with自动关连接 |
| 基础设施 | BaseSettings配置单例 / get_db自动commit-rollback / logging封装 / 异常基类携带agent_type |
1. LlamaFactory:大模型实例统一管理
项目里有QA问答、简历审查、代码批改、主观题批改、模拟面试5个Agent,如果每个Agent都自己写ChatOpenAI(model="xxx", api_key="xxx", base_url="xxx"),问题很明显:
- 模型配置散落在5个文件,切换模型要改5处
- 同一个模型被重复初始化,浪费连接资源
- 无法统一做参数调整(temperature、streaming等)
工厂模式解决这个问题:一个类统一创建和缓存模型实例,业务代码只需要调用get_lm("qa")。
