如何让VS Code与 llama-server通信?
我正在尝试使用的VS配置文件是:
[
{
"name": "My Custom Endpoint",
"vendor": "customendpoint",
"apiType": "chat-completions",
"models": [
{
"id": "myllamacpp",
"name": "my llama cpp",
"url": "http://localhost:8080",
"toolCalling": false,
"vision": true,
"maxInputTokens": 128000,
"maxOutputTokens": 128000
}
]
}
]
但当我试着“聊天”时,出现错误信息“语言模型不可用”(尽管 llama-server 正在监听所指定的URL——我可以在浏览器中或使用Python的 requests 库对它进行对话)。
解决方案
针对llama.cpp自定义端点的VS Code“语言模型不可用”修复方法
如果 curl 能工作,但VS Code仍然显示 “语言模型不可用”,问题很可能不是 /v1/chat/completions 端点本身。更可能的是VS Code发送的模型ID与 llama-server 暴露的模型名称/别名之间存在不匹配。
最强的修复方法是以显式别名启动 llama-server,然后在VS Code中使用完全相同的别名。
请按如下方式启动llama.cpp:
llama-server \
-m /path/to/your/model.gguf \
--alias myllamacpp \
--host 127.0.0.1 \
--port 8080 \
--ctx-size 32768 \
--n-gpu-layers -1 \
--api-key sk-local \
--jinja
然后在VS Code的 chatLanguageModels.json 中使用以下内容:
[
{
"name": "Local llama.cpp",
"vendor": "customendpoint",
"apiKey": "sk-local",
"apiType": "chat-completions",
"models": [
{
"id": "myllamacpp",
"name": "My llama.cpp",
"url": "http://127.0.0.1:8080/v1/chat/completions",
"toolCalling": false,
"vision": false,
"maxInputTokens": 32768,
"maxOutputTokens": 4096,
"streaming": false
}
]
}
]
然后验证llama.cpp是否暴露了相同的模型ID:
curl http://127.0.0.1:8080/v1/models \
-H "Authorization: Bearer sk-local"
你应该看到类似如下的内容:
"id": "myllamacpp"
然后使用相同的模型名称测试聊天:
curl http://127.0.0.1:8080/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer sk-local" \
-d '{
"model": "myllamacpp",
"messages": [
{"role": "user", "content": "Say only: working"}
],
"stream": false
}'
之后,彻底重启VS Code:
pkill -f code
code
以下是一些重要细节:
请使用 127.0.0.1 而不是 localhost,以避免IPv4/IPv6绑定问题。
除非你实际在运行带有正确投影文件的多模态模型,否则请设置 "vision": false。
先设置 "streaming": false,以再移除一个兼容性变量。
先使用 "toolCalling": false 让普通聊天工作。之后如果能工作,再尝试通过将其改为以下设置来进入Agent模式:
"toolCalling": true
对于Agent模式,在 llama-server 命令中保持 --jinja,因为工具/函数调用取决于模型模板的支持。
核心思路是:让llama.cpp的别名与VS Code的模型 "id" 完全相同。 端点可以支持 curl,但如果模型身份或能力与它所期望的不匹配,VS Code仍可能失败。