快速免费搭建一套完整自托管的AI编程助手


简而言之:VSCode + RooCode + LM Studio + Devstral + Ollama + snowflake-arctic-embed2 + docs-mcp-server。一个快速、免费、自托管的 AI 编程助手,支持较少使用的语言,并最大限度地减少在性能较弱的硬件上出现幻读。

长文:
大家好,我想分享一下我在寻找自托管 AI 编码助手方面的发现:

  1. 即使在可变的硬件上也能快速响应。
  2. 不会产生过时的语法幻觉。
  3. 成本为 0 美元(电费除外)。
  4. 了解不太常见的语言,例如 KQL、Flutter 等。

尝试了几种设置后,我发现以下组合确实有效。如有错误,请多多包涵。如果您发现任何改进,也请随时告诉我。

硬件测试基于 Ryzen 5700 + RTX 3080(10GB 显存)、48GB 内存。低端和高端配置均可运行,实际使用体验可能有所不同。

堆栈

VSCode +(with) RooCode +(connected to) LM Studio +(running) Devstral +(and) Ollama +(running) snowflake-arctic-embed2 +(supported by) docs-mcp-server

为什么同时使用 LM Studio 和 Ollama?

  • 使用 LM Studio 进行 LLM 推理(它拥有出色的 UI 和兼容 OpenAI 的 API),但不支持并行运行嵌入。
  • Ollama 可以很好地处理嵌入,但更改模型参数很麻烦。
因此,它们可以互补。

VSCode + RooCode
RooCode 是 VS Code 扩展插件,可实现代理编码并支持 MCP。
VS Code:https://code.visualstudio.com/download

替代方案

此设置的替代方案是 Zed Editor:https://zed.dev/download

(Zed 很不错,但目前还不能将问题作为上下文传递。目前仅发布了 MacOS 和 Linux 版本,Windows 版本即将推出。非官方 Windows Nightly 版本在这里:github.com/send-me-a-ticket/zedforwindows

LM Studio
https://lmstudio.ai/download

  • 漂亮的用户界面和实时日志
  • GPU 卸载太简单了。更改 AI 模型参数轻而易举。你可以在 ollama 中通过更改 num_gpu 和 num_ctx 参数创建自定义模型来实现同样的效果。
  • 良好(更好?)兼容 OpenAI 的 API

Ollama
https://ollama.com/download
仅用于运行snowflake-arctic-embed2嵌入。
Devstral(Unsloth 微调)具有良好工具使用性的可靠编码模型。
我使用devstral-small-2505@iq2_m,它完全适合 10GB VRAM。令牌上下文 32768。其他变体和参数可能取决于您的硬件。

snowflake-arctic-embed2
https://ollama.com/library/snowflake-arctic-embed2
与 docs-mcp-server 一起使用的嵌入模型。您可以随意替换为更好的模型。

Docker
https://www.docker.com/products/docker-desktop/
为了安全性和易用性,建议使用 Docker 而不是 NPX。
Portainer 是我推荐的易于使用的扩展 - https://hub.docker.com/extensions/portainer/portainer-docker-extension


Docs-mcp-server
https://github.com/arabold/docs-mcp-server
这就是让一切顺利进行的关键。MCP 服务器会抓取文档(并进行版本控制),以便 AI 能够查找你所在语言实现版本的 正确语法,从而避免出现幻觉。

您还应该能够运行localhost:6281以打开 Web UI docs-mcp-server,但是 Web UI 似乎对我来说不起作用,但我可以忽略它,因为无论如何 AI 都在管理它。

您可以按如下方式实现此 MCP 服务器 -

Docker 版本(需要安装 Docker)

{
  "mcpServers": {
   
"docs-mcp-server": {
     
"command": "docker",
     
"args": [
       
"run",
       
"-i",
       
"--rm",
       
"-p",
       
"6280:6280",
       
"-p",
       
"6281:6281",
       
"-e",
       
"OPENAI_API_KEY",
       
"-e",
       
"OPENAI_API_BASE",
       
"-e",
       
"DOCS_MCP_EMBEDDING_MODEL",
       
"-v",
       
"docs-mcp-data:/data",
       
"ghcr.io/arabold/docs-mcp-server:latest"
      ],
     
"env": {
       
"OPENAI_API_KEY": "ollama",
       
"OPENAI_API_BASE": "http://host.docker.internal:11434/v1",
       
"DOCS_MCP_EMBEDDING_MODEL": "snowflake-arctic-embed2"
      }
    }
  }
}


NPX 版本(需要安装 NodeJS)

{
  "mcpServers": {
   
"docs-mcp-server": {
     
"command": "npx",
     
"args": [
       
"@arabold/docs-mcp-server@latest"
      ],
     
"env": {
       
"OPENAI_API_KEY": "ollama",
       
"OPENAI_API_BASE": "http://host.docker.internal:11434/v1",
       
"DOCS_MCP_EMBEDDING_MODEL": "snowflake-arctic-embed2"
      }
    }
  }
}

添加您的语言的文档
要求 AI 使用该scrape_docs 工具:

  • url(文档链接),
  • 库(文档/编程语言的名称),
  • 版本(文档版本)
您还可以提供(可选):
  • maxPages(要抓取的最大页面数,默认值为 1000)。
  • maxDepth(最大导航深度,默认为3)。
  • 范围(爬行边界,可以是“子页面”,“主机名”或“域”,默认为“子页面”)。
  • followRedirects(是否遵循 HTTP 3xx 重定向,默认为 true)。
您可以随时让 AI 使用search_docs工具来确保语法或代码实现的正确性。如果它足够智能,它还应该能够自动检查文档。

Devstral 的堆栈不仅限于编码,它还能出色地处理逻辑和非编码任务。MCP设置通过将 AI 置于真实文档中来帮助减少幻觉,使其成为适用于各种任务的灵活可靠的解决方案。



极客辣评1:
您可以在此处用普通的 llama.cpp 替换 LMStudio 和 ollama——这样就少了一个需要更新和使用的软件和包装器。Arctic 是一款出色且小巧的嵌入。理论上,如果使用得当,小型Qwen3 0.6b 嵌入现在应该比它更胜一筹。对于小型项目来说,这可能无关紧要,因为本来就没什么可检索的。

除此之外,我还想问:为什么是 Devstral 而不是其他型号?它有丰富的默认系统提示,并且已经训练过使用 OpenHands 了,而上次我检查时发现 Roo Code 和它不兼容。



极客辣评2:

你如何仅用 32k 上下文信息就能完成所有事情?请注意,我的问题听起来像是在用一个问题来反驳你的整篇文章,但我真的很欣赏你的文章和完整、详细、精彩的堆栈,以及你花时间与大家分享!我提出这个问题并非要否定它。我只是非常好奇你是如何真正仅用 32k 上下文信息就能完成所有事情的,因为我发现,在开始工作之前,仅仅为了给我的 AI 提供项目所需的上下文信息,我就需要差不多那么多。



极客辣评3:

太棒了!我刚刚在我的 rtx4090 上运行了 vscode,Copilot 指向了 Ollama deepseek-coder:33b。太开心了!deepseek 感觉比 devstral 或 codestral 都好一点(其中一个只提供答案,不解释)。



极客辣评4:

你对 void 有什么看法?https://voideditor.com/
它是 VS Code 的一个分支,集成了 LLMC 聊天/编码和 mcp。我只是偶尔写写代码,所以不确定它是否符合你的需求。不过,请评论一下 void 相对于其他解决方案的缺点。我认为它相当稳定,使用起来很舒服。

回答:我确实尝试过 Void 编辑器,它很有前景,但还有很长的路要走。Zed编辑器在完成度方面遥遥领先,但 Void 受益于 Zed 错过的广阔的 vscode 市场。

尽管如此,能够将“@problems”作为上下文传递就足以成为使用 RooCode 的理由,无论如何它都可以添加到 Void 中。

这当然是需要关注的事情,它已经可以进行代理编码,而且我相信它比 RooCode 更胜一筹,所以如果 RooCode 对某些人来说效果不好,Void 可能更适合,也许有一天它可以取代 VSCode 成为主要的代码编辑器。
我会推荐它作为 VSCode 的替代品,但对于注重隐私的人来说,VSCodium 仍然是更好的选择。(https://github.com/voideditor/void/issues/764