Agent 全栈开发面试问答
Agent 是什么、为什么需要 -> Prompt / 推理模式 -> Function Calling、Tool、MCP -> Memory、RAG -> Planning、ReAct、Workflow、多 Agent -> LangChain / LangGraph / SK / .NET 落地 -> 生产:成本、安全、观测基础概念
什么是 AI Agent?和 LLM 聊天有什么区别?
别答「智能体」三个字。标准说法:
Agent = 大脑(LLM)+ 推理规划 + 工具调用 + 记忆 + 行动闭环。
聊天:用户 → 模型 → 文本。
Agent:用户 → 模型 →要不要调工具?→ 你的程序执行 → 结果塞回 → 继续推理 → 最终回答。
查北京天气,下雨就帮我叫车 Chat:凭训练数据瞎编 Agent:Weather API → 判断 → 叫车 API → 完成核心区别:Agent 能 Act,不只会 Chat。能联网、查库、调 API 靠的是你写的工具,不是模型自带。
GPT 很强了,为什么还要 Agent?
LLM 天然做不到或做不好:
实时数据(天气、库存、股价) 私有数据(公司内部库、工单) 执行动作(下单、发邮件、改配置) 长期跨会话记忆(除非你做 Memory) 确定性流程(审批、对账)Agent 用Tool + RAG + Memory + Workflow补这些洞。不是模型不够聪明,是缺手和眼。
Agent 核心组成有哪些?
面试可以画简图:
User → Prompt → LLM ↓ Memory / Planning / Reflection ↓ Tool Calling → DB / API / Browser / Code / MCP Server| 模块 | 干什么 |
|---|---|
| LLM | 推理、生成、选工具 |
| Prompt | 角色、约束、输出格式 |
| Memory | 多轮历史、长期用户档案 |
| Planning | 拆步骤、ReAct、Plan-Execute |
| Tool | 查数据、执行操作 |
| Reflection | 结果不对时重试、改方案 |
| Workflow | 企业里固定节点 + Agent 灵活节点 |
Agent、Workflow、Copilot 怎么分?
| 谁定下一步 | 场景 | |
|---|---|---|
| Workflow | 开发者写死 DAG | 审批、OCR→ERP、确定性流水线 |
| Agent | 模型选工具/步骤 | 开放问答、运维助手 |
| Copilot | 人主导 | IDE 补全、草稿建议 |
生产常见:Workflow 骨架 + 个别节点用 Agent。
Prompt 与推理
Prompt 为什么重要?包括什么?
System Prompt 是产品逻辑:角色、任务、约束、输出格式、示例。Agent 里还要写工具使用约定(何时调、不许编造 tool 结果)。
结构常用:
Role → Task → Constraint → Output Format → Few-shot Example要版本管理,别堆在 Controller 字符串里。
Zero-shot、Few-shot、CoT、ReAct 分别是什么?
| 术语 | 含义 |
|---|---|
| Zero-shot | 不给示例,直接指令 |
| Few-shot | 给几个输入输出示例 |
| CoT | Chain of Thought,让模型「一步步想」再答,提高复杂推理 |
| ReAct | Reason + Act,想 → 调工具 → 看结果 → 再想(Agent 默认范式) |
| ToT | Tree of Thought,多路径探索,成本高,研究多、生产少 |
ReAct vs CoT:CoT 只在脑子里推;ReAct 中间会真调工具,适合要查实时数据的任务。
Temperature 生产怎么设?
调工具、抽 JSON、分类:低温 0~0.3。创意文案可略高。别全局高温然后怪 tool 参数乱。
Function Calling 与 Tool
Function Calling 流程?谁执行?
1. 你注册 tools(name + description + JSON Schema) 2. 用户提问 3. 模型返回 tool_calls(要选哪个、参数是什么) 4. 你的程序执行(调 API/SQL) 5. 把结果作为 tool 消息塞回 6. 模型生成最终自然语言回答LLM 不执行函数,只生成「我要调谁、参数啥」。真正执行必须在你的进程里——这样才有权限控制、超时、审计。
为什么不能让 GPT 自己执行代码/函数?
安全:模型可能被 Prompt 注入,直接执行等于 RCE。
可控:超时、幂等、鉴权、日志都在应用层。
可靠:失败要能结构化回传,不能让模型猜结果。
Function Calling 和 Tool Calling 有区别吗?
面试口径:Function Calling 是 OpenAI 等 API 的协议名字;Tool Calling 是泛称,工具可以是 SQL、浏览器、Shell、MCP Server。本质都是「模型选能力 → 应用执行 → 结果回灌」。
工具怎么设计?Tool Registry 是什么?
一事一工具,description 写清何时用 Schema 类型/必填/枚举写严 返回尽量短,大 JSON 烧 token 幂等 + 服务端鉴权(别信模型传的 userId) 失败回传真实 error,别只回「失败」Tool Registry:启动时注册所有工具(名称、Schema、委托),模型只见统一列表;新增工具只注册,不改 Agent 主循环。
MCP
MCP 是什么?为什么火?
Model Context Protocol:统一暴露工具、资源、提示词的开放协议。面试一句话:AI 世界的 USB-C——以前每个 Agent 各接一套 SDK,现在MCP Client 连 MCP Server发现能力、调工具。
MCP Client 和 Server 各干什么?
MCP Client:宿主侧(IDE、Agent 运行时、Copilot)——发现、调用 MCP Server:能力侧(filesystem、GitHub、MySQL、Redis、浏览器…)——暴露 Tool List和 Function Calling 关系:FC 是单次对话里模型怎么表达调用;MCP 是工具从哪来、怎么标准化连接。
企业内部系统怎么接 MCP?
把现有 API/DB 封装成 MCP Server,暴露有限工具集 + 鉴权;Client 侧(Agent)只连受信任的 Server。别把整个生产库只读账号裸给模型。
Memory
短期记忆和长期记忆?
| 短期 | 长期 | |
|---|---|---|
| 内容 | 当前会话 messages、tool 结果 | 用户偏好、历史摘要、向量记忆 |
| 实现 | Session + DB/Redis | 向量库、用户档案表 |
| 问题 | context 超长 | 检索不准、过期 |
「我叫张三,十分钟后问我叫啥」——靠Conversation Memory或结构化长期记忆,不是模型权重记住。
上下文窗口爆了怎么办?
滑动窗口裁旧轮、摘要压缩历史、折叠旧 tool 输出、RAG 只塞相关 chunk。要有Compaction策略并观测压掉了什么。
RAG
RAG 是什么?为什么不微调?
检索增强生成:Query → Embedding → 向量库 TopK → 片段 + 问题 → LLM。用外部知识回答,减少胡编。
| RAG | 微调 | |
|---|---|---|
| 知识更新 | 换文档 | 重训 |
| 实时数据 | 不行,要配合 Tool | 不行 |
| 私有文档问答 | 主战场 | 贵、慢 |
| 固定口吻/格式 | Prompt 凑合 | 微调更好 |
RAG 流程要答到哪一步?
文档 → Chunk(大小+重叠)→ Embedding → 写入向量库 查询 → Embedding → TopK 召回 →(可选 Rerank)→ 拼进 Prompt → LLM追问:Chunk 太大语义糊、太小缺上下文;纯向量不够就混合 BM25;Rerank 提高精度;答案要引用来源降幻觉。
Planning、ReAct、Reflection
ReAct 流程?
Thought(要想啥)→ Action(调工具)→ Observation(结果) → Thought → Action → … → Final Answer大部分 Agent 框架默认接近 ReAct。
Plan-and-Execute?
先列计划(1、2、3),再逐步执行,可重规划。适合步骤明确的任务;计划错了要带检查点或人工确认。
Reflection 是什么?
第一轮答案/SQL/代码不对,把错误信息塞回去让模型重写,直到成功或达上限。提高质量,但多烧 token、多延迟。生产要限制重试次数。
Workflow 与多 Agent
企业为什么常提 AI Workflow?
企业不要纯聊天,要OCR → LLM 抽取 → 写 ERP → 发邮件这种可审计、可重试的链。固定节点用 Workflow,其中「理解用户意图」「选参数」某一环用 Agent。
LangChain 和 LangGraph 区别?
| LangChain | LangGraph | |
|---|---|---|
| 模型 | Chain,偏线性 | 图/状态机 |
| 能力 | Prompt、Memory、Tool、Retriever | 循环、条件分支、Checkpoint、Human-in-the-Loop |
| 场景 | 简单链 | 复杂 Agent、要暂停/恢复 |
今年面试LangGraph问得多:因为生产 Agent 总要重试、分支、人审。
什么时候 Multi-Agent?
工具太多,单 Agent 选乱 → 按域拆(检索/代码/审核) 角色清晰 → Supervisor 派活(AutoGen、CrewAI) 高权限工具隔离 → 单独子 Agent优先单 Agent + 好工具;多 Agent 延迟和调试成本成倍涨。
框架(含 .NET)
LangChain 解决什么?
把 Prompt、Memory、Chain、Tool、Retriever、OutputParser 串起来,省胶水代码。LCEL是声明式拼链。Python/JS 生态最大。
Semantic Kernel(SK)?
微软出品,.NET 企业向:Kernel、Plugin(函数)、Prompt Function、Planner、Memory、Agent、MCP 集成。适合 ASP.NET Core + Azure OpenAI + M365 场景。
.NET 现在常见怎么叠?
Microsoft.Extensions.AI → IChatClient,换 OpenAI/Azure/本地模型 Microsoft.Agents.AI → Agent、Session、Skills、Compaction Semantic Kernel → Plugin/Planner,或与 Agents.AI 配合面试 .NET 岗:能说Extensions.AI 抽象模型,Agents.AI 管 Agent 循环和 Skills,底层仍是 tool calling。
AutoGen、CrewAI?
多 Agent 编排框架:角色对话、Supervisor、Handoff。懂定位即可,不必背 API。
.NET 全栈落地(高频追问)
ASP.NET Core 里 Agent 怎么接?
API:POST /chat,支持 SSE 流式 编排:Run 入口(Prepare Session → 调 Agent → 落库) DI:注册 ChatClient、Agent、Tools/Skills 回调:企微/钉钉验签 + 异步 Run(防网关超时)一次用户请求一个RunId,串遥测和计费。
流式输出要注意什么?
SSE 改善首字延迟;网关/渠道常有30s 超时。长任务:先 ACK,后台 Run,完成后推送。
会话和 Tool 生命周期?
Session 绑ConversationId + 历史(或 OSS 指针);Scoped 注册 Tool 服务,Tool 内注入DbContext等同请求生命周期。并发消息要串行或锁 Session。
Tool 失败、超时、权限、审计?
超时:CancellationToken + 限时回传 error 给模型 权限:工具内校验用户身份,不信模型参数 审计:每次 tool 调用记 RunId、参数摘要、结果、耗时 敏感操作:人工确认或二次校验生产与面试收尾
线上 Agent 常见故障?
工具失败模型胡编、上下文截断丢信息、死循环调同一工具、Prompt 注入、token 成本失控。
治理:最大步数、工具白名单、预算熔断、评测集回归。
怎么观测?
RunId、每步 token/耗时、每次 tool 名与成败、总成本。OpenTelemetry / LangSmith / 自研AgentRun+AgentLlmCall表。
Prompt 注入怎么防?
System 不可被用户覆盖;敏感工具服务端鉴权;高风险管理操作人工确认。别指望模型自觉。
怎么评估 Agent?
任务成功率、工具调对率、幻觉率(答案是否超出 tool/RAG 结果)、P95 延迟、token 成本、安全用例。上线前黄金集,上线后点踩闭环。
和经典后端的关系?
Agent 全栈仍要:API 幂等/限流、DB 会话表、Redis 锁、MQ 异步、回调验签。面试官常用「工具幂等」「回调超时」筛真假全栈。
