反诈AI超级智能体项目
Java Agent 后端开发工程师 · 图文详解面试攻略 · 共48题
核心知识:🏗️ 五层架构🤖 ReAct智能体📚 RAG知识库 🔧 Tool Calling🔌 MCP协议📡 SSE流式
01 项目整体架构与设计思路(6题)
Q1:请介绍一下这个项目的整体架构。中等
项目基于SpringBoot3 + SpringAI构建的 ReAct 自主规划超级智能体系统,服务反诈场景下的智能问答和自动化任务执行。整体分为五层:
- 接入层—— SSE 流式接口,SseEmitter + CompletableFuture 异步处理
- 编排层—— ReAct 引擎,推理-行动循环 + Human-in-the-Loop
- 能力层—— RAG 知识问答 + ToolCalling 工具调用 + MCP 服务
- 模型层—— 5种大模型统一封装,策略模式实现灵活切换
- 存储层—— MySQL + Redis + PgVector 三存储体系
回答技巧:先给五层架构框架,再讲核心流程(用户请求→记忆加载→RAG检索→ReAct推理→工具执行→SSE输出),控制在90秒内。
Q2:为什么选择 SpringAI 而不直接用 LangChain4j?困难
我同时在两个项目中使用这两个框架,各有侧重:
SpringAI(反诈项目主框架)—— 与 SpringBoot3 深度集成,ChatMemory + Advisor 链设计优雅,适合构建对话型智能体。
LangChain4j(零代码平台主框架)—— LangGraph4j 对复杂工作流编排支持更好,适合多步骤流水线。
选型核心逻辑:SpringAI 更 "Spring Native",ChatClient.builder() 链式 API 做 Advisor 管道编排非常顺手;LangChain4j 功能覆盖面更广,二者可以互补使用,模型调用层统一抽象,不存在冲突。
Q3:Java21 在项目中的使用与选型理由?中等
选 Java21(LTS)原因:SpringBoot3 最低 Java17,Java21 提供虚拟线程、Record模式匹配、Switch增强、文本块、Sealed Classes。
- 虚拟线程:SSE 接口大量并发连接时,虚拟线程轻量级支撑
- Record + 模式匹配:简化工具调用结果、智能体状态等 DTO 定义
- Switch 增强:模型路由选择、工具分发场景替代 if-else
- 文本块:Prompt 模板、SQL 查询可读性大幅提升
Q4:ReAct 模式在你项目中的具体实现流程?困难
ReAct = Reasoning + Acting,LLM 交替进行推理和行动。流程:Thought(推理下一步)→ Action(调用工具)→ Observation(观察工具返回结果)→ Loop(继续推理直到目标达成)。每一步通过 SSE 实时推送。关键设计:参考 OpenManus 分层架构(规划层+执行层解耦),Human-in-the-Loop 关键决策暂停确认,最大步骤限制 20 步,连续 3 步相同工具+相同参数触发死循环检测。
Q5:用户请求的完整数据流链路?中等
以"搜索最新诈骗手法并生成报告"为例:用户 SSE 请求 → 从 MySQL+Redis 加载记忆 → PgVector 向量检索 RAG 知识库 → 组装 Prompt(系统提示词+RAG结果+历史记忆+用户输入)→ ReAct 推理 → 调用联网搜索工具 → 获取结果 → 继续推理 → 调用 PDF 生成工具 → SSE 实时输出每步 Thought/Action/Observation → 持久化本轮记忆。全程 SSE 流式透明输出。
Q6:你在这个项目中的角色?简单
独立完成从 0 到 1 的设计和开发,包括技术选型、架构设计、核心开发(多模型封装、RAG知识库、6种工具调用、MCP服务、SSE接口)、Docker部署。
02 多模型管理与成本优化(4题)
Q7:如何封装 5 种大模型统一调用接口?中等
核心是策略模式 + 工厂模式。定义统一的 ChatModelStrategy 接口(chat/streamChat 方法),每种模型实现该接口。ChatModelFactory 根据场景(简单对话走 Ollama,复杂推理走通义千问)动态选择策略。SpringAI 本身提供了 ChatModel 抽象,我的封装在其之上加了业务层的路由策略。
Q8:Ollama 本地部署如何降低 60% API 成本?中等
场景分级