LangChain现状反思:框架的野心与局限

引言 LangChain曾经是LLM应用开发框架的代名词。2023年的GitHub Star曲线一路飙升,投资人趋之若鹜,开发者言必称"用LangChain搭一个"。然而三年过去,当我们冷静审视这个框架时,会发现一个尴尬的现实:生产环境中坚持使用原生LangChain的团队越来越少。 这不是一篇唱衰文,而是一个早期采用者的诚实反思。 野心的轨迹 LangChain的愿景从未变小过——它想成为"AI应用开发的标准基础设施": LangChain → LLM应用的Spring Framework LangGraph → 有状态Agent编排引擎 LangSmith → 可观测性与评测平台 LangServe → 一键部署API LangCloud → 托管服务 这套全家桶覆盖了从开发、调试到部署的全链路。问题在于,每个环节都有更强的专门工具。 框架的过度抽象 LangChain最被诟病的问题是抽象层次过多。来看一个简单的RAG实现: # LangChain方式 from langchain_community.document_loaders import PyPDFLoader from langchain_text_splitters import RecursiveCharacterTextSplitter from langchain_community.embeddings import HuggingFaceEmbeddings from langchain_community.vectorstores import Chroma from langchain.chains import RetrievalQA from langchain_openai import ChatOpenAI loader = PyPDFLoader("doc.pdf") documents = loader.load() splitter = RecursiveCharacterTextSplitter(chunk_size=500, chunk_overlap=50) chunks = splitter.split_documents(documents) embeddings = HuggingFaceEmbeddings(model_name="BAAI/bge-m3") vectorstore = Chroma.from_documents(chunks, embeddings) llm = ChatOpenAI(model="gpt-5") qa_chain = RetrievalQA.from_chain_type(llm=llm, retriever=vectorstore.as_retriever()) result = qa_chain.invoke({"query": "文档说了什么?"}) # 直接用原生库 import chromadb from openai import OpenAI client = OpenAI() db = chromadb.PersistentClient(path="./chroma") collection = db.get_or_create_collection("docs") # 读取→切块→嵌入→存储→检索→生成 # 每一步都可控、可调试、可替换 LangChain的抽象增加了认知负担,但没有减少代码量。更严重的是,当你需要深入调试某个环节时,多层抽象让你很难定位问题。 LangGraph:方向对了但迟了 LangGraph是LangChain团队对"有状态Agent"需求的回应,采用了图结构来编排Agent工作流: from langgraph.graph import StateGraph, END from typing import TypedDict, Annotated import operator class AgentState(TypedDict): messages: Annotated[list, operator.add] next_agent: str def researcher(state: AgentState): # 调用搜索工具 return {"messages": [search_result], "next_agent": "writer"} def writer(state: AgentState): # 撰写报告 return {"messages": [report], "next_agent": END} workflow = StateGraph(AgentState) workflow.add_node("researcher", researcher) workflow.add_node("writer", writer) workflow.set_entry_point("researcher") workflow.add_conditional_edges("researcher", lambda s: s["next_agent"]) workflow.add_edge("writer", END) app = workflow.compile() 设计思路是对的——显式的状态图比隐式的Chain更适合复杂Agent场景。但问题在于,2025年CrewAI、AutoGen已经在这一领域建立了生态壁垒,LangGraph来得太晚。 ...

2026-07-29 · 2 min · 270 words · 硅基 AGI 探索者
鲁ICP备2026018361号