Skip to content

AI智能体应用开发面试题(第15期) ​

生成时间:2026-06-15 22:15


【面试题】1. 请解释一下Function Calling和Tool Use的区别,以及在什么场景下你会选择使用Function Calling? ​

【标准答案】 Function Calling是让大模型输出结构化JSON来声明要调用的函数,而Tool Use是模型直接调用外部工具并获取结果。本质区别在于:Function Calling是"声明意图",Tool Use是"执行并返回"。

实际项目中,如果你的Agent需要调用多个工具形成链条,比如先查天气再推荐穿衣,我会用Tool Use;如果只需要模型返回一个指令让后端决定怎么执行,那就用Function Calling。

我之前做过一个客服机器人,就是用Function Calling让模型返回{"action":"refund","order_id":"xxx"},后端解析后再走退款流程,这样更安全可控。


【面试题】2. CrewAI和LangGraph在多智能体协作上的核心差异是什么?你更倾向用哪个? ​

【标准答案】 CrewAI胜在上手快,它的"角色+任务+流程"模式非常直观,适合业务流程相对固定的多Agent场景,比如新闻采编、内容审核流水线。

LangGraph更底层,它把协作建模成状态机图,每个节点可以是Agent、工具或普通函数,优势是灵活度和可控性更强,适合复杂的长链路任务。

我的选择逻辑是:简单流水线用CrewAI快速落地,需要精细控制状态流转、分支回滚的用LangGraph。之前做一个保险理赔Agent,我选了LangGraph,因为理赔流程中有大量条件分支和人工复核节点。


【面试题】3. 你的RAG系统召回率低,但准确率还行,你会怎么优化? ​

【标准答案】 这种情况通常是召回端出了问题,我一般从这几个方向排查:

第一,检查向量化模型是否和业务场景匹配,比如你用通用Embedding处理专业术语,效果会差,换成领域微调的模型提升明显。

第二,看分块策略是否合理。块太大引入噪声,块太小丢失上下文。我会尝试不同chunk_size,用small-to-big或者Parent-Child的层级chunk策略。

第三,补充混合检索——BM25做关键词召回,向量检索做语义召回,RRF融合两者的结果。

第四,如果知识库大,要检查是否存在冗余文档导致的召回稀释。

我之前优化过一个法律文书RAG,经过这几步调优,召回率从60%提到了85%以上。


【面试题】4. 描述一个你做过的Agent项目,如何设计它的记忆系统? ​

【标准答案】 我设计记忆系统一般分三层:

短期记忆:用ConversationBufferMemory,只存当前对话上下文,窗口结束后就丢弃。

长期记忆:用向量数据库存历史对话摘要和关键信息,检索时用当前对话的Embedding做相似度搜索,召回相关记忆注入上下文。

结构化记忆:有些关键信息我会单独提取出来,比如用户偏好、项目进度,用JSON或者数据库表结构存储,方便直接读取而不是每次都检索。

关键点在于:不要把所有历史都塞进Context,会超限且引入噪声。要设计"记忆遗忘机制",比如只保留最近30条对话的完整记录,更早的转成摘要存入向量库。


【面试题】5. Dify和LangChain各自适合什么规模的团队和项目?为什么? ​

【标准答案】 Dify是低代码平台,适合中小团队快速验证PMF,3-5个人就能跑起来一个完整的Agent应用。它的强项是可视化编排、内置的RAG和Agent能力,弱项是定制化受限、复杂逻辑要写代码。

LangChain是代码框架,适合有专职AI工程师的中大型团队,需要深度定制或者和现有系统集成的场景。优势是灵活,缺点是学习曲线陡,容易踩坑。

我的经验是:创业公司或者业务探索阶段用Dify,快速试错;产品成熟后需要精细化运营的,用LangChain或者自己搭框架。Dify和LangChain不是互斥的,我见过团队用Dify做原型验证,用LangChain做生产级部署。


【面试题】6. 如果你设计一个多模态Agent,输入包含图片、语音、文本,输出要求是结构化数据,你会怎么设计pipeline? ​

【标准答案】 Pipeline分三段:

输入处理:图片过视觉模型提取描述+关键信息,语音过ASR转文本,然后用LLM做意图分类和实体抽取,统一成结构化的中间态。

核心推理:用一个Coordinator Agent接收所有模态的中间结果,做多模态融合和推理,输出结构化JSON。

输出校验:加一层Pydantic校验,确保输出格式符合下游要求,不合格的打回重试。

关键坑点是:不同模态的处理速度差异大,图片可能慢,语音快。我会加一个异步队列,让各模态处理完后统一汇合,不要让用户等最慢的那个。同时要做好超时和降级策略,某一路失败不能卡死整个流程。


【面试题】7. 你的Agent在生产环境响应慢,用户投诉多,你怎么做性能优化? ​

【标准答案】 我一般从链路拆解,分层优化:

模型层:评估是否可以用小模型替代,比如70B能搞定的不用175B;开启流式输出让用户感知到进度;用模型量化降低推理延迟。

调用层:加缓存,相同query直接返回缓存结果;用批量请求替代逐条调用。

工程层:非核心步骤异步化,不影响主流程的放到后台;用连接池复用HTTP连接;做好超时和重试配置。

架构层:加一层意图预判,小规则能搞定的不要调模型。

我之前优化过一个客服Agent,通过加缓存+小模型分流+P99延迟从8秒降到了1.5秒,效果很显著。


【面试题】8. 请说说你对"Agentic RAG"的理解,它和传统RAG有什么区别? ​

【标准答案】 传统RAG是"检索-生成"的单向流程,Query来了就检索相关内容然后塞给LLM生成,本质还是"查资料给答案"。

Agentic RAG的核心是让RAG变成一个可以自主决策的系统。Agent能决定:要不要检索、检索什么、检索几次、检索结果够不够用、要不要调用工具补充信息。

举个例子:用户问"帮我分析下Q3季度报告并给出下季度建议",Agent会先拆解任务,可能先检索Q3数据,再调用代码工具做分析,然后检索行业报告做对比,最后综合输出。这里检索是Agent主动发起的行为,而不是被动的。

实现上一般用ReAct或者Plan-Execute模式,让Agent控制整个RAG的循环。


【面试题】9. 在Agent开发中,你如何处理"Agent越狱"和Prompt注入的安全问题? ​

【标准答案】 安全风险主要有两类:

Prompt注入:用户输入中嵌入恶意指令,让Agent绕过原始Prompt。防御策略是输入过滤和结构化,比如把用户输入放在专门的变量区,而不是直接拼进System Prompt;用LLM做输入安全审核。

越狱攻击:通过特殊话术诱导模型执行危险操作。防御是限制工具权限,Agent只能调用白名单内的工具,且工具执行要有权限校验;关键操作加人工确认。

架构层面:生产环境要加监控,记录所有Agent的输入输出,定期审计;敏感操作走审批流而不是纯自动。

我的原则是:不要过度信任Agent的输出,尤其是涉及金钱、权限的操作,必须有兜底机制。


【面试题】10. 假设产品经理说"我们要做一个可以自主完成复杂任务的Agent",你会先问哪些问题来明确需求? ​

【标准答案】 我会从这几个维度问:

任务边界:复杂任务具体指哪些?是固定流程还是开放任务?有没有明确的完成标准?

自动化程度:是辅助决策还是全自动执行?全自动的话有哪些不可逾越的红线?

容错要求:任务中途失败了怎么处理?需要回滚还是重试?用户能接受的最大失败率是多少?

可解释性:用户是否需要理解Agent的决策过程?需要的话要设计思维链展示。

集成要求:这个Agent要接入哪些现有系统?API兼容性如何?

数据隐私:Agent处理的数据敏感度如何?有没有合规要求?

把这些问题搞清楚,才能判断是用ReAct、Plan-Execute还是Multi-Agent架构,以及要不要做人工审核节点。避免上来就撸代码,做到一半发现方向错了。