承接上篇:核心概念、环境搭建、大模型接入、提示词模板、链的基础使用、文档加载与拆分
承接下篇:RAG 核心实现、Agent 开发、记忆模块、工具调用、LangGraph 工作流、生产级工程化
附加篇目标:覆盖AI应用工程师、LLM开发岗95%以上的LangChain高频面试题,从基础概念到生产落地,从标准答案到高分加分项,一站式搞定面试,同时体系化巩固全链路知识点
适用人群:求职大模型应用开发相关岗位的应届生/社招从业者,以及想体系化巩固LangChain核心知识点的开发者


八股文使用说明

  1. 难度分级:所有题目按考察权重分为3个等级,★为基础必考题(一面必问,占比40%),★★为进阶高频题(二面核心,占比40%),★★★为大厂深度题(终面拉分,占比20%),可按需优先级复习。
  2. 答题逻辑:基础题看「认知完整性」,进阶题看「理解深度」,落地题看「实战经验」,场景题看「体系化设计能力」。
  3. 使用建议:先吃透上下篇的实战内容,再结合本文理解记忆,拒绝死记硬背。面试时优先答核心得分点,再结合自己的实战项目补充细节,效果翻倍。
  4. 版本适配:所有内容适配LangChain 0.2.x+稳定版,覆盖LangGraph等最新生产级特性,规避官方已废弃的旧语法(如LLMChain、SequentialChain等)。

一、LangChain基础概念必考题(★ 一面必问)

1. 什么是LangChain?它的核心定位是什么?

【考察点】对LangChain的基础认知,是否理解其核心价值,而非只会复制代码
【标准答案】
LangChain是一个开源的大语言模型(LLM)应用开发框架,核心定位是为LLM应用开发提供一套标准化、组件化、可组合的开发套件,大幅降低复杂LLM应用的开发门槛。
它将LLM应用开发的全流程拆分为可复用的独立组件(提示词模板、文档加载器、检索器、工具、记忆模块等),开发者可像搭积木一样自由组合这些组件,快速搭建从简单对话机器人到复杂AI Agent、生产级RAG系统等各类LLM应用,解决原生LLM API无法处理的私有数据接入、工具调用、多轮对话记忆、复杂任务规划等核心痛点。
【加分项】

  • 补充其核心设计理念是组件化+可组合,基于LCEL表达式实现了统一的Runnable接口,所有组件均支持invoke/stream/batch三种核心调用方式;
  • 区分与其他框架的差异:相比原生LLM API,解决了胶水代码冗余、组件复用难、工程化落地难的问题;相比LlamaIndex,通用性更强,覆盖从基础对话到复杂Agent的全场景,而LlamaIndex更聚焦于RAG垂直场景。

2. LCEL是什么?它的核心优势是什么?

【考察点】是否掌握LangChain当前官方主推的标准开发范式,是否还在使用废弃的旧Chain语法
【标准答案】
LCEL全称LangChain Expression Language(LangChain表达式语言),是LangChain官方主推的链构建方式,核心语法是通过|管道符,将实现了Runnable接口的组件按业务逻辑串联,前一个组件的输出自动作为后一个组件的输入。
【核心优势】

  1. 语法极简,可读性极强:一行代码即可构建复杂工作流,代码即逻辑,无需定义冗余的类;
  2. 统一的接口规范:所有LCEL构建的链,原生支持invoke(同步调用)、stream(流式输出)、batch(批量处理),无需额外开发;
  3. 内置生产级能力:原生支持重试、超时、错误处理、链路追踪、并行执行,无缝对接LangSmith可观测平台;
  4. 极致的灵活性:支持分支、条件判断、参数传递、多链组合,可实现任意复杂的业务逻辑,替代了旧版所有固定流程的Chain类。
    【加分项】
  • 能举例说明LCEL的最简用法:prompt | model | output_parser,并解释每个环节的流转逻辑;
  • 能提到RunnablePassthroughRunnableParallel等核心组件的用法,体现实战经验。

3. LangChain的核心基础组件有哪些?分别有什么作用?

【考察点】对LangChain组件化设计的整体认知,是否理清了各组件的定位
【标准答案】
LangChain的核心基础组件可分为7大类,覆盖LLM应用开发的全流程:

  1. LLM/Chat Model(大语言模型):整个应用的“大脑”,负责语言理解、逻辑推理、内容生成,LangChain对国内外所有主流大模型做了统一接口封装,换模型无需修改业务逻辑;
  2. Prompt Template(提示词模板):提示词工程的标准化实现,将固定的人设、规则与动态的用户输入分离,实现提示词的复用、可维护,支持基础模板、少样本模板、聊天模板等多种类型;
  3. Output Parser(输出解析器):将大模型生成的自由文本,转换为Python可直接处理的结构化数据(字符串、JSON、列表、字典等),解决大模型输出格式不稳定的问题;
  4. Document Loader(文档加载器):将PDF、Word、Markdown、网页、数据库等上百种格式的外部数据,转换为LangChain统一的Document对象,解决大模型“读不到”外部私有数据的问题;
  5. Text Splitter(文本拆分器):将长文档拆分为符合大模型上下文窗口限制、同时保留语义完整性的文本块,解决大模型“装不下、读不懂”长文本的问题;
  6. Embedding Model(嵌入模型):将文本转换为高维向量,语义越相似的文本向量距离越近,是RAG检索系统的核心基础;
  7. Retriever(检索器):基于用户查询,从向量数据库中召回语义最相关的文本块,是RAG系统的核心组件。
    【加分项】
  • 补充进阶核心组件:Tool(工具)、Memory(记忆模块)、Agent(智能体)、LangGraph(工作流),并说明其定位,体现完整的知识体系。

4. LangChain中Document对象的核心属性是什么?分别有什么作用?

【考察点】对文档处理全流程的基础认知,这是RAG系统的前置基础
【标准答案】
Document是LangChain中所有外部文档的统一数据载体,核心包含两个属性:

  1. page_content:字符串类型,存储文档的纯文本内容,是后续拆分、向量化、检索、传给大模型的核心内容;
  2. metadata:字典类型,存储文档的元数据,包括文件名、页码、作者、来源、创建时间、段落标题等信息,核心作用是标识文档来源,后续可用于检索过滤、结果溯源、回答出处标注,同时也是排查检索问题的关键依据。
    【加分项】
  • 能提到元数据在生产级RAG中的用法,比如通过元数据过滤指定文档、指定页码的内容,提升检索精准度;
  • 能提到拆分文档时,会自动继承父文档的元数据,保证来源可追溯。

二、核心组件高频面试题(★★ 二面核心)

1. 提示词模板的核心作用是什么?LangChain中常用的提示词模板有哪些?

【考察点】对提示词工程标准化实现的理解,是否能规避硬编码提示词的不规范写法
【标准答案】
提示词模板的核心作用是将提示词中固定的规则、人设、约束与动态的用户输入变量分离,实现提示词的标准化、复用、可维护,避免重复硬编码,同时保证提示词格式的稳定性,降低大模型输出的不确定性。
LangChain中常用的提示词模板分为3类:

  1. PromptTemplate:基础单文本模板,适用于Completion类型的大模型,通过{变量名}定义占位符,动态传入参数生成完整提示词;
  2. ChatPromptTemplate:对话式模板,是日常开发最常用的类型,适配Chat Model的消息列表交互模式,通过from_messages方法定义system、human、ai不同角色的消息模板,完美贴合对话大模型的交互逻辑;
  3. FewShotPromptTemplate:少样本提示模板,通过给大模型提供多个示例,让大模型学习示例中的格式、逻辑、风格,比纯文字描述的提示词效果提升显著,适用于分类、提取、翻译等标准化任务。
    【加分项】
  • 能提到MessagesPlaceholder的用法,用于动态插入历史对话、少样本示例,是带记忆对话、少样本聊天模板的核心;
  • 能结合实战说明,如何通过模板实现提示词与业务代码的解耦,便于后续迭代优化。

2. 什么是输出解析器?常用的输出解析器有哪些?解决了什么问题?

【考察点】是否掌握解决大模型输出格式不稳定的标准化方案,这是生产落地的核心痛点之一
【标准答案】
输出解析器(Output Parser)是LangChain中用于将大模型生成的非结构化自由文本,转换为Python可直接处理的结构化数据的核心组件,同时会给大模型注入格式约束指令,从源头降低格式错误的概率。
它解决的核心问题:原生大模型的输出是自由文本,无法直接用于业务逻辑处理(如接口返回、数据库存储、后续流程调用),且容易出现格式不规范、JSON语法错误等问题,输出解析器提供了标准化的解决方案。
常用的输出解析器:

  1. StrOutputParser:最基础、最常用的解析器,将大模型返回的AIMessage对象转换为纯字符串,去掉所有冗余信息,适用于绝大多数基础对话、生成场景;
  2. JsonOutputParser:生产级核心解析器,配合Pydantic定义数据结构,让大模型严格按照指定的JSON格式输出,并自动解析为Python字典,完美适配接口开发、结构化数据提取场景;
  3. PydanticOutputParser:进阶JSON解析器,直接将大模型输出转换为Pydantic对象,支持更严格的类型校验、字段约束,适合对数据格式要求极高的生产场景;
  4. CommaSeparatedListOutputParser:将大模型输出解析为逗号分隔的列表,适用于关键词提取、标签生成、多选项分类等场景。
    【加分项】
  • 能提到如何处理大模型JSON输出格式错误的问题,比如通过handle_parsing_errors参数实现容错,或通过重试机制修复格式问题;
  • 能结合实战说明,如何通过Pydantic定义嵌套结构,实现复杂的结构化输出。

3. 文本拆分的核心原则是什么?为什么不能随便拆分长文档?

【考察点】对RAG前置环节的理解深度,这是决定RAG检索效果的核心基础,很多新手的RAG效果差,根源就是拆分不规范
【标准答案】
文本拆分的核心目标是在控制文本块大小的同时,最大程度保留语义的完整性,核心遵循3个原则:

  1. 语义完整优先:优先按段落、句子、语义单元拆分,绝对不能将一个完整的句子、完整的概念、完整的逻辑段落拆分到两个不同的文本块中,否则会导致语义断裂,检索时无法召回正确内容,最终引发大模型幻觉;
  2. 块大小合理控制:根据嵌入模型和大模型的上下文窗口,设置合理的块大小,通用场景下中文推荐500-1000字符(100-300token),块过大会导致检索粒度太粗、精准度不足,块过小会丢失上下文语义、召回率下降;
  3. 块重叠保留上下文:块与块之间必须设置重叠(chunk_overlap),通常为块大小的10%-20%,避免语义被截断,保证一个完整的语义单元至少能完整出现在一个文本块中,解决边界内容召回失败的问题。
    【加分项】
  • 能提到中文拆分的优化点,比如将分隔符优先级设置为["\n\n", "\n", "。", "!", "?", " ", ""],优先按中文语义单元拆分,而非按字符拆分;
  • 能区分按字符拆分和按Token拆分的差异,按Token拆分更贴合嵌入模型和大模型的处理逻辑,块大小控制更精准。

4. RecursiveCharacterTextSplitter(递归字符拆分器)的核心原理是什么?为什么LangChain官方推荐使用它?

【考察点】对文本拆分的底层逻辑理解,是否掌握生产级最优拆分方案
【标准答案】
递归字符拆分器是LangChain官方最推荐的通用文本拆分器,核心原理是按照预设的分隔符优先级,递归地对文本进行分层拆分,直到所有拆分后的文本块都符合预设的chunk_size大小限制。
它的执行逻辑是:先按优先级最高的分隔符(通常是段落分隔符\n\n)拆分文本,如果拆分后的单块文本仍超过chunk_size,就按下一个优先级的分隔符(换行符\n)继续拆分,以此类推,直到所有块都符合大小要求,优先保证语义单元的完整性。
官方推荐的核心原因:

  1. 最大化保留语义完整性:它不会暴力按固定字符数拆分,而是优先按语义单元(段落、句子)拆分,最大程度避免语义断裂,这是其他固定长度拆分器无法做到的;
  2. 通用性极强:适配几乎所有文本类型(TXT、Markdown、PDF提取文本、网页内容等),无需针对不同格式单独开发拆分逻辑;
  3. 高度可定制:支持自定义分隔符优先级、块大小、重叠长度、长度计算函数(字符数/Token数),可适配不同场景的需求;
  4. 容错性好:即使文本格式不规范,也能通过递归拆分保证块大小符合要求,不会出现超大块文本。
    【加分项】
  • 能提到针对Markdown、代码、JSON等特殊格式的专用拆分器,以及对应的适用场景,体现实战经验;
  • 能提到如何通过tiktoken自定义长度计算函数,实现按Token拆分,更贴合嵌入模型的处理逻辑。

三、RAG专项深度面试题(★★★ 重中之重,90%岗位必深挖)

1. 什么是RAG?它的核心原理和完整链路是什么?解决了大模型的哪些痛点?

【考察点】对RAG的基础认知,这是LLM应用开发岗的必考题,没有之一
【标准答案】
RAG全称Retrieval-Augmented Generation(检索增强生成),是目前解决大模型落地痛点的最主流、最成熟的技术方案。

核心原理

给大模型配备「专属知识库+智能检索系统」,用户提问时,先从私有知识库中检索出与问题语义最相关的权威上下文,再将「用户问题+检索到的上下文」一起打包传给大模型,强制大模型严格基于检索到的权威内容回答问题,从根源上规避大模型的原生缺陷。

完整全链路

分为离线建库在线问答两大阶段:

  1. 离线建库阶段:文档加载 → 文本清洗 → 文本拆分 → 文本向量化 → 向量与元数据存入向量数据库;
  2. 在线问答阶段:用户提问 → 问题向量化 → 向量数据库相似性检索 → 检索结果过滤/重排/压缩 → 构建提示词(问题+相关上下文) → 大模型生成回答 → 结果返回与溯源。
解决的核心痛点
  1. 幻觉问题:强制大模型基于权威检索内容回答,从根源上杜绝胡编乱造;
  2. 知识过时问题:大模型的预训练知识有截止日期,RAG可实时更新知识库,让大模型获取最新信息;
  3. 私有数据接入问题:无需微调,即可让大模型接入企业内部知识库、业务数据、私有文档等预训练中没有的内容;
  4. 成本与可解释性问题:相比模型微调,RAG的落地成本极低,迭代速度快,且回答可溯源、可管控,适合企业级合规场景。
    【加分项】
  • 能区分Naive RAG(基础检索)、Advanced RAG(进阶优化)、Modular RAG(模块化RAG)的差异;
  • 能结合自己的实战项目,说明RAG落地中的核心难点和优化方案。

2. RAG和大模型微调(Fine-tuning)的区别是什么?分别适用于什么场景?

【考察点】对大模型落地两大核心方案的理解深度,是否能根据业务场景选择最优方案
【标准答案】
RAG和微调是大模型能力增强的两大核心方案,核心定位、实现逻辑、适用场景完全不同,并非替代关系,生产环境中常配合使用,核心差异如下:

对比维度 RAG检索增强生成 大模型微调(Fine-tuning)
核心逻辑 检索外部权威知识,增强大模型的生成上下文,不修改模型本身的参数 用领域数据重新训练模型,更新模型参数,让模型学习领域知识和风格
知识更新 极其灵活,新增/修改文档仅需更新知识库,分钟级生效 成本极高,每次更新都需要重新准备数据集、训练模型,周期长
幻觉控制 极强,回答严格基于检索内容,可溯源、可管控 较弱,微调无法彻底解决幻觉问题,且不可控、不可溯源
落地成本 极低,无需GPU算力,仅需CPU即可完成全流程,零代码门槛 极高,需要大量高质量标注数据、GPU算力,对技术团队要求高
上下文能力 强,可支持百万级、千万级文档的知识库,无上下文窗口限制 弱,无法注入超大量知识,受模型上下文窗口和灾难性遗忘限制
能力边界 仅能增强知识储备,无法改变模型的行为模式、风格、推理逻辑 可深度改变模型的风格、语气、输出格式、推理逻辑,甚至学习特定技能
适用场景
  • RAG优先适用场景:企业内部知识库问答、产品手册问答、文档检索、法律/金融/医疗等合规要求高的场景、需要频繁更新知识的场景、私有数据量大的场景、预算有限的中小团队;
  • 微调优先适用场景:需要改变模型的输出风格/语气/格式(如客服话术、品牌文案)、需要让模型学习特定的推理逻辑/技能(如代码生成、特定行业的数据分析)、需要模型在无外部检索的场景下稳定输出领域知识、海量高质量标注数据的场景。
    【加分项】
  • 能提到生产级的混合方案:用微调优化模型的输出格式、对话风格、指令遵循能力,用RAG注入实时更新的私有知识,两者配合实现最优效果;
  • 能提到RAG和微调的成本对比,比如百万级文档的RAG系统,成本仅为微调的几十分之一。

3. 基础RAG系统常见的问题有哪些?对应的生产级优化方案是什么?

【考察点】是否有真实的RAG落地经验,这是区分“做过Demo”和“做过生产落地”的核心题
【标准答案】
基础Naive RAG能跑通Demo,但在生产环境中会遇到四大类核心问题,对应的优化方案如下:

一、召回阶段问题(检索不精准,核心占比70%)

常见问题:检索召回率低、相关内容排不到前面、语义匹配偏差、长文档语义丢失、口语化提问匹配不到专业内容。
核心优化方案

  1. 检索链路优化
    • 多查询检索(MultiQueryRetriever):让大模型基于用户问题生成多个不同表述的查询,并行检索后合并结果,解决提问表述偏差问题;
    • 混合检索:结合向量语义检索+关键词检索(BM25),兼顾语义匹配和关键词精准匹配,解决专业术语、专有名词匹配失败的问题;
    • 重排(Rerank):先粗召回Top10-20候选文档,再用专门的重排模型重新计算语义相关性,仅保留Top3-5最相关内容,大幅提升精准度;
    • HyDE假设文档嵌入:让大模型先基于用户问题生成一个假设性的回答,再用这个回答做检索,解决提问和文档表述差异过大的问题。
  2. 文档拆分优化
    • 父子文档检索(ParentDocumentRetriever):子文档用于精准检索,命中后返回完整的父文档,兼顾检索精准度和上下文语义完整性;
    • 语义拆分:用语义感知的拆分器,按语义单元拆分,而非固定长度,避免语义断裂;
    • 结构化拆分:针对Markdown、Word等带格式的文档,按标题层级拆分,自动继承标题元数据,提升检索精准度。
  3. 嵌入模型优化
    • 选用适配中文场景、垂直领域的嵌入模型,而非通用模型;
    • 微调嵌入模型,用垂直领域数据优化向量匹配效果,适配业务场景。
二、生成阶段问题(幻觉、回答质量差)

常见问题:大模型不遵循检索内容、编造信息、回答脱离上下文、引用错误、格式不规范。
核心优化方案

  1. 提示词优化:设计严格的防幻觉提示词,明确要求“检索上下文无相关内容时,直接回答不知道,禁止编造”,强制要求标注内容来源;
  2. 上下文压缩:用LLMLingua、上下文压缩检索器,过滤掉检索结果中的冗余、无关内容,给大模型提供更高质量的上下文;
  3. 自检环节:让大模型生成回答后,自检回答是否完全基于检索上下文,是否有编造内容,不符合要求则重新生成;
  4. 模型选型:确定性任务选用temperature=0的模型,优先选用指令遵循能力强的大模型,降低幻觉概率。
三、长文档与大规模知识库问题

常见问题:长文档检索语义丢失、百万级文档检索延迟高、并发能力不足。
核心优化方案

  1. 分层检索:先按文档/章节做粗检索,再在命中的章节内做细粒度检索,降低检索范围;
  2. 向量数据库优化:选用生产级分布式向量数据库(Milvus、Weaviate、PGVector),做索引优化、分片、缓存,提升检索性能;
  3. 元数据过滤:提前通过元数据过滤指定范围的文档,减少检索的向量数量,提升速度和精准度。
四、工程化与落地问题

常见问题:文档更新不及时、权限管控难、可观测性差、成本高、并发不足。
核心优化方案

  1. 增量更新:实现文档的增量更新、定时同步,无需全量重建知识库;
  2. 多租户隔离:按用户/租户隔离知识库,实现精细化权限管控;
  3. 缓存优化:缓存高频问题的检索结果和回答,降低大模型调用成本,提升响应速度;
  4. 可观测性:接入LangSmith,追踪每一次检索和生成的全链路,排查问题、优化效果。
    【加分项】
  • 能结合自己的实战项目,说明具体优化前后的效果对比(如召回率提升多少、幻觉率下降多少);
  • 能提到RAG评估体系,比如用RAGAS、Faithfulness、Answer Relevancy等指标量化评估RAG效果,而非主观判断。

4. 什么是RAG中的重排(Rerank)?它的核心作用是什么?为什么不能直接用向量检索TopN?

【考察点】对RAG进阶优化的理解,是否掌握提升检索精准度的核心方案
【标准答案】
重排(Rerank)是RAG检索链路中的二阶优化环节,核心逻辑是**“先粗召回,后精排”**:先用向量检索快速召回Top10-20个语义相关的候选文档,再用专门的交叉编码器(Cross-Encoder)重排模型,逐一对用户问题和每个候选文档做精细的语义相关性打分,重新排序后仅保留Top3-5最相关的文档,传给后续的生成环节。

核心作用
  1. 大幅提升检索精准度:向量检索用的是双编码器(Bi-Encoder),查询和文档分别向量化,仅能计算粗粒度的向量距离,无法捕捉精细的语义匹配;而重排模型用交叉编码器,将查询和文档拼接后一起编码,能深度理解两者的语义匹配度,排序精准度远高于向量检索;
  2. 解决向量检索的长尾问题:过滤掉向量距离近但语义无关的“假阳性”文档,避免无关内容进入上下文,降低大模型幻觉概率;
  3. 平衡检索性能与效果:全量文档用重排模型打分性能极低,而“粗召回+精排”的模式,既保证了检索速度,又最大化提升了精准度,是生产级的最优方案。
为什么不能直接用向量检索TopN
  1. 向量检索的相似度≠语义相关性:向量距离近,仅代表向量在高维空间中距离近,不代表语义完全匹配,经常出现“字面相似但语义无关”的文档排在前面;
  2. 单轮向量检索无法兼顾召回率和精准度:TopN设小了,会漏掉相关文档(召回率低);TopN设大了,会引入大量无关文档,污染上下文,导致大模型幻觉;
  3. 无法处理复杂语义匹配:对于否定词、限定条件、长句复杂语义,向量检索的匹配效果很差,必须通过重排模型做精细的语义理解。
    【加分项】
  • 能提到常用的中文重排模型,比如Cohere的多语言重排模型、BGE-Rerank系列,以及对应的落地用法;
  • 能结合实战说明重排前后的效果对比,比如回答的准确率、幻觉率的变化。

5. 怎么解决RAG系统的幻觉问题?

【考察点】对RAG落地核心痛点的解决方案掌握程度,几乎所有RAG相关岗位都会问
【标准答案】
RAG系统的幻觉问题,需要从检索、生成、全链路管控三个维度做全流程防控,核心解决方案如下:

一、检索环节:从源头保证上下文的精准性(核心,占比70%)

幻觉的根源,70%以上是检索环节出了问题:没有召回相关内容、召回了错误内容、上下文语义断裂、无关内容过多。

  1. 提升召回率和精准度:通过多查询检索、混合检索、重排、父子文档检索等优化方案,保证给大模型的上下文100%覆盖用户问题的相关内容,且无无关冗余信息;
  2. 保证语义完整性:规范文本拆分流程,严格遵循语义完整优先的原则,避免语义断裂导致大模型理解偏差;
  3. 上下文过滤与压缩:通过上下文压缩检索器,过滤掉检索结果中的无关、冗余内容,只保留与问题最相关的核心信息,避免无关内容干扰大模型;
  4. 检索结果兜底:设置相似度阈值,检索结果的相似度低于阈值时,直接返回“无相关内容”,不传给大模型,避免大模型基于无关内容编造回答。
二、生成环节:强制约束大模型的生成行为
  1. 防幻觉提示词工程:设计严格的提示词规则,明确要求:
    • 必须100%基于提供的检索上下文回答,禁止使用自身预训练知识;
    • 上下文无相关内容时,必须直接回答“抱歉,我在知识库中没有找到相关内容,无法为您解答”,绝对禁止编造信息;
    • 回答中的所有数据、事实,必须标注对应的来源文档和页码,可溯源;
  2. 模型参数控制:生成环节将temperature设为0,最大化降低生成的随机性,禁止大模型自由发挥;
  3. 输出格式约束:通过JsonOutputParser等解析器,强制大模型按固定格式输出,将“回答内容”和“引用来源”分字段输出,便于校验;
  4. 自检与校验环节:大模型生成回答后,增加一轮自检环节,让大模型判断:回答是否完全基于检索上下文?是否有编造内容?引用来源是否正确?不符合要求则重新生成。
三、全链路管控:工程化兜底与效果评估
  1. 事实校验工具:引入外部事实校验工具,对比回答内容和检索上下文,识别出编造的内容,自动拦截或修正;
  2. 可观测性与日志:接入LangSmith等可观测平台,记录每一次请求的检索上下文、生成的回答、用户反馈,便于排查幻觉问题,持续优化;
  3. 效果量化评估:用RAGAS等评估框架,通过Faithfulness(忠实度)、Answer Relevancy(回答相关性)等指标,量化评估幻觉率,持续迭代优化系统;
  4. 用户反馈闭环:增加用户反馈入口,用户标记“回答错误/编造内容”时,自动记录对应的问题、检索结果、回答,用于优化拆分策略、检索链路和提示词。
    【加分项】
  • 能提到幻觉的分类:输入冲突型幻觉、上下文缺失型幻觉、事实编造型幻觉,并针对不同类型给出对应的解决方案;
  • 能结合自己的实战项目,说明优化前后的幻觉率量化数据,体现落地经验。

四、工具调用与Agent专项面试题(★★ 进阶高频)

1. 什么是工具调用?它的核心原理和完整流程是什么?解决了大模型的哪些痛点?

【考察点】对工具调用的基础认知,这是Agent开发的前置基础
【标准答案】
工具调用(Tool Calling)是大模型的核心能力之一,指的是大模型根据用户的问题,自主决策是否需要调用外部工具、调用哪个工具、生成工具所需的参数,通过执行外部工具获取结果后,再基于结果生成最终回答的能力。

完整核心流程
  1. 决策判断:大模型收到用户问题后,先判断能否用自身原生能力解决,若不能,则决策需要调用的工具;
  2. 参数生成:大模型按照工具的参数规范,生成标准化的工具调用指令和入参;
  3. 工具执行:程序接收到调用指令后,执行对应的工具,获取工具返回的结果;
  4. 结果生成:将工具返回的结果、用户原始问题、历史对话一起传给大模型,大模型基于工具结果生成最终的回答。
解决的大模型原生痛点
  1. 实时信息获取能力缺失:大模型的预训练知识有截止日期,无法获取实时天气、股市、新闻、最新数据等信息,通过联网搜索、API调用等工具可解决;
  2. 精准计算能力不足:大模型天生不擅长精准的数学计算、逻辑运算,容易算错,通过计算器、代码执行工具可解决;
  3. 能力边界受限:无法操作数据库、读写文件、发送邮件、调用企业内部API、操作软件等,通过自定义工具可无限扩展大模型的能力边界;
  4. 幻觉问题:对于需要精准数据的问题,通过工具获取权威结果,避免大模型编造数据。
    【加分项】
  • 能提到工具调用的底层实现:大模型通过函数调用(Function Calling)能力,在训练时学习了工具调用的格式规范,能输出标准化的JSON格式调用指令,而非自由文本;
  • 能提到LangChain中工具调用的容错处理,比如参数错误、工具执行失败时的重试、降级方案。

2. LangChain中定义工具的方式有哪几种?分别适用于什么场景?

【考察点】对LangChain工具定义的掌握程度,是否能根据场景选择最优方案
【标准答案】
LangChain中定义工具的方式主要有3种,从简单到复杂,覆盖所有业务场景:

  1. @tool装饰器(最常用、最简方案)
    给Python函数添加@tool装饰器,配合详细的函数注释、参数类型注解,即可快速将函数转换为大模型可调用的工具。大模型会自动读取函数的注释、参数类型、返回值,理解工具的用途和调用规范,零额外配置。
    适用场景:绝大多数自定义工具场景,单函数实现的工具,是日常开发的首选方案。
  2. StructuredTool类(结构化复杂工具)
    通过StructuredTool.from_function()方法,手动定义工具的名称、描述、参数Schema、执行函数,支持更复杂的参数结构、多字段校验、自定义错误处理。
    适用场景:参数结构复杂、需要严格的类型校验、有自定义错误处理逻辑的工具,或需要将类方法封装为工具的场景。
  3. BaseTool基类继承(高度自定义工具)
    继承BaseTool抽象基类,重写_run(同步执行)和_arun(异步执行)方法,手动定义工具的名称、描述、参数Schema,可实现最复杂的工具逻辑,支持生命周期管理、状态保持、权限校验等。
    适用场景:需要复杂的初始化逻辑、状态保持、异步执行、权限管控、多步骤执行的企业级复杂工具,比如数据库操作工具、企业内部系统对接工具。
    【加分项】
  • 能提到工具定义的核心注意事项:工具的描述必须清晰、准确,参数规范必须明确,否则大模型会出现调用错误、参数生成错误的问题;
  • 能提到内置工具的用法,以及如何将第三方工具集成到LangChain中,体现实战经验。

3. 什么是Agent?Agent和Chain的核心区别是什么?

【考察点】对Agent的核心认知,是否理解Agent的本质价值
【标准答案】
Agent(智能体)是基于大模型构建的、具备自主思考、规划、决策、执行、反思能力的智能系统,它能以用户的目标为导向,自主拆解任务、决策下一步动作、调用工具、迭代优化,直到完成最终目标,是大模型从“被动生成工具”到“主动执行主体”的核心升级。

Agent和Chain的核心区别
对比维度 Agent 智能体 Chain 链
核心逻辑 大模型自主决策、动态规划执行流程,每一步做什么由大模型决定 预定义的固定执行流程,无论什么输入,都按预设的步骤顺序执行
灵活性 极高,可处理未知的、复杂的、多步骤的、无法预定义流程的任务 极低,仅能处理预设好的标准化任务,无法应对超出预设流程的场景
核心能力 自主规划、工具调用、多轮迭代、反思优化、错误处理 固定流程的组件串联,无自主决策能力
适用场景 复杂多步骤任务、客服机器人、自动化办公、智能助手、需要动态决策的场景 标准化、固定流程的任务,比如翻译、文本分类、固定流程的RAG问答
可控性 传统Agent可控性较低,容易出现死循环、偏离任务的问题,需通过LangGraph做流程管控 完全可控,流程固定,可预测、可调试、可审计

简单来说:Chain是固定的流水线,你提前设计好每一步的流程,它只会按流程执行;而Agent是一个有自主思考能力的员工,你只需要告诉它最终目标,它会自己想办法拆解任务、一步步完成,遇到问题会自己调整方案。
【加分项】

  • 能提到Agent的核心组成部分:大模型大脑、工具集、记忆模块、规划器、执行器;
  • 能提到传统Agent的痛点,以及LangGraph如何解决这些痛点,体现对最新技术的掌握。

4. ReAct框架的核心原理是什么?它的完整执行流程是怎样的?

【考察点】对Agent核心框架的理解,这是目前最主流、最稳定的Agent框架,面试必问
【标准答案】
ReAct是目前最主流、最成熟的Agent框架,全称是Reasoning + Acting(推理+行动),它模拟了人类解决问题的思维过程:先思考,再行动,根据行动的结果继续思考下一步,直到完成目标。
它的核心创新是将大模型的内部推理(Reasoning)和外部行动(Acting)解耦并结合,通过推理引导行动,通过行动的结果补充推理的上下文,形成完整的“思考-行动-观察”闭环,解决了传统大模型推理与行动脱节、幻觉、无法完成复杂任务的问题。

完整执行流程

ReAct Agent的执行是一个循环迭代的过程,核心分为5步,直到任务完成:

  1. 思考(Thought):大模型基于用户的目标、历史对话、之前的行动结果,思考:我现在要做什么?为了完成最终目标,下一步应该执行什么动作?需要调用哪个工具?
  2. 行动(Action):大模型决定具体的执行动作,包括要调用的工具名称、对应的入参,输出标准化的工具调用指令;
  3. 观察(Observation):执行工具调用,获取工具返回的结果,也就是观察到的外部信息;
  4. 迭代(Iteration):将观察到的结果加入上下文,大模型基于新的信息,继续进入下一轮的思考-行动-观察循环,判断是否需要继续执行动作,还是已经完成目标;
  5. 完成(Finish):当大模型判断任务已经完成,或无法继续推进时,结束循环,生成最终的回答,返回给用户。
    【加分项】
  • 能提到ReAct框架的优势:可解释性极强,每一步的思考、行动、观察都有完整的日志,便于调试、排错、审计,同时大幅降低了幻觉概率,提升了复杂任务的完成率;
  • 能提到ReAct框架的落地优化,比如通过提示词约束思考的格式、设置最大迭代次数避免死循环、增加反思环节优化执行效果。

5. Agent执行中常见的死循环问题是什么?对应的解决方案有哪些?

【考察点】是否有真实的Agent落地经验,这是生产级Agent开发的核心痛点
【标准答案】
Agent死循环是传统ReAct Agent最常见的问题,指的是Agent陷入无限的“思考-行动-观察”循环,无法完成任务,也无法结束流程,核心原因和对应的解决方案如下:

一、常见的死循环原因
  1. 工具调用结果无效:Agent反复调用同一个工具,但工具返回的结果始终无法满足需求,或返回空结果、错误信息,Agent无法跳出循环;
  2. 任务拆解能力不足:大模型无法将复杂目标拆解为可执行的步骤,反复执行无效的动作,无法推进任务;
  3. 参数生成错误:Agent反复调用工具,但每次都生成错误的参数,导致工具执行失败,无法获取有效结果;
  4. 目标不明确/无法完成:用户的目标模糊,或现有工具无法完成目标,Agent反复尝试无效的动作,无法判断任务无法完成;
  5. 上下文溢出:多轮循环后,对话历史过长,超出大模型的上下文窗口,导致大模型丢失最初的目标,陷入无效循环。
二、对应的生产级解决方案
  1. 硬兜底:设置最大迭代次数
    给AgentExecutor设置max_iterations参数(通常设为5-10次),达到最大迭代次数后,强制结束循环,让大模型基于已有的信息生成最终回答,这是最基础、必须设置的兜底方案。

  2. 优化工具调用与结果反馈

    • 完善工具的错误处理和返回信息,工具执行失败时,明确告诉Agent失败的原因、正确的参数规范、建议的解决方案,而不是简单返回错误;
    • 给工具的描述和参数规范补充详细的示例,降低大模型参数生成错误的概率;
    • 增加工具调用校验环节,执行工具前先校验参数是否合法,不合法直接返回错误原因,避免无效的工具执行。
  3. 优化Agent的规划与反思能力

    • 在提示词中增加反思环节,要求Agent每轮循环后,先反思之前的动作是否有效、为什么没有进展、下一步应该怎么调整,避免重复无效动作;
    • 引入计划与执行分离的架构,先让大模型一次性拆解出完整的执行计划,再按计划分步执行,避免无规划的随机动作;
    • 对于复杂任务,使用多智能体架构,拆分规划Agent、执行Agent、校验Agent,各司其职,提升任务完成率。
  4. 上下文与记忆优化

    • 使用摘要记忆、窗口记忆,而非全量历史记忆,控制上下文长度,避免上下文溢出导致的目标丢失;
    • 在每一轮的思考环节,都重复提醒Agent最初的用户目标,避免偏离任务。
  5. 提前终止与异常处理

    • 在提示词中明确要求Agent:当判断现有工具无法完成任务时,直接结束循环,告知用户无法完成的原因和需要补充的工具/信息,禁止反复尝试;
    • 增加重复动作检测,当Agent连续3次调用同一个工具、传入相同的参数时,强制中断循环,让大模型重新规划方案;
    • 使用LangGraph构建可控的Agent工作流,通过条件边、状态校验,提前拦截无效循环,实现完全可控的执行流程。
      【加分项】
  • 能提到LangGraph如何从根本上解决Agent死循环的问题,比如通过固定的流程节点、状态校验、人工干预环节,实现完全可控的执行流程;
  • 能结合自己的实战项目,说明具体的优化方案和效果。

五、LangGraph专项面试题(★★★ 大厂最新高频考点)

1. 什么是LangGraph?它的核心定位是什么?和传统的AgentExecutor相比有什么优势?

【考察点】对LangChain最新生产级技术的掌握程度,这是目前大厂LLM应用岗的热门考点
【标准答案】
LangGraph是LangChain官方推出的基于图结构的Agent与复杂工作流开发框架,核心定位是解决传统AgentExecutor不可控、不可观测、易死循环、难以落地到生产环境的痛点,为开发者提供一套可构建可控、可调试、可扩展、高可用的生产级Agent与复杂工作流的开发套件。
它基于状态机的设计理念,用「节点+边」的图结构来定义工作流,支持循环、条件分支、并行执行、状态持久化、人机交互等核心能力,是目前LangChain生态中生产级Agent开发的首选方案。

相比传统AgentExecutor的核心优势
  1. 完全可控的执行流程
    传统AgentExecutor是黑盒的ReAct循环,大模型自主决定每一步的执行,开发者无法干预,容易出现死循环、偏离任务的问题;而LangGraph通过显式定义的节点和边,完全掌控工作流的每一步流转,每一个环节都可定义、可干预、可预测,从根源上解决不可控的问题。

  2. 极致的灵活性与可扩展性
    传统AgentExecutor仅支持固定的ReAct循环,难以实现复杂的业务逻辑;而LangGraph支持任意复杂的图结构,包括条件分支、并行执行、子图嵌套、循环控制,可实现多智能体协作、人机交互、人工审核、错误降级等复杂的生产级业务逻辑。

  3. 内置状态管理与持久化
    传统AgentExecutor的状态是临时的,无法中断、恢复、回溯;而LangGraph基于统一的State状态管理,内置Checkpoint检查点机制,支持工作流的中断、暂停、恢复、回溯,完美适配长任务、人工审核、故障恢复等生产场景。

  4. 原生支持人机交互(Human-in-the-Loop)
    传统AgentExecutor很难实现人工干预,而LangGraph原生支持人机交互,可在工作流中设置人工审核节点,比如工具调用前需要人工确认、敏感内容需要人工审核,完美适配金融、政务、企业级等高风险、高合规要求的场景。

  5. 可观测性与可调试性极强
    传统AgentExecutor的执行过程是黑盒,很难调试排错;而LangGraph的每一个节点的执行、状态的更新都可追踪、可日志、可可视化,配合LangSmith可实现全链路的可观测性,调试、排错、审计都极其方便。
    【加分项】

  • 能提到LangGraph的核心设计理念是“让开发者掌控Agent的执行流程,而不是完全交给大模型”,这是生产级落地的核心需求;
  • 能结合实战,说明LangGraph在复杂业务场景中的落地用法,比如多智能体协作、带人工审核的客服工单处理系统。

2. LangGraph的核心概念有哪些?分别有什么作用?

【考察点】对LangGraph基础架构的理解,是否掌握核心开发范式
【标准答案】
LangGraph的核心是状态机+图结构,核心概念分为5大类,必须完全掌握:

  1. State(状态)
    State是整个工作流的共享数据存储中心,是一个带类型的字典,存储了工作流执行过程中的所有数据,包括对话历史、用户输入、工具调用结果、中间执行结果、任务状态等。
    工作流中的所有节点都可以读取State中的数据,执行完成后返回更新后的State,整个工作流的流转完全基于State的内容驱动。LangGraph支持自定义状态的合并规则,比如对话历史采用追加模式,而非覆盖模式。

  2. Node(节点)
    Node是工作流的执行单元,本质是一个Python函数,接收State作为唯一输入,执行具体的业务逻辑(调用大模型、执行工具、处理数据、校验内容等),返回更新后的State数据。
    节点分为两类:

    • 普通节点:执行具体的业务逻辑,执行完成后流转到下一个节点;
    • 结束节点(END):工作流的终点,到达END节点后,工作流执行结束。
  3. Edge(边)
    Edge是工作流的流转规则,定义了节点之间的连接关系,决定了一个节点执行完成后,下一步要流转到哪个节点。
    分为两类:

    • 普通边:固定的流转关系,比如节点A执行完成后,必须流转到节点B;
    • 条件边(Conditional Edge):动态的流转规则,基于当前State的内容,通过一个判断函数,动态决定下一步流转到哪个节点,是实现循环、分支判断、条件终止的核心。
  4. START节点
    START节点是工作流的入口起点,工作流启动后,会从START节点开始,流转到对应的第一个执行节点,是所有工作流必须定义的起点。

  5. Checkpoint(检查点)
    Checkpoint是LangGraph的状态持久化机制,它会在工作流的每一个节点执行完成后,自动保存当前的State状态到持久化存储中。
    核心作用是:支持工作流的中断、暂停、恢复、回溯,哪怕程序重启,也能从上次中断的位置继续执行;同时支持历史版本回溯,可查看工作流执行过程中的每一次状态变化,便于调试、审计、故障恢复。
    【加分项】

  • 能提到add_messages注解的作用,用于对话历史的自动追加,是带记忆对话场景的核心;
  • 能提到LangGraph内置的ToolNode、tools_condition等预构建组件,可快速实现工具调用的标准化流程。

3. LangGraph中如何实现人机交互(Human-in-the-Loop)?有哪些常见的应用场景?

【考察点】对LangGraph生产级核心特性的理解,是否能落地企业级合规场景
【标准答案】
Human-in-the-Loop(人机交互/人在回路),指的是在工作流的执行过程中,加入人工干预环节,允许人类在关键节点审核、确认、修改、终止工作流的执行,是企业级高合规、高风险场景的必备能力。
LangGraph通过Checkpoint检查点+中断机制,原生支持人机交互,实现方式分为3种,从简单到复杂覆盖所有场景:

一、核心实现方式
  1. 预定义中断点(interrupt_before/interrupt_after)
    这是最常用、最简单的实现方式,在编译工作流时,通过interrupt_beforeinterrupt_after参数,指定在某个节点执行前/执行后,自动中断工作流,等待人工干预。
    最典型的场景是:在工具执行节点前设置中断,大模型生成工具调用指令后,工作流自动中断,等待人工审核确认工具调用是否合规、是否允许执行,人工确认后,再继续执行工作流。

  2. 动态条件中断
    通过条件边实现动态中断,在工作流中设置一个判断节点,当满足特定条件时(比如检测到敏感内容、高风险操作、大模型信心不足),流转到中断节点,暂停工作流,等待人工处理;不满足条件则继续正常执行。
    典型场景:金融场景中,当Agent要执行大额转账操作时,自动中断工作流,等待管理员审核授权。

  3. 人工输入节点
    在工作流中显式定义人工输入节点,到达该节点时,工作流自动中断,等待人工输入信息(比如补充资料、修改参数、给出指令),人工输入完成后,更新State,继续执行工作流。
    典型场景:客服工单处理中,当Agent无法解决用户问题时,流转到人工客服节点,人工客服补充处理结果后,Agent继续完成后续的工单闭环流程。

二、常见的应用场景
  1. 高风险操作审核:金融、政务场景中的工具调用、数据修改、指令执行前的人工审核,避免AI误操作带来的风险;
  2. 敏感内容校验:内容生成、对外回复场景中,人工审核AI生成的内容,确保合规、无敏感信息、符合品牌调性;
  3. 复杂任务人工介入:当AI无法完成任务、信心不足、遇到异常时,人工补充信息、给出指导,帮助AI继续完成任务;
  4. 企业级审批流程:将AI自动化流程与企业的审批制度结合,比如合同生成后,需要多级人工审批,才能完成最终的盖章、发送;
  5. AI训练与标注:人工对AI的执行结果打分、纠错,用于优化模型、提示词、执行流程,形成人机协同的优化闭环。
    【加分项】
  • 能结合具体的业务场景,给出完整的LangGraph人机交互实现逻辑,体现实战落地能力;
  • 能提到中断后恢复执行的方式,以及如何通过人工输入更新工作流的State。

六、记忆模块专项面试题(★ 基础高频)

1. LangChain中记忆模块的核心作用是什么?常用的记忆类型有哪些?

【考察点】对多轮对话实现的基础认知,对话机器人场景必问
【标准答案】
记忆模块(Memory)是LangChain中用于自动化管理对话历史,实现大模型多轮连贯对话的核心组件,解决了原生大模型无状态、无法记住历史对话的痛点。
它的核心作用包括:

  1. 自动存储每一轮的用户消息(HumanMessage)和AI回复(AIMessage),无需开发者手动管理对话历史;
  2. 每一轮对话前,自动将历史对话拼接到提示词中,让大模型拥有上下文记忆,实现连贯的多轮对话;
  3. 提供多种记忆策略,解决长对话上下文溢出的问题;
  4. 支持多用户会话隔离、持久化存储,适配生产级多用户场景。
常用的记忆类型及适用场景
  1. ConversationBufferMemory(全量缓存记忆)
    最基础的记忆类型,原封不动地存储所有对话历史,每一轮都将完整历史传给大模型。
    适用场景:短对话、客服机器人、会话轮次少的场景,零配置开箱即用。

  2. ConversationBufferWindowMemory(窗口记忆)
    仅保留最近K轮的对话历史,自动丢弃更早的对话,严格控制上下文的长度,避免长对话超出大模型的上下文窗口。
    适用场景:长对话、闲聊机器人、会话轮次多的场景,需要控制上下文长度。

  3. ConversationSummaryMemory(摘要记忆)
    不存储完整的对话历史,而是用大模型自动将历史对话生成摘要,仅将摘要传给大模型,既保留了核心信息,又严格控制了上下文长度,是长对话场景的最优方案。
    适用场景:超长对话、需要长期记住用户核心信息的场景,比如个人智能助手、客户关系管理系统。

  4. ConversationSummaryBufferMemory(摘要+缓存混合记忆)
    结合了窗口记忆和摘要记忆的优势,保留最近K轮的完整对话历史,更早的对话自动生成摘要,兼顾了细节信息和上下文长度控制。
    适用场景:需要兼顾近期对话细节和长期记忆的生产级对话场景。

  5. VectorStoreRetrieverMemory(向量检索记忆)
    将历史对话向量化存入向量数据库,每一轮对话时,检索与当前问题最相关的历史对话,传给大模型,适合超长对话、需要从海量历史中召回相关信息的场景。
    适用场景:超长期对话、个人数字分身、客户全生命周期对话管理。
    【加分项】

  • 能提到记忆的持久化方案,以及多用户隔离的实现方式,体现生产级落地经验;
  • 能结合场景说明不同记忆类型的选型逻辑,比如客服场景优先用窗口记忆,个人助手优先用摘要记忆。

2. 如何实现多用户的记忆隔离?生产级的记忆持久化方案有哪些?

【考察点】是否有生产级对话系统的开发经验,这是Demo和落地的核心区别
【标准答案】

多用户记忆隔离的核心实现

LangChain中通过session_id(会话ID) 实现多用户的记忆隔离,核心逻辑是:

  1. 为每个用户、每个会话分配一个唯一的session_id,作为记忆的唯一标识;
  2. 通过get_session_history回调函数,根据传入的session_id,获取对应会话的对话历史存储实例;
  3. 不同的session_id对应完全独立的记忆存储空间,用户之间的对话历史完全隔离,不会出现串扰。
    核心实现代码是基于RunnableWithMessageHistory类,通过session_id区分不同会话的记忆,这是LangChain官方推荐的标准实现方式,适配所有记忆类型和持久化方案。
生产级记忆持久化方案

Demo中常用的内存存储,重启程序后记忆就会丢失,生产环境必须做持久化,LangChain支持多种成熟的持久化方案,按场景选型如下:

  1. SQLite/SQL关系型数据库
    通过SQLChatMessageHistory实现,将对话历史存储到SQLite、MySQL、PostgreSQL等关系型数据库中。
    优势:零额外部署、开箱即用、支持复杂查询、事务一致性,适合中小规模场景、单服务部署,是中小项目的首选方案。

  2. Redis
    通过RedisChatMessageHistory实现,将对话历史存储到Redis中。
    优势:性能极高、支持过期时间自动清理、支持分布式部署、高并发场景适配性强,适合高并发、分布式微服务架构、需要自动清理过期会话的场景,是互联网级产品的首选方案。

  3. MongoDB
    通过MongoDBChatMessageHistory实现,将对话历史存储到MongoDB文档数据库中。
    优势:灵活性极强,支持存储非结构化的对话数据、扩展字段,适合需要存储大量对话元数据、复杂结构的场景。

  4. PostgreSQL+PGVector
    结合向量数据库,实现对话历史的持久化+语义检索,适配VectorStoreRetrieverMemory等基于检索的记忆方案。
    优势:同时支持结构化存储和向量检索,适合超长期对话、需要语义召回历史信息的场景。
    【加分项】

  • 能提到生产级的记忆管理优化,比如会话过期清理、敏感信息脱敏、对话历史归档、权限管控等;
  • 能结合自己的项目,说明记忆持久化方案的选型原因和落地效果。

七、生产级工程化与落地面试题(★★★ 社招必深挖)

1. 生产级LangChain项目的规范目录结构是怎样的?

【考察点】是否有企业级项目的开发经验,是否具备工程化思维
【标准答案】
生产级LangChain项目必须遵循模块化、解耦、可复用、可维护的原则,将不同功能的代码分模块管理,避免单文件堆砌,官方推荐的规范目录结构如下:

langchain-production-project/
├── .env                # 环境变量、API密钥配置(必须加入.gitignore,禁止提交到Git)
├── .env.example        # 环境变量示例文件,提交到Git,方便团队协作
├── .gitignore          # Git忽略文件,屏蔽敏感文件、环境文件、临时文件
├── requirements.txt    # 依赖清单,固定版本号,避免版本冲突
├── pyproject.toml      # 项目配置、代码规范、类型检查配置
├── Dockerfile          # Docker镜像构建文件,用于生产部署
├── docker-compose.yml  # 容器编排文件,一键启动服务和依赖组件
├── README.md           # 项目说明、启动教程、环境配置、接口文档
├── app/                # 应用核心代码,所有业务逻辑都在该目录下
│   ├── __init__.py
│   ├── main.py         # 应用入口,FastAPI/Flask接口定义,服务启动
│   ├── config.py       # 全局配置管理,统一读取环境变量、项目配置
│   ├── api/            # 接口路由模块,按业务拆分路由文件
│   │   ├── __init__.py
│   │   ├── rag.py      # RAG相关接口
│   │   ├── chat.py     # 对话相关接口
│   │   └── agent.py    # Agent相关接口
│   ├── chains/         # 链的定义,所有LCEL链都在这里统一管理
│   │   ├── __init__.py
│   │   ├── rag_chain.py
│   │   ├── chat_chain.py
│   │   └── classify_chain.py
│   ├── agents/         # Agent与LangGraph工作流定义
│   │   ├── __init__.py
│   │   ├── react_agent.py
│   │   └── workflow.py
│   ├── tools/          # 自定义工具,按功能拆分文件
│   │   ├── __init__.py
│   │   ├── weather.py
│   │   ├── search.py
│   │   └── database.py
│   ├── prompts/        # 提示词模板统一管理,与业务代码解耦
│   │   ├── __init__.py
│   │   ├── rag_prompt.py
│   │   ├── agent_prompt.py
│   │   └── chat_prompt.py
│   ├── utils/          # 通用工具函数、公共方法
│   │   ├── __init__.py
│   │   ├── logger.py   # 日志配置
│   │   ├── security.py # 安全校验、鉴权、脱敏
│   │   └── document.py # 文档处理通用方法
│   └── schemas/        # 接口请求/响应的数据模型,Pydantic定义
│       ├── __init__.py
│       ├── rag.py
│       └── chat.py
├── tests/              # 单元测试、集成测试
│   ├── __init__.py
│   ├── test_rag.py
│   ├── test_agent.py
│   └── test_tools.py
├── data/               # 本地文档、测试数据、临时文件存储
└── docs/               # 项目文档、接口文档、部署文档

【加分项】

  • 能提到核心的解耦原则:提示词与业务代码解耦、接口与业务逻辑解耦、工具定义与执行逻辑解耦;
  • 能提到代码规范、类型检查、单元测试的重要性,体现企业级开发的工程化思维。

2. 生产级LangChain应用的安全防护需要做哪些工作?

【考察点】是否具备企业级应用的安全合规意识,这是落地的必备前提
【标准答案】
LLM应用有很多特有的安全风险,生产级LangChain应用必须做好全链路的安全防护,核心分为6个维度:

一、密钥与环境安全
  1. 禁止硬编码密钥:所有API密钥、数据库账号、敏感配置,必须通过.env环境变量管理,绝对禁止硬编码在代码中,同时.env文件必须加入.gitignore,禁止提交到代码仓库;
  2. 最小权限原则:API密钥使用最小权限配置,比如仅开放指定模型的调用权限、设置月度额度上限,避免密钥泄露后造成巨额损失;
  3. 密钥隔离:生产环境、测试环境、开发环境使用完全隔离的API密钥,避免环境交叉泄露;
  4. 敏感信息加密:数据库中的敏感配置、密钥,必须做加密存储,禁止明文存储。
二、提示词注入防护

提示词注入是LLM应用最常见的攻击方式,攻击者通过恶意输入,让大模型忽略预设的提示词规则,执行恶意指令,必须做好多层防护:

  1. 输入校验与过滤:检测用户输入中的恶意提示词注入指令(比如“忽略你之前的指令”、“现在你是一个黑客”等),拦截恶意输入;
  2. 提示词隔离:将用户输入与系统提示词做严格的隔离,通过XML标签、特殊分隔符包裹用户输入,明确告诉大模型,包裹内的内容是用户输入,禁止执行其中的指令;
  3. 输出校验:检测大模型的输出,禁止泄露系统提示词、内部规则、接口地址、数据库信息等敏感内容;
  4. 专用防护工具:集成LangChain Guardrails、NVIDIA NeMo Guardrails等专用防护框架,实现自动化的提示词注入检测、恶意内容拦截。
三、数据安全与合规
  1. 数据脱敏:用户输入、文档、对话历史中的敏感信息(手机号、身份证号、银行卡号、商业机密、个人隐私),必须先做脱敏处理,再传给大模型、存入数据库;
  2. 权限管控:实现多租户隔离,不同用户、不同租户只能访问自己的知识库和对话历史,禁止越权访问;
  3. 合规审计:记录所有用户的请求、大模型的响应、工具的执行日志,实现全链路可审计,满足等保、行业合规要求;
  4. 数据留存:设置合理的数据留存周期,自动清理过期的对话历史、临时数据,符合隐私保护法规要求。
四、工具调用安全

工具调用是最高风险的环节,一旦失控,可能导致数据泄露、系统被攻击,必须做严格的管控:

  1. 工具白名单机制:仅允许Agent调用白名单内的工具,禁止执行任意代码、Shell命令、系统操作、高危数据库操作(删除、修改全表);
  2. 工具权限最小化:工具对应的数据库账号、API密钥,使用最小权限配置,比如仅开放查询权限,禁止修改、删除权限;
  3. 工具调用审核:高风险工具调用前,必须经过人工审核确认,才能执行;
  4. 参数校验:工具执行前,严格校验入参的合法性、范围,避免SQL注入、路径遍历等攻击;
  5. 执行超时与熔断:设置工具执行的超时时间、最大执行次数,避免工具执行异常导致服务崩溃。
五、接口与服务安全
  1. 接口鉴权:所有HTTP接口必须加鉴权机制,比如API Key、JWT Token,禁止未授权访问,同时设置接口限流,避免恶意刷接口、DDOS攻击;
  2. CORS跨域管控:生产环境严格限制跨域来源,禁止设置allow_origins=["*"],仅允许业务前端域名访问;
  3. 输入输出校验:通过Pydantic严格校验接口的请求参数和响应内容,避免非法输入导致的报错、注入攻击;
  4. 异常处理:接口统一异常处理,禁止将系统报错、堆栈信息直接返回给前端,避免泄露系统信息。
六、可观测性与应急响应
  1. 全链路日志:记录所有请求的全链路日志,包括用户输入、检索结果、大模型调用、工具执行、响应内容、耗时、错误信息,便于排查安全问题;
  2. 监控告警:监控大模型调用量、异常报错、接口响应时间、恶意请求次数,出现异常时及时触发告警;
  3. 应急响应机制:制定密钥泄露、恶意攻击、服务异常的应急响应流程,比如密钥泄露时可立即禁用旧密钥、切换新密钥,不影响服务正常运行。
    【加分项】
  • 能结合具体的业务场景,说明对应的安全防护方案,比如金融场景的额外合规要求;
  • 能提到自己遇到过的安全问题,以及对应的解决方案,体现实战经验。

3. 生产级LangChain应用的成本优化方案有哪些?

【考察点】是否有大规模落地的经验,大模型调用成本是企业级落地的核心考量因素
【标准答案】
大模型调用成本是LLM应用的核心成本,生产级LangChain应用需要从调用量、模型选型、缓存、工程优化四个维度,做全链路的成本优化,核心方案如下:

一、模型分级选型,按需分配
  1. 任务分级,模型匹配:根据任务的复杂度,选择合适的模型,避免“大材小用”。简单任务(分类、标签提取、简单翻译)用小模型/轻量模型(如gpt-3.5-turbo、通义千问turbo),复杂任务(逻辑推理、长文本生成、复杂Agent)用大模型(如gpt-4o、通义千问max),可降低70%以上的调用成本;
  2. 国产模型替代:对于中文场景,选用国内大模型,成本远低于OpenAI,同时国内访问延迟更低,比如豆包、通义千问、文心一言等,都有极高的性价比;
  3. 嵌入模型选型:选用轻量、高性价比的嵌入模型,比如BGE系列、text-embedding-3-small,而非大尺寸的嵌入模型,嵌入环节的成本占比极高,优化空间极大。
二、缓存优化,减少重复调用
  1. 高频问题缓存:用Redis缓存高频用户问题的检索结果、大模型回答,相同的问题直接返回缓存结果,无需重复调用大模型和嵌入模型,对于客服、知识库等高频重复问题多的场景,可降低90%以上的调用量;
  2. 嵌入结果缓存:缓存文档块的嵌入向量,文档更新时仅增量更新嵌入向量,避免全量文档重复向量化,大幅降低离线建库的嵌入成本;
  3. 多级缓存策略:本地内存缓存+Redis分布式缓存,兼顾响应速度和缓存命中率,同时设置合理的缓存过期时间,保证内容的时效性。
三、上下文优化,减少Token消耗

大模型的调用成本是按输入+输出的Token数计费的,控制Token数量是成本优化的核心:

  1. 检索结果优化:通过重排、上下文压缩,仅给大模型传递最相关的核心内容,过滤掉冗余、无关的文本,大幅减少输入Token数;
  2. 记忆优化:使用窗口记忆、摘要记忆,而非全量历史记忆,严格控制对话历史的Token长度,避免长对话导致的Token数指数级增长;
  3. 提示词优化:精简提示词,去掉冗余、无效的描述,保留核心规则,减少系统提示词的Token消耗;
  4. 输出格式约束:通过提示词和输出解析器,约束大模型的输出长度,避免无效的长文本输出,减少输出Token数。
四、工程化优化,降低无效调用
  1. 前置校验与拦截:在调用大模型前,先做前置校验,比如用户输入为空、无意义、超出业务范围,直接返回拦截结果,无需调用大模型;
  2. 批量处理:对于批量分类、批量翻译、批量嵌入等任务,使用批量调用接口,而非循环单条调用,减少请求次数,提升处理效率,降低成本;
  3. 失败重试与降级:设置合理的重试次数,避免无限重试导致的重复调用;同时设置降级方案,大模型调用失败时,先返回兜底结果,而非反复重试;
  4. 额度管控与限流:给每个用户、每个租户设置月度调用额度上限,接口设置限流规则,避免恶意刷接口导致的巨额成本;
  5. 异步处理:对于非实时的批量任务,使用异步处理、削峰填谷,避免高峰时段集中调用,同时可利用大模型的闲时折扣额度,进一步降低成本。
    【加分项】
  • 能结合自己的项目,说明优化前后的成本对比,以及具体的优化效果;
  • 能提到成本监控与分摊,比如按用户、租户统计调用量和成本,实现精细化的成本管控。

八、开放性场景设计题(★★★ 大厂终面必问,拉分核心)

1. 请你设计一个企业内部知识库问答系统,基于LangChain实现,说明完整的架构设计、核心链路、技术选型、难点与解决方案。

【考察点】体系化的设计能力、对RAG全链路的掌握程度、生产级落地的思维
【满分答题思路】

一、系统整体架构设计

采用分层架构设计,分为5层,全链路解耦,可扩展、可维护、高可用:

  1. 接入层:统一的HTTP接口网关,负责鉴权、限流、日志、跨域管控,对接企业内部的OA、飞书/企业微信、内部管理系统;
  2. 应用层:核心业务逻辑层,包括文档管理、问答服务、对话管理、权限管控、人工运营模块;
  3. 核心能力层:基于LangChain构建的核心能力,包括文档处理链路、RAG检索链路、大模型调用链路、记忆管理模块;
  4. 存储层:包括关系型数据库(MySQL,存储用户信息、文档元数据、权限配置)、向量数据库(Milvus,存储文档向量)、缓存数据库(Redis,缓存高频问答、会话信息)、对象存储(MinIO,存储原始文档);
  5. 基础设施层:包括大模型服务、可观测平台(LangSmith+Prometheus+Grafana)、容器化部署(Docker+K8s)。
二、核心业务链路

分为离线文档处理链路在线问答链路两大核心链路:

1. 离线文档处理链路
  1. 文档上传:支持PDF、Word、Excel、PPT、Markdown、TXT等格式,对接企业内部的Confluence、飞书文档、知识库,支持定时同步;
  2. 文档解析:通过LangChain的Document Loader加载文档,提取文本内容,同时做格式清洗、乱码去除、表格解析、图片OCR;
  3. 文档拆分:采用父子文档拆分策略,父文档按章节/段落拆分(2000字符),子文档按句子拆分(300字符),适配中文语义,保证语义完整性;
  4. 向量化:采用中文优化的BGE-large嵌入模型,将子文档向量化;
  5. 向量入库:将向量、对应的父文档ID、元数据存入Milvus向量数据库,同时将父文档存入MySQL,实现增量更新、版本管理;
  6. 权限管控:给每个文档绑定部门、权限标签,实现细粒度的文档访问权限控制。
2. 在线问答链路
  1. 用户提问:用户输入问题,接口做鉴权、限流、输入校验、敏感词过滤;
  2. 问题预处理:大模型对用户问题做改写、纠错、提取核心关键词,同时根据用户权限,过滤可访问的文档范围;
  3. 多路召回
    • 向量检索:将改写后的问题向量化,在Milvus中检索Top20相关的子文档;
    • 关键词检索:基于BM25做关键词检索,召回Top10相关的文档;
    • 权限过滤:过滤掉用户无权限访问的文档;
  4. 精排与压缩
    • 用BGE-Rerank重排模型,对召回的候选文档做精排,保留Top5最相关的文档;
    • 根据子文档ID,召回对应的完整父文档,保证上下文语义完整性;
    • 用上下文压缩器,过滤掉父文档中的无关内容,仅保留与问题相关的核心信息;
  5. 提示词构建:将用户问题、检索到的上下文、权限规则、防幻觉要求,构建成标准化的提示词;
  6. 大模型生成:选用合适的企业级大模型,temperature设为0,严格基于上下文生成回答,标注内容来源;
  7. 结果校验:自检回答是否完全基于检索上下文,是否有幻觉,是否符合合规要求;
  8. 结果返回:将回答、引用来源、相关文档返回给用户,同时记录全链路日志,存储对话历史;
  9. 用户反馈闭环:用户点赞/点踩,反馈回答是否正确,用于持续优化检索链路、提示词、模型选型。
三、核心技术选型
模块 技术选型 选型原因
开发框架 LangChain + LangGraph 组件化、可扩展,生产级成熟方案,适配企业级复杂逻辑
大模型 通义千问企业版/豆包企业版 中文适配好、成本低、支持私有部署、符合企业数据合规要求
嵌入模型 BGE-large-zh 中文语义匹配效果好,开源免费,支持本地部署
重排模型 BGE-rerank-large-zh 中文重排效果顶尖,大幅提升检索精准度
向量数据库 Milvus 分布式、高可用、支持亿级向量检索,适配企业级大规模知识库
应用框架 FastAPI 异步高性能、自带接口文档、适配LangChain的异步调用
存储 MySQL + Redis + MinIO 成熟稳定、适配企业级部署,满足结构化数据、缓存、文件存储需求
部署 Docker + K8s 容器化部署、弹性扩缩容、高可用,适配企业级生产环境
可观测性 LangSmith + Prometheus + Grafana 全链路追踪、监控告警、调试排错,满足生产级运维需求
四、核心难点与解决方案
  1. 检索精准度不足,幻觉问题
    解决方案:采用多路召回+重排的二阶检索方案,父子文档拆分保证语义完整性,严格的防幻觉提示词,回答自检环节,用户反馈闭环持续优化。

  2. 企业级权限管控,多租户隔离
    解决方案:文档级别的权限标签,检索时前置过滤用户无权限的文档,多租户数据完全隔离,细粒度的接口鉴权,全链路操作审计。

  3. 大规模文档的性能与成本问题
    解决方案:增量更新文档,仅更新修改过的文档,无需全量重建;高频问答缓存,减少重复的嵌入和大模型调用;分布式向量数据库分片部署,提升检索性能;模型分级选型,控制成本。

  4. 复杂格式文档的解析效果差
    解决方案:针对Word、PDF、表格、图片等不同格式,选用专用的解析器,比如用PyMuPDF解析PDF,用Unstructured解析复杂格式文档,用OCR提取图片中的文本,保证文档解析的准确率。

  5. 企业内部系统对接
    解决方案:封装标准化的工具和API,对接企业内部的OA、ERP、飞书/企业微信、Confluence等系统,实现文档自动同步、单点登录、消息推送。

2. 请你设计一个电商智能客服Agent,基于LangChain实现,说明核心能力、架构设计、关键流程、难点与解决方案。

【考察点】对Agent、工具调用、记忆模块的综合应用能力,业务场景的理解能力
【满分答题思路】

一、核心能力定位

电商智能客服Agent的核心目标是:替代80%的人工客服工作,解决用户的高频问题,提升服务效率,降低人工成本,同时提升用户体验。核心能力包括:

  1. 多轮连贯对话能力,记住用户的历史对话、订单信息、咨询记录;
  2. 高频问题自动解答:订单查询、物流查询、售后政策、商品信息、活动规则等;
  3. 工具调用能力:对接订单系统、物流系统、售后系统、商品库,实时查询数据;
  4. 复杂任务处理:协助用户发起售后、修改收货地址、取消订单、申请发票;
  5. 意图识别与分流:无法解决的问题,自动流转到对应的人工客服分组,附带用户的历史对话和问题背景;
  6. 情绪识别与安抚:识别用户的负面情绪,优先安抚,提升用户满意度。
二、整体架构设计

基于LangChain + LangGraph构建,采用模块化设计,分为4层:

  1. 接入层:对接电商APP、小程序、公众号、抖音等多渠道的对话入口,统一消息接入、会话管理;
  2. 核心能力层:基于LangGraph构建的客服Agent工作流,包括意图识别模块、情绪识别模块、工具调用模块、对话管理模块、人工分流模块;
  3. 对接层:标准化的工具对接层,封装订单查询、物流查询、售后申请、商品查询等工具,对接电商的内部业务系统;
  4. 存储层:Redis存储会话信息、对话历史、高频问答缓存;MySQL存储用户信息、订单信息、客服记录;向量数据库存储商品手册、售后政策、活动规则等知识库。
三、核心执行流程(基于LangGraph实现,完全可控)
  1. 用户消息接入:接收用户的消息,获取用户ID、会话ID、渠道信息,加载用户的历史对话、订单信息、个人信息;
  2. 前置处理节点
    • 情绪识别:识别用户的情绪,负面情绪优先触发安抚话术;
    • 意图识别:大模型识别用户的核心意图,分类为:商品咨询、订单查询、物流查询、售后申请、活动咨询、其他;
    • 敏感内容过滤:拦截恶意、色情、辱骂内容,触发对应的处理规则;
  3. 知识库检索节点:如果是商品咨询、政策咨询类意图,从向量知识库中检索对应的商品信息、售后政策、活动规则,获取相关上下文;
  4. 工具决策节点:大模型判断是否需要调用业务工具,以及需要调用哪个工具(订单查询、物流查询等),生成工具调用指令;
  5. 人工审核节点:高风险操作(取消订单、修改地址、发起售后),自动中断工作流,等待人工客服审核确认,审核通过后再执行工具;
  6. 工具执行节点:执行对应的工具调用,从业务系统中获取实时数据;
  7. 回答生成节点:将用户问题、检索到的知识库内容、工具返回的结果、用户的历史信息,传给大模型,生成符合客服话术规范的回答;
  8. 分流判断节点:大模型判断是否能解决用户的问题,能解决则直接返回回答;无法解决则生成工单,流转到对应的人工客服分组,附带用户的所有背景信息和历史对话;
  9. 结束/循环节点:用户继续提问,则进入下一轮循环;会话结束,则生成客服记录,归档会话信息。
四、核心技术选型
  • 开发框架:LangChain + LangGraph(可控工作流,避免Agent死循环)
  • 大模型:豆包/通义千问对话大模型(中文口语化适配好,成本低,指令遵循能力强)
  • 意图识别:微调后的小模型,实现快速、低成本的意图分类
  • 向量数据库:Chroma(中小规模)/Milvus(大规模),存储客服知识库
  • 记忆管理:Redis + 窗口记忆,实现多轮对话上下文管理,多用户会话隔离
  • 业务对接:FastAPI封装标准化工具,对接电商内部系统的OpenAPI
  • 人工交互:LangGraph的中断机制,实现人工审核、人工分流
  • 监控与统计:LangSmith + 自定义报表,统计客服解决率、转人工率、平均响应时长
五、核心难点与解决方案
  1. Agent不可控,出现错误操作
    解决方案:基于LangGraph构建固定的工作流节点,而非黑盒的ReAct循环,每一步都可控;高风险操作必须经过人工审核;工具调用前做严格的参数校验和权限校验,避免错误操作。

  2. 多轮对话上下文丢失,用户需要重复说明问题
    解决方案:基于窗口记忆+用户信息注入,每一轮对话都自动带入用户的订单信息、历史咨询记录、核心问题,让大模型完全掌握上下文,无需用户重复说明。

  3. 用户意图模糊,无法精准匹配需求
    解决方案:增加追问环节,当用户意图模糊时,大模型主动追问用户,明确核心需求,而非盲目调用工具或回答;同时优化意图识别模型,提升模糊意图的识别准确率。

  4. 话术不符合品牌规范,出现违规承诺
    解决方案:设计严格的客服话术提示词,明确禁止的违规承诺,所有回答必须基于知识库和业务系统的真实数据;增加输出校验环节,拦截违规内容、虚假承诺;同时用品牌客服对话数据微调模型,优化话术风格。

  5. 高并发场景的性能与稳定性
    解决方案:接口异步化,非实时任务异步处理;Redis缓存高频问题的回答、商品信息、政策内容,减少重复的大模型调用和业务系统查询;服务分布式部署,弹性扩缩容,保证高并发场景下的稳定性。


写在最后

恭喜你!完成了《零基础从入门到精通 LangChain》全系列教程的学习,从基础概念到生产级落地,从RAG系统到AI Agent,从面试八股文到场景设计,你已经掌握了LLM应用开发的全链路能力,完全可以胜任企业级AI应用开发的相关岗位。

技术的核心是解决真实的业务问题,理论和八股文是基础,真正的成长来自于实战。建议大家看完教程后,亲手搭建一个属于自己的RAG知识库、AI Agent,在实战中踩坑、解决问题、持续优化,才能真正把知识变成自己的能力。

如果本系列教程对你有帮助,欢迎点赞、收藏、关注,后续会持续更新更多LangChain、大模型应用开发的实战教程、行业落地案例!

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐