Zed 本地模型接入实战:llama.cpp、Ollama 与 LM Studio 的完整配置指南
2026/9/7 2:53:06 网站建设 项目流程

Zed 本地模型接入实战:llama.cpp、Ollama 与 LM Studio 的完整配置指南

【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed

本文基于 Zed 官方文档 Use a Local Model,系统讲解如何在本机或自有基础设施上运行大模型并将其接入 Zed 的 Agent、Inline Assistant 等 AI 功能。你将掌握 llama.cpp、Ollama、LM Studio 三条本地推理路径的安装与服务启动步骤、settings.jsonlanguage_models配置的各参数含义(api_urlauto_discoveravailable_modelscontext_window等),并理解 Zed 源码中模型自动发现、上下文长度协商与能力探测(tools/vision/thinking)的底层实现。

本地模型的适用场景与总体路线

当你希望模型运行在自己控制的机器上(不经过云端)时,就走“本地模型”这条路。Zed 支持的本地接入方式及各路径覆盖的功能如下(引自原文档的能力矩阵):

本地路径Zed AI 功能External AgentsTerminal Threads说明
llama.cpp支持需单独配置需单独配置为 Zed AI 功能配置 llama.cpp 服务器
LM Studio支持需单独配置需单独配置为 Zed AI 功能配置 LM Studio
Ollama支持需单独配置需单独配置为 Zed AI 功能配置 Ollama
本地 OpenAI 兼容服务支持需单独配置需单独配置配置 base URL、模型,必要时配置 key
本地/自托管 Edit Prediction仅 Edit Prediction不支持不支持使用 Edit Prediction 的独立配置

需要注意的边界:外部 Agent(External Agents)与终端 CLI 的本地模型配置是独立体系,需要在对应 agent 或 CLI 侧自行配置,本文只覆盖在 Zed 内配置的本地模型。

Zed 通过一组独立的 crate 与各本地推理服务通信,核心文件为:

  • llama.cpp 客户端:对接 llama.cpp 内置服务器;
  • Ollama 客户端:对接 Ollama HTTP API;
  • LM Studio 客户端:对接 LM Studio 的 OpenAI 风格 API;
  • 设置内容定义:定义language_models各 provider 的 JSON 设置结构。

llama.cpp:使用其内置服务器

llama.cpp 自带 HTTP 服务器,可直接为 Zed Agent、Inline Assistant 等模型驱动功能提供服务。步骤:

  1. 从 llama.app 安装 llama.cpp;
  2. 以 router 模式启动内置服务器:
llama serve

router 模式下,模型按需求从 llama.cpp 缓存中加载。若想一步完成“下载并运行某个模型”,可传入-hf参数直接拉取 Hugging Face 上的 GGUF:

llama serve -hf unsloth/gemma-4-26B-A4B-it-GGUF:BF16
  1. 在 Zed 的模型下拉框中选择该 llama.cpp 模型即可。

模型自动发现与手动声明

Zed 会自动发现 llama.cpp 正在服务的模型及其上下文长度、tools/vision 能力。在 router 模式下,当某个模型实际加载后,Zed 会通过服务器的/models/sse事件流再次精化这些能力信息(需要较新的 llama.cpp 构建才提供该端点)。

如果你不想依赖自动发现(例如想固定展示某个模型、或服务器版本过旧),把auto_discover设为false并手动列出模型:

{ "language_models": { "llama.cpp": { "api_url": "http://localhost:8080", "auto_discover": false, "available_models": [ { "name": "gemma-4-12b-it-GGUF:BF16", "display_name": "gemma-4-12b-it-GGUF:BF16", "max_tokens": 32768, "supports_tools": true, "supports_images": false } ] } } }

结合源码看各参数的作用:

  • api_url:llama.cpp 客户端的默认地址在 llama_cpp.rs 中硬编码为http://localhost:8080,与示例一致;远程服务器则改成对应端点;
  • auto_discover:对应 设置定义 中LlamaCppSettingsContent.auto_discover,注释明确“默认true,即自动发现服务器提供的模型”;
  • available_models每项字段(namedisplay_namemax_tokenssupports_toolssupports_imagessupports_thinking)与LlamaCppAvailableModel结构一一对应。其中name是服务器报告的模型 id(即--alias或模型文件路径),max_tokens即上下文长度(n_ctx)。

发现机制的底层流程:

  1. 客户端通过GET {api_url}/v1/models列出模型(单模型模式返回 1 条带meta.n_ctx的记录;router 模式返回全部已知模型并带status/architecture字段,见 get_models 实现);
  2. 通过GET /props读取已加载模型的default_generation_settings.n_ctx(运行时上下文)、modalities.vision(是否支持图像)与chat_template_caps(是否支持 tool calls / reasoning,见 get_props 与 Props 解析)。router 模式下该接口用 URL 编码的?model=查询参数选择实例,因为模型 id 中含/:
  3. router 模式下客户端持续订阅/models/sse事件流,仅当出现loaded/unloaded/models_reload/model_remove等终态事件时触发重新发现,中间态的加载进度(loading+ 分阶段 progress)则用于在模型选择器中展示 “Loading weights 42%” 之类的进度标签,实现见 ModelEvent 与 LoadProgress,并有配套单测覆盖加载进度、加载失败(非零 exit_code)等边界场景。

llama.cpp 的上下文长度

Zed 默认使用服务器报告的上下文长度(/props中的n_ctx)。两个覆盖方式:

  • 对所有模型统一覆盖:context_window
  • 对单个模型覆盖:available_models中的max_tokens
{ "language_models": { "llama.cpp": { "context_window": 8192 } } }

若未做任何配置,源码中的兜底默认值是DEFAULT_CONTEXT_LENGTH = 4096(llama_cpp.rs#L17),也就是服务器未报告时按 4096 token 处理。

llama.cpp 鉴权

如果 llama.cpp 服务器要求 key,在 provider UI 中输入,或设置环境变量LLAMACPP_API_KEY。远程服务器的做法是把api_url指向其端点并提供 key(服务器侧用--api-key设置)。从源码看,key 会以Authorization: Bearer {key}头附加到/v1/models/props/models/sse/v1/chat/completions全部请求上。

Ollama:最常用的本地模型管理器

使用 Ollama 为 Zed Agent、Inline Assistant 等功能提供本地模型:

  1. 从 ollama.com/download 下载安装 Ollama;
  2. 拉取一个模型:
ollama pull mistral
  1. 确保 Ollama 服务在运行。macOS 上打开 Ollama.app;Linux 或 shell 中执行:
ollama serve
  1. 在 Zed 的模型下拉框中选择该 Ollama 模型。

Zed 会自动发现 Ollama 已拉取的模型。要关闭自动发现并手动列出模型,配置auto_discover

{ "language_models": { "ollama": { "api_url": "http://localhost:11434", "auto_discover": false, "available_models": [ { "name": "qwen2.5-coder", "display_name": "qwen 2.5 coder", "max_tokens": 32768, "supports_tools": true, "supports_thinking": true, "supports_images": true } ] } } }

参数说明(结合 设置定义):

  • api_url:默认http://localhost:11434(ollama.rs#L12),远程 Ollama(如 Ollama Turbo)指向远端端点即可;
  • available_models每项还支持keep_alive字段:可写秒数(5)或时长字符串("5m""1h")。从源码看,未显式指定时 Zed 对自动发现的模型默认使用KeepAlive::indefinite()(即keep_alive: -1),模型会一直驻留内存直到加载新模型或 Ollama 退出(见 Model::new)。手动声明的模型可按需缩短保活时间以释放显存;
  • supports_tools/supports_images/supports_thinking均为可选字段,手动声明时用于告知 Zed 该模型的能力;自动发现时则由POST /api/show返回的capabilities数组(含"tools""vision""thinking"时判定为支持)得出(ModelShow)。

Ollama 的上下文长度(num_ctx)

发往 Ollama 的请求把上下文长度作为num_ctx参数传递,默认使用4096token(get_max_tokens的默认值,ollama.rs#L27-L30)。

对所有 Ollama 模型统一设置上下文长度:

{ "language_models": { "ollama": { "context_window": 8192 } } }

也可以像上文一样用available_models中的max_tokens按模型单独设置。从实现看,num_ctx会进入ChatRequest.options(ChatOptions),随POST /api/chat一起发送;单测test_chat_options_serialization还验证了“stop未设置时不出现在请求 JSON 中,让 Ollama 使用模型自带的默认 stop token”这一细节。

Ollama 鉴权

服务器需要 key 时,在 provider UI 输入或设置OLLAMA_API_KEY;远程 Ollama 服务(如 Ollama Turbo)同样是指定api_url+ 提供 API key。

LM Studio:开箱即用的本地推理 GUI

LM Studio 提供图形界面与命令行两种模型管理方式:

  1. 下载并安装 LM Studio;
  2. 在 LM Studio 中下载至少一个模型,或使用其 CLI:
lms get qwen2.5-coder-7b
  1. 启动 LM Studio 的 API 服务器:
lms server start
  1. 在 Zed 的模型下拉框中选择该 LM Studio 模型。

若 LM Studio 服务器要求 key,在 provider UI 输入或设置环境变量LMSTUDIO_API_KEY

源码侧要点(lmstudio.rs):

  • 默认端点是http://localhost:1234/api/v0,与 LM Studio 内置 OpenAI 风格 API 对应;
  • LM Studio 的设置项包含api_urlapi_keyavailable_modelscustom_headers(LmStudioSettingsContent);
  • 手动声明模型时字段为namedisplay_namemax_tokenssupports_tool_callssupports_images;未指定max_tokens时源码默认2048(Model::new),因此建议在available_models中显式写大一些。

本地 OpenAI 兼容服务

任何暴露 OpenAI 兼容 API 的本地或自托管服务器,都可以走 Zed 的 OpenAI 兼容接入方式(配置 base URL、模型列表与 key),详见 Use API Access 中 OpenAI-compatible 一节。这类服务器(包括各种自托管网关)无需 Zed 内置 provider,直接复用openai_compatible设置即可。

本地 Edit Prediction

Zed 的 Edit Prediction(编辑预测/自动补全建议)有独立的 provider 体系,不走上述language_models配置。本地与自托管的 Edit Prediction 选项(如本地 OpenAI 兼容端点等)请见 Edit Prediction。它只服务 Edit Prediction 功能,不用于 Agent 或 Terminal Threads。

验证配置是否生效的实操建议

  • 先在模型下拉框里确认本地模型出现:llama.cpp/Ollama 走自动发现时,模型列表会随服务器状态变化(router 模式下模型加载完成后能力信息会被精化);
  • 上下文不匹配时优先检查context_window与服务器实际n_ctx/num_ctx是否一致——Zed 会按声明的窗口管理提示词,而服务器端实际容量不同可能导致请求被截断或拒绝;
  • 自动发现不可用时,回退到auto_discover: false+ 手写available_models,并逐项核对name(必须是服务器 API 中真实的模型 id/路径/别名)、max_tokens与能力开关;
  • 各 provider 的api_url默认值(llama.cpp 8080 端口、Ollama 11434 端口、LM Studio 1234 端口)均来自源码常量,远程部署时改api_url并配合对应环境变量(LLAMACPP_API_KEYOLLAMA_API_KEYLMSTUDIO_API_KEY)提供鉴权即可。

以上配置全部写入settings.jsonlanguage_models节点,设置结构定义可进一步参考 crates/settings_content/src/language_model.rs 与 crates/language_models/src/settings.rs。

【免费下载链接】zedCode at the speed of thought – Zed is a high-performance, multiplayer code editor from the creators of Atom and Tree-sitter.项目地址: https://gitcode.com/GitHub_Trending/ze/zed

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询