ollama本地部署DeepSeek-R1大模型使用前端JS调用的详细流程

以下是关于如何在本地部署 DeepSeek-R1 大模型(通过 Ollama),并使用前端 JavaScript 调用其功能的详细流程。


前提条件

  1. 硬件要求
    • 建议至少 16GB RAM(运行较小模型如 1.5B 或 7B 参数版本),如果运行更大模型(如 14B 或 32B),需要 32GB 或更高。
    • 支持 macOS、Linux 或 Windows 的机器。
  2. 软件要求
    • 已安装 Ollama(用于本地运行模型)。
    • 基本的终端操作知识。

第一步:本地部署 Ollama 和 DeepSeek-R1

1. 安装 Ollama
  • 下载 Ollama
    访问 Ollama 官网,根据你的操作系统(macOS/Linux/Windows)下载对应版本。
  • 安装
    • macOS/Linux:在终端运行安装脚本或解压文件。
    • Windows:双击安装程序,按提示完成。
  • 验证安装
    在终端输入以下命令,检查是否成功安装:
    ollama --version
    
    如果返回版本号,说明安装成功。
2. 下载 DeepSeek-R1 模型
  • 选择模型大小
    DeepSeek-R1 有多个版本(1.5B、7B、8B、14B、32B、70B、671B), https://ollama.com/library/deepseek-r1:7b,根据你的硬件选择合适的模型。例如,7B 是性能和资源需求的平衡选择。
  • 拉取模型
    在终端运行以下命令以下载 DeepSeek-R1 的 7B 版本:
    ollama pull deepseek-r1:7b
    

下载时间取决于网络速度和模型大小,完成后会存储在本地。
在这里插入图片描述

3. 启动 Ollama 服务
  • 运行 Ollama 服务
    在终端输入以下命令,启动 Ollama 并加载 DeepSeek-R1:

    ollama run deepseek-r1:7b
    

    这会启动一个交互式终端,你可以直接输入提示测试模型。
    在这里插入图片描述

  • 后台运行(可选)
    如果希望 Ollama 在后台运行并提供 API 服务,可以启动服务器模式:

    ollama serve
    

    默认情况下,Ollama 会监听 http://localhost:11434

4. 测试模型
  • 在终端运行:
    ollama run deepseek-r1:7b "你好,什么是AI?"
    
    如果返回合理回答,说明模型部署成功。

第二步:通过 API 调用 DeepSeek-R1

Ollama 提供了一个 RESTful API,可以通过 HTTP 请求与本地模型交互。默认地址是 http://localhost:11434

1. 测试 API
  • 使用 curl 测试 API 是否正常工作:
    curl http://localhost:11434/api/chat -d '{
      "model": "deepseek-r1:7b",
      "messages": [
        {"role": "user", "content": "你好,什么是AI?"}
      ],
      "stream": false
    }'
    
  • 返回结果应包含模型的回答,例如:
    {
      "model": "deepseek-r1:7b",
      "message": {"role": "assistant", "content": "AI 是人工智能(Artificial Intelligence)的简称..."}
    }
    

第三步:使用前端 JavaScript 调用

1. 设置 Node.js 项目
  • 初始化项目
    在终端创建一个新目录并初始化 Node.js 项目:
    mkdir deepseek-frontend
    cd deepseek-frontend
    npm init -y
    
  • 安装依赖
    安装 axios 或其他 HTTP 请求库以便从前端调用 API:
    npm install axios
    
2. 创建前端代码
  • 创建 HTML 文件index.html):

    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <title>DeepSeek-R1 前端调用</title>
    </head>
    <body>
      <h1>与 DeepSeek-R1 对话</h1>
      <input type="text" id="userInput" placeholder="输入你的问题">
      <button onclick="sendMessage()">发送</button>
      <div id="response"></div>
    
      <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
      <script src="app.js"></script>
    </body>
    </html>
    
  • 创建 JavaScript 文件app.js):

    async function sendMessage() {
      const input = document.getElementById("userInput").value;
      const responseDiv = document.getElementById("response");
    
      try {
        const response = await axios.post("http://localhost:11434/api/chat", {
          model: "deepseek-r1:7b",
          messages: [{ role: "user", content: input }],
          stream: false
        });
    
        const reply = response.data.message.content;
        responseDiv.innerText = reply;
      } catch (error) {
        console.error("调用失败:", error);
        responseDiv.innerText = "错误: " + error.message;
      }
    }
    
3. 运行前端
  • 使用简单的静态服务器运行前端,例如 http-server
    npm install -g http-server
    http-server
    
  • 打开浏览器,访问 http://localhost:8080,输入问题并点击“发送”,即可看到 DeepSeek-R1 的回答。

第四步:优化与扩展

1. 支持流式响应
  • 如果需要实时显示模型的流式输出,将 stream 设置为 true,并处理返回的流数据:
    async function sendMessage() {
      const input = document.getElementById("userInput").value;
      const responseDiv = document.getElementById("response");
      responseDiv.innerText = "";
    
      const response = await fetch("http://localhost:11434/api/chat", {
        method: "POST",
        headers: { "Content-Type": "application/json" },
        body: JSON.stringify({
          model: "deepseek-r1:7b",
          messages: [{ role: "user", content: input }],
          stream: true
        })
      });
    
      const reader = response.body.getReader();
      const decoder = new TextDecoder();
      while (true) {
        const { done, value } = await reader.read();
        if (done) break;
        const chunk = decoder.decode(value);
        const json = JSON.parse(chunk);
        responseDiv.innerText += json.message.content;
      }
    }
    
2. 添加错误处理
  • 在前端添加更完善的错误提示,确保用户体验良好。
3. 部署到远程服务器(可选)
  • 如果需要从其他设备访问,可以将 Ollama 部署到 VPS 上,并调整 OLLAMA_HOST 环境变量为 0.0.0.0:11434,然后通过公网 IP 或域名访问。

注意事项

  • 跨域问题:如果前端和 Ollama 不在同一主机,可能遇到 CORS 问题。可以通过代理解决,或在开发时确保同源。
  • 性能:模型越大,响应时间越长。建议根据硬件调整模型大小。
  • 安全性:本地部署默认仅限本地访问,若公开 API,需设置认证机制。

总结

通过上述步骤,你已经完成了:

  1. 使用 Ollama 在本地部署 DeepSeek-R1。
  2. 通过 API 测试模型可用性。
  3. 使用前端 JavaScript 实现与模型的交互。

现在,你可以在浏览器中输入问题,与本地运行的 DeepSeek-R1 对话了!如果有进一步需求(如集成到复杂应用中),可以基于此扩展功能。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/979971.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Rocky Linux 8.5 6G内存 静默模式(没图形界面)安装Oracle 19C

Oracle19c 下载地址 Database Software Downloads | Oraclehttps://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_ee 目录 一、准备服务器 1、服务器可以克隆、自己装 2、修改主机名 3、重启 4、关闭selinux 5、关闭防火墙 5.1、…

【Qt QML】QML鼠标事件(MouseArea)

QML鼠标事件全面解析 一、MouseArea基础概念 在 QML 中,鼠标事件是处理用户与界面元素交互的重要部分。QML 提供了多种方式来处理鼠标事件,MouseArea 是 QML 中用于处理鼠标事件的核心元素,它可以覆盖在其他元素之上,捕获鼠标操作并触发相应的信号。 1、基本用法 import …

【Project】基于Prometheus监控docker平台

一、设计背景 1.1项目简介 本项目旨在创建一个全面的容器化应用程序监控解决方案&#xff0c;基于Prometheus监控Docker平台上的各种服务。在当今的软件开发环境中&#xff0c;容器化技术已成为一种关键的工具&#xff0c;使应用程序能够更快速、可靠地交付和扩展。然而&…

SV——Clocking block的应用

在system verilog中&#xff0c;clocking block是一种简化时钟域信号同步和采样的机制。可以帮助验证工程师简化复杂时序问题&#xff0c;尤其是在测试平台中&#xff0c;既要对信号进行驱动&#xff0c;又要对信号进行采样。 clocking block块一般有以下应用场景&#xff1a;…

RabbitMQ 的介绍与使用

一. 简介 1> 什么是MQ 消息队列&#xff08;Message Queue&#xff0c;简称MQ&#xff09;&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO先入先出&#xff0c;只不过队列中存放的内容是message而已。 其主要用途&#xff1a;不同进程Process/线程T…

unity pico开发 一:环境准备

文章目录 前言一些容易混淆的概念下载SDK导入SDK配置环境注册PICO APP下载PDC 前言 本文将配置pico开发所有必须的环境 官方文档 一些容易混淆的概念 OpenXR&#xff1a;OpenXR是国际通用的vr开发协议&#xff0c;目的是为了解决各个硬件设备自己搞自己的sdk&#xff0c;导致…

Java数据结构_一篇文章了解常用排序_8.1

本文所有排序举例均默认为升序排列。 目录 1. 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想&#xff1a; 2.1.2 直接插入排序 2.1.3 希尔排序&#xff08;缩小增量排序&#xff09; 2.2 选择排序 2.2.1 基本思想&#xff1a; 2.2.2 直接选择排…

Uniapp开发微信小程序插件的一些心得

一、uniapp 开发微信小程序框架搭建 1. 通过 vue-cli 创建 uni-ap // nodejs使用18以上的版本 nvm use 18.14.1 // 安装vue-cli npm install -g vue/cli4 // 选择默认模版 vue create -p dcloudio/uni-preset-vue plugindemo // 运行 uniapp2wxpack-cli npx uniapp2wxpack --…

【Mark】记录用宝塔+Nginx+worldpress+域名遇到的跨域,301,127.0.0.1,CSS加载失败问题

背景 想要用宝塔搭建worldpress&#xff0c;然后用域名直接转https&#xff0c;隐藏掉ipport。 结果被折磨了1天&#xff0c;一直在死活在301&#xff0c;127.0.0.1打转 还有css加载不了的情况 因为worldpress很多是301重定向的&#xff0c;所以改到最后我都不知道改了什么&am…

0x03 http协议和分层架构

HTTP协议 简介 Hyper Text Transfer Protocol&#xff0c;超文本传输协议&#xff0c;规定了浏览器和服务器之间数据传输的规则 http协议基于TCP协议&#xff1a;面向连接&#xff0c;安全基于请求-响应模型&#xff1a;一次请求对应一次响应HTTP协议是无状态的协议&#xff…

汽车小助手智能体

汽车小助手&#xff1a;智能驱动汽车服务新体验 链接&#xff1a;文心智能体平台AgentBuilder | 想象即现实 文心智能体平台AgentBuilder&#xff0c;是百度推出的基于文心大模型的智能体平台&#xff0c;支持广大开发者根据自身行业领域、应用场景&#xff0c;选取不同类型的…

20250225-代码笔记03-class CVRPModel AND other class

文章目录 前言一、class CVRPModel(nn.Module):__init__(self, **model_params)函数功能函数代码 二、class CVRPModel(nn.Module):pre_forward(self, reset_state)函数功能函数代码 三、class CVRPModel(nn.Module):forward(self, state)函数功能函数代码 四、def _get_encodi…

十一、大数据治理平台总体功能架构

大数据治理平台的功能架构图中心主题&#xff1a;数据治理 核心重点是建立健全大数据资产管理框架&#xff0c;确保数据质量、安全性、可访问性和合规性。 大数据治理平台总体功能架构图 关键功能领域 1.数据资产平台&#xff08;左侧&#xff09; 此部分主要关注数据资产本身…

算法与数据结构(相交链表)

题目 思路 1.哈希集合 因为要求是否存在相交节点&#xff0c;那么我们就可以利用哈希集合先将listA链表里面的所有数据存入&#xff0c;然后访问listB&#xff0c;判断其是否有节点在哈希集合中&#xff0c;若存在&#xff0c;则说明此节点为相交的节点。若遍历完之后仍没有发…

git和gitee在idea中的使用

1.下载git 2.注册一个gitee且创建一个项目 3.在idea的plunge中下在gitee 4.登录gitee 别人使用的话复制 粘贴 commit提交到本地仓库 push推送到云端仓库

yolov8,yolo11,yolo12 服务器训练到部署全流程 笔记

正在进行中&#xff0c;随时更新 一. Anaconda配置 1.安装anaconda (1)下载.sh文件 Index of /anaconda/archive/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror (2)scp到服务器后&#xff0c;运行安装包 bash Anaconda3-2020.07-Linux-x86_64.sh (3)安装anacond…

4.3MISC流量分析练习-wireshark-https

流量分析题目的例题 1.了解wireshark的过滤方式 2.了解tls跟ssl协议基本还原 3.了解xor基本变换方式&#xff0c;获取flag 附件是一个流量包&#xff0c;打开之后有各种流量&#xff0c;但是分析无果&#xff0c;然后丢到kali中使用binwalk进行分析&#xff0c;发现有一个r…

【开源免费】基于SpringBoot+Vue.JS网络海鲜市场系统(JAVA毕业设计)

本文项目编号 T 222 &#xff0c;文末自助获取源码 \color{red}{T222&#xff0c;文末自助获取源码} T222&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【java】@Transactional导致@DS注解切换数据源失效

最近业务中出现了多商户多租户的逻辑&#xff0c;所以需要分库&#xff0c;项目框架使用了mybatisplus所以我们自然而然的选择了同是baomidou开发的dynamic.datasource来实现多数据源的切换。在使用初期程序运行都很好&#xff0c;但之后发现在调用com.baomidou.mybatisplus.ex…

Solana 核心概念全解析:账户、交易、合约与租约,高流量区块链技术揭秘!

目录 1.Solana 核心概念简述 1.1. 账户&#xff08;Account&#xff09; 1.2. 交易&#xff08;Transaction&#xff09; 1.3. 交易指令&#xff08;Instruction&#xff09; 1.4. SPL 代币 1.5. 合约&#xff08;Program&#xff09; 1.6. 租约&#xff08;Rent&#x…