常见面试题
LangChain / LangGraph 相关面试题整理,涵盖基础概念、架构设计、实战场景和原理理解。
基础概念
1. LangChain 是什么?解决了什么问题?
LangChain 是一个构建 LLM 应用的开发框架,主要解决:
- 模型抽象:统一接口对接不同 LLM(OpenAI、Claude、本地模型等)
- 链式编排:将多个步骤(检索→增强→生成)组合成工作流
- 工具调用:让 LLM 能够调用外部 API 和工具
- 状态管理:维护对话上下文和 Agent 状态
2. LangChain 和 LangGraph 的关系?
LangChain 是框架层,提供模型、工具、Agent 循环的抽象和集成。LangGraph 是运行时层,专注于有状态 Agent 的持久化、流式、人机协同等底层编排能力。
类比:LangChain 像 Spring Boot(开发框架),LangGraph 像 Kubernetes(编排运行时)。
3. 什么是 Agent?和 Chain 有什么区别?
| Chain | Agent | |
|---|---|---|
| 执行路径 | 固定、线性 | 动态、循环 |
| 决策能力 | 无 | LLM 自主决策 |
| 工具使用 | 需要预定义 | 自动选择 |
| 适用场景 | 确定流程 | 需要推理的复杂任务 |
4. 什么是 RAG?解决了什么问题?
RAG(Retrieval-Augmented Generation)通过检索外部知识增强 LLM 输出,解决:
- 知识截止:LLM 训练数据有截止日期
- 幻觉:通过提供参考文档减少编造
- 私有知识:让 LLM 能访问企业文档
5. 什么是 Tool Calling?和 Function Calling 的区别?
Tool Calling 是让 LLM 输出结构化工具调用指令,由应用执行后返回结果。实际上现在业界已将两者混用,OpenAI 的 Function Calling 已更名为 Tool Calling。
LangGraph 原理
6. StateGraph 的执行流程?
- 编译:检查图拓扑(是否有不可达/循环节点)
- 调用:传入初始 State
- 遍历:从 START 开始,按边执行节点
- 合并:节点返回值通过 Reducer 合并到 State
- 条件路由:根据条件边函数决定下一步
- 结束:到达 END 返回最终 State
7. Reducer 的作用是什么?什么时候需要?
Reducer 定义多个节点写入同一 State 字段时的合并策略:
- 无 Reducer:后写入覆盖先写入
operator.add:列表追加add_messages:智能合并消息(去重、更新)
需要 Reducer 的场景:多个节点向同一个列表追加数据(如消息历史、搜索结果)。
8. Interrupt 如何实现人机协同?
Interrupt 在执行过程中暂停图,等待人工决策后恢复。实现方式:
- 编译时指定
interrupt_before/interrupt_after - 节点内调用
interrupt()函数 - 通过
graph.get_state()获取暂停状态 - 通过
graph.update_state()或Command(resume=...)恢复
9. Checkpoint 的存储后端有哪些?
| 后端 | 适用场景 | 特点 |
|---|---|---|
| InMemorySaver | 开发调试 | 进程重启丢失 |
| SqliteSaver | 单机测试 | 文件持久化 |
| PostgresSaver | 生产环境 | 高可用、连接池 |
| 自定义 | 特殊需求 | 实现 BaseCheckpointSaver |
10. Streaming 的几种模式区别?
- values:每步完整 State
- updates:每步 State 增量
- messages:逐 Token(聊天 UI)
- events:完整事件流
- custom:自定义事件
- debug:调试事件
实战场景
11. 设计一个多 Agent 客服系统
用户 → 分类 Agent → 订单 Agent(查订单)
→ 售后 Agent(处理退款)
→ 技术 Agent(解决问题)
监督 Agent(协调、升级)核心设计:
- 每个 Agent 独立子图
- 监督者用条件边路由
- 关键操作(退款)加 Interrupt
- Checkpoint 持久化对话
12. RAG 系统的优化策略
- 分块策略:按语义段落分块,重叠窗口
- Embedding 选择:BGE/M3E 中文效果好
- 检索增强:HyDE(先假设回答再检索)
- 重排序:Cross-encoder 精排
- 多路召回:向量 + BM25 关键词
- Query 改写:LLM 改写用户问题
13. Agent 的幻觉如何降低?
- RAG 提供参考文档
- 工具调用用结构化输出
- 人工审批关键操作
- 多次验证(self-consistency)
- 输出约束(JSON Schema / Pydantic)
架构设计
14. 生产中 Agent 架构需要考虑什么?
- 持久化:Checkpoint 存储选型
- 容错:重试、降级、超时
- 安全:工具权限、输入校验、速率限制
- 监控:Tracing、日志、告警
- 可扩展性:水平多实例
- 成本:Token 消耗控制
15. 如何选择 Functional API 和 Graph API?
Functional API:流程较线性、想用标准 Python 写法 Graph API:复杂分支并行、需要可视化、精细控制