知识点思维导图
27 个知识节点
参考资料
应用框架(03) - 框架选型对比
读完后,你应能完成以下任务:
- 绘制“应用框架(03) - 框架选型对比 / 先把候选方案的边界划清”的关键对象与数据流,解释“记住一条反直觉的事实:裸写常常是最优解。”,并用源码位置、日志或 Trace 标注证据。
- 为“应用框架(03) - 框架选型对比 / 五个问题问下来,答案基本就出来了”设计正常与异常输入,验证“这五个问题不是并列的,有优先级:先看团队能力和上线压力(决定平台 vs 代码),再看流程复杂度(决定 LangChain vs LangGraph vs 裸写)。”,输出首个偏差位置与回归测试结果。
- 实现“应用框架(03) - 框架选型对比 / 把选型逻辑写成可跑的脚本”的最小代码或配置,检验“打分法的好处是可解释:推荐结果背后的每一分都说得清,开会时能直接把理由摆出来,而不是"我觉得"。”,输出命令、结果与 Diff,并说明不适用边界。
一、框架选型对比的真实应用场景
新项目立项会上,技术负责人问你:"这个 AI 客服,你打算用什么搭?"
你要是答"用 LangChain 吧",他大概率追一句"为什么不用 Dify?为什么不直接调 API?"答不上来,就显得是跟风选型。选型这件事,面试和真实工作里都高频,而且没有标准答案——只有"按需求权衡"的过程。这一篇给你一套能说清的权衡框架。
二、先把候选方案的边界划清
| 方案 | 一句话定位 | 适合 | 天花板 |
|---|---|---|---|
| Dify / Coze | 低代码平台,拖拽搭建 | 快速验证、团队不写代码、固定流程 | 深度定制、复杂循环搞不定 |
| LangChain | 组件化框架,直线链 | 会写代码、需要组件复用、流程基本固定 | 复杂循环/状态机表达吃力 |
| LangGraph | 状态图框架 | 需要循环、分支、回退的复杂 Agent | 简单需求上它是过度工程 |
| 裸写(直接调 API) | 自己拼 prompt 调模型 | 流程简单、不想引依赖、要完全掌控 | 复杂编排要自己造轮子 |
记住一条反直觉的事实:裸写常常是最优解。 很多需求就是「拼个 prompt、调一次模型、解析结果」,五行代码搞定,套任何框架都是给自己加负担。框架是用来解决复杂度的,没有复杂度就别引入框架。
三、五个问题问下来,答案基本就出来了
选型不靠感觉,靠把这五个问题问清楚:
1. 团队会写 Python 代码吗?
不会 → 强烈倾向 Dify/Coze(拖拽就能搭)
2. 要多快上线?
几天内给产品演示 → 平台省样板代码,优势最大
3. 流程固定吗?需要循环/回退吗?
固定且不回头 → 裸写或 LangChain 直线链够用
需要"做一步看结果不行再来一遍" → LangGraph
4. 需要深度定制吗?(自定义检索、rerank、复杂状态)
需要 → 代码类方案,平台会撞天花板
5. 团队已有技术栈是什么?
已经在用某框架 → 优先复用,别为一个项目引第二套
这五个问题不是并列的,有优先级:先看团队能力和上线压力(决定平台 vs 代码),再看流程复杂度(决定 LangChain vs LangGraph vs 裸写)。
四、把选型逻辑写成可跑的脚本
口头权衡容易飘,把它固化成打分脚本就清楚了。核心是用几个维度刻画需求,每个维度命中某方案的优势就加分:
打分法的好处是可解释:推荐结果背后的每一分都说得清,开会时能直接把理由摆出来,而不是"我觉得"。
五、工程上真正会踩的坑
- 简历驱动选型。为了简历好看上 LangGraph,结果需求是个固定流程,平白增加复杂度和维护成本。选型服务于需求,不是服务于简历。
- 平台和代码二选一的误区。其实可以混用:用 Dify 快速验证产品形态,验证通过后核心链路用代码重写。先平台后代码是很务实的路径。
- 忽略团队技术栈。团队都在用 LangChain,你新项目硬上别的框架,维护成本和学习成本全摊给团队。已有栈能满足就优先复用。
- 以为框架能替代理解。无论选哪个,chunk 怎么切、topK 设几、检索为空怎么办,这些原理问题框架都不替你回答。选型对了,原理没懂,照样做不好。
六、一句话面试答法
你怎么做 AI 应用的框架选型? 我会问五个问题:团队会不会写代码、要多快上线、流程固定吗、需不需要循环回退、要不要深度定制。团队不写代码或要快速验证就上 Dify/Coze;会写代码、流程固定的简单需求我倾向裸写或 LangChain 直线链,不为用框架而用框架;需要循环、分支、回退的复杂 Agent 才上 LangGraph;要深度定制检索的回到代码类方案。选型服务于需求和团队,不是服务于简历,而且无论选什么,RAG 和 Agent 的原理都得自己懂。
七、动手实践:37 框架选型对比
一个决策脚本:用几个关键维度刻画你的项目需求,给 Dify/Coze、LangChain、LangGraph、裸写四个方案打分,输出推荐 + 完整理由。
7.1 在线运行
零依赖,纯标准库。跑内置的四个典型需求场景。
7.2 预期输出
=== 运营搭个问答机器人快速验证 ===
推荐:Dify/Coze 平台
- 团队不写代码:平台可拖拽,+3 平台
- 要求极快上线:平台省样板代码,+2 平台
- 流程固定无循环:裸写/LangChain 直线链够用,+2 裸写
- 最终得分:{'Dify/Coze 平台': 5, 'LangChain': 1, 'LangGraph': 0, '裸写(直接调 API)': 2}
=== 固定流程的 RAG 接口 ===
推荐:裸写(直接调 API)
- 团队会写代码:代码类方案可选
- 流程固定无循环:裸写/LangChain 直线链够用,+2 裸写
- 最终得分:{'Dify/Coze 平台': 0, 'LangChain': 2, 'LangGraph': 1, '裸写(直接调 API)': 3}
=== 多步骤复杂 Agent(需循环回退) ===
推荐:LangGraph
- 团队会写代码:代码类方案可选
- 需要循环/分支/回退:+3 LangGraph,-1 平台
- 需要深度定制:+2 LangChain/LangGraph,-2 平台
- 最终得分:{'Dify/Coze 平台': -3, 'LangChain': 3, 'LangGraph': 6, '裸写(直接调 API)': 1}
=== 要深度定制检索策略的知识库 ===
推荐:LangChain
- 团队会写代码:代码类方案可选
- 流程固定无循环:裸写/LangChain 直线链够用,+2 裸写
- 需要深度定制:+2 LangChain/LangGraph,-2 平台
- 最终得分:{'Dify/Coze 平台': -2, 'LangChain': 4, 'LangGraph': 3, '裸写(直接调 API)': 3}
7.3 代码 ↔ 概念对应
| 选型概念 | 在 main.py 哪里 |
|---|---|
| 刻画需求的关键维度 | Requirement 的五个字段 |
| 候选方案 | CANDIDATES |
| 打分决策逻辑 | recommend(每个维度加减分) |
| 决策理由可解释 | reasons 列表,记录每条加减分 |
7.4 决策维度说明
脚本用五个维度刻画需求,每个维度命中某方案的优势就加分、踩中劣势就减分:
| 维度 | 倾向 |
|---|---|
| 团队会不会写代码 | 不会 → 平台 |
| 是否要极快上线 | 要 → 平台 |
| 流程固定且无循环 | 是 → 裸写 / LangChain 直线链 |
| 需要循环/分支/回退 | 是 → LangGraph |
| 需要深度定制 | 是 → 代码类,平台扣分 |
7.5 动手改
- 在
main里加一条你自己项目的Requirement,看脚本推荐什么。 - 调整
recommend里的分值权重,比如把「快速上线」的权重提高,观察推荐变化。 - 加一个新维度「是否需要团队协作可视化」(平台优势),扩展打分逻辑。
7.6 可运行源码:框架选型对比
main.py
八、总结
- 先把候选方案的边界划清:记住一条反直觉的事实:裸写常常是最优解。
- 五个问题问下来,答案基本就出来了:这五个问题不是并列的,有优先级:先看团队能力和上线压力(决定平台 vs 代码),再看流程复杂度(决定 LangChain vs LangGraph vs 裸写)。
- 把选型逻辑写成可跑的脚本:打分法的好处是可解释:推荐结果背后的每一分都说得清,开会时能直接把理由摆出来,而不是"我觉得"。
- 工程上真正会踩的坑:为了简历好看上 LangGraph,结果需求是个固定流程,平白增加复杂度和维护成本。
- 一句话面试答法:团队不写代码或要快速验证就上 Dify/Coze;
学完自测
选择所有正确答案;提交后逐项核对判断依据。