ModelScope免费算力_opencode接入本地大模型

发布时间:2026/8/25 20:47:05
ModelScope免费算力_opencode接入本地大模型 opencode接入本地大模型实录Qwen3-32B当编程助手作者杨显钊版本1.0日期2026年8月24日标签opencode、Qwen3、ROCm、大模型部署、AI编程助手适合人群想 zero 订阅费、用自部署开源模型驱动 AI 编程助手的开发者前篇篇一《白嫖192G显存GPUModelScope三种免费算力一篇讲清》、篇二《在AMD GPU上部署Qwen3-32B30行代码搭好推理服务》摘要篇一领到了 ModelScope 免费 AMD GPU192G 显存篇二把 Qwen3-32B 跑成了服务。这篇解决最后一环让 opencode 接上这台自部署模型当免费的编程助手。接入关键两步——把 opencode 装到模型同一台机器上解决可达性把后端从 30 行简易服务换成支持完整 OpenAI API含 tool calling的transformers serve。最终实测opencode 1.18.21 在 DSW 里用 Qwen3-32B 正常问答一轮 8.0 秒花费$0.00——没有订阅、没有 API key整条链路都在自己机器上。途中两个小坑npm 包名 404、实例重启后服务失忆均附真实日志。一、前言接入要过两道关opencode 是终端里的 AI 编程助手默认要订阅各家云端模型。而它本质上只要求后端** OpenAI 兼容**——这就给了自部署模型机会。但接入前有两条硬门槛可达性opencode 装在本机的话够不着 DSW 内网里的 18000 端口。解法最简单也最彻底——把 opencode 装到 DSW 上走 127.0.0.1tool callingopencode 的 agent 靠tools参数驱动读文件、跑命令全靠它。篇二那 30 行服务不解析 tools接上也只会说不会做所以这篇做两件事换一个完整后端然后把 opencode 落到这台机器上。先看最终效果一句你好8.0 秒回应右侧面板$0.00 spent、上下文 7,620 tokens 只用了 6%。下面按真实顺序复现。二、换后端transformers serve 接管 180002.1 为什么是它停掉篇二的 30 行服务前先看 transformers 5.x 自带 serve 的家底transformers serve --help摘录Run a FastAPI server to serve models on-demand with an OpenAI compatible API. Endpoints: POST /v1/chat/completions — Chat completions (streaming non-streaming). POST /v1/completions — Legacy text completions from a prompt. GET /v1/models — Lists available models. Options: --continuous-batching / --no-continuous-batching --attn-implementation TEXT (e.g. flash_attention_2) --reasoning [on|off|auto] (Qwen3 等推理模型适用) --dtype TEXT / --device TEXTOpenAI 兼容、流式、continuous batching、flash attention、推理开关全有——正是 opencode 需要的完整后端而且零新增大依赖pipinstalltransformers[serving]-ihttps://mirrors.aliyun.com/pypi/simple/2.2 启动nohuptransformers serve /mnt/data/models/Qwen3-32B\--devicecuda:0--dtypebfloat16\--attn-implementation flash_attention_2\--reasoningoff\--host0.0.0.0--port18000\/mnt/data/serve2.log21--reasoning off对编程助手场景很重要不让模型把 token 烧在思考链上。2.3 坑一模型 ID 被钉死成路径验证时随手写了model: Qwen3-32B被服务端当场纠正{detail:Server is pinned to /mnt/data/models/Qwen3-32B; requested Qwen3-32B.}传了位置参数FORCE_MODEL后服务端只认模型路径这个 ID。后面 opencode 配置里的 model id 也因此必须写全路径这是下文配置的伏笔。2.4 tool calling 验证opencode 的命门curl-shttp://127.0.0.1:18000/v1/chat/completions-HContent-Type: application/json-d{ model: /mnt/data/models/Qwen3-32B, messages: [{role:user,content:查一下现在几点}], tools: [{type:function,function:{name:get_time,description:获取当前时间,parameters:{type:object,properties:{}}}}] }真实返回节选{choices:[{finish_reason:tool_calls,message:{role:assistant,tool_calls:[{function:{arguments:{},name:get_time},type:function}]}}]}finish_reason: tool_calls、结构化tool_calls数组齐全——模型会把工具调用以 OpenAI 格式吐回来工具链路成立opencode 可以接管执行。2.5 坑二/v1/models 返回 500别慌Internal Server Error这个端点在该版本下会崩但 opencode及所有 ai-sdk 系客户端只调 chat completions从不调/v1/models。确认 chat 接口正常后即可无视。三、安装 opencode落到持久盘3.1 环境DSW 镜像自带 Node不用折腾node v22.22.3 npm 10.9.83.2 坑三npm 包名 404第一发按惯例猜了个 scoped 包名直接 404npm error 404 Not Found - GET https://registry.npmjs.org/opencode-ai%2fopencode npm error 404 opencode-ai/opencode* is not in this registry.opencode 的 npm 包名就是朴素的opencode-ai没有 scope。改正后装到数据盘npminstall-gopencode-ai--prefix/mnt/data/opencode--registryhttps://registry.npmmirror.comechoexport PATH/mnt/data/opencode/bin:$PATH/mnt/data/env.shsource/mnt/data/env.sh opencode--version# 1.18.213.3 为什么全往 /mnt/data 塞DSW 的根盘是容器 rootfs实例释放即清零/mnt/data 和 /mnt/workspace 是 1P 的 NAS 数据盘持久保留。模型、opencode 本体、配置、日志全放持久盘重建实例后source /mnt/data/env.sh就能继续干活。四、配置项目级 opencode.json配置不放~/.config在临时根盘上用项目级opencode.json放 NAS 里——opencode 会从 cwd 向上自动找cat/mnt/workspace/opencode.jsonEOF { $schema: https://opencode.ai/config.json, model: dsw-qwen3//mnt/data/models/Qwen3-32B, provider: { dsw-qwen3: { npm: ai-sdk/openai-compatible, name: DSW Qwen3-32B, options: { baseURL: http://127.0.0.1:18000/v1, apiKey: sk-local }, models: { /mnt/data/models/Qwen3-32B: { name: Qwen3-32B, limit: { context: 131072, output: 8192 } } } } } } EOF三个关键点npm: ai-sdk/openai-compatibleopencode 接任意 OpenAI 兼容端点的官方姿势baseURL指向本机 18000model id 写全路径呼应 2.3 的 pinned 规则models的键和顶层model里 provider 斜杠后的部分都必须是/mnt/data/models/Qwen3-32B于是出现dsw-qwen3//mnt/...的双斜杠形态属正常apiKey: sk-local服务端不校验随便填一个非空值即可cd/mnt/workspaceopencode五、实测$0.00 的编程助手进 TUI 先发了句你好8.0 秒得到回应见文首截图回答区下方标注Build · Qwen3-32B · 8.0s——模型标识和耗时一目了然右侧 Context 面板7,620 tokens / 6% used / $0.00 spent左侧文件浏览器里opencode.json、serve.py、serve2.log同框全是这套链路的零件再发列出当前目录下的文件opencode 会真实调用工具执行并回显结果——工具链路从 curl 验证走到了真实 agent 使用。192G 显存跑 32B 单流对话体感流畅要让它写代码改文件也就是接着聊的事。六、坑四实例重启后的失忆DSW 实例重启后进 opencode 提问出现过不回答、也不报错的灵异现场。真相不灵异nohup起的 serve 不跨实例重启——端口上根本没服务请求 hang 在连接层即便服务起了NAS 冷读权重要约 14 分钟加载完成前所有请求同样 hang 住恢复就是重走老流程source/mnt/data/env.shnohuptransformers serve /mnt/data/models/Qwen3-32B\--devicecuda:0--dtypebfloat16\--attn-implementation flash_attention_2\--reasoningoff\--host0.0.0.0--port18000\/mnt/data/serve2.log21tail-f/mnt/data/serve2.log# 等加载进度条走完再问 opencode怕麻烦可以把这几行存成/mnt/data/start.sh重启后一条命令恢复。七、总结整条链路长这样渲染错误:Mermaid 渲染失败: Parse error on line 2: ...I] --|OpenAI 兼容协议| B[ai-sdk/openai-com -----------------------^ Expecting AMP, COLON, DOWN, DEFAULT, NUM, COMMA, NODE_STRING, BRKT, MINUS, MULT, UNICODE_TEXT, got LINK_ID两道门槛可达性靠opencode 装到模型同机tool calling 靠换transformers serve完整后端四个坑模型 ID 钉死路径、/v1/models500 可无视、npm 包名是opencode-ai而非 scoped 名、实例重启后服务失忆持久化opencode 本体--prefix、项目配置、模型全落 NAS重启一条source复活账单$0.00。免费算力 开源模型 开源助手三件套闭环下一篇可以聊聊在这套环境里真刀真枪用 opencode 写代码的体验与调优continuous batching、并发、更长上下文感兴趣就催更。