前端+AI这个方向,最近真的是被问爆了。不管是社区里晒的AI编程工具测评,还是各路面试题里突然冒出来的“你用过哪些AI辅助开发方式”,都能感觉到前端和AI之间那道墙正在被快速拆掉。我自己从第一天开始折腾这个项目,到今天进入第二天,最大的感受是:前端+AI不再是“调一个接口那么单薄”,而是从交互形态、数据流、组件设计到调试方式,整个链路都被重构了。这篇笔记我就把今天实际动手验证过的东西,连同踩到的坑一起记录下来,给同样走在这条路上的朋友做个参考。
1. AI项目前端的整体架构到底该怎么拆
1.1 我理解的“AI应用前端”包含三个层面
今天动手之前,我先把前端+AI项目的技术栈重新捋了一遍。很多人一提到AI应用,第一反应就是“在页面上加个聊天窗口”,这个理解实在过于表面。我现在更倾向把AI项目的前端拆成三个层面:
第一层是交互承载层,也就是用户直接看到和操作的部分。聊天窗口只是其中一种形式,还有表单式的参数配置界面、可视化的工作流编排界面、对话式报表、AI辅助写作的富文本编辑器等等。这一层的核心问题是:如何在原来的业务界面里优雅地嵌入AI能力,而不是把AI功能做成一个孤岛。
第二层是连接与协议层,负责前端和AI服务端的数据交换。这里包含了大模型API的调用鉴权、流式输出的接收与解析、取消与重连、消息上下文的组织方式。这一层最容易被初学者忽略,但实际做起来,坑最多、也最影响体验。我下面会详细写今天实操中的几个关键点。
第三层是前端工程化层,包括AI组件的封装、类型定义、状态管理、多轮对话的消息数据结构设计,以及IDE里的AI辅助开发工具链。这个层面决定了项目能不能规模化地加功能,而不是越写越乱。
把这三层分清楚之后,再看那些热门技术词就容易多了。比如“前端AI工具”“AI编程提示词”“JSON.stringify前端性能优化”,其实都分属于不同层面,不要混为一谈。
1.2 为什么前端在今天突然变得这么重要
一个很直观的现象:大模型的能力再强,如果交互界面做得反人类,用户照样不买账。前几年大家还在比模型参数,一年内赛道就卷到应用层了。而那些真正让用户觉得“AI懂我”的产品,恰恰是在前端交互上下了功夫的——比如打字机式的流式输出、可中止生成、上下文可视化、预设Prompt模板等等。
所以前端工程师在AI项目里的角色不是“画页面”,而是要解决“人如何跟AI高效协作”这个问题。这个定位比传统前端要高很多,也因此前端+AI相关的面试题越来越偏重应用场景和工程落地。我在准备这个项目时,给自己定的原则就是:不讨论模型怎么训练,只看怎么把已有能力用扎实。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 三种交互形态与我的取舍思路
2.1 普通业务页面嵌入AI能力
第一种形态是在普通业务系统中嵌入AI功能,比如管理后台里的“一键生成周报”、表单里的“智能填写提示”。这种形态的特点是保留原有业务界面为主,AI只是配角。
做成这种形态,前端通常需要封装一个“AI气泡助手”或者“右键唤起AI”的交互组件。我当时调研了两种做法:一种是在指定输入框旁加触发按钮,点开后弹一个小浮层展示AI返回内容;另一种是把AI能力绑定到选区或右键菜单上,比如用户选中一段文本,就出现“润色”“翻译”“总结”等操作项。
从工程实现上看,第二种要比第一种复杂很多,需要处理选区位置、动态定位、文本替换后的光标恢复等问题。但如果目标是AI辅助写作类的场景,第二种体验确实更好。我的决定是:第一阶段先做第一种,因为好调试、能快速出效果;后续再迭代第二种。
2.2 独立AI对话界面的信息架构
第二种形态是独立的AI对话界面,对应热搜词里反复出现的“ai无禁词聊天网页版”“无限制聊天AI”等。这里要特别说一句:做产品时千万别去碰那些打着“无限制”“无审核”旗号的噱头,合规底线不能动。真正值得关心的是:在合规前提下,为了让对话体验接近自然交流,前端需要做些什么。
我实际做下来,一个完整可用的对话界面需要这些模块:会话列表(管理多个历史对话)、消息区(正确展示角色区分和渲染富内容)、输入区(支持发送、停止生成、多行输入)、还有设置区(模型选择、参数调整)。别小看这个架子,每块都有细节。
最让我花时间的是消息区的数据结构设计。前后端约定消息对象时,不能只放一个“content”字符串,因为你会在里面遇到工具调用结果、引用来源、思考过程、多模态附件等多种类型。建议从一开始就引入消息类型字段,比如“text”“tool_call”“image”“system_notice”,前端根据类型做不同渲染。这块如果前期设计得不清晰,后面加功能会非常痛苦。
2.3 AI Agent类产品前端的特殊性
第三种形态是AI Agent类产品,对应热搜词里的“ai agent”。这类产品前端和普通聊天AI最大的区别在于:用户不止看得到文字回复,还要看到AI在“做什么”。比如Agent在读取文件、在查询数据、在执行代码生成操作的时候,前端需要实时展示这些中间步骤。
我做了一个简单的运行日志面板,用类似终端的形式把每一步的状态打印出来。数据是通过WebSocket实时推送的,状态包括“开始执行”“执行中”“成功/失败”等。这个面板在调试时救了我很多次,因为Agent的逻辑链路长时,出问题你根本不知道卡在哪一步。
相比之下,给Agent配置外部工具(比如搜索、绘图)后,前端还要能展示结构化的工具调用参数和结果,这就更偏向工作台形态了。我后面会重点补这块。
2.4 我的选型结论:三种形态并不是互斥的
实操下来,我发现这三种形态不是非此即彼,更像一个产品的三个成长阶段。刚开始做一个“业务页面+AI助手”,跑通了再升级成独立的“对话工作台”,最后加入Agent能力成为自动化工具。别一上来就搞全套,建议按业务需求逐步演化。我的项目就从独立对话工作台开始切入,因为最容易验证API调用和流式通信链路,等链路稳了再反哺到业务页面上。
3. 今天实操的核心:封装一个可靠的流式请求模块
3.1 为什么流式输出是硬需求
今天花时间最多的是流式输出的实现。Streaming Response(流式返回)已经成为AI应用的标配,原因很简单:大模型的生成需要时间,如果让用户干等几秒甚至十几秒再看到全部内容,体验会非常差。而流式返回可以边生成边显示,配合打字机效果,用户的等待焦虑会降低很多。 所以“打字机效果”不只是视觉效果,它实际上是对用户感知的一种优化。
如果你现在去翻“前端WebSocket怎么用”“AI应用开发”相关的教程,大概率都绕不开这个话题。从使用场景看,有两种主流方案:一是通过SSE(Server-Sent Events)接收大模型流式输出,二是通过WebSocket建立全双工通道。如果是纯聊天机器人场景,SSE就够用;如果你的应用需要支持用户与AI之间多轮工具调用、实时状态反馈,那WebSocket更合适。
3.2 从fetch到SSE,代码到底怎么组织
我用的是SSE方案,基于原生fetch实现,没有额外引库。整体上就是这么做的:
javascript复制// src/utils/streamChat.js
export async function streamChat({ messages, onMessage, onDone, onError, signal }) {
try {
const response = await fetch('/api/chat', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ messages }),
signal,
});
if (!response.ok) {
throw new Error(`HTTP ${response.status}`);
}
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');
let buffer = '';
while (true) {
const { done, value } = await reader.read();
if (done) break;
buffer += decoder.decode(value, { stream: true });
// 按换行符切分 SSE 数据块
const lines = buffer.split('\n');
buffer = lines.pop(); // 保留最后不完整的部分
for (const line of lines) {
const trimmed = line.trim();
if (!trimmed.startsWith('data:')) continue;
const data = trimmed.slice(5).trim();
if (data === '[DONE]') {
onDone && onDone();
return;
}
try {
const json = JSON.parse(data);
onMessage && onMessage(json);
} catch (err) {
console.warn('解析消息失败:', data, err);
}
}
}
} catch (err) {
if (err.name === 'AbortError') {
console.log('请求被用户中止');
} else {
onError && onError(err);
}
}
}
这段代码看着简单,但有几个细节需要特别提醒:
- 不要用response.json()。流式接口的响应体是持续写入的,一次性解析拿不到完整内容。
- 用TextDecoder的stream参数。如果不传
{ stream: true },中文字符在多字节边界时会被拆开导致乱码。这个坑我第一天就踩了,今天专门验证了正确写法。 - 必须处理buffer。网络包大小不确定,一个data块可能被拆成两次到达,也可能多个data块一次到达。用一个buffer逐行解析是通用做法。
3.3 加入中止控制器和心跳机制
用户点“停止生成”这个按钮,在交互上看似简单,实现时却要处理fetch的中止。我用的是AbortController:
javascript复制// 在组件中
const controller = new AbortController();
await streamChat({
messages: history,
signal: controller.signal,
onMessage: (data) => appendMessage(data),
onDone: () => setGenerating(false),
onError: (err) => setError(err.message),
});
// 停止按钮事件
function handleStop() {
controller.abort();
setGenerating(false);
}
如果你是前后端联调,还要约定一个问题:后端在客户端断开连接后,是否还能及时停止大模型继续生成?如果后端没做“断开即停止”的机制,即使用户点了停止,后端可能还在消耗算力。这个属于联调层面的内容,我确认过项目后端的处理方式是监听请求上下文取消事件,这块前后端要对齐。
3.4 要不要直接上WebSocket
当应用演进到Agent形态,双向通信需求会变大。前端要实时上报用户在界面上的操作事件,后端要主动推送任务状态变化,这时候WebSocket就比SSE更合适。
以“AI辅助写作”为例:用户选中一段文字,前端通过WebSocket发送“润色请求”,后端处理完推送“润色结果”,同时模型推理过程中还推送“分步状态”。这些都关在一个连接里,通信开销小很多。
我写了一个极简WebSocket封装思路:
javascript复制class AIWebSocket {
constructor(url, { onOpen, onMessage, onClose, onError }) {
this.ws = new WebSocket(url);
this.ws.onopen = onOpen;
this.ws.onmessage = (event) => {
const data = JSON.parse(event.data);
onMessage && onMessage(data);
};
this.ws.onclose = onClose;
this.ws.onerror = onError;
}
send(payload) {
if (this.ws.readyState === WebSocket.OPEN) {
this.ws.send(JSON.stringify(payload));
} else {
console.warn('WebSocket未连接,消息发送失败');
}
}
close() {
this.ws.close();
}
}
这里的关键不只是“能够连接”,还要实现断线重连、心跳保活、消息id与回调映射。WebSocket连接不稳定时,没有重连机制的业务聊到一半就断线,体验非常差。心跳则用来探测假死连接:前端定时发送ping,超过阈值未收到pong就主动断开重连。
3.5 流式渲染时别直接操作DOM
有一个很容易犯的低级错误:收到流式消息后,用document.getElementById('content').innerHTML += delta的方式更新页面。在传统项目里还能跑,到了React、Vue这种响应式框架里,直接操作DOM会绕开框架的更新机制,轻则样式错乱,重则整个界面状态失控。
React项目中正确的做法是维护一个状态数组,把增量消息追加到数组里,再通过map渲染。Vue的话用ref数组,配合v-for渲染。状态更新频率高时,可以考虑批量合并到requestAnimationFrame里再setState,否则会一直触发重渲染,导致页面卡顿。我今天简单测试了一个3万字长文流式输出场景,不加节流时页面明显掉帧;加上节流后顺畅多了。
再补充一个性能细节:渲染长消息时,可能触发大量文本节点的Diff更新。可以把已经渲染过的内容放在一个单独的只读块里,新增的delta放在另一个块中,而不是每次都整体replace。结合“JSON.stringify前端性能优化”这个热搜词聊,大日志和大字符串频繁序列化本身也是一个需要优化的点,这个我改天单独展开。
4. 前端+AI工程的实战编码笔记
4.1 AI会话数据结构的核心设计
Day2在数据结构设计上做了一个较大的调整。最初我只把消息定义成一个数组,每个元素是{role: 'user', content: '你好'}。这样做demo可以,但要支持真正的AI产品形态,根本不够用。
我照搬了社区里沿用的OpenAI消息格式,项目里统一为:
javascript复制{
id: 'msg_xxx',
role: 'user' | 'assistant' | 'system' | 'tool',
content: [
{ type: 'text', text: '你好' },
{ type: 'image_url', image_url: { url: '...' } }
],
created_at: 1700000000000,
status: 'complete' | 'pending' | 'failed',
meta: {
model: 'gpt-4o',
tokens: 123,
latency_ms: 2000
}
}
content设计成数组而不是纯字符串,能天然支持文本+图片的混合消息。后端如果要执行工具调用,会返回一个tool类型的消息,里面包含tool_call_id和工具名,前端就能据此在界面上展示一个“调用了xx工具”的标签,点击还可以展开看细节。这个结构对后续做Agent工作台很关键。
后端返回的消息里如果自带usage(token用量),前端还可以做展示。比如显示“本次消耗xxx tokens”,让用户对成本有感知。这个细节在很多商业AI产品里都有,自己实现时很容易漏。
4.2 多轮对话中的上下文长度管理
上下文长度是一个绕不开的话题。对话越长,发送给大模型的tokens越多,费用越高,响应越慢。尤其到了后端接向量库做RAG的时候,超长上下文被截断后还会影响效果。
我现在在前端做的是两点:
- 滑动窗口截断。界面展示可以保留全部消息,但真正发给后端的,只保留最近N条关键消息(比如12条),把最早的非系统消息丢弃。
- 系统提示词单独存放。系统提示词不随用户滑动删除而消失,始终保持在消息列表的最前面。
我最初把这个逻辑放在前端来做,后来觉得不优雅。因为token计算需要依赖模型的分词器,前端很难精确判断“多少tokens”。最后跟前端配合的方式是:在前端仍发全量消息,后端在收到请求后按token上限做裁剪再转发给大模型,然后把实际使用量通过meta字段返回。这个方案对前端更友好,也避免前后端各算一套导致不一致。
4.3 前端如何管理多会话与历史记录
只支持单会话的AI应用基本没法用。用户需要翻看之前聊了什么,所以我在project里加了会话列表管理,也就是所谓“多会话”。
核心设计是:
- 用
sessionId作为维度,会话列表单独存一份,消息内容按会话维度存储。 - 切换会话时,请求对应会话的历史消息。
- 新会话未发送第一条内容前,不需要真正落库;用户发送那一刻,再创建正式的会话记录。
项目使用localStorage做了雏形,但直接存消息数组会很快暴涨,而且不适合多个标签页同步。更稳的做法是把已完成的会话历史交给后端存数据库,前端只保留当前会话的一份草稿。历史记录做成懒加载——只渲染当前会话的消息列表,其他会话只渲染标题列表,等用户点击切换时再拉取详情。
4.4 状态管理选型总结
我做过对比:用Redux管理AI对话状态太重了,每次消息增量更新都要触发很多无关组件重渲染。用Zustand则轻巧很多,可以在store里只管理会话列表和当前会话消息引用,增量更新当前消息内容时,只让消息区组件订阅更新,不会全页面刷新。
一个简洁的思路是在全局store放“当前会话ID”“当前消息ID数组”,具体消息文本存本地组件state。更新增量时,通过消息ID查找并更新对应组件的内部状态。项目用的是Zustand,写起来确实比Redux省心不少。Vue用户则可以直接绕开Vuex/Pinia,用组件的ref配合watch就够支撑需求了。
5. 辅助开发的AI工具链体验笔记
5.1 IDE的AI补全与代码生成体验
既然做AI项目,开发过程本身也要AI化才算闭环。今天实际体验了GitHub Copilot、Cursor等AI编程工具,聚焦在“前端项目里效率提升最多的场景”:
- 生成重复性组件(Table、Form、Dialog)
- 前端TypeScript类型定义转换
- 根据注释生成CSS布局
- 编写单元测试骨架
说实话,AI补全在写独立函数和样板代码时非常好用。比如我想快速生成一个“防抖函数”,只需要在注释里写清楚功能,AI给的代码基本可以直接用。但对业务复杂的代码,AI经常一本正经地“幻觉”,尤其是涉及具体业务状态流转、后端接口字段时,给出的代码经常需要大改。
5.2 用AI辅助排查前端Bug
为了写这篇笔记,我专门演示了一个“AI辅助排查Bug”场景。代码如下:
javascript复制function formatTime(ts) {
const date = new Date(ts);
return `${date.getFullYear()}-${date.getMonth()}-${date.getDate()}`;
}
这个函数很容易输出“2025-5-7”这种月份不带前导零的结果。我把代码和“输出月份的位数不对”一起喂给AI,它能明确指出getMonth()从0开始且未补零的问题。但当我再问“在这个项目里如何改动影响面最小”时,AI给的建议明显泛泛,还是需要自己结合工程上下文去决策。
所以我的结论是:AI辅助编程适合做“表达层面的脚手架”,不适合直接做“架构决策”。你要是把技术选型和模块边界直接甩给AI,大概率会得到一个貌似合理、但落地全是坑的方案。
5.3 AI生成前端页面时的提示词技巧
既然热搜词里反复出现“ai编程提示词”,这里就把提示词经验写一下。
我给你举个直观对比:
不推荐写法:
code复制用React写一个登录页
推荐写法:
code复制用React + TypeScript写一个登录页组件,包含用户名、密码输入框、
登录按钮和错误提示区域。用户名要求非空,密码长度大于6位,
点击登录按钮后调用login函数,正在登录时按钮显示loading状态并禁用。
样式使用CSS Modules,风格简洁,输入框有label标签。
一个合格代码提示词至少要包含:技术栈、组件功能点、交互细节、状态要求、样式方案。把这个想清楚之后,你会发现AI生成代码的可用率提高很多。
6. 今天实际踩过的坑和避坑心得
6.1 JSON字符串解析失败
今天在接收后端流式消息时,踩了个挺隐蔽的坑。后端返回的data数据偶尔会带注释或多余字符,导致JSON.parse直接抛错。后来和做后端的同事核对才发现,他们本地调试时在JSON里临时加了注释,联调忘了删。
经验就是:前端解析流式数据时一定要包一层try/catch,解析失败最多丢弃当前这条消息,不能因为一条脏数据把整个会话流中断掉。这在所有JSON格式数据接收场景都适用。
6.2 字段叫content却返回了数组
前后端联调最容易吵架的就是字段结构不一致。后端文档写着content是字符串,实际某个接口返回的却是数组。这种问题自己写代码时很难发现,因为单独调页面一次可能没触发数组分支,一旦触发就报错。
规避方式很简单:前端定义类型后,一定要对接口返回做运行时校验或至少console.log一次打印。很多同学喜欢把接口数据一传到组件里就直接用,等报错再排查,效率很低。做一个简单的dev环境数据预览面板,把原始数据打印出来,联调效率能翻倍。
6.3 多行输入框的提交时机
AI产品里输入框通常需要支持“Enter发送、Shift+Enter换行”。实现时要注意同时兼容中文输入法。输入法在选字过程中按Enter是“确认候选词”,这时候不应该触发发送。解决方法是监听compositionstart和compositionend事件,如果当前在拼音组词阶段,就抑制发送逻辑。
6.4 渲染长文本时的卡顿
流式输出几千字时,如果没有做节流,页面会有明显卡顿。我对比了几种做法,最有效的思路是:
- 增量store的更新频率控制在每100-200ms一次,或者使用requestAnimationFrame合并。
- 渲染时使用CSS的
content-visibility: auto属性辅助跳过屏幕外的内容渲染。 - 消息列表较长时,虚拟滚动是终极解法。日志类内容不建议一次性渲染几千条DOM,用虚拟列表控住节点总量。
6.5 消息顺序乱掉
多路事件同时到达(比如工具调用结果和文本增量先后返回),偶尔出现消息顺序颠倒。排查后发现是没有针对消息ID做任务队列。统一的解法是维护一个消息序号,发送方给每条消息加一个自增id,前端对同类型消息按id排序后再渲染。把聊天内容和运行日志分开渲染,能进一步降低顺序错乱的影响。
7. 今天整理的前端AI化面试素材
7.1 面试中被问烂的“前端如何对接AI”
前端对接AI,考察点不只是fetch调用,而是:鉴权放在哪、流式怎么处理、消息结构怎么设计、取消怎么实现、错误怎么兜底。我把自己做项目的面试素材整理成了一张速查表:
| 技能点 | 核心要点 | 常见错误 |
|---|---|---|
| 流式输出 | SSE、fetch reader、TextDecoder | 直接用resp.json() |
| 中止请求 | AbortController | 忘记清理signal |
| 消息结构 | 角色/类型/内容数组/状态校验 | content只做字符串 |
| 多轮上下文 | 窗口截断/后端裁剪 | 全量发送导致超token |
| 格式化日期 | 月份补零、时区锚定 | 直接拼接getMonth() |
| 长消息渲染 | 节流、虚拟滚动 | 用innerHTML疯狂重绘 |
| 前后端联调 | 运行时打印、类型校验 | 类型假设与实际不符 |
7.2 面向2026的前端面试题预判
结合热搜词里“前端面试题2026”出现多次,我预判AI应用方向会越来越多出现在面试题里。出题趋势不再是背八股文,而是给一个具体场景,比如“请设计一个前端聊天组件并保证长消息不卡顿”“如何在前端实现取消一个正在请求的AI任务”“大模型返回的Markdown如何安全渲染”等。
这些题目背后考察的是对异步流程、性能优化、组件设计、跨端通信的综合能力。单靠刷题是不够的,必须亲手做一次AI项目才会理解这些细节。我的建议是:准备一个自己写的AI小应用放到简历上,比背一百道题都管用。
我整理几道模拟题,平时可以拿来自测:
- 如何用fetch实现一个带终止功能的SSE客户端?
- 大模型流式输出时,如何保证中文字符不乱码?
- 如果后端只提供一个WebSocket接口,前端如何设计消息协议来支撑聊天、工具调用和状态推送?
- 请设计一个适合AI对话的长列表虚拟滚动方案,并考虑流式新增消息时底部如何自动跟随?
7.3 对“纯八股”时代的个人看法
前几年流行的“前端八股文”——闭包、原型链、事件循环——当然还有用,这些基础知识能在处理复杂前端的异步问题时派上用场。但面试风向正在从“考察知识点记忆”转向“考察问题解决能力”。尤其当AI辅助编程能够自动生成大部分基础代码时,工程师还能不能读懂代码、调优性能、解决边界问题,就成了区分度所在。
我在项目中使用AI生成代码之后,一直在强迫自己追问“它为什么这么写”。久而久之对代码的敏感度反而提升了。这个过程可能才是AI时代前端工程师最值得培养的习惯。
8. 给想转前端+AI方向的同学的实操建议
8.1 一周内就能上手的学习路线
如果你刚开始接触这个方向,别一上来就看各种大而全的教程。我建议按下面的路线,快速建立起“能跑通的完整链路”:
- 先申请一个主流大模型的API,很多都有免费额度。
- 用纯前端写一个极简聊天页,直接调用后端转发接口,先不做流式,跑通一轮完整的问答。
- 把普通请求改为流式请求,实现打字机效果和控制中止。
- 增加多轮对话的消息列表与会话切换,引入会话隔离的存储方案。
- 根据业务数据接入知识库或其他工具扩展,试着做一个业务问答场景。
这个过程大概一周能走完,走完以后你会对整体架构有个非常踏实的体感,而不是徘徊在“看了很多资料但写不出代码”的状态。
8.2 推荐直接从哪些工具和资料入手
聊到工具,我先推荐几个起步阶段的“标配”:Node.js(做接口转发调试用)、Vite(做前端开发服务器)、Tailwind或者CSS Modules(快速搭界面)、Zustand(状态管理)、React或Vue任选一个熟悉框架即可。不用在框架选型上内耗太多,关键是跑起来。
接口调试推荐Apifox或Postman,尤其是SSE协议,最好用支持Event Stream预览的工具。
资料方面,优先看两大块:一是主流大模型的API官方文档,重点看“Streaming”和“Message”两块;二是社区里前端AI项目相关的源码,GitHub上搜“chatgpt-like-app”能搜出一堆高星项目,值得逐个拆解。
8.3 个人心得:前端深度比广度更重要
这个项目进入第二天以后,我最大的感悟是:AI时代的前端,深度比广度更重要。你不需要今天追一个低代码平台,明天追一个RPA工具,而是要在一两个核心方向做到极致。
如果你能把“流式通信”“长文本渲染”“Agent交互设计”这几个问题吃透,不管产品形态怎么变,你都能很快上手。反观那些什么框架都用过一点,但没有深挖过核心问题的人,在AI应用开发里反而容易寸步难行。
8.4 这套能力未来还能延伸到哪些方向
前端+AI的技术栈并不仅限于聊天机器人,它还适用于:AI辅助办公(文档生成、表格分析)、企业知识库问答、教育培训的智能学伴、电商客服、工业数据可视化问答等场景。本质上,只要用户需要“通过界面跟智能体高效沟通、拿到可靠结果”,前端就依然是枢纽。
从长期看,前端开发者如果能补齐对AI交互范式的理解(消息流、状态反馈、多轮协作),会比只懂CSS和JS的工程师更有竞争力。这个方向还处在早期,现在多投入一点,未来就是红利。
今天从早上的接口调试到下午的组件封装,再到晚上把这些内容整理成笔记,一整天下来收获非常实在。前端+AI项目目前走到的进度还算顺利,下一步我计划把Agent工具调用和前端运行日志面板完善起来,继续记录这类应用的实战细节。
