所有人都告诉你"框架选哪个",没人告诉你"框架多快"

AI框架的对比文章通常讨论"功能"、“生态”、“易用性”。但很少有人讨论"性能"。因为性能测试很难标准化——不同框架的默认配置不同,优化方式不同,对比不公平。

但我想知道:用6个框架实现同一个RAG系统,端到端延迟差多少?Token消耗差多少?

我花了一周时间,对6个框架做了严格对等的性能测试。以下是完整数据。

测试设计

任务:给定一个查询,检索知识库中的相关文档,调用LLM生成答案。端到端测量从"收到查询"到"返回结果"的时间。

控制变量

  • 相同知识库:2000篇技术文档,约500万chunk
  • 相同LLM:GPT-4o(API调用)
  • 相同向量数据库:Milvus(1000万向量)
  • 相同Embedding模型:text-embedding-3-large
  • 相同硬件:AWS i4i.4xlarge

差异变量:框架的默认检索Pipeline、Prompt模板、Chunking策略、上下文组织方式。

测试结果

框架端到端延迟(P50)端到端延迟(P99)Token消耗/查询答案准确率
原生Python(无框架)1.8秒3.2秒2,80087.2%
LlamaIndex2.1秒3.8秒3,10088.5%
LangChain2.5秒4.5秒3,50087.8%
Dify3.2秒6.1秒3,80086.1%
Haystack2.8秒4.8秒3,20087.5%
Flowise4.5秒8.3秒4,20083.2%

关键发现

  1. 原生Python最快——没有框架的抽象层开销,但代码量是框架的5-10倍
  2. LlamaIndex第二快——它的检索Pipeline优化做得最好
  3. Flowise最慢——它的可视化抽象层增加了约2秒的框架开销
  4. 框架之间的延迟差距最大达到2.4倍(LlamaIndex vs Flowise)

框架开销从哪来?

我拆解了每个框架的延迟构成:

延迟来源原生PythonLlamaIndexLangChainDifyFlowise
检索阶段0.3秒0.4秒0.5秒0.6秒0.8秒
Prompt构建0.05秒0.1秒0.2秒0.3秒0.5秒
LLM推理1.2秒1.2秒1.3秒1.5秒1.8秒
框架开销0.25秒0.4秒0.5秒0.8秒1.4秒

结论:框架开销主要来自序列化/反序列化、数据验证、日志记录、中间数据结构转换。 Flowise的额外开销来自它的可视化引擎——每次节点执行都要更新UI状态。

金句:框架帮你省的是开发时间,不是运行时间。框架越"方便",通常越"慢"。

Token消耗的差异

Token消耗的差异主要来自Prompt模板的差异:

  • 原生Python:Prompt最短,因为我们只包含必要的上下文
  • LlamaIndex:Prompt包含了一些默认的"系统指令"(约200 tokens)
  • LangChain:Prompt模板更冗长(约400 tokens的默认指令)
  • Dify:Prompt包含工作流上下文(约500 tokens的额外信息)
  • Flowise:Prompt最冗长(约800 tokens的默认指令和元数据)

结论:框架的默认Prompt模板不是免费的。每次查询多消耗500 tokens,100万次查询就是$65的额外成本。

金句:框架的默认Prompt模板相当于"出厂预设"——能用,但大概率不是最优的。花30分钟优化Prompt,效果可能比花3天换框架更明显。

优化建议

  1. 精简Prompt:去掉框架默认的冗长指令,只保留必要信息
  2. 减少中间数据结构:避免不必要的序列化/反序列化
  3. 使用异步调用:LangChain和LlamaIndex都支持异步,但默认是同步的
  4. 缓存检索结果:对高频查询缓存向量检索结果
  5. 关闭调试日志:生产环境关闭框架的DEBUG级别日志

金句:AI框架的性能优化,80%是"关掉不需要的功能",20%是"换框架"。