LangChain高频面试题深度解析:从核心组件到Agent选型,助你面试一把通关!
谈到Agent基本绕不开LangChain很多Agent项目都是用LangChain开发的。所以在 AI Agent 面试里LangChain相关问题的出现频率也非常高。最近整理面试题的时候我把自己项目里经常用到、面试里经常被问到的问题都过了一遍包括Runnable、LCEL、Structured Output、Agent、MCP等核心概念。这篇文章就和大家一起系统梳理一下LangChain相关的高频面试题。另外完整面试题文档也已经同步到了aiflowline.cn大家可以结合文章一起阅读。1、为什么选择使用LangChain在实际开发中直接调用大模型的API来构建应用很快会遇到几个问题Prompt管理混乱提示词散落在代码各处修改一个地方可能漏掉另一个地方变得越来越难以维护。切换模型成本高每个大模型厂商的API格式都不一样OpenAI、DeepSeek、Claude都有自己的调用方式。如果需要切换模型需要改动大量代码。复杂功能难以维护想实现多轮对话、工具调用、知识库检索等功能时逻辑越来越混乱代码难以维护。LangChain正是为了解决这些问题而诞生的它对模型封装、记忆管理、工具调用等模块进行抽象提供了统一的接口切换模型只需修改模型名称各个模块的交互与具体模型无关。在使用大模型的原生SDK调用时修改模型要修改很多代码而在LangChain中只需要修改模型名称即可LangChain会根据模型名称去自动创建对应模型的对象# 切换模型只需要改这一个地方llm init_chat_model(gpt-4o-mini, temperature0)# 或者llm init_chat_model(deepseek-chat, temperature0)2、LangChain有哪些核心组件在LangChain v1.0中主要包含六个核心模块Models模型LangChain统一了不同厂商模型的调用方式。在v1.0中将各个模型的集成包独立拆分如langchain-openai、langchain-anthropic等通过init_chat_model可以用统一的方式初始化模型切换模型只需修改对应供应商对应模型名称字符串。from langchain.chat_models import init_chat_model# 使用OpenAIllm init_chat_model(openai:gpt-5.4)# 切换到Claude只需改模型名称llm init_chat_model(anthropic:claude-sonnet-4-6)Agent智能体Agent是LangChain v1.0版本的核心Agent的本质是模型在循环中调用工具直到任务完成。提供了create_agent方法来快速创建Agent在它的内部帮我们完成了这个Agent循环。创建一个Agent核心有四个参数model使用大语言模型tools可调用的工具列表system prompt系统提示词middleware中间件用于扩展Agent能力from langchain.agents import create_agentagent create_agent( modelclaude-sonnet-4-6, tools[search_web, analyze_data], system_prompt你是一个专为程序员服务的智能助手)create_agent底层基于LangGraph构建天然支持检查点Checkpoint、流式输出Streaming、人机协作Human-in-the-loop和时间旅行Time Travel等能力。Tools工具工具让Agent能够与外部世界进行交互比如获取实时数据、执行代码、查询数据库、调用API等。任何Python函数都可以通过tool装饰器快速定义为工具函数参数和类型作为输入Schema方法注释作为工具描述。from langchain.tools import tooltooldef search_database(query: str, limit: int 10) - str: 查询数据库匹配对应记录 return fFound {limit} results for {query}在工具内部还可以通过ToolRuntime参数访问运行时上下文包括短期记忆State、长期记忆Store、用户上下文Context等信息。Middleware中间件Middleware是LangChain v1.0中最重要的扩展机制它允许在Agent执行的各个步骤插入自定义逻辑。Middleware在Agent循环的不同阶段暴露了钩子函数钩子触发时机典型用途before_agentAgent开始执行前加载记忆、校验输入before_model每次LLM调用前更新提示词、裁剪消息wrap_model_call包裹LLM调用动态选择模型、拦截请求wrap_tool_call包裹工具调用错误处理、动态工具注册after_model每次LLM响应后输出校验、内容审查after_agentAgent结束后保存结果、清理资源LangChain内置了多个常用中间件from langchain.agents import create_agentfrom langchain.agents.middleware import ( PIIMiddleware, # PII脱敏 SummarizationMiddleware, # 对话摘要压缩 HumanInTheLoopMiddleware # 人工审批)agent create_agent( modelgpt-5.5, tools[read_email, send_email], middleware[ PIIMiddleware(email, strategyredact), SummarizationMiddleware(modelclaude-sonnet-4-6, trigger{tokens: 500}), HumanInTheLoopMiddleware(interrupt_on{send_email: True}), ])Memory记忆Memory让Agent具备上下文感知和跨会话记忆能力。v1.0通过LangGraph的机制实现两种记忆短期记忆State基于LangGraph的State对象存储当前会话的消息历史和自定义字段会话结束即消失长期记忆Store基于LangGraph的Store以命名空间键值对的方式持久化存储数据跨会话可用此外SummarizationMiddleware可以在对话过长时自动压缩历史消息防止超出模型的上下文窗口大小。RAG相关组件在LangChain中通过文档加载器Document Loader、文本分割器Text Splitter、文本嵌入Embedding、向量数据库Vector Store和检索器Retriever等模块的组合来实现RAG让大模型能够基于向量检索匹配语义最相近的文本片段进行回答减少幻觉。3、Runnable 是什么Runnable是 LangChain 里最基础的执行单元。可以把它理解成为一段可以执行的代码在LangChain中模型、Prompt模板、Retriever、Output Parser甚至一个普通函数只要实现了Runnable类就能用同一套方法去调用Runnable接口提供了几个标准方法invoke()单次调用batch()批量调用stream()流式输出ainvoke()/abatch()/astream()对应的异步版本一个Prompt模板是Runnable可以调用invoke去渲染模板一个model也是Runnable可以使用invoke来调用LLM在LangChain中大部分组件都实现了Runnable类因此在LangChain才可以很轻松的实现LCEL表达式。4、RunnableSequence 是什么RunnableSequence作用就是把多个Runnable按顺序连接前一个的输出自动作为后一个Runnable的输入。最常见的写法就是LCEL调用时会依次执行先渲染Prompt再调用模型最后用输出解析器输出。chain prompt | model | output_parserRunnableSequence的特点是流程固定、步骤明确适合写问答、摘要、分类等场景。它跟Agent的区别在于Agent会自主决定下一步做什么而RunnableSequence完全是按照顺序执行。5、LCEL 是什么LCEL全称LangChain Expression Language是 LangChain 提供的一套链式组合写法。核心是用管道符|将Runnable连起来。比如一个RAG流程可以写成chain ( {context: retriever, question: lambda x: x[question]} | prompt | model | parser)LCEL要解决的问题很简单以前要把上一个组件的执行结果传递给下一个组件。以前需要写很多中间变量和代码现在直接用管道符表达流程一目了然。LCEL支持几种常见模式顺序执行prompt | model | parser并行执行用RunnableParallel同时跑多个Runnable结果合并成一个字典分支逻辑根据条件走不同链路LCEL更适合步骤固定的场景。如果业务流程涉及循环、人工审批、断点恢复这些场景推荐使用LangGraph。6、Output Parser 的作用是什么Output Parser输出解析器用来把大模型返回的文本转换成特定的数据结构进行输出。大模型默认输出通常是自然语言比如用户名是张三年龄是 28 岁。但程序更希望拿到结构化结果比如{ name: 张三, age: 28}在LangChain中Output Parser的作用主要有两个把模型输出的字符串解析成JSON、对象、列表、枚举等结构化数据。检查模型返回的数据是否符合预期格式比如字段是否缺失、类型是否正确。在 LangChain 里Output Parser常用于普通文本模型输出解析。不过现在很多模型已经支持使用结构化输出和工具调用去约束输出结果这些方式比单纯依赖文本解析更稳定。7、Structured Output 如何实现Structured Output结构化输出是让模型按照预先定义好的结构返回结果而不是随意生成的自然语言文本。常见实现方式有三种。通过提示词定义结构先定义输出格式比如用Pydantic、JSON Schema等描述字段。from pydantic import BaseModel, Fieldclass UserInfo(BaseModel): name: str Field(description用户名) age: int Field(description年龄)在提示词中告诉LLM按照这个Schema格式返回{ name: 张三, age: 28}使用模型原生Structured Output能力现在很多模型都支持原生结构化输出例如gpt、claude等模型都有类似能力。在 LangChain 中可以使用structured_llm llm.with_structured_output(UserInfo)result structured_llm.invoke(提取用户信息张三今年 28 岁)这样返回的result就不是普通字符串而是一个UserInfo对象。使用Tool Calling实现结构化输出Tool Calling工具调用也可以用来实现Structured Output。将要结构化输出的对象结构作为工具的入参通过提示词让LLM调用这个工具LLM返回的工具调用参数就是我们想要的结构化输出数据了。例如定义一个工具{ name: extract_user_info, parameters: { type: object, properties: { name: {type: string}, age: {type: integer} }, required: [name, age] }}模型会返回类似{ name: extract_user_info, arguments: { name: 张三, age: 28 }}8、LangChain v1.x 与 v0.x 有哪些区别LangChain v1.x 相比 v0.x架构更清晰用法更稳定。主要区别如下。Agent 架构变化v0.x 里常见写法是使用AgentExecutor、initialize_agent等方式创建Agent。v1.x 中更推荐使用新的AgentAPI例如from langchain.agents import create_agentv1.x 的Agent底层基于LangGraph天然支持更可靠的状态管理、循环控制、持久化和人工介入。LangGraph 成为 Agent 的底层基础v0.x 里 LangChain 和 LangGraph 更像两个相对独立的项目。v1.x 中LangChain 的Agent构建在 LangGraph 之上。简单Agent可以继续用LangChain创建复杂流程、状态机、多Agent编排则更适合直接用 LangGraph。包结构更模块化v0.x 后期已经开始对依赖进行拆分v1.x则更加深度地进行拆分。常见包包括langchainlangchain-corelangchain-communitylangchain-openailangchain-anthropic这样可以减少主包体积也让不同模型、向量库、工具的集成更清晰。9、LangChain 如何实现 Tool CallingTool Calling工具调用是让LLM在需要时调用外部工具来完成任务比如查数据库、调接口、执行计算、搜索资料等。LangChain 实现Tool Calling分为以下几步定义工具可以用tool装饰器定义一个工具from langchain_core.tools import tooltooldef get_weather(city: str) - str: 查询指定城市的天气。 return f{city} 今天晴25 度。一个工具一定要有清晰的名称、参数和说明。模型会根据这些信息判断什么时候调用工具以及如何调用工具。绑定工具到模型将工具绑定到LLM对象上。llm_with_tools llm.bind_tools([get_weather])模型生成工具调用用户输入北京今天天气怎么样模型会返回对应的工具调用参数。{ name: get_weather, args: { city: 北京 }}执行工具LangChain会根据模型返回的工具名和参数调用对应的 Python 函数。工具执行结果例如北京 今天晴25 度。把工具结果交回模型工具执行成功后将工具执行结果包装到工具消息中模型拿到工具调用结果后生成最终的回答。你好北京今天晴气温 25 度气温舒适。如果通过LangChain提供的create_agent来创建Agent那么这个工具调用过程将由Agent自动完成。简单示例from langchain.agents import create_agentagent create_agent( modelllm, tools[get_weather], system_prompt你是一个天气助手)result agent.invoke({ messages: [ {role: user, content: 北京今天天气怎么样} ]})10、LangChain 如何接入 MCPMCP全称是Model Context ProtocolMCP的作用是将外部工具、服务以统一的协议暴露给模型使用。在LangChain中接入MCP的思路是把MCP Server提供的工具转换成LangChain工具然后再交给Agent使用。启动MCP ServerMCP Server提供了例如操作文件系统、数据库、浏览器、GitHub、内部业务系统等工具。MCP Server可以通过stdio、SSE、HTTP等方式通信。加载MCP工具通过MCP适配器加载工具。首先需要安装langchain-mcp-adapters包。from langchain_mcp_adapters.client import MultiServerMCPClientclient MultiServerMCPClient({ math: { command: python, args: [./math_server.py], transport: stdio, }})tools await client.get_tools()这里拿到的tools就是 LangChain 可以识别的工具列表。将工具绑定到Agentfrom langchain.agents import create_agentagent create_agent( modelllm, toolstools, system_prompt你可以使用外部工具完成任务)调用MCP工具当用户提出问题时模型会判断是否需要使用MCP工具。result await agent.ainvoke({ messages: [ {role: user, content: 帮我计算 123 * 456} ]})如果模型决定调用工具LangChain 会通过适配器把调用转发给MCP Server调用完成后再把结果返回给模型模型再生成最终结果MCP的意义在于把工具进行了标准化让不同的Agent可以共享这些工具无需重复实现这些工具逻辑另外这些工具本身可能是Java、C#、Python实现的通过MCP就可以屏蔽这些实现细节。11、LangChain 和 LlamaIndex 有什么区别LangChain和LlamaIndex都可以用来构建Agent应用但两者的侧重点不同。LangChain适合通用Agent应用开发框架它关注的是如何把模型、工具、记忆、提示词等能力集成到一个完整的应用中。它适合用来构建Agent、工具调用、工作流编排等场景。LlamaIndex解决的是”企业数据怎么接入大模型”的问题要做企业知识库、文档问答、复杂RAG检索系统优先考虑LlamaIndex。两者对比如下对比维度LangChainLlamaIndex核心定位构建LLM应用和Agent构建数据索引和RAG系统关注重点模型调用、工具调用、Agent编排、工作流文档加载、索引构建、检索增强生成适合场景Agent、多工具调用、复杂任务链路企业知识库、文档问答、数据检索抽象方式Model、Tool、Agent、Middleware、MemoryDocument、Node、Index、Retriever、Query Engine编排能力更强尤其是结合LangGraph相对弱更聚焦检索链路数据处理能力有RAG能力但不是唯一核心更强特别是多数据源和索引策略实际上在项目中两者可以组合使用用LlamaIndex负责文档解析、索引构建和检索用LangChain或LangGraph负责任务编排、工具调用和Agent流程控制。12、你用过哪些Agent框架选型是如何选的常用的Agent框架包括LangChain / LangGraph、AutoGen、CrewAI。LangChain / LangGraphLangChain适合快速构建Agent应用提供了模型、工具、记忆、中间件等组件。LangGraph更适合生产级复杂Agent它把Agent执行过程构建成图结构可以显式定义State、Node、Edge、Conditional Edge并支持Checkpoint、断点恢复、人工审批、循环执行等能力。如果项目对流程可控性、状态持久化、可观测性要求高优先选择LangGraph。AutoGenAutoGen更适合多Agent对话协作多个Agent负责不同的分工比如Planner、Coder、Reviewer、Executor之间的协作。它的优势是比较好地支持多Agent交互但如果需要严格控制流程每一步都要可追踪、可恢复就需要额外做很多开发工作。CrewAICrewAI 是一个专门做多Agent协作的框架。它最大的特点就是简单定义好Agent、任务和执行流程后很快就能跑起来一个多角色协作系统。比如让一个Agent查资料一个Agent做分析另一个Agent写报告这种场景用 CrewAI 开发效率很高。但如果流程开始变复杂例如需要根据不同情况走不同分支、保存执行状态、支持人工介入或者让Agent之间进行复杂协作CrewAI 的可控性就没有那么强了。这时候 LangGraph 往往会是更合适的选择。选型原则可以参考如果只是简单LLM调用或少量工具调用不一定需要Agent框架直接使用模型SDK加函数调用即可。如果是典型Agent应用需要工具调用、记忆、上下文管理可以选择LangChain。如果是生产级Agent流程需要分支、循环、人工审批、断点恢复优先选择LangGraph。如果核心是多角色协作和对话式任务拆解可以考虑AutoGen或CrewAI。如果核心是知识库问答和RAG可以优先选择LlamaIndex再结合LangGraph做流程编排。13、LangChain和LangGraph有什么区别LangChain 更关注如何快速构建Agent应用包括调用大模型、管理Prompt、工具调用、RAG、结构化输出等当我们需要开发一个简单的问答机器人、知识库助手等简单Agent时使用 LangChain 就足够了。LangGraph 更关注Agent的执行流程。当Agent的任务变得复杂后仅仅调用模型和工具已经不够了还需要考虑任务应该如何拆分、下一步执行什么、失败后是否重试、是否需要人工介入、流程中断后如何恢复等问题这时就可以选择使用LangGraph。可以这样理解LangChain 解决的是”Agent能做什么”的问题LangGraph 解决的就是”Agent应该怎么做”的问题。LangChain 提供各种能力组件而 LangGraph 负责把这些组件按照特定流程组织起来。在实际项目中两者往往是配合使用的。比如一个多Agent系统中Planner负责制定计划Researcher负责搜索资料Writer负责生成报告整个执行流程由 LangGraph 控制而每个Agent内部调用大模型、搜索工具、向量数据库等能力则由 LangChain 提供。因此对于普通的RAG、Tool Calling、结构化输出等场景LangChain 通常已经足够而对于多步骤任务、多Agent协作、复杂状态流转等场景LangGraph 会更加合适。实际上现在很多生产环境中的Agent项目通过 LangChain 构建Agent而流程编排则由 LangGraph 完成。假如你从2026年开始学大模型按这个步骤走准能稳步进阶。接下来告诉你一条最快的邪修路线3个月即可成为模型大师薪资直接起飞。阶段1:大模型基础阶段2:RAG应用开发工程阶段3:大模型Agent应用架构阶段4:大模型微调与私有化部署配套文档资源全套AI 大模型 学习资料朋友们如果需要可以微信扫描下方二维码免费领取【保证100%免费】配套文档资源全套AI 大模型 学习资料朋友们如果需要可以微信扫描下方二维码免费领取【保证100%免费】