Node.js调用DeepSeek API的完整指南
目录
简介
本文将介绍如何使用 Node.js 调用 DeepSeek API,实现流式对话并保存对话记录。Node.js 版本使用现代异步编程方式实现,支持流式处理和错误处理。
1. 环境准备
1.1 系统要求
- Node.js 14.0 或更高版本
- npm 包管理器
1.2 项目结构
deepseek-project/ ├── main.js # 主程序 ├── package.json # 项目配置文件 └── conversation.txt # 对话记录文件
1.3 安装依赖
在项目目录下打开命令行,执行:
# 安装项目依赖 npm install # 如果出现权限问题,可以尝试: sudo npm install # Linux/Mac # 或 npm install --force # Windows
此命令会安装 package.json 中定义的所有依赖项:
- axios: 用于发送 HTTP 请求
- moment: 用于时间格式化
如果安装过程中遇到网络问题,可以尝试使用国内镜像:
# 设置淘宝镜像 npm config set registry https://registry.npmmirror.com # 然后重新安装 npm install
1.4 运行程序
安装完依赖后,使用以下命令启动程序:
# 使用 npm 启动 npm start # 或者直接使用 node node main.js
如果遇到权限问题:
# Linux/Mac sudo npm start # Windows (以管理员身份运行命令提示符) npm start
2. 完整代码实现
2.1 package.json
{ "name": "deepseek-chat", "version": "1.0.0", "description": "DeepSeek API chat implementation in Node.js", "main": "main.js", "scripts": { "start": "node main.js" }, "dependencies": { "axios": "^1.6.2", "moment": "^2.29.4" } }
2.2 main.js
const fs = require('fs').promises; const readline = require('readline'); const axios = require('axios'); const moment = require('moment'); class DeepSeekChat { constructor() { this.url = 'https://api.siliconflow.cn/v1/chat/completions'; this.apiKey = 'YOUR_API_KEY'; // 替换为你的 API Key this.logFile = 'conversation.txt'; } async saveToFile(content, isQuestion = false) { const timestamp = moment().format('YYYY-MM-DD HH:mm:ss'); const text = isQuestion ? `n[${timestamp}] Question:n${content}nn[${timestamp}] Answer:n` : content; await fs.appendFile(this.logFile, text); } async chat() { // 创建命令行接口 const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); // 使用 Promise 封装问题输入 const question = (prompt) => new Promise((resolve) => rl.question(prompt, resolve)); try { while (true) { const userInput = await question('n请输入您的问题 (输入 q 退出): '); if (userInput.trim().toLowerCase() === 'q') { console.log('程序已退出'); break; } // 保存问题 await this.saveToFile(userInput, true); // 准备请求数据 const data = { model: 'deepseek-ai/DeepSeek-V3', messages: [ { role: 'user', content: userInput } ], stream: true, max_tokens: 2048, temperature: 0.7, top_p: 0.7, top_k: 50, frequency_penalty: 0.5, n: 1, response_format: { type: 'text' } }; try { // 发送流式请求 const response = await axios({ method: 'post', url: this.url, data: data, headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${this.apiKey}` }, responseType: 'stream' }); // 处理流式响应 response.data.on('data', async (chunk) => { const lines = chunk.toString().split('n'); for (const line of lines) { if (line.trim() === '') continue; if (line.trim() === 'data: [DONE]') continue; if (line.startsWith('data: ')) { try { const json = JSON.parse(line.slice(6)); if (json.choices[0].delta.content) { const content = json.choices[0].delta.content; process.stdout.write(content); await this.saveToFile(content); } } catch (e) { continue; } } } }); // 等待响应完成 await new Promise((resolve) => { response.data.on('end', async () => { console.log('n----------------------------------------'); await this.saveToFile('n----------------------------------------n'); resolve(); }); }); } catch (error) { const errorMsg = `请求错误: ${error.message}n`; console.error(errorMsg); await this.saveToFile(errorMsg); } } } finally { rl.close(); } } } // 运行程序 async function main() { const chatbot = new DeepSeekChat(); await chatbot.chat(); } main().catch(console.error);
3. 代码详解
3.1 类结构
DeepSeekChat
: 主类,封装所有功能constructor
: 构造函数,初始化配置saveToFile
: 异步保存对话记录chat
: 主对话循环
3.2 关键功能
文件操作
async saveToFile(content, isQuestion = false) { const timestamp = moment().format('YYYY-MM-DD HH:mm:ss'); const text = isQuestion ? `n[${timestamp}] Question:n${content}nn[${timestamp}] Answer:n` : content; await fs.appendFile(this.logFile, text); }
流式处理
response.data.on('data', async (chunk) => { const lines = chunk.toString().split('n'); for (const line of lines) { if (line.startsWith('data: ')) { const json = JSON.parse(line.slice(6)); if (json.choices[0].delta.content) { const content = json.choices[0].delta.content; process.stdout.write(content); await this.saveToFile(content); } } } });
3.3 参数说明
model
: 使用的模型名称stream
: 启用流式输出max_tokens
: 最大输出长度 (2048)temperature
: 控制随机性 (0.7)top_p
,top_k
: 采样参数frequency_penalty
: 重复惩罚系数
4. 错误处理
代码包含完整的错误处理机制:
- 网络请求错误处理
- JSON 解析错误处理
- 文件操作错误处理
- 优雅退出处理
5. 使用方法
5.1 安装依赖
在项目目录下打开命令行,执行:
# 安装项目依赖 npm install # 如果出现权限问题,可以尝试: sudo npm install # Linux/Mac # 或 npm install --force # Windows
此命令会安装 package.json 中定义的所有依赖项:
- axios: 用于发送 HTTP 请求
- moment: 用于时间格式化
如果安装过程中遇到网络问题,可以尝试使用国内镜像:
# 设置淘宝镜像 npm config set registry https://registry.npmmirror.com # 然后重新安装 npm install
5.2 修改配置
在 main.js
中替换 YOUR_API_KEY
为你的实际 API Key。
5.3 运行程序
安装完依赖后,使用以下命令启动程序:
# 使用 npm 启动 npm start # 或者直接使用 node node main.js
如果遇到权限问题:
# Linux/Mac sudo npm start # Windows (以管理员身份运行命令提示符) npm start
5.4 交互方式
- 输入问题进行对话
- 输入 ‘q’ 退出程序
- 查看 conversation.txt 获取对话记录
6. 性能优化建议
内存管理
- 使用流式处理大数据
- 及时清理事件监听器
- 避免内存泄漏
错误处理
- 实现重试机制
- 添加超时处理
- 优雅降级策略
并发控制
- 限制并发请求数
- 实现请求队列
- 添加速率限制
总结
Node.js 版本的 DeepSeek API 实现充分利用了异步编程特性,提供了流畅的对话体验和完善的错误处理机制。代码结构清晰,易于维护和扩展。
以上就是Node.js调用DeepSeek API完整指南的详细内容,更多关于Node.js调用DeepSeek API的资料请关注科站长其它相关文章!
栏 目:JavaScript
本文标题:Node.js调用DeepSeek API的完整指南
本文地址:https://www.fushidao.cc/wangluobiancheng/3167.html
您可能感兴趣的文章
- 02-11js中基本事件的总结(onclick、onblur、onchange等)
- 02-11详解如何在Node.js中使用中间件处理请求
- 02-11Vue3中Provide和Inject的用法及工作原理详解
- 02-11Vue+vant实现图片上传添加水印
- 02-11快速解决 keep-alive 缓存组件中定时器干扰问题
- 02-11uniapp 使用 tree.js 解决模型加载不出来的问题及解决方法
- 02-11基于uniapp vue3 的滑动抢单组件实例代码
- 02-10JavaScript 中的 Map使用指南
- 02-10vue3中使用print-js组件实现打印操作步骤
- 02-10Vue 中v-model的完整用法及v-model的实现原理解析


阅读排行
推荐教程
- 04-23JavaScript Array实例方法flat的实现
- 04-23THREE.JS使用TransformControls对模型拖拽的代码实例
- 04-23Vue3使用v-if指令进行条件渲染的实例代码
- 04-23vue3+ts项目搭建的实现示例
- 04-23JavaScript实现下载超大文件的方法详解
- 04-23vue如何使用pdf.js实现在线查看pdf文件功能
- 04-23vue.js调用python脚本并给脚本传数据
- 12-18使用JavaScript遍历输出页面中的所有元素的方法详解
- 04-23JS加密解密之保存到桌面书签
- 12-18Vue实现滚动加载更多效果的示例代码