网易首页 > 网易号 > 正文 申请入驻

一个FastAPI项目的LLM架构:先想怎么崩,再写代码

0
分享至

去年有个后端项目差点让我崩溃——三个文件里塞着同一套提示词,某个路由里藏着十七行临时写的解析逻辑,而那个"临时方案"已经跑了八个月。

这次我换了个开场白:先问"这项目三个月后会怎么烂掉",再写第一行代码。


从Express到FastAPI:问题变了,坑没变

我之前用Node.js+Express,文件夹看着很标准:routes、controllers、services、models。灵活是灵活,但几个月后controllers胖成球,services变成垃圾场,逻辑到处复制粘贴。

FastAPI给的东西更强大,却完全不教你怎么组织。我见过太多项目最后变成这样:所有代码塞进main.py,业务逻辑糊在路由函数里,LLM调用像撒胡椒面一样散落各处。

一旦LLM进场,混乱速度翻倍。非确定性输出、提示词敏感、供应商依赖——这三件事叠加,没有结构的项目死得很快。

项目背景:不只是CRUD

这是一个真实的房产咨询系统后端。用户填偏好,系统用LLM理解意图,动态生成下一步问题,最终引导找房流程。

核心复杂度在于:多步骤信息采集、LLM解析用户输入、动态问题生成。不是简单的增删改查,每一步都可能被LLM的随机性搞砸。

最终落地的七层结构

我最后定下的文件夹结构:

api/
core/
llm/
models/
repositories/
schemas/
utils/

看起来普通,但每一层的职责边界是踩过坑才划清的。

API层:越无聊越好

api/v1/endpoints/这层只干三件事:收请求、做校验、调下层。路由函数里不准出现业务逻辑,更不准直接调LLM。

比如这个 intake 接口:

@router.post("/intake")
def create_intake(...):
return intake_repo.create(...)

三行。所有脏活都扔给repository或LLM层。这层要是写得"有趣",三个月后就是灾难现场。

Core层:地基要稳

core/放配置、数据库连接、依赖注入、外部SDK封装。这些东西很少变,但一旦要改,影响面极大。单独一层是为了隔离变化。

比如数据库连接池、Redis客户端、第三方API的认证逻辑——全塞这里,上层通过依赖注入拿,不准自己实例化。

LLM层:把它当成一个独立业务域

这是整个结构最关键的设计。llm/下面按业务场景分子文件夹,比如 intake/ 里再分:

prompts.py —— 所有提示词集中管理
schema.py —— LLM输出必须匹配的结构
service.py —— 调用逻辑和错误处理
providers/ —— 不同供应商的适配

调用方式也很直接:llm_intake_service.parse_user_input(text)。其他层不知道背后用的是OpenAI还是Claude,也不知道提示词长什么样。

为什么要隔离?因为LLM有三重麻烦:输出不固定、对提示词极度敏感、随时可能换供应商。这三件事混在一起,不隔离的话,改一个提示词可能引发连锁崩溃。

Models与Repositories:数据访问要干净

models/只定义数据库表结构,repositories/只放查询逻辑。这个拆分来自Django和Rails的传统,但在FastAPI项目里经常被人忽略。

好处是测试时可以mock repository,不用碰真实数据库。LLM相关的数据操作也能单独验证,比如"用户输入→LLM解析→入库"这条链路。

Schemas:对抗幻觉的第一道防线

LLM会幻觉,会返回格式不一致的东西。schemas/这层就是用来堵窟窿的:定义严格的数据结构,每个LLM响应都必须过一遍校验。

流程变成:用户输入 → LLM提示 → LLM响应 → Schema校验 → 结构化数据。校验失败就重试或降级,绝不把脏数据往后传。

Utils:慎用,非常慎用

小工具函数可以放,但要有警觉。一旦utils/开始膨胀,就说明有些逻辑该下沉到具体业务层,或者该抽象成独立服务了。

我的标准是:如果某个函数被三个以上不同业务场景调用,才考虑放utils。否则就留在它该在的地方。

一个核心原则

把LLM当成独立业务域,而不是随手调用的工具。

这个认知转变影响一切:提示词需要版本管理,输出需要契约约束,调用需要熔断降级,成本需要监控告警。当你把它当作一个可能随时失控的外部系统来设计,结构自然就严谨了。

这结构不完美,但扛住了真实项目

三个月过去,prompts.py里的提示词改了十七版,providers/里从OpenAI切到Azure又切回来,intake流程加了两个新分支。但因为每层职责清晰,改动基本被锁死在局部。

结构不是为了好看。是为了当你凌晨两点排查一个LLM输出异常时,能快速定位问题在哪一层,而不是在十七个文件里跳来跳去。

最后说句实话:这个项目的utils/里现在有三个函数,我怀疑其中两个其实不该在那里。但至少我知道它们不该在那里——这比无知无觉地烂掉,已经强太多了。

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
实在没法搞了!美菲军演提前结束,两艘中国815A围着演习转

实在没法搞了!美菲军演提前结束,两艘中国815A围着演习转

轩逸阿II
2026-04-30 10:04:28
万万没想到,当着特朗普的面,77岁的老国王给了美国人一个下马威

万万没想到,当着特朗普的面,77岁的老国王给了美国人一个下马威

娱说瑜悦
2026-04-30 15:24:30
以色列海军拦截“全球坚韧船队”,扣押约175名活动人士

以色列海军拦截“全球坚韧船队”,扣押约175名活动人士

界面新闻
2026-04-30 16:02:32
96年女生在远洋货轮当大副月入6.8万元:最长出海18个月,即便生理期也要做好自己的工作,需要面对生理和心理的双重挑战

96年女生在远洋货轮当大副月入6.8万元:最长出海18个月,即便生理期也要做好自己的工作,需要面对生理和心理的双重挑战

大风新闻
2026-04-30 09:40:04
尤伯杯最新战报!国羽赢首盘,王祉怡2-0横扫,圣坛组合半程11-4

尤伯杯最新战报!国羽赢首盘,王祉怡2-0横扫,圣坛组合半程11-4

刘姚尧的文字城堡
2026-04-30 17:29:01
海关查获7个女王凤凰螺,内藏宝珠曾卖2400万!至今人工无法养殖

海关查获7个女王凤凰螺,内藏宝珠曾卖2400万!至今人工无法养殖

狸猫之一的动物圈
2026-04-30 11:45:54
曝穆里尼奥即将重返皇马!上任第一件事大清洗,8 名球星或将走人

曝穆里尼奥即将重返皇马!上任第一件事大清洗,8 名球星或将走人

澜归序
2026-04-30 05:03:58
骑士3-2猛龙!米切尔直言不讳,哈登赛后一番表态也成重中之重

骑士3-2猛龙!米切尔直言不讳,哈登赛后一番表态也成重中之重

鱼崖大话篮球
2026-04-30 16:00:22
美国现任防长曾谈中美开战:11艘航母打击中国,20分钟后1艘不剩

美国现任防长曾谈中美开战:11艘航母打击中国,20分钟后1艘不剩

蜉蝣说
2026-04-28 11:14:47
霍启山捧场杨受成长子夜店,俩阔少把酒言欢,58岁杨其龙样子沧桑

霍启山捧场杨受成长子夜店,俩阔少把酒言欢,58岁杨其龙样子沧桑

树娃
2026-04-30 14:14:16
斯诺克世锦赛赛程!希金斯vs墨菲20点开打,吴宜泽vs艾伦2点进行

斯诺克世锦赛赛程!希金斯vs墨菲20点开打,吴宜泽vs艾伦2点进行

林子说事
2026-04-30 16:54:52
直降1400元!iPhone 17 Pro Max 降价,上市以来新低

直降1400元!iPhone 17 Pro Max 降价,上市以来新低

科技堡垒
2026-04-30 09:34:03
39岁郑欣宜体重暴跌、长相变化巨大,几乎没人能认出来

39岁郑欣宜体重暴跌、长相变化巨大,几乎没人能认出来

草莓解说体育
2026-04-30 18:22:14
王毅刚走,泰国拍板一万亿超级工程!中国将多一条高效便捷的通道

王毅刚走,泰国拍板一万亿超级工程!中国将多一条高效便捷的通道

你是我心中最美星空
2026-04-30 09:06:39
美国一学生打断以色列士兵演讲,当众怒斥以军:6岁女孩被打335枪,超70000巴勒斯坦人被杀,你们犯下的暴行终将被清算

美国一学生打断以色列士兵演讲,当众怒斥以军:6岁女孩被打335枪,超70000巴勒斯坦人被杀,你们犯下的暴行终将被清算

大象新闻
2026-04-28 23:48:20
中国"绝不谈判"!光刻机封锁,全球谁急?一台光刻机能有多贵?

中国"绝不谈判"!光刻机封锁,全球谁急?一台光刻机能有多贵?

潮鹿逐梦
2026-04-28 14:47:26
为何我国会放弃遍地翡翠,富产金丝楠木,价值抵百个香港的江心坡

为何我国会放弃遍地翡翠,富产金丝楠木,价值抵百个香港的江心坡

抽象派大师
2026-04-30 00:17:23
蔡一杰脑癌扩散!59岁频繁回内地农村老家,重温童年时光

蔡一杰脑癌扩散!59岁频繁回内地农村老家,重温童年时光

原梦叁生
2026-04-30 08:10:48
张雪峰的团队快散了

张雪峰的团队快散了

犀利强哥
2026-04-29 21:07:20
广东德比G2赛前:杜锋立下军令状,龙狮官宣好消息,球迷感慨真强

广东德比G2赛前:杜锋立下军令状,龙狮官宣好消息,球迷感慨真强

宏远小师哥
2026-04-30 08:40:20
2026-04-30 19:56:49
摸鱼算法
摸鱼算法
致力于用最前沿的AI技术,换取更多发呆时间的三十岁青年。
2000文章数 20关注度
往期回顾 全部

科技要闻

9000亿美元估值,Anthropic即将反超OpenAI

头条要闻

大连男子2859.2克黄金被扣押30年 最新进展来了

头条要闻

大连男子2859.2克黄金被扣押30年 最新进展来了

体育要闻

季后赛场均5.4分,他凭啥在骑士打首发?

娱乐要闻

孙杨博士学历有问题?官方含糊其辞

财经要闻

易会满被“双开”!

汽车要闻

专访捷途汪如生:捷途双线作战 全球化全面落地

态度原创

艺术
房产
家居
亲子
公开课

艺术要闻

安东·爱德华·基尔德鲁普:19世纪丹麦风景画家

房产要闻

熬了6年,涨了2亿,三亚核心区这块地再次上架

家居要闻

灵动实用 生活艺术场

亲子要闻

宝子们必收藏!小龙虾配西瓜的快乐指南:吃对方法不踩雷!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版