AI智能体应用开发面试题 - 2026-06-12
【面试题】1. LangChain的Chain和Agent有什么区别?实际项目中你如何选择?
【标准答案】 Chain是固定流程,按预设步骤执行,适合流程明确的场景,比如固定三步:检索→组装Prompt→生成。 Agent是自主决策,模型根据用户输入动态选择工具和执行顺序,适合需要灵活判断的场景,比如智能客服需要决定是查订单还是退换货。
选择原则:流程固定用Chain,需要模型自主决策用Agent。实际项目中我经常组合使用——用Chain处理主流程,在需要灵活判断的节点嵌入Agent。
【面试题】2. 如何设计一个支持多轮对话的智能客服Agent?需要考虑哪些核心模块?
【标准答案】 核心四模块:
- 记忆管理:用ConversationBufferMemory或ConversationSummaryMemory维护上下文,避免重复询问
- 意图识别:每轮先用小模型分类用户意图,决定是走FAQ、查订单还是转人工
- 工具调用:对接订单系统、物流API、知识库检索
- 状态管理:用JSON记录会话状态(如"已提供订单号"、"等待确认退款")
关键技术点:用LangChain的MessagesPlaceholder注入历史消息,设置max_token限制避免超出上下文窗口。
【面试题】3. 使用LangChain调用大模型API时,如何处理Token限制和成本控制?
【标准答案】 三层策略:
- 提示词优化:用Few-shot代替长篇描述,删除冗余示例,压缩系统提示词
- 上下文管理:用ConversationSummaryMemory自动摘要历史对话,而非全量传入
- 模型分级:简单任务用GPT-3.5/ChatGLM便宜模型,复杂推理才用GPT-4/Claude
成本监控:在LangChain中接入Callbacks,记录每次调用的Token消耗,定期分析高成本对话优化提示词。
【面试题】4. 从0到1搭建一个RAG知识库问答系统,关键步骤有哪些?
【标准答案】 六步落地:
- 文档切分:用RecursiveCharacterTextSplitter,chunk_size=500-1000,overlap=50-100
- 向量化:用text-embedding-ada-002或M3E embeddings,注意维度匹配
- 存储:Chroma做原型验证,Milvus/Pinecone做生产环境
- 检索优化:Hybrid Search(向量+关键词),用MMR避免相似文档扎堆
- 重排序:用Cohere Re-rank或BGE reranker对Top-K结果二次排序
- 评估:用Ragas框架测Recall、Precision、Faithfulness
避坑:切分时不要切断表格和代码块,用MarkdownHeaderTextSplitter保留结构。
【面试题】5. 如何设计一个能够调用外部API的工具增强Agent?
【标准答案】 用LangChain的Tool类封装三步:
- 定义工具:@tool装饰器,写清楚name、description(模型靠这个决定是否调用)、args_schema
- 异常处理:try-except包裹API调用,返回友好错误信息而非Stack Trace
- 异步支持:用async def + Toolkits,避免串行调用拖慢响应
实战技巧:description要写"什么场景用这个工具",比如"当用户询问天气时调用此工具",模型才能正确触发。
【面试题】6. 你之前做过最复杂的Agent项目是什么?遇到过什么技术难点?怎么解决的?
【标准答案】 (示例回答)做过一个Code Review Agent,难点是让模型理解整个代码仓库的上下文。
难点1:代码文件太多,超出上下文窗口 解决:用Repo Map技术(参考Aider),只提取函数签名和调用关系,不传全文
难点2:模型生成的Review意见太泛,不够具体 解决:在Prompt中加入项目的历史Bug数据作为Few-shot,让模型学会找类似问题
难点3:误报率高,开发人员投诉 解决:加入置信度阈值,低置信度问题只给提示不报错,逐步收集反馈微调Prompt
【面试题】7. 向量数据库的相似度检索原理是什么?如何优化检索效果?
【标准答案】 原理:将文档和查询都转成向量,计算余弦相似度,返回Top-K最相似的文档。
优化四板斧:
- Embedding模型选型:中文用M3E/BGE,代码用CodeBERT,别用通用模型
- 检索参数调优:调大top_k(20-50)+ 用MMR增加多样性,避免返回雷同内容
- Hybrid Search:向量检索+BM25关键词检索,加权融合结果
- Query Rewrite:对用户问题做同义词扩展、实体识别,提升召回率
【面试题】8. 多智能体协作场景下,如何设计Agent之间的通信机制?
【标准答案】 三种模式:
- 中心化路由:用一个Manager Agent接收任务,拆解后分发给Worker Agents,适合任务边界清晰的场景
- 消息队列:Agents通过Redis/RabbitMQ异步通信,适合耗时任务(如一个Agent爬数据,另一个做分析)
- 共享黑板:Agents读写同一个状态文件/数据库,适合需要共享中间结果的场景
实战选择:CrewAI适合中心化路由,LangGraph适合状态机式协作,AutoGen适合开放式对话协作。
【面试题】9. Dify的工作流编排功能相比LangChain有什么优势和劣势?
【标准答案】 优势:
- 可视化编排,产品经理也能改流程,不用改代码
- 内置RAG、工具调用、条件分支,开箱即用
- 版本管理和A/B测试更友好
劣势:
- 复杂逻辑(如动态循环次数)不如LangChain灵活
- 自定义工具需要写Docker镜像,调试不如本地代码方便
- 黑盒化,出问题不好排查
选择建议:MVP阶段用Dify快速验证,复杂业务逻辑还是用LangChain写代码可控。
【面试题】10. Agent系统上线后,如何做性能监控和持续优化?
【标准答案】 监控三件套:
- 调用链追踪:用LangSmith或Helicone记录每次Agent调用的耗时、Token消耗、工具调用次数
- 质量评估:人工标注10%的对话,评估任务完成率、用户满意度
- 异常告警:设置Token超阈值、工具调用失败率、响应超时告警
持续优化闭环:
- 每周看失败案例,分析是Prompt问题还是工具问题
- 用Bad Case反推改进Prompt或增加工具
- A/B测试不同Prompt版本,数据驱动迭代
生成时间:2026-06-12 02:30 题目数量:10道 覆盖知识点:LangChain、RAG、向量数据库、多智能体、Dify、性能优化等