蚂蚁智能体一面:从 MCP 工具发现一路追到知识图谱为什么两跳就够
- 轮次
- 一面
- 时间
- 2026-10
- 来源
- 牛客网
《面试题目》
- 请简单介绍一下自己。
- 你硕士期间是不需要发表小论文的吗?
- 你现在是回学校准备秋招,对吧?
- 能不能具体讲一下 Agent 是怎么实现的?
- 你的实现主要是一个 Skill,对吧?
- 为什么要把 MCP 的目录传给 Agent?
- MCP 需要提前安装并连接 Server;如果只传一个 MCP 列表、Agent 又没有主动连接 Server,它是怎么调通工具的?
- 具体什么叫 MCP Client?能不能讲讲它是怎么实现、怎么工作的?
- MCP 是在运行期间主动连接 Server 的吗?
- MCP Client 是什么,是你们做的工具吗?它之前已经安装好并连上了吗?
- 所以它可以理解为一个通用的 MCP 功能吗?
- 如果大模型通过统一的 Center 看不到 MCP 工具名称和入参,怎么保证它能正确组装参数?
- MCP Client 会把所有工具都取回来吗?大模型又是怎么拿到这些工具信息的?
- 如果 query 里才给 MCP name,怎么确保大模型会调用 MCP Client 并拿到对应的 tools?它的上下文里是不是没有 MCP 工具信息?
- 大模型怎么知道要调用本地 Client?是否需要先通过 MCP Client 请求对应的 tools,再组装参数?
- 你在 Skill 里给它设定了一些上下文信息,是吗?
- 为什么要通过 MCP 获取信息?MCP Center 这个设计是怎么考虑的?
- 为什么不把 MCP 获取回来的信息写在 SQL 里,而要经过 MCP 层?
- 为什么不把远程信息直接写在 Skill 里,还要通过 MCP 绕一圈?这个设计的考虑是什么?
- 二次请求应该不会再经过 MCP Server,对不对?所以走一次 MCP Center 是为了这个考虑吗?是出于上下文长度的考虑吗?
- 大模型是在什么时候调用你们的 API?
- 是在 query 里主动指定要用这个 Skill,或者指定用 SQL 排查问题吗?
- 大模型 request 里的 Skill、MCP、System Prompt 和 User Prompt 是怎么组装的?
- 撇开 Agent 项目不谈,Anthropic 或 OpenAI 的 API request 具体怎么组装、怎么调用?请求内容只有这些吗?
- 大模型返回时,在哪个字段说明要调用什么 tool、传什么参数?response 通常有哪些结构?
- 你这边没有特别关心过 response 结构,对吧?
- 你在 2025 年 6 月和 10 月做过基于 LangGraph 的事情,对吧?
- Graph 的正常开发流程是什么样的?
- LangGraph 的各个节点怎么拼装、怎么调用?具体怎么拼成一个 LangGraph?
- 你们编排了几个 Agent、几个节点?2025 年 6 月到 11 月的图里有多少个节点?
- 向量检索的目的是什么?召回方式有很多,为什么用向量检索?
- 向量检索库承载什么功能?
- 你们的库里存放多少信息,大概多少条数据?放的是 20 条数据,对吧?
- 这是必做的设计吗?如果只有 6 条或 20 条数据,还需要用向量检索吗?
- 考虑未来使用增长,增长情况大概有哪些?用户平常每天会存多少数据,或者每隔多久存多少?
- 「商家库版本」是什么概念?
- 工作流编排、工作流名称和描述是放在向量库里吗?
- 正常使用时不就一个版本吗?会同时有三四个版本吗?
- 为什么要用向量数据库?
- 后面的人会不断叠加工作流,运行时再把工作流召回,对吗?
- 你们是预设模板,对吧?用户怎么新增节点、动态编排?如果没有匹配的模板怎么办?
- 如果现有流程不满足需求,用户能做什么?
- 用户拖拽并校验完新的工作流后,点击保存会存到向量库还是新的数据库里?
- 什么情况下会用知识图谱?当时为什么选择它?
- 为什么目前(比如到 2026 年的 Agent)知识图谱比较少?
- 百度实习时好像也没有用知识图谱;诊断场景没有用,对吗?
- 2026 年的知识构建和图谱抽取中,什么样的知识需要用知识图谱构建?
- 大模型的请求怎么样在知识图谱里变成确定性的搜索?
- 为什么不把所有信息直接放在向量库里?
- 知识一般用 RAG、从向量数据库召回就可以了,对吧?那为什么你说的这些知识不能通过 RAG 召回?
- 大模型读了 SOP 不就已经构建联系了吗?为什么还需要通过知识库构建联系?
- 知识图谱相比大模型自己去找,优势在哪里?
- 你们的知识图谱大概几跳?也就两跳,对吧?那大模型自己也能跳两跳,对吧?
- 你们当时主要是考虑大模型的耗时和 token 吗?
- 知识图谱检索准确率有多少?80% 多是怎么算出来的,你们怎么看这个数据?
- 如果要提升准确率,除了刚才提到的办法和知识清洗,还有什么方法?
- 你们组目前对知识图谱的改进主要就这两种吗?数据准备怎么清洗?
- 你们的数据不是还挺大的吗?从数据清洗到训练模型的决策是怎么得出来的?主要考虑的是训练成本,而不是清洗过程中遇到了什么问题,对吧?
- 你那边有没有什么需要问的?
《参考解析》
MCP 的工具是怎么进上下文的:这是整场追问的主线。MCP 是「模型 ↔ 工具/资源」的协议,Server 通过 tools/list 暴露工具名、描述、JSON Schema 形式的入参;Client(可以是宿主应用内的一个组件,也可以是独立进程)负责连接 Server、取回清单、把「模型返回的工具调用意图」翻译成对 Server 的实际调用(tools/call),再把结果回灌给模型。所以「只传一个 MCP 列表、Agent 没主动连接 Server 怎么调通」的正确答案是:调不通——上下文里没有 schema 就没有可组装的参数,只能先让 Client 去拿 tools 再进第二轮请求。这就是所谓「两段式」:第一轮拿清单(或按 name 精确请求某一个 Server 的 tools),第二轮才带 schema 生成调用。追问「为什么不让模型自己猜参数」时要点明:参数正确性靠 schema 约束,不靠模型记忆;把工具清单塞进上下文是「有成本的正确性」,工具多时要按需检索而不是全量注入。
为什么要 MCP 而不是写进 Skill 或 SQL:三类东西的分工要能一句话说清——Skill 放程序性知识(这类任务按什么步骤做、踩过什么坑),MCP 放能力与数据的边界(有哪些工具、参数是什么、权限归谁),SQL 是某一次具体查询的实现。把远程信息硬写进 Skill 的问题是:数据变了要改提示词、没有权限校验、无法审计、也无法复用给别的 Agent;把 MCP 拉回来的数据再塞进 SQL 是绕路——SQL 只能查你已有的库,外部系统的实时状态本来就该由工具去取。MCP 这层的价值是标准化(换模型/换客户端不用重写集成)、权限与审计(工具级授权、每次调用可留痕)、以及按需加载(工具清单不进常驻上下文)。
request 与 response 的组装:一次请求本体是 model + messages + tools + 参数(temperature、max_tokens、thinking 等)。messages 按角色分 system / user / assistant / tool(OpenAI 叫 tool,Anthropic 叫 tool_result),system prompt 放身份与规则,Skill 的操作规范通常也拼进 system 或作为前缀消息,MCP 的工具清单放在顶层 tools 字段而不是消息里。响应里模型要调工具时给出的是结构化的 tool_calls(OpenAI:choices[0].message.tool_calls[],每项含 id、function.name、function.arguments 的 JSON 字符串;Anthropic:content 数组里的 tool_use block,含 id/name/input),纯文本回答则在 content/message.content。拿到调用后由宿主执行,把结果作为一条新消息(带对应的 tool_call_id)追加进 messages 再请求一次。流式下这些都是增量的 delta,要按 index 拼装。
LangGraph:把 Agent 建模成状态图——定义全局 State(字段可带 reducer 决定如何合并),节点是函数(读 State、返回局部更新),边是流转(普通边、条件边按 State 决定下一跳),编译成可执行图后按「节点 → 更新状态 → 下一节点」循环,直到到达 END。相比自己写 while 循环,它的价值是显式的状态与分支(可读、可测)、检查点(每步可持久化,支持断点续跑与人机协同)、以及可观测的轨迹。节点怎么拼要能说清:一个节点只做一件事(调模型、调工具、做校验),条件边里做路由判断,循环靠「回到某个节点」表达,并要设最大步数防死循环。
什么时候该用向量检索:向量检索解决的是「语义相近但字面不同」的召回,比如用户说「退不了款」要命中「退款流程与时限」。它不适合:数据量极小(二十条数据全塞进上下文更准也更省事)、需要精确匹配或聚合的查询(订单号、金额区间、计数)、强结构化约束(权限、时间范围)——这些用 SQL 或倒排索引更可靠。工程上常见的是混合召回:向量管语义、BM25 管关键词,两路融合再重排;过滤条件(权限、版本、时间)在检索前应用,不能指望模型自己筛。被问「二十条数据也要向量库吗」,正确回答是不要——这是过度设计,直接全量放进提示词或者用关键词匹配即可,向量库的成本在运维与一致性上。
知识图谱与 RAG 的边界:RAG 给的是「相关文本片段」,模型自己从片段里拼关系;知识图谱给的是「已经确定下来的实体与关系」,多跳查询是显式的图遍历。什么时候必须上图:关系本身就是答案(A 的供应商的控股股东是谁)、需要多跳且每跳都要精确(医疗诊断的症状→疾病→用药禁忌)、需要一致性与可解释(同一实体在不同文档里有不同叫法,必须先归一)、以及需要做约束推理(哪些组合不允许)。什么时候不必上图:知识以长文本描述为主、问题基本是「找到那段话」、或者图规模太小(两跳、几十个节点)——这时模型自己在几段文本里跳两跳就够了,上图只是多一层维护成本。被追问「准确率 80% 怎么算的」,要能说清评测集怎么构造(问句从真实日志采样还是人工写)、标注口径(多跳是否算对、部分正确怎么计)、以及分母是什么;说不清口径的准确率等于没有。
面试里的自保:这场面试的特点是「连续追问到你答不出」,遇到确实没深入过的点(比如某个 response 字段),直接说「这块我没有特别关注,我的理解是……回去我会去确认」,比硬编一个细节安全——面试官明显在验证边界,瞎编会被立刻抓住。