前端人福音:用Next.js + 147api快速复刻一个ChatGPT官网(附源码)

4 阅读3分钟

作为前端开发者,2026年最酷的事情莫过于自己手搓一个AI应用。

不管是想做个套壳站赚点零花钱,还是想给公司内部搭个ChatGPT镜像,最大的拦路虎往往不是前端UI(毕竟有shadcn/ui),而是后端的API接入

直接在前端请求OpenAI?跨域(CORS)教你做人,API Key暴露更是大忌。用Node.js做反代?服务器维护成本太高。

今天教大家一个纯前端的方案:Next.js (App Router) + 147api

不需要买服务器,不需要搞Nginx,直接部署在Vercel上,一行后端代码都不用写,还能享受到官方5折的API价格。

为什么选 147api 而不是直连?

在前端项目中,直连OpenAI有三个致命伤:

  1. 网络不通:Vercel的Edge Function虽然能访问外网,但连接OpenAI极其不稳定。
  2. 风控:OpenAI对Vercel的IP段查得很严,经常403。
  3. :GPT-4o跑起来,信用卡受不了。

147api 完美解决了这些问题:

  • 国内优化:自带专线,延迟极低,Stream流式输出飞快。
  • 兼容性:完全兼容OpenAI SDK,改个 baseURL 就能用。
  • 成本:价格只有官方的一半,支持支付宝充值。

实战步骤

1. 初始化项目

npx create-next-app@latest my-chatgpt --typescript --tailwind --eslint
cd my-chatgpt
npm install openai ai

2. 配置环境变量

在项目根目录创建 .env.local

# 你的 147api Key
OPENAI_API_KEY=sk-147api-xxxxxxxxxxxxxxxx
# 147api 的 Base URL (关键!)
OPENAI_BASE_URL=https://api.147api.com/v1

3. 实现后端 API Route (App Router)

app/api/chat/route.ts 中写入:

import { OpenAI } from 'openai';
import { OpenAIStream, StreamingTextResponse } from 'ai';

// 初始化 OpenAI 客户端,自动读取环境变量中的 BASE_URL
const openai = new OpenAI({
  apiKey: process.env.OPENAI_API_KEY,
  baseURL: process.env.OPENAI_BASE_URL, // 这里会自动指向 147api
});

export const runtime = 'edge'; // 使用 Edge Runtime

export async function POST(req: Request) {
  const { messages } = await req.json();

  // 调用 GPT-4o
  const response = await openai.chat.completions.create({
    model: 'gpt-4-turbo', // 147api 支持所有主流模型
    stream: true,
    messages,
  });

  // 将响应转换为流
  const stream = OpenAIStream(response);
  return new StreamingTextResponse(stream);
}

4. 实现前端 UI

app/page.tsx 中:

'use client';

import { useChat } from 'ai/react';

export default function Chat() {
  const { messages, input, handleInputChange, handleSubmit } = useChat();

  return (
    <div className="flex flex-col w-full max-w-md py-24 mx-auto stretch">
      {messages.map(m => (
        <div key={m.id} className="whitespace-pre-wrap">
          {m.role === 'user' ? 'User: ' : 'AI: '}
          {m.content}
        </div>
      ))}

      <form onSubmit={handleSubmit}>
        <input
          className="fixed bottom-0 w-full max-w-md p-2 mb-8 border border-gray-300 rounded shadow-xl"
          value={input}
          placeholder="Say something..."
          onChange={handleInputChange}
        />
      </form>
    </div>
  );
}

5. 竞品对比:为什么不用 OpenRouter?

我在开发过程中也试过OpenRouter和硅基流动:

  • OpenRouter:模型确实多,但因为服务器在国外,配合Vercel使用时,延迟感人,有时候前端都loading半天了后端还没响应。
  • 硅基流动:跑DeepSeek很爽,但想用GPT-4或者Claude 3.5时就没办法了,模型支持不够全。
  • 147api:最均衡。既有专线低延迟,又全模型覆盖,关键是便宜

总结

通过 Next.js + 147api,我们用不到100行代码就实现了一个功能完备的AI聊天应用。

对于前端开发者来说,选择一个兼容性好、速度快、价格低的API中转平台,能让你少操很多心,把精力集中在交互体验上。