今天是第68天。加班到晚上八点,前端周会刚结束,我又坐回工位改了一个半小时Agent项目的上下文压缩逻辑。这不是什么轰轰烈烈的转行宣言,就是一个在职前端Leader,把每天的碎片时间攒起来,一点一点往AI Agent这条深水区里蹚的记录。之所以写下这篇文章,是因为后台收到不少同行私信问我"从哪开始""要不要弃前端""学了能干嘛"。我想用这68天的真实经历,一次性把这些问题说清楚。
这篇内容解决的核心问题只有一个:一个带团队、写业务、天天跟组件库、微前端、性能监控打交道的前端负责人,是怎么从零学习AI Agent,又是怎么把它和前端经验结合起来的。适合正在观望的技术管理者、想了解Agent开发的一线前端,以及准备给团队寻找AI突破口但还没方向的人。看完之后,你至少能知道一条不靠背概念、不靠刷论文的学习路径,也能少踩几个我踩过的坑。
1. 前端Leader转型AI Agent:我先想明白的几件事
1.1 说句实在话,这是行业风向变了
我做前端大概十年,带团队也有四五年,手上的技术储备覆盖Vue、React、跨端、微前端、组件库建设这些常规内容。但2024下半年之后,我越来越明显地感觉到一个变化:AI不只是在"辅助写代码",而是开始成为软件本身的一部分。以前我们说的前端智能化,最多是智能推荐、埋点分析,现在不一样了,Agent可以自主调用工具、搜索信息、操作软件、生成内容,它的运行形态已经超出了"页面"的范畴。
对前端Leader来说,真正让我坐不住的不是哪天被AI替代,而是我的团队未来三年、五年要交付的东西是什么。如果产品里所有的"功能"都会变成Agent的"能力",那前端参与的位置在哪里?这个问题不解决,团队方向就会飘。所以我决定不围观,直接下场学Agent。这个决定是转型的第一推动力。
1.2 前端积累不是包袱,反而是转Agent的底子
我之前最担心的就是前端背景全是"表面功夫",到了Agent领域要推倒重来。实际学下来,完全不是这么回事,前端经验里有大量东西可以直接平移过来。
组件化思想直接对应Agent的Skill封装。前端把一个下拉框封装成组件,要定义 props、slot、事件,Agent里的Skill就是这么个东西——把一组指令、Prompt、工具调用封装成可以被复用、被引用、被组合的单元。状态管理的经验对应Agent的上下文管理,前端处理全局store、会话持久化,Agent处理短期记忆和长期记忆,逻辑一样是"什么该存、什么该丢、什么该从外部拿"。异步编程更不用说,Agent跑起来满屏都是流式输出、事件回调、并发调用,这本来就是前端最熟悉的领域。哪怕是我做过的qiankun微前端拆分,放到多Agent协作的场景里,思想也是相通的:子应用负责单一职责,主应用做调度和通信。
所以如果你的前端基础够扎实,转Agent不是从零开始,而是换一套运行环境,把你的工程能力重放一遍。
1.3 第68天回头看,这条学习路径是可以复制的
很多刚起步的朋友问我到底怎么学,其实我的路径并不复杂,分四个阶段。
第1到15天是认知搭建阶段。目标不是写代码,而是搞明白Agent是什么、它跟普通程序的区别在哪、有哪些基础设施。我会去看一些主流架构的文章,也会拿ChatGPT、Cursor这类工具当观察对象,分析它们背后可能的运行逻辑。
第16到35天是框架和协议阶段。开始动手调用大模型API,做最简单的多轮对话,再尝试Function Calling,理解工具调用是怎么发生的。这个阶段最痛苦,因为要从"面向逻辑"变成"面向意图",让模型学会自己决定调什么工具。
第36到55天是实战阶段。用前端配套的技术栈把Agent完整跑起来,配了UI、流式输出、会话管理,然后开始做具体场景,比如语音转写和自动化助手。就是这个阶段让我真正觉得自己不是门外汉了。
第56到68天是工程化打磨阶段。整理上下文策略、封装Skill、设计工具协议、加点防御性处理。现在回头看,这个路径最大的好处是顺序正确:先有认知再动手,先跑通再优化。我见过太多人上来就调框架,结果看了十天文档还没跑通一个对话,越学越没底气。
2. AI Agent主流架构拆解:我摸清的核心概念
2.1 Agent和普通接口调用的本质区别:它是一个循环
传统前端的开发模式是:页面发起请求,后端返回数据,前端渲染。整个链路是确定的、可预期的。Agent不是这么玩的,它的核心是一个循环——模型基于目标和当前状态推理,决定下一步动作,执行动作得到结果,再把结果追加进上下文,重新推理,直到完成任务。
这个模式叫ReAct,即Reasoning加Acting。用代码去理解的话,Agent本质上是一个while循环,循环体里发生着"思考-行动-观察"的迭代。我第一次写出这种循环的时候有一种很强的错位感:我以前写代码是"控制每一行",现在写Agent是"设计一个让模型自己决策的框架"。传统程序是函数,Agent是循环,这一点如果你能尽早想明白,后面所有概念都顺了。
2.2 四个核心模块:模型、规划、工具、记忆
我习惯把Agent拆成四个模块来理解。
模型是决策大脑,负责理解上下文、生成推理和输出。但前端工程师要记住,模型是概率引擎,不是规则引擎,它有幻觉、有随机性,所以Agent工程的核心就是在不确定性上建确定性系统。
规划是这个大脑的工作方式,包括让模型思考后回答的CoT,也包括把大任务拆成子任务再分头执行的Plan-and-Execute,后面的多Agent协作本质上也属于规划的范畴。
工具是Agent的手脚。大模型再强也没法直接查数据库、调接口、操作浏览器,所以Agent要能调用外部函数。这个机制在OpenAI里叫Function Calling,在业界标准协议里叫MCP。我把它类比成后端注册了一堆REST接口,模型就是那个"知道怎么用接口但不会写接口"的消费者。
记忆是Agent的持久化仓储。短期记忆就是上下文窗口里的对话历史,长期记忆则是通过向量数据库存的业务知识和历史事实,需要时用检索召回。拿前端类比,短期记忆像内存里的store,长期记忆像localStorage加索引。
2.3 Token和上下文:前端人最容易忽略的"性能指标"
我第一次接触Token这个概念时,以为它就是字数统计,后来算了一笔账才明白,Token是Agent项目里的成本单位和性能瓶颈。输入给模型的每一段文本、工具返回的每一份数据都要按Token计费,输出也要计费,上下文越长,单次请求越贵,响应越慢。
这就逼着你做上下文治理,我现在的做法是三个策略配合。第一是截断:把最旧的低价值对话直接丢掉。第二是摘要:让模型把早期对话压缩成几句话,替代原始内容。第三是检索:不同业务知识存进向量库,按需要拉取。这就像前端做长列表要分页、做大数据要虚拟滚动。上下文也是资源,也要用算计的心态去管理。我现在每次排查Agent表现异常,第一反应就是先把最近的上下文全打印出来看一遍,十次有八次问题出在"该记住的丢了、不该塞进来的全塞进来了"。
2.4 主流框架选择:别被生态绑架
这68天里我过了一遍主流框架,是非对错先不论,适配前端背景的优先级是明确的。
用表格整理一下我的对比结论:
| 框架/方案 | 技术栈 | 适合谁 | 我的使用评价 |
|---|---|---|---|
| Vercel AI SDK | TypeScript | 前端团队 | 流式输出、UI集成最顺,工程味重 |
| LangChain.js | TypeScript | 想快速搭多工具链路 | 抽象层厚,调试时心智负担偏高 |
| Dify | 可视化编排 | 快速验证业务场景 | 拖拽能用,深入控制就得写代码 |
| CrewAI / AutoGen | Python | 研究多Agent协作 | 生态偏学术,生产化要自己填坑 |
| 自研运行时 | 任意 | 核心能力沉淀需求 | 最费劲,但最可控 |
至于热词里一直在传的Rust语言AI Agent,我也研究过。它确实扛得住高并发、低延迟,适合做语音转写、本地推理链路这类偏重性能的基础设施,但对我们前端团队来说,现阶段自研Rust Agent有点超前。我的判断是:先靠TypeScript生态把业务跑通,等真遇到了语言层瓶颈再考虑Rust下沉,一步到位容易噎着。
3. 用前端技术栈实操搭建Agent:关键步骤与代码实现
3.1 技术选型逻辑:为什么我从TypeScript生态切入
这个问题被问过很多次:转AI Agent为什么不用Python?我的理由有三个。
第一,团队零成本迁移。我们组全员都会TypeScript,选一个TS生态的Agent方案,大家不需要学新语言就能进入状态。第二,工程链路统一。我的目标是把Agent能力嵌进前端应用里,TypeScript可以同时写页面、写Node服务、写云函数,部署链路跟现有前端CI/CD完全打通。第三,生态已经够用。OpenAI、Anthropic等主流服务商的SDK都有TypeScript版本,Vercel AI SDK和LangChain.js也都成熟。Python当然有其优势,但它是"更好的选择",不是"唯一的选择"。前端团队入局的关键是先跑起来,技术栈越贴近现状越好。
3.2 最小闭环:一个带工具调用的Agent循环
我不建议一开始就上重型框架,这里放一个我自己写的极简版Agent循环,核心逻辑就二三十行,看懂它,你就明白Agent本质了。
import OpenAI from 'openai'; const client = new OpenAI({ baseURL: process.env.LLM_BASE_URL, apiKey: process.env.LLM_API_KEY, }); async function runAgent(task: string, tools: Tool[]) { const messages: ChatMessage[] = [ { role: 'system', content: '你是一个可靠的助手,请根据需要调用工具完成任务。' }, { role: 'user', content: task }, ]; const maxSteps = 10; for (let i = 0; i < maxSteps; i++) { const res = await client.chat.completions.create({ model: 'gpt-4o-mini', messages, tools: tools.map((t) => t.schema), }); const msg = res.choices[0].message; messages.push(msg); const calls = msg.tool_calls; if (!calls || calls.length === 0) { // 没有工具调用,说明Agent已得到最终答案 return msg.content; } for (const call of calls) { const tool = tools.find((t) => t.name === call.function.name); if (!tool) continue; const result = await tool.execute(JSON.parse(call.function.arguments)); // 把工具执行结果回传给模型,成为下一轮的依据 messages.push({ role: 'tool', tool_call_id: call.id, content: JSON.stringify(result), }); } } throw new Error('Agent steps limit exceeded'); }这个循环里有几个值得注意的细节。maxSteps必须设上限,Agent一旦陷入自我对话,会无休止地调工具,这是成本黑洞。工具调用结果一定要结构化返回,不要返回一大段废话文本,模型解析起来成本高还容易出错。messages必须完整维护,每一轮的推理和工具结果都要追加进去,少了任何一段,模型的决策上下文就不完整。我第一次跑通这个循环时,Agent连续调了八次工具才给出答案,我当时第一反应是"它是不是坏了",后来才意识到,八次调用背后是八步推理链条,只要每步都有意义,就属于正常行为。
3.3 前端能接力的部分:流式输出、会话状态与UI
Agent跑起来了,接下来就是前端的本职工作——把交互体验做好。流式输出是目前Agent交互的标配,后端通过SSE或流式响应持续吐Token,前端用fetch的ReadableStream解析。我这里不贴完整代码,核心逻辑就是用reader循环读取数据块,通过parse chunk把内容增量渲染到页面上,配合Markdown渲染器,让用户看到"逐字生成"的效果。关键注意点是中断处理:用户点停止按钮时,要取消读取并断开链接,否则后端还在继续生成,白白计费。
会话状态管理上,我直接沿用了前端的那套思路:短期会话放内存store,历史会话落到IndexedDB,Agent的长期记忆对接向量库。界面上,我把工具调用过程展示成一个"运行日志面板",用户能看到Agent正在调用哪个工具、传了什么参数、返回了什么结果。这一步很受团队欢迎,因为透明化的Agent会让用户更信任它。这些能力做下来,我可以很自信地说,一个前端Leader在Agent项目里不是边缘角色,恰恰相反,体验、透明度、异常反馈这些决定Agent能否被真正使用的地方,全是前端的主场。
3.4 安全与部署:Agent不是纯前端项目
这里必须泼一盆冷水。Agent项目的API Key绝对不能放前端,浏览器里没有任何秘密,你写在代码里的密钥等于送给所有人的。我在团队内部推行的规范是:大模型的Key只存在于服务端环境变量,前端通过业务后端转发请求,业务后端统一做鉴权、限流和内容脱敏,防止有人绕过页面直接打推理接口。前端侧也要上CSP策略,限制脚本来源,页面层面要对用户输入做长度限制和敏感词过滤,防止提示词注入。
部署方面,我的建议是不要试图做一个纯前端Agent。因为模型调用和工具执行必须发生在受控环境里,所以至少要有一个无状态的API服务,前端部分照常走静态托管。最舒服的组合是Next.js这类全栈框架,API Routes里跑Agent逻辑,页面部分按前端习惯部署,云函数冷启动会有几十到几百毫秒延迟,但个人项目体验完全能接受。做自动化操作类Agent时更要谨慎,只允许在授权测试环境里用真机或模拟器,涉及第三方平台的自动化操作必须遵守对应平台的接口规范和使用规则,这既是法律底线,也是技术人的职业操守。
4. 两个实战项目的完整复盘:语音转写与自动化发布助手
4.1 实战一:实时语音转写大模型的前端适配
这个项目源于我们内部的一场技术评估,需要评估实时会议记录的可行性。技术链路的前半段是语音识别,后端接讯飞实时语音转写能力,前端用MediaRecorder采集麦克风音频,通过WebSocket推流,后端转写结果以增量文本的方式实时返回。后半段是大模型理解,把转写文本喂给Agent,让Agent整理纪要、提取待办、识别发言人意图。
前端适配的坑主要体现在三个地方。一是音频参数,实测下来16kHz单声道PCM的效果和性价比最平衡,过高的采样率只会增加带宽和计费。二是断句策略,转写文本是持续流入的,如果每来一段就发给Agent一次,Token成本直接爆炸,我的方案是缓冲两秒或累积满几十字后再发一次,配合标点做自然断句。三是重连机制,WebSocket断开后要自动重连并恢复音频流,同时把断开期间的音频缓存起来,避免漏段。这个项目跑通后,我用它连着录了三场周会,转写加纪要的效果已经能省掉大半人工记录时间,而且它让我确认了一个判断:语音输入未来一定会成为Agent的主入口之一,谁抢先把链路做好,谁就先拥有体验优势。
4.2 实战二:"半自动发布助手"的技术原型验证
这个项目源于团队里一个很常见的抱怨:每天重复在多个系统之间复制粘贴内容,浪费时间。我搭了一个半自动发布助手的技术原型,核心不是暴力爬取数据,而是把"人在浏览器里的重复操作"抽象成Agent化的工作流。用Playwright控制浏览器环境,模拟表单填写、按钮点击和信息回填,由Agent根据规则决策什么时候做哪一步。
整个验证跑下来有两点让我印象深刻。一是规则和Agent的配合关系:前端工程师习惯把一切写成确定性的if else,但发布助手场景里,不同页面结构的细微差异让纯规则很难维护,改用Agent理解页面后,适应性能大幅提升。二是这个过程的合规风险:涉及任何平台的自动化操作,都要严格限制在授权的测试账号、公开接口或模拟环境里,不针对真实线上用户数据操作,更不能用于绕过平台的频率限制或审核机制。作为一个技术原型,它的价值是证明"重复操作可以被Agent化",而不是教人怎么薅平台羊毛。这个度必须拿捏清楚。
4.3 复盘后的工程化思考
做完这两个项目,我最深的感触是,Agent项目的交付物不再只有代码,还包括Prompt、Skill文档、工具定义和测试集。以前前端交付组件,要有props说明、使用文档、单元测试,Agent交付一个能力,同样要有触发它的指令模板、工具调用说明、边界行为定义、效果评估标准。
我甚至把团队日常的代码评审流程抽象成了一个Skill:输入一段变更代码,工具调用静态检查接口获取评分,结合历史提交记录判断风险等级,最后输出评审意见。这种做法让我重新理解了前端Leader在AI时代的角色:不只是写代码,还要定义"AI怎么使用我们的代码资产"。团队协作方式也在改变,现在做一个Agent功能,至少需要三种角色协同:写Prompt的人理解意图,写工具的人对接系统,写前端的人保证交互闭环。以前我们只在技术栈内分工,现在分工维度完全变了。
5. 68天踩坑实录:高频问题、方向误区与个人心得
5.1 高频问题排查速查表
我把这68天里反复踩到的问题整理成一个表格,每个问题都附上了实际有效的排查手段。
| 现象 | 常见原因 | 排查方法 | 落地解决 |
|---|---|---|---|
| Agent不调用工具 | 工具描述写得不清晰、模型没识别意图 | 打印模型原始返回,看tool_calls为空的原因 | 重写工具描述,写明触发条件、入参格式、示例 |
| 反复调用同一工具 | 缺终止条件、工具结果不足以得出结论 | 检查返回结果是否包含可判断"完成"的信息 | 在结果里附加状态字段,Agent据此退出循环 |
| 上下文膨胀后开始答非所问 | 历史消息无限堆积、关键信息被淹没 | 打印消息长度和首轮系统指令是否被挤出 | 做截断策略,首轮系统指令每次请求都重新注入 |
| Token成本异常飙升 | 工具返回数据过大、被重复塞进上下文 | 看每次请求body大小和工具结果长度 | 工具返回只保留摘要字段,完整数据落到外部存储 |
| WebSocket数据流断断续续 | 未做心跳检测、弱网切换未重连 | 加网络状态监听,打印断线日志 | 实现指数退避重连,缓存断线期间数据恢复后补传 |
| 流式输出中途卡住 | 前端读流异常、后端队列阻塞 | 抓包看响应流是否在持续输出 | 前端超时后主动断开,后端加超时保护和队列上限 |
围绕这些表格我想多说一句:Agent调试最大的障碍不是技术不会,而是运行过程不可见。所以我养成了给Agent运行时加日志的习惯,把每一步"思考、调用、观察"都打印出来。这个习惯至少帮我省了一半的排查时间。
5.2 前端转AI Agent的三条方向性误区
我看到太多人倒在错误的方向上。第一是死磕数学和论文,觉得不懂Transformer就不配搞Agent,真实项目里用不到这些,先会用再理解,需要的时候回头补完全来得及。第二是迷信LangChain这类框架,以为接上框架就等于会Agent,框架只是脚手架,真正的核心是对模型行为的理解和对业务的拆分能力。第三是拿Agent当接口用,期望给它一个输入就稳定返回固定结构的输出,可Agent的本质是概率决策,必须做好容错、重试和校验机制。想清楚这三点,可以少走很多弯路。
另外关于Rust语言AI Agent,我再补充一句个人判断:如果你对Agent运行时性能有执念,想在本地边缘设备跑自治Agent,或者要做低延迟的语音Agent网关,Rust确实值得投入。但对于绝大多数前端团队,先用TypeScript把业务和体验验证完,再决定要不要用Rust做性能下沉模块,是投入产出比最高的路径。
5.3 学习节奏与团队管理的实际体会
我能坚持68天,靠的不是意志力,而是把学习嵌进了工作流程。固定早上早起一小时,用来读文档和写代码,晚上如果不加班就拿出一小时做项目,周末留一个完整下午处理难啃的问题。更重要的是学以致用:我把这个学习项目跟团队需求绑在一起,语音转写是团队会议纪要的真实痛点,发布助手是我们内部运营的重复劳动问题,有了真实场景,学习驱动力完全不同。
团队这边,我现在的做法是组建了一个AI工具兴趣小组,每周做一次内部分享,每个人都要带一个Agent小实验来,不限制方向。两周下来,组里已经有人做出了自动生成周报的Agent工具,也有人把前端组件库的文档Agent化了。作为Leader,我越来越觉得转型不只是一个人的事,如果能把学习经验沉淀成团队能力,前端团队的边界就能往上一层。
最后再分享一个我个人的体会。第68天,我不能说我已经转型成了AI Agent专家,但至少我看清了方向:前端在Agent时代不是没有位置,而是位置变得更加核心,谁能定义Agent的交互方式,谁能让Agent的能力被用户信任和使用,谁就能在下一代软件里站住脚。如果你也在考虑这条路,不用等全部准备好了再开始,就从今天,从读一遍这篇总结,从跑通一个最小Agent循环开始。你先走一步,就已经比停下来的人领先了68天。