新手友好!50 行代码封装 DeepSeek API,快速搭建 AI 对话网页

发布时间:2026/8/26 17:16:37

新手友好!50 行代码封装 DeepSeek API,快速搭建 AI 对话网页
新手友好50 行代码封装 DeepSeek API快速搭建 AI 对话网页新手友好50 行代码封装 DeepSeek API快速搭建 AI 对话网页一、最终效果二、为什么不用复杂框架三、准备工作四、50 行核心代码封装 DeepSeek 聊天接口五、前端页面输入消息并展示回复六、调用原理讲清楚1. 前端不能直接放 API Key2. messages 是什么3. 为什么项目里要保留 history4. DeepSeek 为什么能用 OpenAI SDK七、开源项目 JXL-AI 做了哪些增强八、总结新手友好50 行代码封装 DeepSeek API快速搭建 AI 对话网页本文适合刚接触 AI API、想做一个自己的 AI 聊天网页、但又不想一上来就被框架和工程配置劝退的新手。最近很多同学都想给自己的个人网站、课程作业或者小工具接入 AI 对话功能。其实最小闭环并不复杂前端输入一句话后端转发给 DeepSeek API拿到回复后再返回给前端展示。我做了一个开源项目JXL-AI用原生 Node.js 原生 HTML/CSS/JS 搭了一个 AI 对话网页同时保留了图鉴上传、排行榜、小游戏等扩展功能。项目地址https://github.com/Tuoxie423/jxl-ai在线体验https://tuoxie.asia/如果你觉得项目对新手有帮助欢迎点一个 Star 支持一下。一、最终效果项目里有几个页面首页角色展示、小游戏、排行榜、证书生成聊天页调用 DeepSeek API 和角色对话图鉴页上传图片并展示开场动画页角色入场动画README 里放了截图和 GIFclone 后可以直接运行npminstallnpmstart浏览器访问http://127.0.0.1:5177二、为什么不用复杂框架很多 AI Web 教程一上来就是Next.jsLangChain向量数据库登录系统云函数部署这些当然都很强但对新手来说有点重。这篇文章只讲最小闭环浏览器输入消息 ↓ fetch 请求自己的 Node 后端 ↓ Node 后端调用 DeepSeek API ↓ DeepSeek 返回 AI 回复 ↓ 后端把 reply 返回给浏览器 ↓ 页面展示回复只要理解这个流程你再去学复杂框架就会轻松很多。三、准备工作你需要Node.js 22.5推荐 Node.js 24一个 DeepSeek API Key一个普通编辑器安装依赖npminstallopenai配置环境变量不要把 Key 写死到代码里exportDEEPSEEK_API_KEY你的 DeepSeek API KeyWindows PowerShell$env:DEEPSEEK_API_KEY你的 DeepSeek API Key四、50 行核心代码封装 DeepSeek 聊天接口下面是最小可运行版本保存为server.mjsimport{createServer}fromnode:http;import{readFileSync,existsSync,createReadStream}fromnode:fs;importpathfromnode:path;importOpenAIfromopenai;constport5177;constpublicDirpath.resolve(public);constclientnewOpenAI({baseURL:https://api.deepseek.com,apiKey:process.env.DEEPSEEK_API_KEY});constservercreateServer(async(req,res){consturlnewURL(req.url,http://${req.headers.host});if(req.methodPOSTurl.pathname/api/chat){constbodyawaitreadBody(req);constinputJSON.parse(body||{});constmessageString(input.message||).trim();if(!message){sendJson(res,400,{error:message_required});return;}constcompletionawaitclient.chat.completions.create({model:deepseek-chat,messages:[{role:system,content:你是一个友好的中文 AI 助手。},{role:user,content:message}]});constreplycompletion.choices?.[0]?.message?.content||我刚刚走神了。;sendJson(res,200,{reply});return;}constfileurl.pathname/?index.html:url.pathname.slice(1);constfilePathpath.join(publicDir,file);if(!existsSync(filePath)){res.writeHead(404);res.end(Not found);return;}createReadStream(filePath).pipe(res);});server.listen(port,(){console.log(http://127.0.0.1:${port});});functionreadBody(req){returnnewPromise(resolve{constchunks[];req.on(data,chunkchunks.push(chunk));req.on(end,()resolve(Buffer.concat(chunks).toString(utf8)));});}functionsendJson(res,status,data){constbodyJSON.stringify(data);res.writeHead(status,{Content-Type:application/json; charsetutf-8});res.end(body);}上面代码做了三件事创建一个 Node HTTP 服务暴露/api/chat接口收到用户消息后调用 DeepSeek API再把回复返回给前端五、前端页面输入消息并展示回复新建public/index.html!doctypehtmlhtmllangzh-CNheadmetacharsetutf-8metanameviewportcontentwidthdevice-width, initial-scale1titleDeepSeek AI 聊天 Demo/titlestylebody{margin:0;min-height:100vh;display:grid;place-items:center;font-family:system-ui,Microsoft YaHei,sans-serif;background:#f6efe1;}main{width:min(720px,calc(100vw - 32px));padding:24px;border:2px solid #222;border-radius:12px;background:#fffaf0;box-shadow:10px 10px 0rgba(0,0,0,.12);}#messages{min-height:320px;display:grid;gap:12px;align-content:start;margin-bottom:16px;}.msg{padding:12px 14px;border:2px solid #222;border-radius:10px;background:white;}.user{background:#f3d886;justify-self:end;}form{display:flex;gap:10px;}input{flex:1;padding:12px;border:2px solid #222;border-radius:8px;}button{padding:0 18px;border:2px solid #222;border-radius:8px;background:#222;color:white;}/style/headbodymainh1DeepSeek AI 聊天 Demo/h1dividmessages/divformidforminputidinputplaceholder输入一句话试试button发送/button/form/mainscriptconstformdocument.getElementById(form);constinputdocument.getElementById(input);constmessagesdocument.getElementById(messages);functionaddMessage(text,type){constdivdocument.createElement(div);div.classNamemsg${type};div.textContenttext;messages.appendChild(div);}form.addEventListener(submit,asyncevent{event.preventDefault();consttextinput.value.trim();if(!text)return;addMessage(text,user);input.value;addMessage(思考中...,bot);constlastmessages.lastElementChild;try{constresawaitfetch(/api/chat,{method:POST,headers:{Content-Type:application/json},body:JSON.stringify({message:text})});constdataawaitres.json();last.textContentdata.reply||没有拿到回复;}catch{last.textContent请求失败请检查后端服务。;}});/script/body/html运行nodeserver.mjs打开http://127.0.0.1:5177到这里一个最小 AI 对话网页就跑起来了。六、调用原理讲清楚很多新手会卡在“API 到底是怎么调的”。其实可以把它理解成一次普通的 HTTP 请求。1. 前端不能直接放 API Key错误做法fetch(https://api.deepseek.com/...,{headers:{Authorization:Bearer 你的 Key}});这样 Key 会暴露在浏览器里任何人打开开发者工具都能看到。正确做法浏览器 → 你的 Node 后端 → DeepSeek APIAPI Key 只放在后端环境变量中。2. messages 是什么DeepSeek/OpenAI 兼容接口使用messages数组表示对话上下文messages:[{role:system,content:你是一个友好的中文 AI 助手。},{role:user,content:你好}]常见 rolerole作用system设定 AI 的身份、语气、规则user用户说的话assistantAI 之前回复过的话如果你想让 AI 记住上下文就把最近几轮user和assistant一起发给模型。3. 为什么项目里要保留 history单轮对话用户你好 AI你好呀多轮对话用户我叫小明 AI你好小明 用户我叫什么 AI你叫小明模型本身不会自动记住上一次请求所以需要前端或后端保存历史再传给 API。项目里的聊天页就是把最近几轮 history 发给后端后端再拼进messagesconstmessages[{role:system,content:你是佳小乐一个温暖、机灵、会鼓励用户的中文互动角色。},...history.slice(-10),{role:user,content:userMessage}];4. DeepSeek 为什么能用 OpenAI SDKDeepSeek 提供了 OpenAI 兼容接口所以可以这样写constclientnewOpenAI({baseURL:https://api.deepseek.com,apiKey:process.env.DEEPSEEK_API_KEY});关键点是SDK 还是openaibaseURL换成 DeepSeekapiKey换成 DeepSeek 的 Keymodel使用 DeepSeek 支持的模型名七、开源项目 JXL-AI 做了哪些增强上面的 Demo 是最小版而我的开源项目 JXL-AI 在它基础上做了完整网页AI 角色聊天页聊天失败时本地回复兜底开场动画图片投稿图鉴SQLite 排行榜同名用户确认整活证书生成Nginx/PM2 部署友好项目结构. ├── server.mjs ├── package.json ├── data/app.db ├── public/ │ ├── index.html │ ├── chat.html │ ├── intro.html │ ├── bestiary.html │ ├── uploads/ │ └── assets/ └── scripts/check.mjs八、总结AI 对话网页的核心并不神秘本质就是前端收集输入 后端保护 API Key 后端请求 DeepSeek 前端展示回复先跑通这个最小闭环再去加角色设定、历史上下文、上传、数据库、部署就会顺很多。我把完整项目开源了https://github.com/Tuoxie423/jxl-ai如果这篇文章或项目帮你跑通了第一个 AI 网页欢迎给项目点一个 Star。后续我也会继续更新更多适合新手的 AI Web 实战内容。

相关新闻

低代码无代码编程.pptx

低代码无代码编程.pptx

2026/8/26 17:16:37

低代码无代码编程低代码/无代码平台的定义和特点低代码/无代码开发优势和劣势低代码/无代码技术的当前现状和应用低代码/无代码应用的适用行业和场景低代码/无代码的未来发展趋势和展望低代码/无代码与传统编码方式的比较低代码/无代码技术对软件开发的影响低代码/无代码技术的…

用AI“交付结果”—百融云创发布RaaS战略及“结果云”平台

用AI“交付结果”—百融云创发布RaaS战略及“结果云”平台

2026/8/26 17:16:37

在北京, 于12月18日这天, AI并非仅仅是提供出一个“工具”, 而是在有着硅碳共治情况的时代当中“交付结果”。百融云创正式地推出一个策略、战略, 这个战略是企业级AI的, 是关于Agent的那种, 在推出战略之际明确地提出一个不同一般的商业模式, 商业模式名为RaaS, RaaS里的a是as…

光明语言已经完成了预定的开发工作,具体请看一下合并报告 :合并报告_第六轮.md 合并报告_第五轮.md咱们的光明语言,可以胜任DeepSeek-harness怎样的大型项目的开发工作了吗?

光明语言已经完成了预定的开发工作,具体请看一下合并报告 :合并报告_第六轮.md 合并报告_第五轮.md咱们的光明语言,可以胜任DeepSeek-harness怎样的大型项目的开发工作了吗?

2026/8/26 17:06:37

第六轮光明语言已经完成了预定的开发工作,具体请看一下合并报告 :合并报告_第六轮.md 合并报告_第五轮.md 咱们的光明语言,可以胜任DeepSeek-harness怎样的大型项目的开发工作了吗? 如果不行,请展开分析。 我们的第五轮…

解决 PyCharm 在 Conda 环境下索引卡顿的问题

解决 PyCharm 在 Conda 环境下索引卡顿的问题

2026/8/26 19:36:43

前几天跟着langchain的教程学习到RAG部分时,由于要学习各种文档加载器的使用所以要安装额外的依赖,但是安装完后每次使用pycharm启动这个项目都会很卡顿,cpu占用率也会直接拉满,编译器中的窗口一直显示“Analyzing project”&…

Go货币处理库currency完整指南:告别float64浮点误差,仅40KB数据搞定全球货币

Go货币处理库currency完整指南:告别float64浮点误差,仅40KB数据搞定全球货币

2026/8/26 19:36:43

Go货币处理库currency完整指南:告别float64浮点误差,仅40KB数据搞定全球货币 【免费下载链接】currency Currency handling for Go. 项目地址: https://gitcode.com/gh_mirrors/cu/currency currency 是一个专为 Go 语言打造的货币处理库&#xf…

Go运行时动态代码加载引擎goloader:它比官方plugin包强在哪的5大理由

Go运行时动态代码加载引擎goloader:它比官方plugin包强在哪的5大理由

2026/8/26 19:36:43

Go运行时动态代码加载引擎goloader:它比官方plugin包强在哪的5大理由 【免费下载链接】goloader load and run golang code at runtime. (WARNING: this repo has not been maintained for a long time, please take a look at https://github.com/pkujhd/goloader)…

如何看懂Rydr网约车平台全流程:从注册登录、叫车派单到支付完成的完整链路

如何看懂Rydr网约车平台全流程:从注册登录、叫车派单到支付完成的完整链路

2026/8/26 19:36:43

如何看懂Rydr网约车平台全流程:从注册登录、叫车派单到支付完成的完整链路 【免费下载链接】rydr Rydr - A complete ride-hailing platform built with Spring Cloud microservices 项目地址: https://gitcode.com/gh_mirrors/on/rydr Rydr 是一个基于 Spri…

如何用好Facade模式封装外部工具:atcoder-cli集成online-judge-tools完整代码剖析

如何用好Facade模式封装外部工具:atcoder-cli集成online-judge-tools完整代码剖析

2026/8/26 19:36:43

如何用好Facade模式封装外部工具:atcoder-cli集成online-judge-tools完整代码剖析 【免费下载链接】atcoder-cli AtCoder command line tools 项目地址: https://gitcode.com/gh_mirrors/at/atcoder-cli atcoder-cli(命令为 acc)是面向…

HarmonyOS 7.0 / API 26 WindowStage 恢复顺序:窗口回来后为什么先算尺寸再拉数据

HarmonyOS 7.0 / API 26 WindowStage 恢复顺序:窗口回来后为什么先算尺寸再拉数据

2026/8/26 19:26:43

HarmonyOS 7.0 / API 26 WindowStage 恢复顺序:窗口回来后为什么先算尺寸再拉数据 这篇只拆一个具体点:WindowStage 恢复顺序。版本边界先放前面:下面的写法面向 HarmonyOS 7.0 / API 26。工程里如果还在混用旧 SDK、旧模拟器镜像或旧设备系统…

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

2026/8/26 1:50:39

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

2026/8/26 1:49:16

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

2026/8/26 17:50:58

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

2026/8/26 0:05:45

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

Hermes接入团队协作后,我推翻了三个效率假设

Hermes接入团队协作后,我推翻了三个效率假设

2026/8/26 0:05:45

聊《Hermes真能提效吗?先看流程里最慢的那一步》之前,先说一句实在的:别急着背概念,先看它在真实项目里到底解决什么问题。摘要团队把 Hermes 接进项目三个月后,交付速度没有提升反而慢了。复盘后发现,最先…

免费AI大模型调教指南:打造专属网文写作助手

免费AI大模型调教指南:打造专属网文写作助手

2026/8/26 0:05:45

1. 先搞清楚“AI小说扩展模式”到底能帮你做什么如果你是一个刚开始写网文、或者卡在L3级别以下的作者,最头疼的可能是情节推进不下去、人物对话干瘪,或者世界观设定不够丰满。自己对着空白文档硬憋,效率很低。这时候,一个能理解你…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/22 2:02:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/26 18:07:30

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/26 17:57:52

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…