Next.js + AI-SDK + DeepSeek:3 分钟建设属于你的 AI 问答 Demo

作者:leongaooo | 计算机科学家 (出来混,身份都是自己给的) 日期:2025-09-21


目录

  1. 缘起:三件法宝
  2. 底层原理解读
  3. 极速搭建:实战代码
  4. 幕后故事:代码里的"灵魂对话"
  5. 进阶思考

缘起:三件法宝

  • Next.js:前端 SSR/CSR 混合魔法师。
  • AI-SDK:AI 交互的"红娘",让你与模型对话像喝茶一样轻松。
  • DeepSeek:国产大模型,聪明又便宜,支持流式推理。

底层原理解读

1. Next.js 的渲染机制

  • SSR(服务器端渲染):服务端"炒菜",浏览器"吃饭"。
  • CSR(客户端渲染):浏览器自助餐,交互流畅。

2. AI-SDK 的消息流与模型交互

  • 消息会被序列化为 Token(就像把句子拆成拼音)。
  • "流式响应"让答案像流水一样边想边发,体验更丝滑。

3. DeepSeek 的推理方式

  • 输入经过分词,映射到高维空间。
  • Transformer 网络结构,"自注意力"机制让模型像一群哲学家讨论,最终给出一个"群体智慧"的答案。
  • 流式输出,边想边说,像相声演员即兴表演。

极速搭建:实战代码

依赖安装

先装好三兄弟:

bash 复制代码
npm install next @ai-sdk/deepseek @ai-sdk/react ai

服务端 API 路由(app/api/chat/route.ts)

文件路径:app/api/chat/route.ts

用于处理前端发来的消息,实现流式 AI 响应。

typescript 复制代码
import { createDeepSeek } from '@ai-sdk/deepseek';
import { streamText, convertToModelMessages } from 'ai';
import type { UIMessage } from 'ai';

const deepseek = createDeepSeek({
  apiKey: process.env.DEEPSEEK_API_KEY ?? '',
});

// 允许最多 30 秒流式回复
export const maxDuration = 30;

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

  // "人类发问,AI应答"的灵魂对话
  const result = streamText({
    model: deepseek('deepseek-chat'),
    messages: convertToModelMessages(messages),
  });

  return result.toUIMessageStreamResponse();
}

客户端 Chat 组件(app/chat/page.tsx)

文件路径:app/chat/page.tsx

实现问答 UI,支持流式显示 AI 回复。

typescript 复制代码
"use client";

import { useChat } from "@ai-sdk/react";
import { useState } from "react";

export default function Chat() {
  const [input, setInput] = useState("");
  const { messages, sendMessage } = useChat();

  return (
    <div className="stretch mx-auto flex w-full max-w-md flex-col py-24">
      {messages.map((message) => (
        <div key={message.id} className="whitespace-pre-wrap">
          {message.role === "user" ? "User: " : "AI: "}
          {message.parts.map((part, i) => {
            switch (part.type) {
              case "text":
                return <div key={`${message.id}-${i}`}>{part.text}</div>;
            }
          })}
        </div>
      ))}

      <form
        onSubmit={(e) => {
          e.preventDefault();
          sendMessage({ text: input });
          setInput("");
        }}
      >
        <input
          className="fixed bottom-0 mb-8 w-full max-w-md rounded border border-zinc-300 p-2 shadow-xl dark:border-zinc-800 dark:bg-zinc-900"
          value={input}
          placeholder="Say something..."
          onChange={(e) => setInput(e.currentTarget.value)}
        />
      </form>
    </div>
  );
}

环境变量配置

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

ini 复制代码
DEEPSEEK_API_KEY=你的_deepseek_api_key

目录结构简要

lua 复制代码
your-project/
├── app/
│   ├── api/
│   │   └── chat/
│   │       └── route.ts
│   └── chat/
│       └── page.tsx
├── .env.local
├── package.json
└── ...

幕后故事:代码里的"灵魂对话"

  • 你输入问题,像在黑夜里向宇宙喊话;
  • 前端把你的"呐喊"送到后端,"信使"忠诚可靠;
  • 后端用 AI-SDK 去敲 DeepSeek 的"智慧之门",请求答案;
  • DeepSeek 模型像一群小脑袋风暴思考,边想边说,流式输出;
  • 最后,答案如诗如歌,实时呈现。

进阶思考

  • 可扩展为多模态问答,加图片、语音,体验更丰富;
  • 用向量数据库增强上下文,"AI记住你每一句话";
  • 接入 WebSocket,实现边打字边回复,"实时灵感碰撞";
  • 模型推理其实就是大量"加权平均",每个"虚拟脑细胞"都有自己的小意见,最终合力成答案。

结语

三分钟,Next.js + AI-SDK + DeepSeek,自己的 AI 问答 Demo"闪现"上线。

愿你在代码的世界里,既能仰望星空,也能脚踏实地,偶尔还能和 AI 一起吐槽生活!

"代码如诗,AI如梦。Demo虽小,世界很大。"

相关推荐
GISer_Jing2 小时前
两种AI交互方式深度解析——浏览器书签&插件
前端·人工智能·ai·prompt
哈__2 小时前
ReactNative项目OpenHarmony三方库集成实战:react-native-device-info
javascript·react native·react.js
前端布鲁伊2 小时前
零代码上线一个图片处理网站,我是如何使唤AI干活的?
前端·ai编程
庄小焱2 小时前
React——React基础语法(2)
前端·javascript·react.js
终端鹿2 小时前
Vue3 核心 API 深度解析:ref / reactive / computed / watch
前端·javascript·vue.js
console.log('npc')2 小时前
partial在react接口定义中是什么意思
前端·javascript·typescript
SuperEugene2 小时前
前端 utils 工具函数规范:拆分 / 命名 / 复用全指南,避开全局污染等高频坑|编码语法规范篇
开发语言·前端·javascript
C澒2 小时前
微前端容器标准化 —— 公共能力篇:通用请求
前端·架构
llxxyy卢2 小时前
web部分中等题目
android·前端