LangChain源码深度解析:揭秘分层架构与核心模块,轻松掌握RAG与Agent请求流程! 本文深入剖析了LangChain Python仓库的分层架构详细解析了langchain-core、langchain、langchain-classic、partners/*、standard-tests、model-profiles等核心模块的功能定位。文章揭示了LangChain如何通过Prompt/Runnable/Model组合、RAG检索增强、Agent工具调用三条主线实现高效运行。特别针对工程实践者和技术负责人文章提供了清晰的代码示例和架构图帮助读者快速理解LangChain的请求流动机制避免常见误区为深入源码学习和项目实践奠定坚实基础。读完这篇文章你可以按层定位 LangChain Python 仓库知道 langchain-core、langchain、langchain-classic、partners/*、standard-tests、model-profiles 分别解决什么问题以及一条请求在 RAG 和 Agent 场景下是怎么流动的。适合谁工程实践者、技术负责人或者刚接手 LangChain 代码库的人。如果你正在做 Agent、RAG、模型切换、Provider 适配这篇会很有用。阅读假设本文基于当前 LangChain Python monorepo 结构整理聚焦 libs/ 目录下的包关系不展开 JS/TS 仓库也不深入 LangSmith 和 LangGraph 独立产品能力。01 背景为什么很多人第一次看 LangChain 会觉得“又大又散”LangChain 容易让人混淆不是因为它设计混乱而是因为它把“公共 API”“核心抽象”“第三方集成”“文本处理”“标准测试”“模型能力元数据”拆成了多个包。如果你只盯着 pip install langchain 这个入口很容易误以为所有能力都塞在一个包里。等到你开始看源码、做适配、排查问题就会发现真正的结构是分层的。更关键的是LangChain 还有两套视角要同时看。一套是仓库视角代码放在哪一层谁依赖谁。另一套是运行时视角一条请求从 Prompt 到 Model、从 Retriever 到 Answer、从 Agent 到 Tool Loop 是怎么跑起来的。02 目标把 LangChain 看成“分层架构 三条主线”如果只用一句话概括我会把 LangChain 理解成这样LangChain 不是一个“大而全”的单包而是一套由 langchain-core 抽象协议、langchain 公共入口、partners/* Provider 适配、text-splitters 预处理工具、standard-tests 标准回归、model-profiles 能力画像组成的工程化体系。在这个体系上最值得抓住的三条运行时主线是• Prompt / Runnable / Model 组合主线• RAG 检索增强主线• Agent 工具调用主线只要你把这四层结构和三条主线对上LangChain 的整体架构就不再抽象。03 方案总览先看 monorepo再看每条请求怎么流动先看整体分层图。图 1LangChain Python monorepo 分层架构。它不是一个单体包而是公共入口、核心抽象、集成适配与质量保障的组合。从这张图里可以先抓住 6 个判断langchain 是 v1 的公共入口面向今天的新项目。langchain-classic 是 legacy 包承接旧链路、历史 API 和兼容逻辑。langchain-core 定义核心抽象例如 chat model、retriever、vector store、runnables。partners/* 提供第三方 Provider 集成比如 OpenAI、Anthropic、Ollama 等。text-splitters 负责把长文档切成更适合索引和检索的 chunk。standard-tests 和 model-profiles 不是“外围工具”而是集成质量和能力元数据的一部分。这也是为什么很多人在看 LangChain 时会犯第一个错误明明想找“协议层”却一直在“公共入口层”里兜圈子。04 关键步骤先拆公共入口和运行时组合层如果你想理解一条普通 LLM 调用是怎么装起来的最值得看的是 init_chat_model()、ChatPromptTemplate 和 RunnableSequence / LCEL 之间的关系。图 2init_chat_model() 负责把 Provider 适配包装配成统一的 BaseChatModel而 prompt | model 会组合成 RunnableSequence。这里最重要的不是 API 名字而是职责边界• init_chat_model() 负责“统一入口”。你给它模型标识和 Provider它去装配对应的集成包。• BaseChatModel 负责“统一模型接口”。无论底层是 OpenAI、Anthropic 还是其他 Provider运行时都尽量收敛到统一行为。• ChatPromptTemplate 负责“把输入组织成消息”。• RunnableSequence / LCEL 负责“把组件声明式地接起来”并天然支持 invoke、stream、batch 这一类执行方式。换句话说LangChain 的关键价值不只是“帮你调一次模型”而是把 Prompt、Model、Parser、Retriever、Tool 这些组件放进同一套可组合协议里。下面这段代码就是最小骨架from langchain.chat_models import init_chat_model from langchain_core.prompts import ChatPromptTemplate model init_chat_model(openai:your-chat-model) prompt ChatPromptTemplate.from_messages( [ (system, 你是内部知识库助手。), (human, {question}), ] ) chain prompt | model reply chain.invoke({question: LangChain 的核心抽象是什么})这段代码背后的重点不是 invoke()而是中间那条 prompt | model。这个竖线表达的不是“字符串拼接”而是 LCEL 的组合语义。它意味着 LangChain 在运行时把 Prompt 和 Model 收敛成了一个 Runnable所以你后面可以继续接 parser、retriever、fallback、history、trace config。05 关键步骤再看 RAG 和 Agent 两条主线LangChain 最常见的两种业务线路是 RAG 和 Agent。它们看起来都在“拿上下文再回答”但本质上解决的是两个不同问题。RAG 解决的是“如何把外部知识带进模型上下文”。Agent 解决的是“如何让模型做决策、调用工具、管理状态并循环执行”。先看 RAG。图 3RAG 的重点不是“检索一下就结束”而是把索引阶段、检索阶段、答案合成阶段拆开。这条链路里建议记住 4 个动作用 text-splitters 把原始文档切成 chunk。用 embeddings 把 chunk 向量化写入 vector store。通过 as_retriever() 把 vector store 暴露成 retriever。用 create_retrieval_chain() 把“检索结果 问题输入 combine_docs_chain”拼成一个可执行链。一个足够小、但能对上架构图的骨架是这样from langchain_classic.chains import create_retrieval_chain retriever vector_store.as_retriever( search_typemmr, search_kwargs{k: 4} ) rag_chain create_retrieval_chain(retriever, question_answer_chain) result rag_chain.invoke({input: LangChain 的核心抽象是什么})如果你用的是带对话历史的问答链路会再多一层“history-aware retriever”。本质上它先把用户问题改写成更适合检索的独立问题再把检索结果送给回答链。再看 Agent。图 4create_agent() 不是简单返回一个函数而是把模型、工具、状态持久化能力编译进一个基于 LangGraph 的执行图。这张图最关键的地方有 5 个create_agent() 接收 system_prompt、tools、middleware、response_format 等装配输入。它产出的不是一次性调用器而是一个编译后的 StateGraph。Model Node 先跑模型如果输出里有 tool_calls就进入 Tool Node。Tool Node 执行完以后会把 ToolMessage 回灌给模型形成循环。checkpointer 和 store 负责线程级状态和跨线程共享状态。最小骨架如下from langchain.agents import create_agent def check_weather(location: str) - str: return f{location}: sunny agent create_agent( modelopenai:your-chat-model, tools[check_weather], system_prompt你是一个会调用工具的助手。, ) for chunk in agent.stream( {messages: [{role: user, content: 帮我查一下上海天气}]}, stream_modeupdates, ): print(chunk)如果你把 RAG 和 Agent 放在一起看会发现一个非常实用的区分标准RAG 更像“补上下文”。Agent 更像“做决策和执行动作”。很多系统会把两者组合起来但不要在脑子里把它们混成一件事。06 别忽略保障层为什么 standard-tests 和 model-profiles 也属于架构如果你只看运行时很容易低估 LangChain 的工程性。但在 monorepo 里Provider 集成不是“写个 adapter 就完了”。它后面还有一套维护闭环。图 5一个 Partner 集成要稳定不只要实现接口还要跟上模型画像刷新和标准测试。这张图对应的现实含义是• langchain-core 给出了接口契约。• partner package 去实现这些契约。• langchain-tests 提供标准测试基座保证不同 Provider 至少在基础行为上可比。• langchain-model-profiles 则负责把模型能力数据同步进集成包让 .profile、structured output、tool calling 等能力判断更可靠。这也是为什么我会把 standard-tests 和 model-profiles 视为“架构层的一部分”而不是“辅助脚本”。它们决定了 LangChain 不是只追求“能跑”还追求“多 Provider 下仍然可维护、可回归、可扩展”。07 踩坑与排雷把 langchain 当成唯一入口。现象是想看抽象协议却只在公共 API 上打转。解决方法是先判断你要看的到底是“接口层”还是“入口层”。看协议去 langchain-core看公共装配去 langchain。把 langchain-classic 当成新增功能主阵地。langchain-classic 当然还能用但它主要承接 legacy chains、历史 re-export 和兼容逻辑。做新功能时优先看主 langchain 包。做 RAG 时只盯着向量库不看切分策略。很多检索效果问题不是 vector store 本身有问题而是 chunk 太大、太碎或者 history-aware retriever 根本没接上。做 Agent 时只盯着模型不看状态层。当你需要中断恢复、跨轮次记忆、跨线程共享信息时真正影响系统设计的是 checkpointer 和 store而不是 prompt 再润色一下。新增 Provider 适配只写代码不补保障链路。如果一个集成没有配套标准测试和模型能力元数据它在多人协作和后续升级里会越来越难维护。怎么验证你是真的看懂了你能回答langchain-core 和 langchain 的边界分别是什么。能画出一条调用从 ChatPromptTemplate 到 RunnableSequence 再到 BaseChatModel 的路径。你能说明 RAG 和 Agent 的分工差异。你能说出新增一个 Provider 时至少要看哪几层接口、适配、标准测试、能力画像。可复用清单拿走就能用想看 v1 公共 API先读 libs/langchain_v1想看核心协议先读 libs/core想看 legacy / 兼容逻辑再看 libs/langchain想看文本切分看 libs/text-splitters想看 Provider 适配看 libs/partners/*想看统一回归看 libs/standard-tests想看模型能力元数据看 libs/model-profiles结尾下一步怎么做如果你准备继续读源码我建议按这条顺序走一遍从 init_chat_model()开始理解公共模型入口怎么落到具体 Provider。从 create_retrieval_chain()开始理解 RAG 为什么是“检索组件 合成组件”的组合。从 create_agent()开始理解 LangChain 为什么把 Agent 建模成图而不是单次函数调用。2026年AI行业最大的机会毫无疑问就在应用层字节跳动已有7个团队全速布局Agent大模型岗位暴增69%年薪破百万腾讯、京东、百度开放招聘技术岗80%与AI相关……如今超过60%的企业都在推进AI产品落地而真正能交付项目的大模型应用开发工程师****却极度稀缺落地AI应用绝对不是写几个prompt调几个API就能搞定的企业真正需要的是能搞定这三项核心能力的人✅RAG融入外部信息修正模型输出给模型装靠谱大脑✅Agent智能体让AI自主干活通过工具调用Tools环境交互多步推理完成复杂任务。比如做智能客服等等……✅微调针对特定任务优化让模型适配业务目前脉脉上有超过1000家企业发布大模型相关岗位人工智能岗平均月薪7.8w实习生日薪高达4000远超其他行业收入水平技术的稀缺性才是你「值钱」的关键具备AI能力的程序员比传统开发高出不止一截有的人早就转行AI方向拿到百万年薪AI浪潮正在重构程序员的核心竞争力现在入场仍是最佳时机我把大模型的学习全流程已经整理好了抓住AI时代风口轻松解锁职业新可能希望大家都能把握机遇实现薪资/职业跃迁这份完整版的大模型 AI 学习资料已经上传CSDN朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】⭐️从大模型微调到AI Agent智能体搭建剖析AI技术的应用场景用实战经验落地AI技术。从GPT到最火的开源模型让你从容面对AI技术革新大模型微调掌握主流大模型如DeepSeek、Qwen等的微调技术针对特定场景优化模型性能。学习如何利用领域数据如制造、医药、金融等进行模型定制提升任务准确性和效率。RAG应用开发深入理解检索增强生成Retrieval-Augmented Generation, RAG技术构建高效的知识检索与生成系统。应用于垂类场景如法律文档分析、医疗诊断辅助、金融报告生成等实现精准信息提取与内容生成。AI Agent智能体搭建学习如何设计和开发AI Agent实现多任务协同、自主决策和复杂问题解决。构建垂类场景下的智能助手如制造业中的设备故障诊断Agent、金融领域的投资分析Agent等。如果你也有以下诉求快速链接产品/业务团队参与前沿项目构建技术壁垒从竞争者中脱颖而出避开35岁裁员危险期顺利拿下高薪岗迭代技术水平延长未来20年的新职业发展……那这节课你一定要来听因为留给普通程序员的时间真的不多了立即扫码即可免费预约「AI技术原理 实战应用 职业发展」「大模型应用开发实战公开课」还有靠谱的内推机会直聘权益完课后赠送大模型应用案例集、AI商业落地白皮书