调用DeepSeek官方的API接口
效果

前端样式体验链接:https://livequeen.top/deepseekshow
准备工作
1、注册deepseek官网账号
地址:DeepSeek
点击进入右上角【API开放平台】,并进行账号注册。


2、注册完成后,依次点击【API keys】-【生成API key】,记住自己保存好API keys,他只会显示一次,如果忘了,就要重新生成了!
然后点击【接口文档】,就可以看到官方API文档了!

3、在接口文档中,点击【首次调用API】,然后选择对应的语言,就可以看到示例代码了

代码示例
这里用vue+node.js做一个上面效果动态图的简单示例:
一、后端
1、 引入依赖,在终端中输入如下指令
npm install openai

2、新建一个工具类【deepseek.js】,用于执行deepseek的API并返回结果,如下(可直接复制):
// Please install OpenAI SDK first: `npm install openai`
const OpenAI = require('openai')// api参数配置
const openai = new OpenAI({baseURL: 'https://api.deepseek.com',apiKey: 'sk-c63c***********************e1e0b70'
})/*** message 消息列表* role 角色* content 对话内容* name 某个角色的参与者,用于区分相同角色(选填)* model 模型 [deepseek-chat, deepseek-reasoner] deepseek-chat 模型已全面升级为 DeepSeek-V3。*/
async function deepSeekChat (contents) {// 执行获取结果const completion = await openai.chat.completions.create({messages: [{role: 'system',content: contents}],model: 'deepseek-chat'})// 返回结果return completion.choices[0].message.content
}module.exports = {deepSeekChat
}
3、在你自己的后端接口中通过异步调用的方式,来传参调用上面工具类里面的deepSeekChat()方法 ,如下:
// 引用前面deepseek工具类的方法
const {deepSeekChat} = require('../utils/deepseek')// 后端接口(异步)
router.post('/deepseek', async (req, res) => {// 调用前面deepseek工具类的方法let data = await deepSeekChat(req.body.contents)// 返回结果res.end(JSON.stringify({traceId: req.traceId,code: 200,data: data}))
})
二、前端
1、h5布局
<template><div class="mess_dialog" v-loading="isloading"><!-- 对话框头部 --><div class="dlog_header"><h1>DeepSeek对话</h1></div><!-- 对话框内容 --><div id="content_overflow" class="dlog_content" ref="scrollContainer" @scroll="handleScroll"><div v-for="(item, index) in messnowList" :key="index" class="dlog_content_item" style="margin-left: 5px;"><!-- AI消息展示 --><div v-if="item.role === 'system'" class="content_other"><!-- 头像 --><div><el-avatar :size="35" :src="require('../../../assets/image/ai.png')" style="margin-top: 5px;"></el-avatar></div><div class="mess_other"><!-- 发送时间 --><div><span style="font-size: 8px;">{{item.date}}</span></div><!-- 发送内容 --><div class="content_other_bgd"><span class="mess_content_msg">{{item.content}}</span></div><!-- 复制按钮 --><div class="iconCopy" @click="onCopy(item.content)"><i class="el-icon-copy-document"></i></div></div></div><!--本用户的消息展示--><div v-else-if="item.role === 'user'" class="content_me"><div class="mess_me"><!-- 发送时间 --><div><span style="font-size: 8px;">{{item.date}}</span></div><!-- 发送内容 --><div class="content_me_bgd"><span class="mess_content_msg">{{item.content}}</span></div></div><!-- 头像 --><div><el-avatar :size="35" :src="userAvatar" style="margin-top: 5px;"></el-avatar></div></div></div></div><!--对话框底部--><div class="dlog_footer"><div class="footer_content"><el-input type="textarea" :rows="4" v-model="mess" maxlength="500" show-word-limit @keydown.enter.native="keyDown"></el-input><el-button type="primary" @click="Wssendmess()" style="float: right;margin-top: 5px;">发送</el-button></div></div></div>
</template>
2、css样式
<style scoped>
.mess_dialog {height: 100%;width: 100%;max-width: 800px;position: relative;margin: 0 auto;display: flex;flex-direction: column; /* 垂直排列 */
}
.dlog_header {display: flex;justify-content: center;flex: 1;
}
.dlog_content {flex: 7;overflow-y: auto;overflow-x: hidden;
}
.content_other{width: 80%;display: flex;justify-content: flex-start;margin: 11px 18px;
}
.mess_other{text-align: left;margin-left: 10px;
}
.content_me{width: 80%;display: flex;justify-content: flex-end;float: right;margin: 11px 18px;
}
.mess_me{text-align: right;margin-right: 10px;
}
.mess_content_msg{font-size: 16px;font-weight: 300;margin: 2px;
}
/*其他用户的气泡*/
.content_other_bgd {border-radius: 6px;position: relative;display: inline-block;padding: 0px 6px;width: auto;height: auto;line-height: 34px;background: #e3e1e1;z-index: 0;
}
/*气泡前的小三角指向*/
.content_other_bgd::before {border-style: solid;border-width: 0 11px 11px 0;border-color: transparent #e3e1e1 transparent transparent;content: "";position: absolute;top: 10px; left: -8px;margin-top: -9px;display: block;width: 0px;height: 0px;z-index: 0;
}
/*我方的气泡*/
.content_me_bgd {border-radius: 6px;position: relative;display: inline-block;padding: 0px 6px;width: auto;height: auto;line-height: 34px;background: #95ec69;z-index: 0;text-align: left;
}
.content_me_bgd::after {border-style: solid;border-width: 0 0 11px 11px;border-color: transparent transparent transparent #95ec69;content: "";position: absolute;top: 10px; right: -8px;margin-top: -10px;display: block;width: 0px;height: 0px;z-index: -1;
}
.iconCopy{padding: 7px;margin-top: 3px;width: 20px;border-radius: 5px;display: flex;justify-content: center;
}
.el-icon-copy-document{color: #a2a2a2;
}
.iconCopy:hover {background-color: #ecebeb;
}
.iconCopy:hover .el-icon-copy-document{color: #3d9aff;
}
.iconCopy:active {background-color: #dedede;
}
.iconCopy:active .el-icon-copy-document{color: #0b7bf5;
}
.dlog_footer{width: 100%;flex: 2;padding: 10px 0;
}
</style>
3、js函数
<script>
import userAvatar from '@/assets/image/userAvatar.png'
import moment from 'moment/moment'
import cookie from '../../../utils/cookie'
import base from '../../../api/base'export default {name: 'Index',data () {return {mess: '', // 输入的信息userAvatar: userAvatar, // 默认用户头像autoScroll: true, // 是否需要自动滚动到底部messnowList: [], // 当前对话用户的-聊天内容列表isloading: false // 加载中,默认关闭}},watch: {// 监听当前消息列表,更新时,保持滚动条位于底部messnowList: {handler (newValue, oldValue) {this.scrollToBottom()},deep: true}},methods: {// 监听用户滑动情况,判断是否需要自动定位底部handleScroll () {// 绑定组件const container = this.$refs.scrollContainer// 判断用户是否手动向上滚动超过底部位置30pxif (container.scrollHeight - container.scrollTop - container.clientHeight > 50) {this.autoScroll = false // 用户手动滚动,停止自动滚动} else {this.autoScroll = true // 用户滚动到底部,恢复自动滚动}},// 定位到底部scrollToBottom () {this.$nextTick(() => {var message = document.getElementById('content_overflow')if (this.autoScroll) {// 滚动滑钮到滚动条顶部的距离=滚动条的高度message.scrollTop = message.scrollHeight}})},// enter发送消息,ctrl+enter换行keyDown (e) {if (e.ctrlKey && e.keyCode === 13) { // 用户点击了ctrl+enter触发this.mess += '\n'} else { // 用户点击了enter触发this.Wssendmess()e.preventDefault() // 阻止浏览器默认换行操作return false}},// 发送按钮Wssendmess () {var message = this.mess.trim()this.mess = ''// 开启加载this.isloading = true// 判断是否有字符输入if (message === null | message === '') {this.$notify({title: '提示',message: '发送内容不能为空!',type: 'warning'})// 关闭加载this.isloading = false} else {// 用户发言,恢复自动滚动this.autoScroll = true// 保存到数据集合中let date = moment().format('YYYY-MM-DD HH:mm:ss')let item = this.data_rule('user', message, date)this.messnowList.push(item)// 执行接口this.$api.deepseek(message).then(res => {// 关闭加载this.isloading = falseif (res.data.code === 200) {this.chatAI(res.data.data)} else {this.chatAI('服务器繁忙,请稍后重试!')}}).catch(err => {// 关闭加载this.isloading = falsethis.chatAI('服务器繁忙,请稍后重试!')console.log(err)})}},// 规范数据格式data_rule (role, content, date) {return {role: role,content: content,date: date}},/*** 模拟AI机器人打字效果* @param content 返回的全部文本*/chatAI (content) {// 获取返回结果let data = content// 临时储存结果(一个个字符)let dataTemp = data[0]let date = moment().format('YYYY-MM-DD HH:mm:ss')// 循环一个个字符赋予,模拟机器人打字效果let item2 = this.data_rule('system', dataTemp + '_', date)this.messnowList.push(item2)let nowSize = this.messnowList.length - 1if (data.length > 1) {for (let i = 1; i < data.length; i++) {setTimeout(() => {if (i === data.length - 1) {dataTemp = dataTemp + data[i]item2 = this.data_rule('system', dataTemp, date)} else {dataTemp = dataTemp + data[i]item2 = this.data_rule('system', dataTemp + '_', date)}this.messnowList[nowSize] = item2// 更新组件监听this.$forceUpdate()// 更新滚动条定位this.scrollToBottom()}, 100 * i)}}},// 复制按钮onCopy (content) {// 复制到粘贴板navigator.clipboard.writeText(content).then(() => {this.$message.success('复制成功')}).catch(err => {this.$message.error('复制失败,原因:' + err)})}}
}
</script>
相关文章:
调用DeepSeek官方的API接口
效果 前端样式体验链接:https://livequeen.top/deepseekshow 准备工作 1、注册deepseek官网账号 地址:DeepSeek 点击进入右上角【API开放平台】,并进行账号注册。 2、注册完成后,依次点击【API keys】-【生成API key】&#x…...
3.3 学习UVM中的uvm_driver 类分为几步?
文章目录 前言1. 定义2. 核心功能3. 适用场景4. 使用方法5. 完整代码示例5.1 事务类定义5.2 Driver 类定义5.3 Sequencer 类定义5.4 测试平台 6. 代码说明7. 总结 前言 以下是关于 UVM 中 uvm_driver 的详细解释、核心功能、适用场景、使用方法以及一个完整的代码示例ÿ…...
Python——批量图片转PDF(GUI版本)
目录 专栏导读1、背景介绍2、库的安装3、核心代码4、完整代码总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关注 👍 该系列文章专栏:请点击——>Python办公自动化专…...
科技查新过不了怎么办
“科技查新过不了怎么办?” “科技查新不通过的原因是什么?” 想必这些问题一直困扰着各位科研和学术的朋友们,尤其是对于查新经验不够多的小伙伴,在历经千难万险,从选择查新机构、填写线上委托单到付费,…...
WPS中如何批量上下居中对齐word表格中的所有文字
大家好,我是小鱼。 在日常制作Word表格时,经常需要对表格中的内容进行排版。经常会把文字设置成左对齐、居中对齐或者是右对齐,这些对齐方式都比较好设置,有时制作的表格需要把文字批量上下居中对齐,轻松几步就可以搞…...
【Docker】从瀑布开发到敏捷开发
引言 软件开发方法论是指导团队如何规划、执行和管理软件项目的框架。随着软件行业的不断发展,开发方法论也在不断演进。从传统的瀑布开发到现代的敏捷开发,软件开发方法论经历了深刻的变革。本文将详细探讨瀑布开发和敏捷开发的定义、特点、优缺点以及…...
若依框架二次开发——若依介绍、环境部署及更换项目包路径
文章目录 一、若依介绍1、项目简介2、主要特性3、技术选型4、内置功能5、文件结构6、配置文件7、核心技术介绍二、环境部署1、准备工作2、运行系统3、必要配置4、部署系统三、更换项目包路径1、更换目录名称2、更换顶级目录中的pom.xml3、更换项目所有包名称4、修改application…...
【DeepSeek】在本地计算机上部署DeepSeek-R1大模型实战(完整版)
【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈人工智能与大模型应用 ⌋ ⌋ ⌋ 人工智能(AI)通过算法模拟人类智能,利用机器学习、深度学习等技术驱动医疗、金融等领域的智能化。大模型是千亿参数的深度神经网络(如ChatGPT&…...
996引擎-问题处理:三职业改单职业
996引擎-问题处理:三职业改单职业 问题解决方案顺便补充点单性别设置补充:可视化配置表参考资料问题 目前的版本: 引擎版本号:2024.8.7.0 三端配套客户端:3.40.9 传统PC客户端:23.12.07 配套数据库:64_24.8.7.0此版本需要通过可视化配置表...
Redis 发生宕机时,数据怎样恢复?
当 Redis 发生宕机时,数据恢复的核心依赖于其持久化机制和备份策略。以下是结合不同场景的恢复方法及原理: 一、通过持久化机制恢复数据 1. RDB(Redis Database)快照恢复 原理:RDB 通过生成内存数据的全量快照&#…...
【02】RUST项目(Cargo)
文章目录 rust项目与编译创建项目检查编译运行各级目录文件作用TODO各文件作用Cargo.tomlCargo.lockRUST项目一些关键字`mod``pub``use` (`as`)`pub use`重导出(re-exporting)`crate``suer`模块系统包 Pcakagescrate模块 Modules 和 usemain.rs的例子`lib.rs`的例子拆分文件为…...
二、通义灵码插件保姆级教学-IDEA(使用篇)
一、IntelliJ IDEA 中使用指南 1.1、代码解释 选择需要解释的代码 —> 右键 —> 通义灵码 —> 解释代码 解释代码很详细,感觉很强大有木有,关键还会生成流程图,对程序员理解业务非常有帮忙,基本能做到哪里不懂点哪里。…...
Docker使用指南与Dockerfile文件详解:从入门到实战
Docker使用指南与Dockerfile文件详解:从入门到实战 文章目录 **Docker使用指南与Dockerfile文件详解:从入门到实战****引言****第一部分:Docker 核心概念速览****1. Docker 基础架构****2. Docker 核心命令****第二部分:Dockerfile 文件深度解析****1. Dockerfile 是什么?…...
前端权限控制和管理
前端权限控制和管理 1.前言2.权限相关概念2.1权限的分类(1)后端权限(2)前端权限 2.2前端权限的意义 3.前端权限控制思路3.1菜单的权限控制3.2界面的权限控制3.3按钮的权限控制3.4接口的权限控制 4.实现步骤4.1菜单栏控制4.2界面的控制(1)路由导航守卫(2)动态路由 4.3按钮的控制…...
网络安全讲座之一:网络安全的重要性
第一讲内容主要对于安全的发展以及其重要性作了简明的阐述,并介绍了一些国内外知名的网络安全相关网站,并对于如何建立有效的安全策略给出了很好的建议,并让大家了解几种安全标准。 媒体经常报道一些有关网络安全威胁的令人震惊的事件&am…...
iOS主要知识点梳理回顾-3-运行时消息机制
运行时(runtime) 运行时是OC的重要特性,也是OC动态性的根本支撑。动态,如果利用好了,扩展性就很强。当然了,OC的动态性只能算是一个一般水平。与swift、java这种强类型校验的语言相比,OC动态性很…...
深度学习中的Checkpoint是什么?
诸神缄默不语-个人CSDN博文目录 文章目录 引言1. 什么是Checkpoint?2. 为什么需要Checkpoint?3. 如何使用Checkpoint?3.1 TensorFlow 中的 Checkpoint3.2 PyTorch 中的 Checkpoint3.3 transformers中的Checkpoint 4. 在 NLP 任务中的应用5. 总…...
STM32开发笔记,编译与烧录
1. Keil开发环境 【Project】》【Manager】》【Pack Installer】选择相应的芯片,Unpack安装。 2. 编译 3. 烧录 烧录时,Boot0 为 1,Boot1 为 0。烧录后启动,Boot0 为 0 ,Boot 1 为 0。 3.1 ST-LINK烧录 测试连接&a…...
【CXX-Qt】1 CXX-Qt入门
与其他Qt-Rust绑定相比,CXX-Qt的目标不仅仅是将Qt功能暴露给Rust,而是完全将Rust集成到Qt生态系统中。我们将通过一个最小示例,展示如何使用CXX-Qt在Rust中创建自己的QObject,并将其与基于QML的小型GUI集成。 一、阅读前准备知识…...
JS宏进阶:XMLHttpRequest对象
一、概述 XMLHttpRequest简称XHR,它是一个可以在JavaScript中使用的对象,用于在后台与服务器交换数据,实现页面的局部更新,而无需重新加载整个页面,也是Ajax(Asynchronous JavaScript and XML)…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
使用VSCode开发Django指南
使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架,专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用,其中包含三个使用通用基本模板的页面。在此…...
Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...
涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...
汇编常见指令
汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX(不访问内存)XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...
SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题
分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...
C#学习第29天:表达式树(Expression Trees)
目录 什么是表达式树? 核心概念 1.表达式树的构建 2. 表达式树与Lambda表达式 3.解析和访问表达式树 4.动态条件查询 表达式树的优势 1.动态构建查询 2.LINQ 提供程序支持: 3.性能优化 4.元数据处理 5.代码转换和重写 适用场景 代码复杂性…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
