讲师中心 微信公众号
AI工具推荐 视频效率加速

DeepSeek与Next.js全栈AI应用的开发教程

大明吖_7982

大明吖_7982

发布时间:2026-05-25 13:51:33

|

391人浏览过

|

来源于php中文网

原创

useChat 不能直接连接 DeepSeek,因其依赖 OpenAI 兼容接口,而 DeepSeek API 在认证头、模型名、字段支持等方面存在差异;需在 app/api/chat/route.ts 中手动适配请求与响应格式,并禁用流式以避免双流冲突。

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

deepseek与next.js全栈ai应用的开发教程

useChat 是你在 Next.js App Router 里对接 DeepSeek 最直接的入口,但直接调用它会失败——因为 useChat 默认只认 /api/chat 这个路由,而 DeepSeek 的 API 不是标准 OpenAI 兼容接口,必须自己写适配层。


useChat 为什么不能直接连 DeepSeek

useChat 是 Vercel AI SDK 提供的 React Hook,它内部依赖一个符合 OpenAI Chat Completion API 格式的后端接口。DeepSeek 的官方 API(如 <a href="https://www.php.cn/link/a4fe3e4de8ad631acb028b271b1fc271">https://www.php.cn/link/a4fe3e4de8ad631acb028b271b1fc271</a>)虽然结构接近,但存在几处关键差异:

  • 请求头必须带 Authorization: Bearer <deepseek_api_key></deepseek_api_key>,不能复用 OpenAI 的 api-key 字段名
  • model 字段值必须是 deepseek-chat 或 deepseek-r1,不是 gpt-4 类命名
  • 某些字段如 response_format、tool_choice 不被支持,传了会报错 400 Bad Request
  • 流式响应的 data: 块格式一致,但非流式响应的 choices[0].message.content 路径是通的

你如果直接在 app/api/chat/route.ts 里转发请求却不做字段清洗,前端就会卡在 isLoading 状态,控制台看不到错误,但 Network 面板里能看到 400。


如何写一个兼容 useChat 的 DeepSeek 路由

你需要在 app/api/chat/route.ts(注意路径必须叫 chat)里手动构造请求,并把 DeepSeek 响应转成 OpenAI 兼容格式:

  • 使用 fetch 发起 POST 请求到 <a href="https://www.php.cn/link/a4fe3e4de8ad631acb028b271b1fc271">https://www.php.cn/link/a4fe3e4de8ad631acb028b271b1fc271</a>
  • 把 req.json() 拿到的原始 body 中的 messages、model、temperature 等字段原样透传,但过滤掉 DeepSeek 不认的字段(比如 response_format)
  • 设置 headers:{"Content-Type": "application/json", "Authorization": <code>Bearer ${process.env.DEEPSEEK_API_KEY}}
  • 对响应做简单转换:提取 choices[0].message.content,包装成 { id, object, created, model, choices: [...] } 结构
export async function POST(req: Request) {
  const { messages, model = 'deepseek-chat', temperature = 0.7 } = await req.json();
<p>const response = await fetch('<a href="https://www.php.cn/link/a4fe3e4de8ad631acb028b271b1fc271">https://www.php.cn/link/a4fe3e4de8ad631acb028b271b1fc271</a>', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Authorization': <code>Bearer ${process.env.DEEPSEEK_API_KEY}</code>,
},
body: JSON.stringify({
messages,
model,
temperature,
// 不要加 stream: true —— useChat 自己处理流式,后端统一走非流式即可
}),
});</p><p>const data = await response.json();</p><div class="aritcle_card flexRow">
                                                        <div class="artcardd flexRow">
                                                                <a class="aritcle_card_img" href="/xiazai/skill8483" title="dmap-jsapi-skill"><img
                                                                                src="https://img.php.cn/upload/skill/000/000/081/179206214475645.jpg" alt="dmap-jsapi-skill"  onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
                                                                <div class="aritcle_card_info flexColumn">
                                                                        <a href="/xiazai/skill8483" title="dmap-jsapi-skill">dmap-jsapi-skill</a>
                                                                        <p>DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。</p>
                                                                </div>
                                                                <a href="/xiazai/skill8483" title="dmap-jsapi-skill" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a>
                                                        </div>
                                                </div><p>return Response.json({
id: data.id || Date.now().toString(),
object: 'chat.completion',
created: data.created || Math.floor(Date.now() / 1000),
model: data.model || model,
choices: [{
index: 0,
message: { role: 'assistant', content: data.choices?.[0]?.message?.content || '' },
finish_reason: data.choices?.[0]?.finish_reason || 'stop',
}],
});
}</p>

⚠️ 注意:不要在后端开启 stream: true。Vercel AI SDK 的 useChat 会自动发起带 text/event-stream 的请求并解析 SSE;你若在 route.ts 里也用流式响应,容易出现双流嵌套、解码失败或连接中断。


useChat 前端页面怎么写才不踩坑

app/chat/page.tsx 必须标记 'use client',且不能混用服务端组件逻辑:

  • input 和 messages 状态交给 useChat 管理,别自己用 useState 同步
  • handleSubmit 直接调用 handleSubmit(来自 useChat 返回值),不要手动 fetch
  • 如果想加 loading 效果,用 isLoading,不是靠 status === 'pending'
  • 消息列表渲染时,确保每个 message 的 role 是 'user' 或 'assistant',DeepSeek 返回的 role 是对的,不用改
'use client';
import { useChat } from '@ai-sdk/react';
<p>export default function Chat() {
const { messages, input, handleInputChange, handleSubmit, isLoading } = useChat();</p><p>return (</p><div><form onSubmit={handleSubmit}><input
          value={input}
          onChange={handleInputChange}
          disabled={isLoading}
        /><button type="submit" disabled={isLoading}>
          {isLoading ? '...' : 'Send'}
        </button></form><pre class='brush:php;toolbar:false;'>  <div>
    {messages.map(m => (
      <div key={m.id}>{m.role}: {m.content}</div>
    ))}
  </div>
</div>

); }


环境变量和部署时最容易漏的三件事

  • .env.local 里必须定义 DEEPSEEK_API_KEY,Next.js App Router 默认不注入环境变量到客户端,但 route.ts 可以读取
  • Vercel 部署时,要在项目 Settings → Environment Variables 里手动添加同名变量,否则线上 500
  • 本地开发若用 npm run dev,确保 Node 版本 ≥ 18.17,低版本下 fetch 在 route.ts 中可能返回 undefined 而不是 Promise

真正卡住人的往往不是模型调用本身,而是 OpenAI 兼容层那几行字段映射逻辑,以及环境变量在不同运行时的可见性边界。

热门AI工具

更多
豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

LibLibAI
LibLibAI Hot

一款AI视频创作工具,主要用于国内领先的AI创意平台,以海量模型、低门槛操作与“创作-分享-商业化”生态,让小白与专业创作者都能高效实现图文乃至视频创意表达,适合需要提升相关任务效率的用户。

UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

Loomy
Loomy Hot

一款AI工具,主要用于科大讯飞发布的桌面级 AI 助理,比 OpenClaw 更易用、更安全!,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

更多
DeepSeek官方入口
DeepSeek官方入口

DeepSeek,一个综合性的搜索引擎,提供来自学术数据库、新闻网站和社交媒体的广泛结果。访问 DeepSeek 的官方网站。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

39249

2025.02.17

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

1149

2026.02.27

DeepSeek 入门与快速上手指南
DeepSeek 入门与快速上手指南

面向 AI 工具新手,从 DeepSeek 的账号注册、网页端与客户端使用讲起,介绍 DeepSeek-V3、DeepSeek-R1 等模型的能力定位与选择建议、对话提示词(Prompt)编写技巧、深度思考模式与联网搜索功能的使用场景、API Key 申请与首次接口调用流程,帮助用户快速上手 DeepSeek 并将其融入日常工作与学习。

2309

2026.05.12

DeepSeek API开发与应用集成教程合集
DeepSeek API开发与应用集成教程合集

系统讲解 DeepSeek 开放平台 API 的开发与集成方法,涵盖 API Key 鉴权与请求签名、Chat Completions 接口参数详解(temperature/top_p/max_tokens)、多轮对话上下文管理、流式输出(SSE Streaming)的前后端实现、Function Call 函数调用与外部工具对接、Embeddings 文本向量接口的使用、Python requests / openai SDK / J

371

2026.05.12

DeepSeek 提示词工程与高效使用教程合集
DeepSeek 提示词工程与高效使用教程合集

聚焦如何通过提示词工程充分发挥 DeepSeek 的能力上限,涵盖基础 Prompt 结构(角色/任务/格式/约束)设计、System Prompt 系统指令的最佳实践、Few-shot 示例引导与 Zero-shot 直接提问的场景选择、思维链(Chain of Thought)逐步推理引导、复杂任务的分步拆解策略、输出格式控制(JSON/Markdown/表格)、避免幻觉与提升准确率的约束技巧、DeepSeek-R1 深度推理模式的

447

2026.05.12

DeepSeek本地部署与私有化方案
DeepSeek本地部署与私有化方案

面向有数据隐私需求的开发者与企业,讲解 DeepSeek 开源模型的本地化部署方案,涵盖 DeepSeek-R1 各蒸馏版本(1.5B/7B/8B/14B/32B/70B)的硬件需求与能力对比、Ollama 一键本地运行与模型管理、vLLM 高性能推理服务部署、llama.cpp 量化推理(GGUF 格式/Q4/Q8 量化)在消费级显卡上的实践、Hugging Face Transformers 加载与微调、Docker 容器化部署、多

322

2026.05.12

DeepSeek行业应用场景实战
DeepSeek行业应用场景实战

以实际业务场景为导向,展示 DeepSeek 在不同行业中的落地应用方案,涵盖代码开发辅助(代码生成/审查/重构/单元测试编写)、长文写作与内容创作(报告/文案/论文大纲)、Excel 数据分析与可视化建议、智能客服机器人搭建(意图识别/多轮对话/知识库检索)、RAG 检索增强生成实现企业知识库问答、合同与法律文本审查、教育领域个性化辅导,帮助用户将 DeepSeek 转化为切实的生产力工具。

492

2026.05.12

DeepSeek 与主流 AI 大模型对比评测
DeepSeek 与主流 AI 大模型对比评测

从多个维度对 DeepSeek 与市场主流大语言模型进行客观对比,涵盖模型参数规模与架构差异(MoE 混合专家架构)、中文理解与生成能力对比、英文与多语言表现、数学推理与代码能力基准评测(MMLU/HumanEval/GSM8K)、长文本处理与上下文窗口对比、API 定价与性价比分析、响应速度与并发能力、开源生态与私有化部署灵活性,帮助用户根据自身需求在 DeepSeek、ChatGPT、Claude、Gemini、Llama 等模型中

225

2026.05.12

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

0

2026.10.15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
腾讯元宝使用手册
腾讯元宝使用手册

共0课时 | 0人学习

DeepSeek手册
DeepSeek手册

共0课时 | 0人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn