Skip to content

AI智能体应用开发面试题 ​

生成时间:2026-06-16 23:07


【面试题】1. 你在做Agent时遇到过模型"幻觉"问题吗?怎么处理的? ​

【标准答案】 幻觉问题本质是模型生成不可控。实战中我们用三招应对:

第一,约束输出格式——用JSON Schema强校验输出,不符合就重试,加上max_retries;第二,RAG兜底——让模型只基于检索到的文档回答,检索不到就说不知道;第三,双模型校验——用小模型做二次验证,比如让Claude审查GPT输出的事实性。

核心思路是:能确定的别让模型自己编,模型负责推理,检索负责事实。


【面试题】2. 多Agent协作时如何避免"死锁"和"活锁"? ​

【标准答案】 死锁就是两个Agent互相等对方解锁资源,活锁是大家都在跑但一直在空转。

防死锁我们用中央调度器模式——类似Boss-Worker,调度者统一分配任务,Agent之间不直接互相调用,而是向调度者汇报+领取任务,这样永远不会环形等待。

防活锁加退避策略——每次任务失败指数级延长等待时间,超过阈值直接标记失败并告警。同时设计任务超时机制,单个任务跑超过N分钟还没结果就中断重来。

简单说就是:结构上避免环形依赖,时间上加兜底超时。


【面试题】3. Dify和LangChain你更倾向用哪个?为什么? ​

【标准答案】 看场景,我这样选:

Dify适合快速交付——创业公司要做个内部问答机器人,选Dify,拖拽就能搭,2天上线。他擅长工作流编排和可视化调试,但定制化程度受限。

LangChain适合深度开发——我要做复杂的多Agent系统,需要精细控制思维链、记忆管理、工具调用,那就上LangChain。它灵活但门槛高,需要自己处理很多边界情况。

实际项目中我更常用LangChain,因为Dify的灵活性满足不了复杂业务逻辑。但如果是标准化场景,Dify真香。


【面试题】4. 讲讲你对"Agent记忆系统"的理解,你会怎么设计? ​

【标准答案】 记忆分三层:

短期记忆——当前对话的上下文,用滑动窗口控制token总量,超了就截断老的。

长期记忆——跨会话积累的重要信息,用向量数据库存储,检索相似记忆注入上下文。比如用户说过"我喜欢简洁的报告",这条要记住。

工作记忆——Agent执行任务时临时需要的中间状态,放内存里,任务结束就释放。

实现上:短期用LangChain的ConversationBufferMemory;长期用Pinecone/Milvus存向量,检索时用语义相似度;再加个规则引擎做记忆重要性打分,过滤掉无关信息。


【面试题】5. 如果让你从0到1搭建一个客服Agent,你会怎么做? ​

【标准答案】 分三步走:

第一步:明确边界——客服Agent能做什么、不能做什么。FAQ回答可以,退款操作不行,必须转人工。边界不清楚后续全是坑。

第二步:架构选型——简单场景用RAG+LLM;复杂场景加意图识别,先分类用户意图,再走不同处理分支。我们当时用的意图识别准确率能到92%,省了很多bad case。

第三步:数据闭环——埋点记录没回答好的case,每周迭代。把高频转人工的问题整理成标准答案补充进知识库。

核心是先跑起来,再快速迭代。第一版不用完美,解决80%问题就行。


【面试题】6. 工具调用时怎么设计"重试+降级"策略? ​

【标准答案】 我设计三级降级:

第一级重试——网络超时、500错误,先重试3次,每次间隔1s、2s、4s指数递增。

第二级降级——重试还失败,换备用工具。比如地图API挂了,换另一个地图服务商。

第三级降级——所有工具都失败,给用户返回降级结果+记录工单,而不是直接崩溃。比如"暂时无法查询物流,给您转人工"。

实现上:用装饰器模式包装每个工具调用,统一处理重试逻辑,配合Prometheus记录工具失败率,哪个工具连续失败就自动摘掉。


【面试题】7. RAG的召回率和准确率上不去,你一般怎么优化? ​

【标准答案】 RAG效果差主要三个环节出问题:

召回阶段——查不到相关文档。优化方案:调整chunk大小(常用512-1024),overlap加20%防止截断关键词;嵌入模型换成你们业务领域微调的版本;加元数据过滤,比如限定时间范围。

排序阶段——相关但不是最相关的排前面。方案:用BGE-Reranker做二阶段重排序,或者把相似度阈值从0.7提到0.85过滤掉低分结果。

生成阶段——上下文太长淹没关键信息。方案:把检索结果按相关性分段,相似度高的放前面,生成时加"仅基于上述文档回答"的系统提示约束。

实战中召回和排序优化性价比最高,先把这俩调好。


【面试题】8. 面试官问:你觉得AI Agent最难点在哪? ​

【标准答案】 我觉得最核心的难点是可控性。

模型输出不稳定,同样的提示词这次对下次可能错。在工程上,我们可以用Prompt约束、输出校验、思维链引导来缓解,但不能根除。

其次是成本控制——Agent动不动就多轮调用,一个任务烧掉几块钱,成本优化和效果平衡很难。

但换个角度想,Agent的价值就在于"不完美中的可用性"。关键是设计好兜底机制——什么情况下重试、什么情况下转人工、什么情况下直接失败。

能接受Agent会犯错、并且设计了完善的兜底,才是成熟的Agent产品思路。


【面试题】9. 向量数据库你们用的什么?Milvus和Pinecone怎么选? ​

【标准答案】 我们生产环境用的是Milvus,原因:

成本——Milvus可以私有化部署,数据不出海,Pinecone按存储和向量数收费,大规模使用贵。

灵活性——Milvus支持多种索引类型(HNSW、IVF、DiskANN),可以根据场景选;还支持混合标量过滤,召回效率高。

选型建议:中小规模、快速验证用Pinecone,托管省心;大规模生产、讲究数据安全用Milvus。如果你们是金融、医疗这种敏感行业,Milvus几乎是必选。


【面试题】10. 场景题:如果用户说"帮我分析下这个月的销售数据",Agent要怎么完成? ​

【标准答案】 这个任务Agent会这样走:

第一步:意图澄清——用户说"分析",但不知道要什么粒度的分析。Agent先问:"您想要汇总数据还是分产品/分地区拆解?"或者直接提供几个分析维度让用户选。

第二步:任务拆解——确认维度后拆成子任务:查数据库拿数据 → 格式化数据 → 调图表生成工具 → 组装报告。

第三步:执行——调用数据库工具查数据,调用Python/Matplotlib生成图表,调用总结工具输出文字分析。

第四步:兜底——如果数据库工具失败,Agent返回"数据暂时无法获取,已记录工单"而不是报错。

整个过程Agent在自主规划+调用工具+异常处理,这才是Agent相比普通API调用的优势。