AI 工具 | | 约 20 分钟 | 7,917 字

AI 应用开发框架对比:选哪个

LangChain vs LlamaIndex vs Semantic Kernel vs Vercel AI SDK 的对比与选型

框架太多,选哪个

AI 应用开发框架越来越多,每个都说自己是最好的选择。作为开发者,我们需要的不是”最好”的框架,而是最适合当前项目的框架。

这篇文章我们把主流的 AI 开发框架放在一起对比,帮你做出选择。

参赛选手

LangChain

Python/TypeScript 生态中最流行的 LLM 应用框架。功能全面,社区活跃,但也因为抽象层太多而被吐槽。

LlamaIndex

专注于数据索引和查询的框架。如果你的核心需求是 RAG(检索增强生成),LlamaIndex 可能是最直接的选择。

Semantic Kernel

微软推出的 AI 编排框架,支持 C#、Python 和 Java。如果你在微软生态中工作,这是官方推荐的选择。

Vercel AI SDK

TypeScript 优先的 AI 应用工具包。专注于 Web 应用场景,和 React/Next.js 深度集成。

直接使用 SDK

不用框架,直接调用 OpenAI、Anthropic 等提供商的 SDK。最简单,最灵活,但需要自己处理更多细节。

功能对比矩阵

核心功能

功能LangChainLlamaIndexSemantic KernelVercel AI SDK直接 SDK
模型调用
流式响应
提示词模板
Chain/Pipeline
RAG最强需自建
Agent需自建
工具调用
记忆管理需自建
结构化输出需自建
多模型支持最多单一

语言支持

框架PythonTypeScriptC#JavaGo
LangChain
LlamaIndex
Semantic Kernel
Vercel AI SDK

生态和社区

维度LangChainLlamaIndexSemantic KernelVercel AI SDK
GitHub Stars95k+38k+22k+15k+
npm/PyPI 下载最高
文档质量很好
社区活跃度最高
第三方集成最多
学习资源最多
更新频率非常频繁频繁频繁频繁

学习曲线对比

LangChain

学习曲线较陡。概念多(Chain、Agent、Tool、Memory、Callback、LCEL),API 变化频繁。但一旦掌握,能力很强。

# LangChain 的典型代码风格
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser

chain = (
    ChatPromptTemplate.from_template("翻译成英文: {text}")
    | ChatOpenAI(model="gpt-4o-mini")
    | StrOutputParser()
)

result = chain.invoke({"text": "你好世界"})

上手时间:1-2 周

LlamaIndex

学习曲线较平缓。核心概念少(Document、Index、QueryEngine),5 行代码就能跑起来。

# LlamaIndex 的典型代码风格
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader

documents = SimpleDirectoryReader("./docs").load_data()
index = VectorStoreIndex.from_documents(documents)
response = index.as_query_engine().query("什么是微服务?")

上手时间:几小时到 1 天

Semantic Kernel

学习曲线中等。如果你熟悉微软生态(.NET、Azure),会比较顺畅。

// Semantic Kernel 的 C# 代码风格
var kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(
        "gpt-4o",
        "https://your-endpoint.openai.azure.com/",
        "your-api-key"
    )
    .Build();

var result = await kernel.InvokePromptAsync(
    "翻译成英文: {{$input}}",
    new() { ["input"] = "你好世界" }
);

上手时间:1 周

Vercel AI SDK

学习曲线最平缓(对前端开发者而言)。API 设计简洁,文档清晰。

// Vercel AI SDK 的典型代码风格
import { generateText } from 'ai';
import { openai } from '@ai-sdk/openai';

const { text } = await generateText({
  model: openai('gpt-4o-mini'),
  prompt: '翻译成英文: 你好世界',
});

上手时间:几小时

各框架的优缺点

LangChain

优点:

  • 功能最全面,几乎什么都能做
  • 社区最大,资源最多
  • 集成最丰富(100+ 模型提供商,100+ 工具)
  • LangSmith 提供了优秀的调试和监控工具
  • LangGraph 支持复杂的工作流编排

缺点:

  • 抽象层太多,简单任务也需要写很多代码
  • API 变化频繁,升级成本高
  • 性能开销较大
  • 调试困难(层层嵌套的抽象)
  • 文档有时跟不上代码变化

LlamaIndex

优点:

  • RAG 场景下最好用
  • 上手简单,5 行代码搞定
  • 丰富的数据连接器(LlamaHub)
  • 多种索引类型,适应不同查询需求
  • 内置评估工具

缺点:

  • RAG 之外的场景支持较弱
  • Agent 能力不如 LangChain
  • 工作流编排能力有限
  • 高级定制需要深入了解内部实现

Semantic Kernel

优点:

  • 微软官方支持,和 Azure 深度集成
  • 支持 C# 和 Java(其他框架不支持)
  • 企业级特性(安全、合规、监控)
  • Plugin 系统设计优雅
  • 适合已有 .NET 项目集成 AI

缺点:

  • 社区相对较小
  • Python 版本功能不如 C# 版完整
  • 学习资源相对较少
  • 和非微软生态的集成较少

Vercel AI SDK

优点:

  • TypeScript 原生,类型安全
  • React Hooks 开箱即用
  • 流式响应处理最优雅
  • API 设计简洁直观
  • 和 Next.js 完美集成
  • 结构化输出(Zod Schema)很好用

缺点:

  • 只支持 TypeScript
  • RAG 支持较弱(需要自己实现)
  • Agent 能力有限
  • 主要面向 Web 应用场景
  • 后端能力不如 LangChain

直接使用 SDK

优点:

  • 最简单,最轻量
  • 完全控制,没有抽象层
  • 性能最好
  • 第一时间使用最新功能
  • 最容易调试

缺点:

  • 需要自己实现 RAG、Agent 等功能
  • 切换模型需要改代码
  • 没有现成的工具集成
  • 复杂应用需要大量样板代码

什么时候用什么

按项目类型选择

项目类型推荐框架原因
文档问答/知识库LlamaIndexRAG 最强
聊天机器人Vercel AI SDK 或 LangChain前端用 Vercel,后端用 LangChain
AI AgentLangChain + LangGraphAgent 生态最完善
企业 .NET 项目Semantic Kernel微软生态集成
Next.js Web 应用Vercel AI SDK原生集成
简单 API 调用直接 SDK不需要框架
复杂工作流LangChain + LangGraph工作流编排最强
数据分析LlamaIndex数据连接器丰富

按团队技术栈选择

技术栈推荐框架
Python 后端LangChain 或 LlamaIndex
TypeScript 全栈Vercel AI SDK
C# / .NETSemantic Kernel
JavaSemantic Kernel
React / Next.jsVercel AI SDK
FastAPI / DjangoLangChain

按经验水平选择

经验推荐原因
AI 开发新手LlamaIndex 或 Vercel AI SDK上手快
有经验的后端LangChain功能全面
前端开发者Vercel AI SDKTypeScript 原生
企业架构师Semantic Kernel企业级特性
追求极简直接 SDK最少依赖

它们能一起用吗

答案是可以。这些框架并不互斥:

LangChain + LlamaIndex

# 用 LlamaIndex 构建索引,用 LangChain 构建 Agent
from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from langchain.agents import AgentExecutor, create_openai_tools_agent
from langchain.tools import Tool

# LlamaIndex 构建查询引擎
documents = SimpleDirectoryReader("./docs").load_data()
index = VectorStoreIndex.from_documents(documents)
query_engine = index.as_query_engine()

# 包装成 LangChain Tool
doc_search_tool = Tool(
    name="document_search",
    description="搜索项目文档",
    func=lambda q: str(query_engine.query(q))
)

# 在 LangChain Agent 中使用
# agent = create_openai_tools_agent(llm, [doc_search_tool], prompt)

Vercel AI SDK + LangChain

// 前端用 Vercel AI SDK,后端用 LangChain
// 前端: React 组件
import { useChat } from 'ai/react';

export function Chat() {
  const { messages, input, handleSubmit } = useChat({
    api: '/api/chat'  // 后端可以用 LangChain 处理
  });
  // ...
}
# 后端: FastAPI + LangChain
from fastapi import FastAPI
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate

app = FastAPI()

@app.post("/api/chat")
async def chat(request: ChatRequest):
    chain = prompt | llm | parser
    result = chain.invoke({"question": request.message})
    return {"response": result}

决策流程图

你的主要需求是什么?

├── 文档问答 / RAG
│   └── LlamaIndex(最直接)

├── 聊天应用 / Web UI
│   ├── 用 React/Next.js? → Vercel AI SDK
│   └── 纯后端? → LangChain 或直接 SDK

├── AI Agent / 工具调用
│   └── LangChain + LangGraph

├── 企业级 .NET/Java 项目
│   └── Semantic Kernel

├── 简单的 API 调用
│   └── 直接使用提供商 SDK

└── 不确定
    ├── Python 开发者 → 从 LangChain 开始
    └── TypeScript 开发者 → 从 Vercel AI SDK 开始

实际建议

1. 从简单开始

不要一上来就用最复杂的框架。先用直接 SDK 实现核心功能,当你发现需要更多抽象时,再引入框架。

2. 不要过度工程

如果你只需要调用一个 API 拿到回复,不需要 LangChain。如果你只需要一个简单的 RAG,LlamaIndex 的 5 行代码就够了。

3. 关注框架的稳定性

AI 框架更新很快,选择一个 API 相对稳定的框架可以减少维护成本。Vercel AI SDK 和直接 SDK 在这方面做得比较好。

4. 考虑团队因素

选框架不只是技术决策,还要考虑团队的技术栈、学习成本和维护能力。一个团队都熟悉的”次优”框架,往往比一个没人会用的”最优”框架更好。

5. 保持灵活

AI 领域变化很快,今天的最佳选择可能明天就被超越。设计你的应用时,尽量把 AI 调用封装成独立的模块,方便未来切换框架。

# 好的做法:封装 AI 调用
class AIService:
    def __init__(self, provider: str = "langchain"):
        self.provider = provider

    def generate(self, prompt: str) -> str:
        if self.provider == "langchain":
            return self._langchain_generate(prompt)
        elif self.provider == "direct":
            return self._direct_generate(prompt)

    def _langchain_generate(self, prompt: str) -> str:
        # LangChain 实现
        ...

    def _direct_generate(self, prompt: str) -> str:
        # 直接 SDK 实现
        ...

总结

如果你…选择…
需要 RAGLlamaIndex
需要 AgentLangChain
做 Web 应用Vercel AI SDK
用 .NET/JavaSemantic Kernel
追求简单直接 SDK
什么都要LangChain(但要做好学习投入的准备)

没有完美的框架,只有适合当前需求的框架。选一个开始,在实践中调整。

框架是脚手架,不是地基。你的业务逻辑和数据才是真正的价值。选好工具,然后把精力放在解决真正的问题上。

评论

加载中...

相关文章

分享:

评论

加载中...