调用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)…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
css的定位(position)详解:相对定位 绝对定位 固定定位
在 CSS 中,元素的定位通过 position 属性控制,共有 5 种定位模式:static(静态定位)、relative(相对定位)、absolute(绝对定位)、fixed(固定定位)和…...
04-初识css
一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...
12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...
Java面试专项一-准备篇
一、企业简历筛选规则 一般企业的简历筛选流程:首先由HR先筛选一部分简历后,在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如:Boss直聘(招聘方平台) 直接按照条件进行筛选 例如:…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习)
Aspose.PDF 限制绕过方案:Java 字节码技术实战分享(仅供学习) 一、Aspose.PDF 简介二、说明(⚠️仅供学习与研究使用)三、技术流程总览四、准备工作1. 下载 Jar 包2. Maven 项目依赖配置 五、字节码修改实现代码&#…...
R语言速释制剂QBD解决方案之三
本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...
