news 2026/9/11 17:22:49

Windows 部署大模型 不联网 本地离线推理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Windows 部署大模型 不联网 本地离线推理

Ollama:本地模型运行引擎

代码模型(根据自身需求选用)

此处 以 qwen2.5-coder:7b-instruct 为例

(后来需要不联网翻译一些资料,用的是 translategemma:4b模型)

Open WebUI:本地网页界面,类似 ChatGPT 窗口,粘贴代码直接对话;断网可用

安装Ollama

外网环境下载安装包

  • 官网下载 Ollama:https://ollama.com/download
  • 双击安装,一路下一步;安装完成打开PowerShell
  • 拉取代码模型(下载一次,之后离线永久使用)
ollama pull qwen2.5-coder:7b-instruct

文件大小约 4.7GB,下载完成后,可以彻底断网运行

测试离线运行

ollama run qwen2.5-coder:7b-instruct

运行起来就可以输入问题了

ctrl+d 可以退出

安装 部署 Open WebUI (未实现)

这里考虑到python环境冲突问题,不适用pip 方式安装,使用 Open WebUI Windows 独立桌面版(单文件 exe)

下载地址(GitHub 官方): Release v0.0.20 · open-webui/desktop · GitHub

找最新版本:open-webui-x64-setup.exe

安装后打不开http://127.0.0.1:8080/ 我跳过了这步😂

配置网页访问ollama服务(可行方案)

1. 新建一个文件夹(路径不要中文、不要空格),新建ollama-ui.html,代码内容如下:

<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Ollama Local Chat</title> <style> * {box-sizing: border-box;margin:0;padding:0;font-family:Consolas,system-ui} body{background:#111;color:#eee;padding:16px;max-width:1200px;margin:0 auto} .top-bar{display:flex;gap:12px;align-items:center;margin-bottom:16px;flex-wrap:wrap} select,input,button{padding:8px 12px;font-size:14px;border-radius:6px;border:none} select,input{background:#222;color:#fff;border:1px solid #444} button{background:#2563eb;color:#fff;cursor:pointer} button:active{opacity:0.85} #chat{height:60vh;overflow-y:auto;border:1px solid #333;padding:12px;border-radius:8px;margin-bottom:12px} .msg{margin:8px 0;white-space:pre-wrap;line-height:1.5} .user{color:#7dd3fc} .ai{color:#a7f3d0} .code{background:#1e1e1e;padding:10px;border-radius:6px;overflow-x:auto;margin:6px 0} #prompt{width:100%;height:120px;background:#1a1a1a;color:#eee;border:1px solid #333;padding:10px;border-radius:8px;resize:none;font-size:14px} </style> </head> <body> <div class="top-bar"> <label>模型:</label> <select id="model"></select> <button id="refresh">刷新模型</button> <label>Temperature:</label> <input id="temp" type="number" value="0.1" min="0" max="1" step="0.05"> </div> <div id="chat"></div> <textarea id="prompt" placeholder="粘贴C驱动代码,输入提问..."></textarea> <div style="margin-top:8px;display:flex;gap:8px"> <button id="send">发送</button> <button id="clear">清空对话</button> </div> <script> const API_URL = "http://127.0.0.1:11434/api"; const chatEl = document.getElementById("chat"); const modelSel = document.getElementById("model"); const promptEl = document.getElementById("prompt"); const tempEl = document.getElementById("temp"); async function loadModels(){ const res = await fetch(`${API_URL}/tags`); const json = await res.json(); modelSel.innerHTML = ""; json.models.forEach(m=>{ const opt = document.createElement("option"); opt.value = m.name; opt.innerText = m.name; modelSel.appendChild(opt); }); } document.getElementById("refresh").onclick = loadModels; document.getElementById("clear").onclick = ()=>chatEl.innerHTML=""; function appendMsg(text, cls){ const div = document.createElement("div"); div.className = "msg "+cls; div.innerHTML = renderMarkdown(text); chatEl.appendChild(div); chatEl.scrollTop = chatEl.scrollHeight; return div; } function renderMarkdown(s){ return s.replace(/```([\s\S]*?)```/g,'<div class="code">$1</div>'); } document.getElementById("send").onclick = async ()=>{ const prompt = promptEl.value.trim(); if(!prompt) return; appendMsg(prompt, "user"); promptEl.value = ""; const aiDiv = appendMsg("", "ai"); const resp = await fetch(`${API_URL}/chat`,{ method:"POST", headers:{"Content-Type":"application/json"}, body:JSON.stringify({ model: modelSel.value, messages: [{role:"user", content:prompt}], stream:true, options:{temperature: parseFloat(tempEl.value)} }) }); const reader = resp.body.getReader(); const decoder = new TextDecoder(); let fullText = ""; while(true){ const {done,value} = await reader.read(); if(done) break; const chunk = decoder.decode(value); const lines = chunk.split("\n").filter(Boolean); for(const line of lines){ const obj = JSON.parse(line); if(obj.message?.content){ fullText += obj.message.content; aiDiv.innerHTML = renderMarkdown(fullText); chatEl.scrollTop = chatEl.scrollHeight; } } } } loadModels(); </script> </body> </html>

2. 打开 PowerShell,cd 进入这个文件夹

3. 启动简易 HTTP 服务

python -m http.server 8000

看到输出Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...代表成功。

4. 浏览器访问

http://127.0.0.1:8000/ollama-ui.html

5. 关闭方式

  • 直接在PowerShell里面 ctrl+C
  • 查找占用 8000 端口的进程并杀掉:
netstat -ano | findstr :8000

最后一列数字是 PID,然后执行:

taskkill /F /PID 这里替换成查到的PID

安装 配置VS Code插件 (可行方案)

安装:

在扩展插件栏 搜索:Continue - open-source AI code agent

点击【安装】,重启 VSCode

配置:

左侧边栏打开 Continue 面板(图标六边形)

点击面板右上角⚙设置 → Open Config(打开new config.yaml)

清空原有内容,粘贴下面这份配置

version: 0.0.1 schema: v1 models: - name: Qwen2.5-Coder 7B-Instruct provider: ollama model: qwen2.5-coder:7b-instruct apiBase: http://127.0.0.1:11434 roles: - chat - edit completionOptions: temperature: 0.1 num_ctx: 8192

报错 完成配置

之后就可以选中代码 ctrl+L 唤起 Continue 对话,或者直接在 Continue面板进行提问

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/11 17:22:14

Java Swing船舶管理系统:从JDBC到FTP上报的存量系统解析与升级实践

简介&#xff1a;国内航运企业船舶管理系统是一套面向中小航运企业船舶管理场景的完整Java项目源码&#xff0c;适用于正在学习企业级管理系统开发的学生或初级程序员。资源包共69个文件&#xff0c;包含20个Java源文件、38个已编译的class文件、必要jar依赖及Excel数据文件&am…

作者头像 李华
网站建设 2026/9/11 17:21:30

G-Helper 快速上手指南:用一个 exe 接管你的华硕笔记本

G-Helper 快速上手指南&#xff1a;用一个 exe 接管你的华硕笔记本 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenbook, E…

作者头像 李华
网站建设 2026/9/11 17:17:19

MidScene.js 自然语言驱动浏览器自动化:新手 30 分钟上手指南

MidScene.js 自然语言驱动浏览器自动化&#xff1a;新手 30 分钟上手指南 【免费下载链接】midscene GUI Agent for E2E Testing 项目地址: https://gitcode.com/GitHub_Trending/mid/midscene MidScene.js 是一个开源的 GUI 自动化 Agent&#xff1a;你用一句中文或英文…

作者头像 李华