AI智能体应用开发面试题
生成时间:2026-06-12 02:45
【面试题】1. 用LangChain开发Agent时,Agent的ReAct模式是怎么工作的?什么场景下你会选择ReAct而不是Chain of Thought?
【标准答案】 ReAct(Reasoning + Acting)的工作流程是:先推理出当前状态和目标差距,然后决定采取什么行动,执行后观察结果,再继续推理形成循环。它的核心是把大模型的推理能力和工具调用能力结合起来。
选ReAct还是CoT,看场景:
- ReAct:需要调用外部工具、信息检索、动态决策的场景,比如Agent执行复杂任务
- CoT:纯推理问题,不需要外部数据,比如数学证明、逻辑分析
实际开发中,如果你的任务需要"查一下今天的天气,然后决定穿什么",必须用ReAct,因为需要工具调用。
【面试题】2. 多智能体协作时,消息传递有哪些常见模式?各自的优缺点是什么?
【标准答案】 三种常见模式:
星型模式:一个中心Agent协调,其他Agent只和中心通信
- 优点:简单易控,中心Agent可以优化调度
- 缺点:中心单点瓶颈,扩展性差
链式模式:A→B→C顺序传递,每步处理一部分
- 优点:适合流水线任务,解耦清晰
- 缺点:延迟高,前一步错后面全错
网状模式:任意Agent可以互相通信
- 优点:灵活,适合复杂协作
- 缺点:消息风暴风险,需要好的协调机制
面试加分回答:我会用一个混合模式,核心流程用链式,并行分支用网状,中心用星型做路由。
【面试题】3. RAG系统中,向量检索时Embedding模型怎么选?为什么不能用GPT-4的Embedding直接怼?
【标准答案】 Embedding选型看三个维度:
维度一:场景适配
- 通用文本:text-embedding-3-large(OpenAI)或BGE(国产开源)
- 中文场景:m3e、text2vec-large-chinese
- 代码场景:code-embedding、cohere
维度二:维度选择
- 高维(1536+):精度高但存储大、检索慢
- 低维(256-512):速度快,适合对精度要求不高的场景
为什么不用GPT-4的Embedding?
- 成本高,每次API调用都是钱
- 延迟高,不适合大批量检索
- 通用Embedding在垂直领域效果可能不如专门微调的
实际项目:我会先用BGE-m3测试效果,效果够用就不换,除非有特殊需求才上贵的。
【面试题】4. Dify的工作流编排中,你怎么设计一个需要循环执行的节点?循环次数怎么控制?
【标准答案】 Dify里处理循环用"条件分支+LLM节点"组合:
开始 → LLM任务 → 条件判断(未完成?) → [是]回到LLM
↓ [否]
结束控制循环次数的三种方式:
- 固定次数:用LLM输出序号,每次+1,超过阈值强制退出
- 语义判断:让LLM判断"任务是否完成",配合置信度阈值
- 预算控制:节点设置max loop次数,Dify内置保护
避坑:
- 循环必须设置最大次数,否则可能无限循环
- 每次循环加个随机延迟,避免API限流
- 记录循环状态,防止重启后从头开始
【面试题】5. 场景题:用户说"Agent总是答非所问",你怎么排查问题?给出排查思路。
【标准答案】 排查思路按层次来:
第一层:输入问题
- 检查用户prompt是否模糊、多义
- 看历史对话是否产生上下文污染
- 验证是否模型理解偏差
第二层:系统问题
- 检查system prompt是否被正确注入
- 看上下文窗口是否超载,导致截断
- 验证记忆召回是否准确
第三层:输出问题
- 检查response_format是否和预期一致
- 看是否有RLHF微调的干扰
- 测试不同模型版本表现
快速定位方法:
1. 简化输入,看能否复现
2. 换模型对比,排除模型问题
3. 加日志trace每一步的输入输出
4. 人工review模型推理过程高频根因:90%是prompt不够清晰,9%是上下文丢失,1%是模型能力问题。
【面试题】6. Agent的记忆系统设计中,短期记忆、长期记忆、向量记忆分别存什么?它们怎么配合工作?
【标准答案】 三种记忆各司其职:
| 类型 | 存什么 | 实现方式 |
|---|---|---|
| 短期记忆 | 当前对话上下文、会话状态 | 消息列表、会话变量 |
| 长期记忆 | 用户偏好、跨会话知识 | 数据库、用户画像 |
| 向量记忆 | 文档片段、检索知识 | 向量数据库 |
配合流程:
- 用户请求来了,先用短期记忆构建当前上下文
- 长期记忆里查用户偏好(比如喜欢简洁回答)
- 向量记忆里检索相关知识(外挂知识库)
- 三者融合后给LLM输入
实战设计:
- 短期记忆用Redis,带TTL自动过期
- 长期记忆用PostgreSQL + JSON字段
- 向量记忆用Milvus/Pinecone
注意:不要把所有东西都塞进上下文,LLM会"消化不良",要筛选和压缩。
【面试题】7. CrewAI中多个Agent协作时,怎么保证任务分配合理、不打架?
【标准答案】 CrewAI的任务分配靠两个机制:
工具一:Task描述的精确度
- 每个Task的description要明确"做什么+交付标准"
- 加expected_output示例,让Agent知道自己交什么
- 避免Task之间职责重叠
工具二:Agent的Tools限定
- 每个Agent只给它需要的工具
- 用role区分专业能力
- 避免一个Agent能干所有事
防止打架的做法:
# 明确执行顺序和依赖
researcher = Agent(role="研究员", goal="收集信息")
writer = Agent(role="作家", goal="写文章", dependencies=[researcher])实战经验:
- Agent数量别贪多,2-4个最佳,超过就考虑拆成多个Crew
- 定期review Agent的output,避免各干各的
- 加一个Supervisor Agent做质量把控
【面试题】8. 智能体从0到1落地时,你怎么设计数据监控体系?需要监控哪些核心指标?
【标准答案】 监控分三层:
第一层:业务指标
- 任务成功率(Task Success Rate)
- 平均完成任务轮次
- 用户满意度评分
- 热点问题Top10
第二层:技术指标
- API响应时间(P50/P95/P99)
- Token消耗量及成本
- 模型调用错误率
- 工具调用成功率
第三层:质量指标
- 答案准确率(抽样人工评估)
- 幻觉率(事实错误占比)
- 上下文利用率(是否有效使用历史)
监控工具选型:
- 埋点用OpenTelemetry,数据进ClickHouse
- 可视化用Grafana
- 告警用PagerDuty或飞书机器人
实战建议:先跑两周看日志,拿到真实数据后再定指标阈值,别拍脑袋。
【面试题】9. 面试情景题:面试官问"你怎么做提示词版本管理?为什么不能用最新的模型就行?"
【标准答案】 提示词版本管理这样做:
prompts/
├── v1.0/
│ ├── system_prompt.txt
│ └── user_template.txt
├── v1.1/
├── v2.0/
└── changelog.md用Git管理,每次变更记录:改了什么、为什么改、效果对比。
为什么不能只靠换模型?
- 模型升级可能破坏已有效果(比如Claude换版本,输出格式变了)
- 不同模型需要不同提示词风格
- 版本管理才能做A/B测试
- 生产事故时能快速回滚
实际工作流:
- 提示词改动 → 提PR → review → 合并
- 灰度发布,新旧提示词各5%流量
- 监控指标稳定后全量
- 保留历史版本,三个月内可回滚
【面试题】10. 长上下文处理时,128K上下文怎么用才不浪费?有哪些优化技巧?
【标准答案】 128K token听起来很大,但实际很容易浪费,优化思路:
技巧一:信息压缩
- 把历史对话摘要化,而不是全部塞进去
- 只保留关键决策点和用户偏好
- 用Embedding做语义压缩
技巧二:分层检索
用户问题 → 关键词匹配(快) → 相关片段(向量) → 精确上下文(滑动窗口)技巧三:结构化输入
- 把信息组织成JSON/表格,比纯文本省token
- 用Markdown标题做快速定位
- 避免重复前缀和格式开销
技巧四:截断策略
- 用重要性采样,保留开头+结尾+关键中间
- 开头放系统指令,结尾放最近上下文
- 中间用摘要代替原文
避坑:
- 不要把整本书塞进去分段读,成本高且效果差
- 超过32K就考虑用RAG,而不是单纯加上下文
- 定期做prompt压缩,减少无效token消耗
本套题目覆盖考点:框架使用(1,4,7)、架构设计(2,6)、RAG实战(3)、问题排查(5)、项目管理(8)、工程化(9)、性能优化(10)