Skip to content

LangChain+LangGraph+LangSmith 面试题 - 2026-06-15 00:07 ​

【面试题】1. LangChain的Memory记忆系统有哪几种类型?实际项目中如何选择? ​

【标准答案】主要分两大类:短期记忆和长期记忆。

短期记忆用ConversationBufferMemory(保留完整历史,简单但Token消耗大)和ConversationBufferWindowMemory(只保留最近N轮,节省Token但丢失上下文)。

长期记忆用ConversationSummaryMemory(用LLM总结历史,平衡效果与成本)和ConversationKGMemory(知识图谱,适合关系复杂的对话)。

实际选型:客服场景用WindowMemory(控制成本);法律/医疗咨询用SummaryMemory(不能丢上下文);多轮复杂任务用KGMemory(需要追踪实体关系)。核心权衡是Token成本 vs 上下文完整性。


【面试题】2. LangGraph的State状态管理为什么比LangChain的Chain更灵活?实际写代码时怎么设计State? ​

【标准答案】Chain是线性流水线,一旦定义好路径就固定了;LangGraph是有向图,支持条件分支、循环、多节点并行,状态可以在任意节点被修改和传递。

设计State时用TypedDict定义结构体,比如:

python
class AgentState(TypedDict):
    messages: list
    next_step: str
    error_count: int

关键是把业务状态和控制状态分离:messages存对话历史(业务),next_step存路由决策(控制),error_count存重试次数(容错)。这样每个节点只改自己关心的字段,不会互相污染。


【面试题】3. 用LangSmith排查一个LangChain应用响应慢的问题,你的完整排查思路是什么? ​

【标准答案】四步排查法:

第一步:LangSmith Trace里看Timeline视图,找到耗时最长的Span(通常是某个Tool调用或LLM请求)。

第二步:点开那个慢Span,看Input/Output大小和Metadata,判断是模型推理慢(换更快的模型)还是Tool执行慢(优化Tool逻辑或加缓存)。

第三步:如果是RAG场景,检查Retriever的Top-K是否合理(K太大导致上下文过长),以及Embedding模型是否成了瓶颈。

第四步:看Token Usage统计,如果Prompt Token过高,说明上下文管理有问题(比如Memory没做截断)。优化后用LangSmith的A/B对比功能验证效果。


【面试题】4. LangGraph如何实现"人工审批节点"(Human-in-the-loop)?举一个实际业务场景。 ​

【标准答案】用interrupt机制:在需要人工审批的节点,调用interrupt(value)暂停图执行,把当前状态返回给调用方;人工审核后,用Command(resume=审批结果)恢复执行。

实际场景:金融风控审批。LangGraph跑完风险评估模型后,在"是否放款"节点调interrupt,把评估报告和借款人信息推送给风控经理;经理审核后点"通过/拒绝",系统用Command(resume=decision)继续跑图的后续节点(放款操作或拒绝通知)。

核心是状态持久化:checkpointer把图状态存到数据库,人工审批可能要几小时,恢复时能接着跑。


【面试题】5. LangChain的Retriever检索器,如何从"向量相似度检索"升级到"混合检索"提升准确率? ​

【标准答案】纯向量检索的问题是语义相似≠相关,比如问"怎么退款",向量检索可能返回"退款政策"(对),也可能返回"退款失败案例"(不对)。

混合检索=向量检索 + 关键词检索 + Rerank重排序:

  1. 向量检索召回语义相似的Top-20
  2. BM25关键词检索召回关键词匹配的Top-20
  3. Reciprocal Rank Fusion (RRF) 融合两个结果集
  4. Cohere/BGE Rerank模型对融合后的结果重新打分,取Top-5给LLM

LangChain用EnsembleRetriever实现多检索器融合,用ContextualCompressionPipeline加Rerank。实际落地能让准确率从60%提升到85%+。


【面试题】6. LangSmith的数据集(Dataset)和自动化评估(Evaluation)怎么用?能不能举个完整的CI/CD集成例子? ​

【标准答案】Dataset是测试用例集合:从生产日志导出真实用户问题+标准答案,或者人工构造边界case(比如"用户问退款但没订单号")。

自动化评估用langsmith.evaluate:

python
evaluate(
    target=my_rag_chain,
    data=dataset_name,
    evaluators=[correctness_evaluator, hallucination_evaluator],
    experiment_prefix="v2.3-release"
)

CI/CD集成:每次发版前,GitHub Actions跑评估脚本,对比当前版本和线上版本的correctness指标;如果下降超过5%,自动阻断发布并Slack通知团队。LangSmith的Experiment Comparison视图能直观看到哪个case退化了。


【面试题】7. LangGraph的多智能体协作(Multi-Agent)怎么避免"死循环"和"无限调用"? ​

【标准答案】三个防护措施:

1. 最大步数限制:用RecursionLimit设置图的递归上限(比如50步),超限直接抛异常。

2. 条件边做"路由守卫":在每个Agent节点的出口加条件判断,比如if state["error_count"] > 3: return "error_handler"。

3. Supervisor模式集中调度:不要Agent之间直接互相调用,而是用Supervisor节点统一管理"下一步调哪个Agent";Supervisor里加逻辑:if last_agent == "researcher" and task_status == "done": return END。

实际项目里还加调用链路追踪(LangSmith自动记录),一旦发现问题能快速定位是哪个Agent在疯狂循环。


【面试题】8. LangChain Tools工具封装的最佳实践是什么?如何处理Tool调用失败的重试和降级? ​

【标准答案】封装原则:每个Tool只做一件事,用@tool装饰器明确输入输出Schema(Pydantic模型),这样LLM能准确理解Tool的用途和参数。

重试机制:用Tool的max_retries参数(默认2次),配合Tenacity库做指数退避:

python
@retry(wait=wait_exponential(multiplier=1, min=4, max=10), stop=stop_after_attempt(3))
def search_tool(query: str):
    ...

降级策略:Tool调失败后,返回结构化错误信息而不是抛异常(比如{"error": "搜索服务不可用", "fallback": "我无法实时搜索,根据我的训练数据..."}),让LLM能基于降级信息继续回答,而不是整个Chain崩溃。


【面试题】9. 生产环境中LangChain应用的Token成本失控,你如何用量化手段定位和降本? ​

【标准答案】用LangSmith的Token Usage Analytics:

定位阶段:按Trace Group统计Token消耗,找到"吃Token大户"(通常是Memory没截断导致上下文越来越长,或者RAG检索了太多文档)。

降本手段:

  1. Memory优化:换ConversationSummaryMemory,用LLM总结历史而不是全量保留
  2. Prompt压缩:用LangChain PromptTemplate的partial功能,把固定内容提到System Prompt而不是每次都传
  3. RAG优化:调小Top-K(从10降到3),用Rerank保证质量
  4. 模型降级:简单问题用GPT-3.5/GLM-4-Flash,复杂推理才用GPT-4/Claude

验证效果:LangSmith的Cost Analytics视图能看到优化前后的成本曲线,算ROI。


【面试题】10. 从0到1落地一个"智能客服+工单流转"系统,你会如何用LangChain+LangGraph+LangSmith全家桶? ​

【标准答案】架构设计:

LangChain层:封装Tools(查询订单、创建工单、查询知识库),用ConversationSummaryMemory管理多轮对话上下文。

LangGraph层:定义状态图

  • 节点:意图识别 → 知识库检索 → 工具调用 → 人工审核判断 → 回复生成
  • 条件边:如果置信度<0.7,路由到"转人工"节点;如果工具调用失败,路由到"降级回复"
  • 持久化:用SqliteSaver存图状态,支持用户中断后继续

LangSmith层:

  • 上线前:用历史客服对话数据构建Dataset,跑自动化评估(答案准确性、降级率)
  • 上线后:实时监控latency_p99和tool_error_rate,超阈值自动告警
  • 持续优化:把人工客服修正过的回答加入Dataset,定期重新评估模型效果

关键指标:首次解决率>70%,人工转接率<30%,平均响应时间<3秒。