本文主要讲解如何通过Ollama在本地运行DeepSeek R1模型,并将其与OpenAI的Node.js SDK巧妙结合。文章会详细介绍从模型启动、依赖安装到SDK配置的全流程,还会教你开启实时响应,助力你在开发中充分发挥这一技术组合的优势。

一、引言

DeepSeek R1作为一款开源的大语言模型(LLM),具备强大的生成式人工智能能力,为开发者提供了丰富的创作空间。当你选择通过Ollama在本地运行DeepSeek R1时,如何把它和自己的Node.js应用程序整合起来,就成了关键问题。这篇指南将一步步为你讲解,如何搭建并使用OpenAI的SDK,让它与本地运行的DeepSeek R1模型协同工作。

二、本地启动DeepSeek R1模型

要开启DeepSeek R1与OpenAI SDK的协作之旅,首先得确保Ollama在运行,并且已经下载了DeepSeek R1模型。要是你还没安装,就执行下面这条命令:

ollama pull deepseek-r1:1.5b

这条命令的作用是从相关资源库中把DeepSeek R1模型拉取到本地。完成下载后,为了确认模型是否能正常工作,可以启动一个测试会话,使用下面这条命令:

ollama run deepseek-r1:1.5b

如果一切顺利,你就能看到模型开始运行,这就意味着它已经准备好为后续的开发提供支持了。

三、安装开发所需依赖(Node.js环境)

在Node.js环境下开展开发工作,首先得保证你的电脑上已经安装了Node.js。确认安装好Node.js之后,接下来就要安装OpenAI SDK,它是实现与DeepSeek R1模型交互的重要工具。安装命令很简单,在命令行中输入:

npm install openai

执行完这条命令,OpenAI SDK就会被安装到你的项目中,为后续的配置和使用做好准备。

四、配置OpenAI SDK以对接Ollama

安装好依赖后,就要对OpenAI SDK进行配置,让它能够和通过Ollama在本地运行的DeepSeek R1模型进行通信。下面是具体的代码实现:

// 引入OpenAI模块 const OpenAI = require("openai"); // 创建OpenAI实例,并进行配置 const openai = new OpenAI({ baseURL: "http://localhost:11434/v1", // 指向Ollama的本地API地址,这样SDK就能找到本地运行的模型 apiKey: "ollama", // OpenAI SDK要求设置apiKey,不过Ollama不会对这个值进行验证 }); // 定义一个异步函数,用于和DeepSeek R1模型进行聊天交互 async function chatWithDeepSeek(prompt) { try { // 使用OpenAI的聊天完成功能,向DeepSeek R1模型发送请求 const response = await openai.chat.completions.create({ model: "deepseek-r1:1.5b", // 确保这个模型是正在本地运行的 messages: [{ role: "user", content: prompt }], }); // 打印模型返回的回答内容 console.log(response.choices[0].message.content); } catch (error) { // 如果出现错误,打印错误信息 console.error("Error:", error.message); } } // 测试函数,向模型发送一条消息 chatWithDeepSeek("Hello, how are you?");

这段代码中,我们先引入OpenAI模块并创建实例,设置好与本地Ollama服务通信的地址和API Key(虽然Ollama不验证这个Key)。接着定义了一个聊天函数,向模型发送消息并处理返回结果,最后进行了简单的测试。

五、开启实时响应,提升交互体验

为了让应用的性能更出色,并且能够实时获取模型的响应,我们可以开启流式响应功能。下面是实现流式响应的代码:

// 定义一个支持流式响应的异步聊天函数 async function chatWithDeepSeekStream(prompt) { try { // 使用OpenAI的聊天完成功能,开启流式响应 const stream = await openai.chat.completions.create({ model: "deepseek-r1:1.5b", messages: [{ role: "user", content: prompt }], stream: true, // 开启流式响应 }); // 遍历流式响应的每一个数据块 for await (const chunk of stream) { // 输出数据块中的回答内容,如果没有则输出空字符串 process.stdout.write(chunk.choices[0]?.delta?.content || ""); } // 输出完所有内容后换行 console.log("n"); } catch (error) { // 如果出现错误,打印错误信息 console.error("Error:", error.message); } } // 测试流式响应函数,向模型发送一条消息 chatWithDeepSeekStream("Tell me a fun fact about space.");

在这段代码里,我们定义了新的聊天函数,通过设置stream: true开启流式响应。在遍历响应流的过程中,实时输出模型返回的内容,这样就能实现更流畅的交互体验,让用户感觉像是在和模型实时对话。

通过以上几个步骤,你就能成功地在本地将DeepSeek R1模型与OpenAI的Node.js SDK整合起来,还不赶紧动手试试?