AI智能体应用开发面试题
生成时间:2026-06-16 23:50
【面试题】1. 当LLM返回的工具调用参数格式不符合预期时,你的排查思路是什么?
【标准答案】
先打日志把原始返回打印出来,确认是模型幻觉乱填了参数、还是格式解析出错了。
常见三坑:
- 解析层面:JSON前后有markdown标记、多了换行或引号,用正则或专用parser处理
- 模型层面:提示词里没强调必须输出严格schema,加个few-shot示例让它学
- 参数校验:在调用工具前加Schema验证层,不合格直接抛异常重试
实战技巧是加个"参数修正agent",专门把残缺参数补全或纠正,比让主模型重试成本低。
【面试题】2. Dify和CrewAI在多智能体编排上的核心差异是什么?什么场景选哪个?
【标准答案】
Dify是工作流优先,强在可视化编排、API接入、Saas化部署,适合产品化场景,多个agent作为流程节点串起来。
CrewAI是角色协作优先,强在多agent之间自主协商、共享上下文,适合复杂调研/分析类任务,agent之间是平等角色关系。
选Dify:你要做一个有前端界面的产品、多流程分支、需要非技术人员配置 选CrewAI:你要做调研报告生成、多角度分析、多agent"讨论"得出结论
1-3年经验强烈建议两个都会,CrewAI理解agent协作原理,Dify能快速出demo。
【面试题】3. 描述一下你做过的RAG项目中,是如何处理"召回质量差"这个问题的?
【标准答案】
分三步:
召回前:优化分块策略。不是按固定字数切,而是按语义段落切,小块512字左右足够。加BM25初筛+向量检索双路召回,底池够大时效果明显。
召回后:加重排序模型(bge-reranker),把向量召回的Top20再排一遍,取Top5送给LLM。
生成时:给LLM的prompt里明确加"仅用提供的上下文回答,超出范围说不知道",避免它用自己的知识发挥。
实际项目里重排序是ROI最高的优化,加了之后召回准确率能提20%以上。
【面试题】4. 多模态Agent在处理图片时,你一般怎么做图片理解和信息提取的?
【标准答案】
核心就一个原则:根据任务决定图片处理深度。
不需要深度理解的场景(截图识别、UI检测):用轻量模型加规则,比如PaddleOCR + 坐标框提取。
需要理解内容的场景(文档理解、图表分析):直接调GPT-4o或Claude-3.5的vision能力,配合提示词约束输出格式。
实战技巧是图片先做预处理——统一分辨率、加对比度、去除水印——能显著提升识别准确率。多图场景用拼图方式传一张,而不是逐张多次调用,成本差好几倍。
【面试题】5. 如果让你从0设计一个客服Agent,你会怎么规划它的架构?
【标准答案】
分四层来设计:
入口层:意图识别。先让小模型或规则做意图分类,分流到不同处理链路,避免什么都走大模型。
记忆层:Session内用短时记忆(当前对话窗口),跨session用向量数据库存历史对话摘要,支持上下文续接。
执行层:核心Agent负责理解-规划-执行。规划模块拆解用户问题,分发给工具节点(查订单、退货政策、FAQ检索),结果汇总返回。
质量层:输出校验Agent,检查回答是否偏离事实、是否有hallucination,敏感词过滤。
部署上用Dify做编排,Qdrant做向量检索,Redis做session缓存,这套组合在中小型客服场景性价比最高。
【面试题】6. LangChain的LCEL是什么?你在项目里是怎么用的?
【标准答案】
LCEL(LangChain Expression Language)是LangChain的链式表达式语法,把各种组件(prompt、model、output_parser)用管道符|串起来。
优势是统一了调用接口,不管是简单链还是复杂链写法一致,而且天然支持并行和动态路由。
实战用法:
# 简单链
chain = prompt | model | output_parser
# 带重试和fallback的链
chain = prompt | model.with_retry() | output_parser.with_fallback(fallback=manual_handler)我之前用它做过一个合同审查流程:输入合同文本 → 提取关键条款 → 比对风险条款库 → 输出审查报告,LCEL让每个步骤独立可测试,出问题好定位。
【面试题】7. 智能体的长期记忆系统怎么设计?和短期记忆的区别是什么?
【标准答案】
短期记忆:就是当前对话上下文窗口,靠轮次ID管理,换了session就没了。
长期记忆:分两层:
- 语义记忆:对话摘要+核心信息向量存进向量数据库,按需召回
- 程序记忆:用户偏好、已知事实用结构化存储(JSON/数据库),每次建新session先加载
设计原则是"按需记忆,不要全部记"。全量记成本高且干扰大,用一个"记忆优先级打分器"决定哪些值得长期存。
面试加分点:提到用向量数据库(Milvus/Pinecone)存语义记忆,用Graph数据库存实体关系——这说明你对记忆系统的理解有深度。
【面试题】8. 当Agent执行一个长任务时中途失败了,你怎么设计恢复机制?
【标准答案】
核心思路是任务快照+断点续跑。
具体做法:
- 任务开始前生成唯一ID,拆解后的子任务存入任务队列,每个子任务带状态标记(pending/running/done/failed)
- 执行过程中每个节点完成后立即持久化状态到Redis
- 失败时从最后一个成功的节点重试,不从头跑
- 重试超过N次(N可配置)还没过,标记失败并告警
面试亮点:加上"补偿机制"——比如写数据库失败了,不仅重试操作,还要有回滚之前已写数据的逻辑。这说明你有完整的事务思维。
【面试题】9. 你怎么理解"Agent规划能力"?请说一个你做过的任务拆解实践
【标准答案】
规划能力本质是把模糊目标拆成可执行步骤的能力,依赖模型的CoT(思维链)和工具认知。
我做过一个案例:用户说"帮我分析竞品情况",Agent的规划链是这样的:
- 先用搜索工具查竞品名单
- 并行调用多个搜索查各竞品的产品/价格/评价
- 汇总信息,提取结构化对比维度
- 调用分析模型输出报告
关键点是第一步先让模型输出规划大纲,人确认或自动执行,避免它一上来就瞎搜。规划模块和执行模块解耦,规划只管拆,执行只管干,出了bug好排查。
【面试题】10. 如果面试官问你"你觉得Agent和传统RPA的核心区别是什么",你怎么回答?
【标准答案】
最本质的区别是Agent有判断力,RPA没有。
RPA是"死规则"——告诉它点在哪个坐标、填什么内容,它100%按指令执行,环境变了就废了。
Agent是"活的"——给它一个目标,它自己决定用什么工具、先做什么、怎么应对异常。遇到没见过的场景,Agent能推理,RPA就原地报错。
打个比方:RPA是高级照相机,参数调好了能拍出好照片但拍不了新场景;Agent是摄影师,理解你要什么自己调参数。
1-3年经验能把这个逻辑讲清楚,面试官就知道你不是在调API糊弄,而是真正理解了这套范式的价值。