头图

一、前言

GPT-5.5 时,遇到的核心问题不是 API 怎么调,而是前后端分离架构下,流式输出怎么透传、鉴权怎么不把 Key 暴露到前端、以及整个 AI 模块怎么和现有业务代码解耦。以下是把这套方案从 POC 推到生产的过程记录。


Q:前后端分离项目里,GPT-5.5 怎么集成才干净?

A:四个关键决策,逐一拆解


二、整体架构:AI 模块独立部署

不要把 GPT-5.5 调用逻辑散落在各个业务 Controller 里。两个月后再看代码,你会想杀了当时的自己。

推荐的架构分层:

前端(React/Vue)
    ↓ HTTP/SSE
BFF 层(Node.js / Java Gateway)
    ↓ gRPC / HTTP
AI 服务(独立微服务模块)
    ↓ HTTPS
GPT-5.5 API

核心决策:AI 调用收敛到一个独立服务。 BFF 层负责鉴权和请求路由,AI 服务专注做模型调用、流式转发、结果缓存。好处是 API Key 只存在于 AI 服务的内存中,前端永远接触不到。


三、后端:流式透传通道

GPT-5.5 的流式走 SSE,前端也是 EventSource 消费。中间这层 AI 服务要做的就是“透传”——把 GPT-5.5 的响应拆开,再以 SSE 格式推给前端,不能等全部生成完再一次性返回。

@GetMapping(value = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<ServerSentEvent<String>> chatStream(@RequestParam String query) {
    ChatRequest request = buildRequest(query);
    
    return webClient.post()
            .uri("/chat/completions")
            .bodyValue(request)
            .accept(MediaType.TEXT_EVENT_STREAM)
            .retrieve()
            .bodyToFlux(String.class)
            .filter(line -> line.startsWith("data: "))
            .map(line -> line.substring(6))
            .filter(data -> !"[DONE]".equals(data))
            .map(this::extractContent)
            .map(content -> ServerSentEvent.<String>builder()
                    .data(content)
                    .build());
}

关键细节: produces = MediaType.TEXT_EVENT_STREAM_VALUE 这个 Content-Type 不设,前端 EventSource 直接不认,只表现为请求 pending 无响应。这个坑排了一个下午。


四、前端:EventSource 消费与中断

const useGPTStream = (query) => {
    const [output, setOutput] = useState('');
    const abortRef = useRef(null);

    const startStream = () => {
        const token = getAuthToken();  // 走自己的鉴权
        const url = `/api/ai/chat/stream?query=${encodeURIComponent(query)}`;
        
        const eventSource = new EventSource(url, {
            headers: { 'Authorization': `Bearer ${token}` }
        });
        abortRef.current = () => eventSource.close();

        eventSource.onmessage = (event) => {
            setOutput(prev => prev + event.data);
        };
        eventSource.onerror = () => eventSource.close();
    };

    const stopStream = () => abortRef.current?.();

    return { output, startStream, stopStream };
};

安全设计的核心: GPT-5.5 的 API Key 不出现在前端代码里。前端拿自己的业务 Token 调 BFF 层,BFF 层验证身份后再去调 AI 服务。Key 泄露的风险被限制在服务端内部。


五、鉴权链路:API Key 不落地

层级持有信息职责
前端用户业务 Token用户身份验证
BFF 层无 Key,只有路由配置鉴权 + 转发
AI 服务GPT-5.5 API Key模型调用
环境变量Key 密文注入 AI 服务容器

额外建议: 生产环境用 Vault 或 K8s Secrets 管理 Key,CI/CD 流程里禁止日志打印请求头。GPT-5.5 的请求头里 Authorization 是明文的,日志一打等于 Key 全网可见。


六、流式 vs 同步:前后端分离场景下的选择

场景推荐方案原因
对话类功能流式透传用户体验是核心,首字节时间决定感知
后台批量处理同步 + 异步任务不需要实时反馈,走消息队列削峰
代码生成辅助流式逐字输出符合用户预期
数据提取/分类同步等完整结果再做下一步处理

实测数据(GPT-5.5 vs GPT-4o 流式 TTFB):

模型TTFB 中位数P99
GPT-4o1.1s3.2s
GPT-5.50.6s1.7s

GPT-5.5 的 TTFB 稳定性好一个档次。前端打字机效果最怕的不是慢,是时快时慢。波动小,体验就稳。


七、避坑清单

  1. 前端直调 GPT-5.5 API。 Key 暴露到浏览器,几分钟内被扒走。一定走 BFF 层中转。
  2. EventSource 不支持自定义请求头。 标准 EventSource API 只能发 Cookie,没法带 Authorization。用 fetch + ReadableStream 替代,或者走 polyfill。
  3. 服务端不设超时。 GPT-5.5 的长回答场景,Nginx 默认 60s 超时直接断开 SSE 连接。配置 proxy_read_timeout 120s
  4. 流式响应不做错误格式包装。 GPT-5.5 偶尔返回非标准 chunk,前端 JSON.parse 直接抛异常导致流中断。加 try-catch 并做空值兜底。
  5. AI 服务不做限流。 前端可以无限触发请求,一个用户开了 10 个窗口同时调,配额瞬间打满。AI 服务层必须做用户级 QPS 限制。

八、小结

前后端分离场景下接 GPT-5.5,代码量最大的是中间的透传层和鉴权链路。模型本身的接口已经很标准了,工程化的难点在架构设计:Key 放哪里、流怎么透传、谁负责限流、异常怎么收敛。 这四个问题答案清楚了,代码写起来反而快。


架构方案基于 Spring Boot 3.2 + React 18 + GPT-5.5 API(2026 年 6 月)生产环境运行验证。