为什么又是字节

最近在看实习岗位的时候,我又一次点开了字节跳动的招聘页面。

去年我面过一次字节的客户端岗位。那次准备得很仓促,下午还在对接项目,临近面试才匆匆翻自己的简历。很多东西平时觉得自己会,真正坐到面试官面前,却很难在几分钟里讲清楚。链表写得生疏,八股也有一些答不上来。那次经历没有让我不想再去,反而一直提醒我:下一次敲门之前,应该认真准备得更久一点。

这一次我看到的目标岗位是:Agent开发实习生(AI剪辑)— 剪映 CapCut

  • 工作地点:深圳、广州
  • 职位类型:日常实习
  • 职位 ID:A80542
  • 实习要求:每周出勤 4 天,连续实习 4 个月

岗位所在的团队支持剪映、CapCut、醒图、即梦、Dreamina 等影像与 AIGC 产品。工作内容包括国际版剪映 AI 剪辑方向的性能、质量和架构设计,也会参与 AutoCut、智能成片、GenAI 等业务的迭代。

招聘要求里有几句话很吸引我:精通至少一门编程语言,具备扎实的数据结构、算法和操作系统基础,能够合理抽象和拆分业务逻辑,并且有 AI Agent 建设经验者优先。

它没有只要求“会调用一个大模型接口”,也不只是研究模型本身。它更像是把工程、AI 和真实产品放在了一起。模型给出能力,工程把能力装进产品,而用户最后看到的,是一次真正变简单了的创作过程。这个方向很具体,也是我想尝试的事情。

查看目标岗位

我和岗位之间还有多远

我平时使用 Go 相对多一些,也写过服务端、并发和接口相关的代码。但“用过”不等于“掌握”。如果继续往下追问,slice 为什么这样扩容,map 如何渐进迁移,goroutine 怎样被调度,channel 阻塞时发生了什么,我还不能保证每次都讲得准确。

算法也是一样。看答案的时候觉得熟悉,合上页面以后,能不能在有限时间里独立写出来,是另一回事。上一次面试时那条没有牵好的链表,到现在仍然像一根细线,提醒我基础不能靠“差不多”蒙混过去。

AI 应用开发方面,我也还处在搭建知识框架的阶段。调用 LLM API 只是开始,后面还有流式响应、上下文管理、Prompt、Embedding、向量检索、RAG、Function Calling、Agent 状态管理,以及真正落到视频剪辑工作流里的工具设计。它们不是在收藏夹里看过就能变成经验的东西。

所以我给自己定了一个时间:2026 年 10 月前,具备投递和面试这个岗位的能力。

这句话暂时还不是结果,只是我决定认真走向它的开始。

GoCampus

为了不让计划最后只留在备忘录里,我用 VitePress 做了一个学习文档,名字叫 GoCampus

这个名字很简单:以 Go 为起点,完成一次面向校园实习的系统训练。它既是学习计划,也是我的知识点记忆仓库。

我以前也存过很多教程。浏览器标签开了一排,收藏夹里的分类越来越整齐,真正能复述出来的东西却不一定变多。于是这次我想换一种方式:把目标拆成阶段,把知识点写成文档,把理解写进代码,再让测试告诉我到底会不会。

GoCampus 使用 VitePress 构建,目前包含:

  • 分阶段的学习路线和每日目标;
  • Go 核心知识与面试问题;
  • 数据结构、算法和操作系统基础;
  • LLM、Prompt、Embedding、RAG 等 AI 应用知识;
  • 与知识点配套的 Go 代码练习和测试;
  • 后续准备实现的 AI Agent 项目。

VitePress 的好处是足够轻,也很适合查阅。忘记一个概念时可以直接搜索,修改 Markdown 后就能看到页面变化。文档不是为了证明自己学过,而是为了在忘记的时候,能够沿着当时留下的路重新走回来。

查看 GoCampus 仓库

十月之前的安排

从 7 月底到 10 月初,我把准备过程分成了五个阶段。

阶段 时间 主要内容 希望得到的结果
第一阶段 7.28 - 8.10 Go 语言深入 不只会写,还能说明底层原理并完成并发练习
第二阶段 8.11 - 8.24 计算机基础强化 补齐算法、数据结构和操作系统基础
第三阶段 8.25 - 9.07 AI 应用开发基础 独立完成 LLM 调用、Embedding 与 RAG
第四阶段 9.08 - 9.21 AI Agent 开发 理解 ReAct、Tool Use、状态管理和多 Agent 协作
第五阶段 9.22 - 10.05 项目与面试准备 做出可演示项目,整理简历并进行模拟面试

每一个知识点,我准备尽量走完下面这条路:

  1. 先弄清楚它是什么,解决什么问题;
  2. 不看答案写一遍代码,用测试暴露理解偏差;
  3. 用自己的话回答一遍面试问题;
  4. 把没有答清楚的部分重新写回文档;
  5. 在项目中真正使用,而不是停在一道孤立的题里。

最终希望留下几样能被检查的东西:一套 Go 学习笔记和练习代码,持续整理的算法题解,一个用 Go 完成的 RAG 项目,以及一个与 AI 剪辑场景有关、可以演示和讲清设计过程的 Agent 项目。

在招聘帖子之前

其实在看到这个招聘帖子之前,我就已经在尝试做 Agent 剪辑相关的开发了。我为它单独建了一个仓库,一边看资料,一边想这件事到底应该怎样实现。所以这次看到剪映的岗位时,有一种很奇妙的感觉:原来我自己正在摸索的方向,也真的出现在了一个具体的业务和岗位里。

最开始,我自然地想到了 LangChain 和 LangGraph。把任务拆成节点,用链或者状态机把它们连起来,看起来很适合描述 Agent 的执行过程。但真正放到剪辑里,我很快就有些困惑。

剪辑似乎不是一个固定的工作流。同一份素材,因为用户目的、发布平台、节奏和审美不同,可能得到完全不一样的结果。开头要不要保留,哪一句适合做钩子,哪个停顿应该剪掉,音乐什么时候进入,这些选择很难被提前画成一张固定的流程图。如果我把所有步骤和分支都写进链路,最后得到的也许只是一个越来越庞大的工作流,只是在某几个节点上接入了大模型。

它当然可以工作,但这是不是我想象中的 Agent 剪辑,我当时并不确定。

OpenCut 给我的想象

后来我看到了开源剪辑平台 OpenCut。刚看到它的时候,我心里真的是一句:哇塞,那我是不是只需要给它接上 MCP,把时间轴、素材、字幕、裁剪和导出这些能力变成 Agent 可以调用的工具,就能够让 Agent 在 OpenCut 的界面里帮我剪辑了?

这个想法让我兴奋了好一会儿。因为相比让模型生成一份无法直接执行的“剪辑建议”,一个真正存在的剪辑平台已经提供了画布、时间轴和交互界面。Agent 不必重新发明一个编辑器,它只需要能够理解用户的意图,再去操作这些已经存在的能力。人也可以看见它做了什么,在关键步骤暂停、修改或者撤销。

当然,后来再想想,“接上 MCP”远没有一句话这么简单。工具的粒度应该多大,时间轴状态怎样描述,一次操作失败以后如何恢复,Agent 怎么知道当前画面好不好,哪些操作可以自动执行,哪些必须先让用户确认,这里面仍然有很多问题。

Skill 不等于全部

我也看了一些其他开源项目所做的“自动剪辑”。它们有一个很常见的思路:把剪辑思路和剪辑类型 Skill 化。例如什么地方应该切镜头,短视频前几秒应该怎样吸引注意,字幕用什么样式,不同类型的视频采用什么节奏。Agent 根据任务挑选一套 Skill,再按照其中的章法执行。

这种方式很实用。人类剪辑师本来就会总结经验,成熟的剪辑类型也确实存在相对稳定的套路。Skill 可以把这些经验保存下来,也能让结果更可控。

但我又觉得,如果所谓 Agent 剪辑只是先选中一套模板,再严格走完预设步骤,那它好像仍然没有真正“看见”素材,也没有在过程中理解、判断和调整。它更像一个会选择工作流的执行器,而不是一个能够与人一起完成创作的剪辑伙伴。

至少以我现在还很浅的理解来看,真正的 Agent 剪辑应该形成一个循环:理解用户想要什么,观察现有素材和时间轴,制定当下的计划,调用工具执行,再检查结果并决定下一步。如果信息不够,它应该询问用户;如果效果不好,它也应该能够回退并换一种方法。Skill 可以成为它掌握的经验和能力,但不应该提前写死它的每一步。

也许等我再学一段时间,回头会发现现在的判断很幼稚。毕竟我才刚刚进入 Agent 应用开发,许多概念还没有吃透,也没有完成一个足够复杂的产品。等待我学习的内容,确实还有很多很多。

关于 AI 剪辑,我想做什么

现在对最终项目的想法还没有完全定下来,但我不想只做一个换了 System Prompt 的聊天框,也不想为了使用 Agent 框架而硬套一张流程图。

我更想从真实的剪辑过程里找问题。例如,让 Agent 读取视频脚本与素材,理解场景和节奏,调用工具完成粗剪、字幕、标题与镜头调整;或者先生成一份结构化的剪辑计划,再把它落实到 OpenCut 的时间轴上。模型负责理解、规划与判断,工具负责确定地执行,人则始终可以在关键节点确认和修改。

真正做起来一定会比这几句话复杂。视频和音频怎样被 Agent 感知,时间轴怎样表示,MCP 工具如何设计,操作之后怎样给模型有效反馈,生成结果怎样评价,延迟和成本如何控制,这些才是项目里真正值得讲的部分。

我现在还没有答案,但至少已经知道,自己应该带着哪些问题继续往前走了。

写给十月

计划写出来总是很漂亮,日历上的格子也显得十分听话。真正困难的是某一天很累,某一道题写了很久仍然报错,文档还有大片空白时,第二天愿不愿意继续坐回来。

GoCampus 现在也并不完整。前两阶段已经铺了不少练习,AI 应用部分的文档正在形成,后面的 Agent 和项目仍然等着我去实现。它不是一张已经完成的成绩单,更像是一张刚刚展开的地图。

我不知道十月投出简历以后会得到什么结果。也许面试官仍然会问到我没有准备过的问题,也许项目并没有想象中漂亮,也许我还是会紧张。但我希望那时的自己不再只有一句“我对 AI 很感兴趣”,而是能够打开代码,讲清楚一次检索为什么命中,一个工具为什么这样抽象,一段并发为什么不会泄漏,以及一个 Agent 如何从用户的想法走到真正可执行的剪辑步骤。

去年冬天,我在一次仓促的面试之后告诉自己,要把未写完的答案交给练习。现在夏天正盛,我终于开始一行一行地把它们写回来。

十月还没有到,门也还没有敲响。

这一次,我想早点出发。