3.9 KiB
id, title, type, domain, stack, tags, level, related, week
| id | title | type | domain | stack | tags | level | related | week | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ai.langchain.interview | LangChain 面试题 | interview | ai |
|
|
intermediate |
|
|
LangChain 面试题
基础
【基础】LangChain 是什么?主要组件有哪些?
参考答案:构建大模型应用的框架,提供统一的模型接口、消息、提示词模板、输出解析、工具、检索组件、Agent。1.x 中 Agent 统一为 create_agent(基于 LangGraph),并通过中间件扩展。
追问:LangChain、LangGraph、LangSmith 的关系?→ LangChain 提供组件和高层 Agent;LangGraph 是底层的有状态编排框架;LangSmith 是追踪、评测和监控平台。
【基础】LCEL 是什么?
参考答案:LangChain 表达式语言,用 | 把 Runnable 组件组合成链,统一支持同步 / 异步、流式、批处理,以及重试、备用、并行等能力。
追问:batch 和循环调用 invoke 有什么区别?→ batch 会并发执行(可以用 max_concurrency 控制并发数),速度更快;循环是串行的。
【基础】怎么让模型输出结构化数据?
参考答案:优先使用模型原生的结构化输出(with_structured_output(Schema),底层用工具调用或 JSON Schema 模式);不支持时用提示词 + PydanticOutputParser。无论哪种都要校验,失败时重试或降级。
追问:Schema 设计要注意什么?→ 用枚举限制取值、字段加描述、可选字段明确、不要嵌套太深;字段名和描述模型都会读。
进阶
【进阶】LangChain 1.x 和 0.x 有什么主要变化?
参考答案:Agent 统一为 create_agent,基于 LangGraph 构建,支持检查点、流式和人工介入;引入中间件机制(调用限制、摘要、人工审批、备用模型等);旧的 AgentExecutor、LLMChain 等移到 langchain-classic;核心包更精简。具体以官方迁移文档为准。
追问:项目里遇到过版本问题吗?→ 按实际经历讲(例如教程是 0.x 写法、包版本不匹配),以及怎么解决(锁定版本、读迁移文档、写测试)。
【进阶】怎么做模型的重试和降级?
参考答案:Runnable 的 with_retry 处理临时错误;with_fallbacks 在主链失败后切换到备用模型或提供方;1.x 的 Agent 也可以使用备用模型中间件。降级的最后一层通常是“返回友好提示 / 转人工”。
追问:备用模型效果差一些怎么办?→ 评测备用模型在关键用例上的表现,可以只对部分功能降级;记录降级发生的比例并告警。
场景题
【场景题】做一个工单自动分类服务,你会怎么设计?
参考答案:结构化输出(枚举类别、格式校验)+ 重试 + 备用提供方;低置信度人工复核和抽检;异步执行不阻塞工单创建;历史数据批处理控制并发、断点续跑;记录模型和提示词版本;评测集验证准确率。详见工单分类场景。
追问:怎么衡量分类效果?→ 用人工标注的样本计算准确率和各类别的召回率,特别关注高风险类别(投诉)的召回。
【场景题】团队里有人说“LangChain 太重了,不如直接调 SDK”,你怎么看?
参考答案:各有适用场景。简单调用、单一模型提供方、追求可控性,直接用 SDK;需要多提供方切换、检索 / 工具 / Agent 生态、中间件和 LangGraph 编排能力时,LangChain 能节省大量工作。关键是封装要适度,并锁定版本、写测试应对版本变化。
追问:如果用 SDK,怎么保留切换模型的能力?→ 自己定义一层薄的模型接口(或使用 OpenAI 兼容接口),业务代码不直接依赖某个厂商的 SDK。