Skip to content

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
                ↓ [否]
              结束

控制循环次数的三种方式:

  1. 固定次数:用LLM输出序号,每次+1,超过阈值强制退出
  2. 语义判断:让LLM判断"任务是否完成",配合置信度阈值
  3. 预算控制:节点设置max loop次数,Dify内置保护

避坑:

  • 循环必须设置最大次数,否则可能无限循环
  • 每次循环加个随机延迟,避免API限流
  • 记录循环状态,防止重启后从头开始

【面试题】5. 场景题:用户说"Agent总是答非所问",你怎么排查问题?给出排查思路。 ​

【标准答案】 排查思路按层次来:

第一层:输入问题

  • 检查用户prompt是否模糊、多义
  • 看历史对话是否产生上下文污染
  • 验证是否模型理解偏差

第二层:系统问题

  • 检查system prompt是否被正确注入
  • 看上下文窗口是否超载,导致截断
  • 验证记忆召回是否准确

第三层:输出问题

  • 检查response_format是否和预期一致
  • 看是否有RLHF微调的干扰
  • 测试不同模型版本表现

快速定位方法:

1. 简化输入,看能否复现
2. 换模型对比,排除模型问题
3. 加日志trace每一步的输入输出
4. 人工review模型推理过程

高频根因:90%是prompt不够清晰,9%是上下文丢失,1%是模型能力问题。


【面试题】6. Agent的记忆系统设计中,短期记忆、长期记忆、向量记忆分别存什么?它们怎么配合工作? ​

【标准答案】 三种记忆各司其职:

类型存什么实现方式
短期记忆当前对话上下文、会话状态消息列表、会话变量
长期记忆用户偏好、跨会话知识数据库、用户画像
向量记忆文档片段、检索知识向量数据库

配合流程:

  1. 用户请求来了,先用短期记忆构建当前上下文
  2. 长期记忆里查用户偏好(比如喜欢简洁回答)
  3. 向量记忆里检索相关知识(外挂知识库)
  4. 三者融合后给LLM输入

实战设计:

  • 短期记忆用Redis,带TTL自动过期
  • 长期记忆用PostgreSQL + JSON字段
  • 向量记忆用Milvus/Pinecone

注意:不要把所有东西都塞进上下文,LLM会"消化不良",要筛选和压缩。


【面试题】7. CrewAI中多个Agent协作时,怎么保证任务分配合理、不打架? ​

【标准答案】 CrewAI的任务分配靠两个机制:

工具一:Task描述的精确度

  • 每个Task的description要明确"做什么+交付标准"
  • 加expected_output示例,让Agent知道自己交什么
  • 避免Task之间职责重叠

工具二:Agent的Tools限定

  • 每个Agent只给它需要的工具
  • 用role区分专业能力
  • 避免一个Agent能干所有事

防止打架的做法:

python
# 明确执行顺序和依赖
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测试
  • 生产事故时能快速回滚

实际工作流:

  1. 提示词改动 → 提PR → review → 合并
  2. 灰度发布,新旧提示词各5%流量
  3. 监控指标稳定后全量
  4. 保留历史版本,三个月内可回滚

【面试题】10. 长上下文处理时,128K上下文怎么用才不浪费?有哪些优化技巧? ​

【标准答案】 128K token听起来很大,但实际很容易浪费,优化思路:

技巧一:信息压缩

  • 把历史对话摘要化,而不是全部塞进去
  • 只保留关键决策点和用户偏好
  • 用Embedding做语义压缩

技巧二:分层检索

用户问题 → 关键词匹配(快) → 相关片段(向量) → 精确上下文(滑动窗口)

技巧三:结构化输入

  • 把信息组织成JSON/表格,比纯文本省token
  • 用Markdown标题做快速定位
  • 避免重复前缀和格式开销

技巧四:截断策略

  • 用重要性采样,保留开头+结尾+关键中间
  • 开头放系统指令,结尾放最近上下文
  • 中间用摘要代替原文

避坑:

  • 不要把整本书塞进去分段读,成本高且效果差
  • 超过32K就考虑用RAG,而不是单纯加上下文
  • 定期做prompt压缩,减少无效token消耗

本套题目覆盖考点:框架使用(1,4,7)、架构设计(2,6)、RAG实战(3)、问题排查(5)、项目管理(8)、工程化(9)、性能优化(10)