2026-10-27 秋招XX AI Agent开发工程师面试复盘

Published 2026-10-27 04:00 2176 words 11 min read Handwritten Every word here was typed by me.

Zhiheng Wang avatar

Zhiheng Wang

技术文章、个人随笔、项目与作品体验记录

This post is not yet available in English. Showing the original.
2026-10-27 秋招XX AI Agent开发工程师面试复盘 这场面试基本是在聊天。面试官沿着简历里的 Agent 项目一点点往下问,问得很细。我的感觉是,有些追问也不要求我一定做过,而是想看看我会怎么理解、怎么继续往下推。后面还聊到了个人 Agent 项目,我直接做了一次展示。 把这次聊到的几个问题整理一下。 1. 为什么用 Skill,而不是 Function Calling?...

2026-10-27 秋招XX AI Agent开发工程师面试复盘

这场面试基本是在聊天。面试官沿着简历里的 Agent 项目一点点往下问,问得很细。我的感觉是,有些追问也不要求我一定做过,而是想看看我会怎么理解、怎么继续往下推。后面还聊到了个人 Agent 项目,我直接做了一次展示。

把这次聊到的几个问题整理一下。

1. 为什么用 Skill,而不是 Function Calling?

这两个东西先要放到不同层次上看。Function Calling 让模型用约定的结构提出工具调用;Skill 把一类任务的操作方法、参考材料和脚本组织起来,告诉 Agent 什么时候用、该怎么做。一个 Skill 完全可以通过 Function Calling 调工具,两者可以配合。

面试官继续追问了渐进式披露:为什么会省 Token,具体怎么省?

按 Agent Skills 规范,开始只加载各技能的名称和描述;确定需要某项技能时,再读完整的 SKILL.md;更详细的参考文件按需读取。省下的是暂时用不到的详细说明,并不是 Skill 本身不占上下文。Agent Skills 规范

因此不能直接说“Skill 一定比 Function Calling 省 Token”。这取决于原来放了多少说明、实际加载了多少材料,以及有没有反复读取。如果技能很多、每次又都加载全文,未必更省;工具定义同样可以按任务筛选,不必一次全部发给模型。

2. Agent 怎么知道自己该调用工具?请求体长什么样?

面试官从“怎么调用”一直问到一次推理里模型究竟收到了什么。

以 Chat Completions 的函数调用格式为例,请求体顶层的 messages 放会话消息,tools 与它并列,定义函数名称、用途和参数结构。模型结合任务和工具说明,返回带 tool_calls 的 assistant 消息。应用检查参数和权限、执行函数,再把这条 assistant 消息和对应的 role: "tool" 结果追加到消息中,通过 tool_call_id 对应调用,继续请求模型。模型也可能继续调用其他工具。OpenAI Function Calling 文档

真正执行操作的是应用程序。模型负责提出调用,应用负责判断能不能执行、在哪里执行,以及怎样处理失败。

Skill 的说明也要通过宿主进入模型上下文,例如先注入技能目录,再通过读取文件的工具取得正文。不能因为用了 Skill,就给 OpenAI 请求体凭空加一个标准的 skills 字段。具体消息格式还要看用的是哪套 API,上面说的是 Chat Completions。

3. MCP 跑在本地还是服务器?STDIO 和 SSE 有什么区别?

这里要把部署位置和传输方式分开。

stdio 通常由客户端启动 MCP Server 子进程,通过标准输入输出交换协议消息。这里的“本地”是相对客户端进程说的;客户端若在服务器上,子进程也可以在服务器上。

HTTP 传输可以连接远程服务,也可以访问同机回环地址。旧的 HTTP+SSE 方案用 SSE 接收服务端消息,并通过另一个端点发送请求;从 2025-03-26 版规范开始,它由 Streamable HTTP 替代。后者使用统一 MCP 端点处理 HTTP 交互,需要流式返回时仍可使用 SSE,所以不能简单把“使用 SSE”和“旧传输”画等号。MCP 传输规范

放回前面的问题里,MCP 负责标准化客户端和服务端的能力交互;Function Calling 负责模型提出结构化调用;Skill 负责组织任务做法。宿主可以把 MCP 工具转换成模型可调用的工具,再由 Skill 指导怎样组合使用。

4. Deep Agents 到底做了什么?为什么用它?

这组追问的重点是具体能力:只说它用了 LangChain、LangGraph,还没解释清楚为什么选它。

Deep Agents 在工具调用循环上提供了文件读写、上下文管理、子任务委派等能力,也支持规划、技能加载和人工介入。比如长工具结果可以转存到文件,后面按需读取;独立子任务可以放进自己的上下文,完成后返回结果;关键工具执行前可以暂停等待确认。底层 LangGraph 则提供持久执行、流式输出和中断等运行能力。Deep Agents 官方介绍

选型时要说清楚自己需要其中哪几项。需要长任务、文件和上下文管理时,这些现成功能能减少外围实现;只有几次确定的工具调用时,也可以先用简单循环。不能把框架的全部能力都算成自己项目已经用上的功能。

5. 怎么理解 Agent Harness?

可以把它理解成让模型持续做事的一整套运行安排。Agent Loop 负责反复请求模型、执行工具、反馈结果,直到完成或停止;Harness 还需要处理上下文、工具接入、权限、文件系统、沙箱,以及运行状态的检查点和恢复。上面的 Deep Agents 就是在这一层提供现成功能。

几项东西解决的问题并不相同:权限决定允许做什么;沙箱限制实际执行环境的影响范围;检查点记录执行状态,支持中断后继续。它们不能只靠一句提示词代替。

Prompt Engineering 关注怎样表达指令,Loop 的设计关注怎样循环、何时退出,Harness 则把这些和实际环境接起来。Skills、Hook 可以参与其中,Cron 可以作为定时触发入口,但定时任务不是每个 Harness 都必须有的核心。

6. 个人 Agent 项目怎么做的?

现场还展示了个人项目。用现在的流程来说明,我希望把平时的笔记、作品记录和文章留在普通 Markdown 里,AI 围绕这些文件协助整理,需要公开时再进入网站。

拿一篇笔记举例,私人主题稿保留在原位置,要发表时准备独立 Post,两份稿以后分别维护。网站仍由 Payload 管理,通过标准 API 对接;程序负责记录对应关系、检查两端变化,写入后回读确认。私人保存和网站公开是两个明确的动作。

这里适合展开的是 AI 与程序怎样分工:AI 帮忙理解材料和组织表达,身份对应、同步检查和写入核对交给程序。具体演示可以沿一篇文章走完整条流程,再挑实际实现过的部分讲。

7. 为什么把主会话和旁路任务分开?

面试里还聊到了只有一个主聊天、同时存在多个旁路任务的设计。按这个描述,可以从协作和上下文隔离来理解。

主会话保留用户目标、约束和最终决策;旁路任务承担相对独立的查询、阅读或处理工作,最后把必要结果交回来。这样主会话不用带着每项任务的全部中间过程,也更容易继续和用户沟通。

代价是任务交接:目标和输入没交代清楚,旁路可能重复劳动或漏掉约束;如果把所有历史都复制过去、再把全部过程塞回来,隔离上下文的收益也就有限。这里讨论的是这种设计的取舍,不能只凭界面形态断定某个产品内部一定怎样实现。

8. Python 和 C++ 有什么区别?

不能只用“解释型”和“编译型”概括。Python 通常是动态类型,C++ 通常是静态类型;常见 CPython 会先编译成字节码再执行,C++ 通常提前编译成机器码,但这不是语言实现唯一可能的方式。

工程上,Python 适合快速组织业务、调用库和编写自动化;C++ 提供更直接的内存布局、资源生命周期和性能控制。性能也要看具体工作落在哪一层:Python 调用的数值库可能把主要计算交给底层原生代码,不能仅凭外层语言判断整个程序的速度。对 Agent 应用来说,还要看瓶颈是在模型和网络请求,还是本地计算。

Written by Handwritten

Random Posts

© 2026 Zhiheng Wang @traceonsnow
Powered by theme astro-koharu · Inspired by Shoka
Loading...