Files

3.9 KiB
Raw Permalink Blame History

id, title, type, domain, stack, tags, level, related, week
id title type domain stack tags level related week
ai.langchain.interview LangChain 面试题 interview ai
langchain
LangChain
LCEL
结构化输出
面试
intermediate
ai.langchain.lcel-structured-agent
6
11
16

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。