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面板进行提问