Skip to content

AI智能体应用开发面试题 - 2026-06-16 23:30 ​

【面试题】1. 大模型API返回的结构化输出不稳定怎么办?比如Function Calling的参数偶尔缺失或类型错误,你在生产环境中怎么兜底? ​

【标准答案】这是生产环境最常见的坑。我的做法分三层:第一层,调用端做参数校验——拿到返回后先做schema校验,缺必填字段就自动重试,最多重试3次,每次换一下temperature降随机性;第二层,参数修复——对缺失字段用默认值填充,对类型错误做强制转换,比如把字符串"true"转成布尔值;第三层,兜底降级——如果重试后还是烂,就fallback到纯文本模式让模型自由回答,再用正则或二次LLM调用提取关键参数。实测这套方案能把工具调用的成功率从85%提到98%以上。

【面试题】2. 你如何设计一个智能体的任务拆解与规划模块?请从具体实现角度说明,不要只讲概念。 ​

【标准答案】我用两步走:第一步,让LLM做"计划生成",输入任务描述+可用工具列表,输出一个有序的子任务清单,每个子任务指定用哪个工具、输入什么、期望输出什么——这步我用结构化JSON输出强制约束格式;第二步,执行引擎按计划顺序跑,每个子任务执行完把结果注入上下文,下一个子任务带着前面的结果继续。关键点是计划不是一锤子买卖——我在每个子任务执行后加一个"反思检查",判断当前结果是否偏离预期,偏离了就触发计划重规划,重新生成后续步骤。这套"Plan-Execute-Replan"循环在LangChain里可以靠ReAct链+自定义回调实现,Dify里用工作流分支节点更直观。

【面试题】3. 多模态智能体怎么处理图片输入和图文混合推理?你在项目中遇到过什么实际问题? ​

【标准答案】多模态Agent的核心是把视觉理解融入推理链路。实际做法:用GPT-4V或Claude的多模态API,把图片作为input直接传给模型,在prompt里明确要求"先描述图片内容,再基于描述推理"。遇到的实际问题有三个:一是图片太大超出token限制,我的解法是先做预处理——缩放+裁剪关键区域,或用OCR提取文字部分单独处理;二是模型对复杂图表的理解不稳定,我加了"二次验证"步骤——让模型用代码生成图表的数值提取,再交叉比对;三是图文混合上下文排序问题,多个图片和文本交替时模型容易混淆顺序,我用显式的标记如[IMAGE_1]、[TEXT_BLOCK_1]来帮模型对齐引用关系。

【面试题】4. 向量数据库的索引类型怎么选?HNSW和IVF在实际业务中的取舍你怎么做? ​

【标准答案】选索引类型看你的数据规模和查询延迟要求。HNSW是图索引,查询速度快、召回率高,适合数据量中等(百万级以内)且要求毫秒级响应的场景,比如实时客服问答;缺点是内存占用大、构建慢。IVF是聚簇索引,先分桶再桶内搜索,适合大数据量(千万到亿级)的场景,内存友好,构建快;缺点是召回率略低,需要调nprobe参数平衡精度和速度。我的实际选择:百万级以下首选HNSW,数据量上千万就用IVF+PQ量化压缩;如果两者都想要,Milvus支持混合索引,可以IVF做粗筛、HNSW做精排。关键是别上来就HNSW——数据量大了内存直接炸。

【面试题】5. 在Dify中如何设计一个包含条件分支和并行执行的工作流?举个实际业务场景说明。 ​

【标准答案】举个例子——自动报销审核Agent:用户提交报销单后,工作流第一步是LLM提取金额和类别;然后条件分支节点判断金额——低于500走"快速审批"分支(直接LLM决策+自动通过),高于500走"详细审核"分支(并行执行两个子任务:合规检查和预算校验),两个并行结果汇总后再做最终决策节点。Dify里实现很直观:用"IF/ELSE"节点做条件分支,用"Parallel"节点做并行执行,每个分支里嵌套独立的LLM节点和工具节点。关键设计点:并行节点后必须加"合并"节点把多个输出聚合成统一格式,否则下游节点无法处理。另外条件判断尽量用明确的数值比较,别让LLM做模糊判断——模型输出不稳定会让分支逻辑跑飞。

【面试题】6. 智能体的错误处理机制你怎么设计?特别是工具调用失败、LLM输出异常、外部服务不可用这三种情况。 ​

【标准答案】三种错误各有策略:工具调用失败——我做了分级重试:网络错误自动重试3次递增间隔,业务逻辑错误(如API返回"参数非法")不重试直接把错误信息喂给LLM让它修正参数后重新调用;LLM输出异常——做输出校验层,JSON解析失败就用正则兜底提取,内容偏离预期就触发"自我纠错"提示让模型重新生成;外部服务不可用——熔断降级,连续3次调用失败就切换到备用服务或降级为纯LLM推理模式,同时发告警。整体架构上,我用一个全局ErrorHandler模块统一捕获和分发,每个Agent节点配置自己的错误策略,类似微服务的熔断器模式。日志必须记录每次失败的原始输入和错误详情,方便后续分析改进。

【面试题】7. 提示词工程中,"系统提示+角色设定+输出约束"三层结构你怎么组织?为什么不能只写一个长prompt? ​

【标准答案】三层结构各有分工:系统提示层定义全局规则和行为边界,比如"你必须先确认用户意图再执行""禁止猜测敏感信息";角色设定层定义身份和专业倾向,比如"你是资深运维工程师,回答偏实操少理论";输出约束层定义格式和质量标准,比如"回答不超过200字,必须包含具体命令"。为什么不能揉成一个长prompt?因为模型对不同位置的指令遵循度不同——系统提示权重最高最稳定,角色设定影响语气和倾向,输出约束控制格式。揉在一起模型容易"注意力稀释",关键规则被淹没在长文本里。实际项目里我把三层分开管理,系统提示是固定的,角色和输出约束按业务场景动态切换,维护性和可靠性都更好。

【面试题】8. 你如何实现一个支持"对话记忆+文档记忆+工具记忆"的混合记忆系统?三者怎么协同工作? ​

【标准答案】三层记忆各有存储和检索逻辑:对话记忆——用Redis存近期对话摘要,滑动窗口保留最近20轮,检索时按时间倒序取;文档记忆——向量数据库存长期知识片段,检索时用语义相似度召回top-K;工具记忆——SQLite记录每次工具调用的参数、结果、耗时和成功状态,下次遇到类似任务先查历史记录看有没有可复用的结果。三者协同的关键是"统一检索接口"——每次Agent决策前,先并行查询三层记忆,然后用一个"记忆融合"步骤把三者结果按相关性排序合并注入上下文。实际效果:对话记忆保短期连贯性,文档记忆提供领域知识,工具记忆避免重复调用和记录失败教训。这三层缺一层Agent都会变笨。

【面试题】9. CrewAI中Agent的"自主性"和"协作性"怎么平衡?什么情况下应该限制Agent的自主决策范围? ​

【标准答案】CrewAI里每个Agent有自主度参数(max_iter和allow_delegation)。平衡原则:任务明确、步骤可预定义的就限制自主性——max_iter设低(比如3),不允许delegation,让它严格按流程走,比如数据清洗Agent;任务模糊、需要探索性推理的就放开自主性——max_iter设高(比如10),允许delegation,让它自己决定下一步,比如创意策划Agent。限制自主决策的场景:一是涉及外部写操作(发邮件、改数据库),必须加审批节点或人工确认;二是成本敏感场景,自主性越高token消耗越大,必须限迭代次数;三是合规场景,金融医疗等领域Agent不能自行决策关键操作。实操建议:先跑宽再收窄——上线初期放开观察Agent行为日志,发现异常决策模式后再针对性加约束。

【面试题】10. 面试官问:"你做过一个AI Agent项目,上线后效果还行但用户反馈'太慢了',你怎么排查和优化?" ​

【标准答案】排查分四步:第一步,打日志看时间分布——我给每个环节加了耗时埋点:LLM调用耗时、工具调用耗时、记忆检索耗时、流程编排耗时。第二步,定位瓶颈——常见三个:LLM调用慢(每次3-5秒串行调用),向量检索慢(索引没优化或召回量太大),工作流串行执行没有并行化。第三步,针对性优化:LLM慢就做流式输出让用户实时看到进展,同时用小模型做简单判断、大模型只处理复杂步骤(模型路由);向量检索慢就换HNSW索引、减少top-K、加缓存层;串行流程改并行——Dify工作流里用Parallel节点,LangChain里用RunnableParallel。第四步,体验层兜底——即使后台还在跑,前端先给用户一个"正在思考"的实时反馈,配合流式输出,体感速度提升50%以上。用户说"慢"往往不是真慢,而是没有反馈让他觉得在等。