要把 DSH Desktop 接入到 VSCode 这类本地编辑器里做代码补全,最直接的方法不是安装官方插件,而是先确认 DSH Desktop 是否暴露了本地 HTTP 接口,然后用编辑器支持自定义 HTTP 请求的机制去调用它。由于 DSH Desktop 不是标准 LSP 服务,也没有通用的官方扩展,因此接入过程需要你自己确认端口、请求格式和超时行为。
适用于 DSH Desktop 已经提供本地 HTTP API 的版本。操作动作是:先查进程监听端口,再用 curl 验证请求与响应结构,然后在编辑器里配置自定义补全端点,并把选中代码和光标上下文拼成 messages。风险边界是:不同版本的 API 路径和字段可能不同,如果 DSH Desktop 没有暴露 HTTP 接口,就需要改用其自带集成方式或等待官方支持。
确认DSH Desktop是否监听本地HTTP端口
明确 API 地址是第一步。DSH Desktop 往往会在启动时启动一个本地服务,端口可能动态分配。可以先用系统命令查看监听端口,重点找进程名或命令行特征。
# Windows PowerShell
Get-NetTCPConnection -State Listen | Where-Object { $_.OwningProcess -match 'DSH' }
# Linux / macOS
lsof -i -P -n | grep -i dsh
# 或者查看进程参数
ps aux | grep -i dsh如果命令查不到,直接打开 DSH Desktop 的日志,搜索类似 Listening、http://127.0.0.1 的字样。常见路径包含 /v1,例如 http://127.0.0.1:5000/v1。记录下实际地址,后续所有请求都基于这个地址。
用curl测试补全接口返回格式
确认端口后,不要急着配编辑器,先用 curl 发一条简单补全请求,确认接口接受什么结构、返回什么字段。以 OpenAI 兼容接口为例,通常请求体是消息列表。
curl -X POST http://127.0.0.1:PORT/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"messages": [{"role": "user", "content": "def add(a, b):\n "}],
"max_tokens": 100
}'观察返回 JSON 中补全文本的位置。多数兼容接口会在 choices[0].message.content,也有部分老接口在 choices[0].text。记录这个字段路径,编辑器配置时需要告诉它如何取出补全结果。
在VSCode中配置自定义HTTP提示词请求
VSCode 里没有直接支持任意 HTTP 补全的内置机制,但可通过 Continue 这类支持自定义 API 的扩展,或自己写一个脚本绑定到快捷键。以 Continue 为例,它允许你配置一个 OpenAI 兼容模型,指向 DSH Desktop 的本地地址。
// ~/.continue/config.json
{
"models": [
{
"title": "DSH Desktop Local",
"provider": "openai",
"model": "dsh-local",
"apiBase": "http://127.0.0.1:PORT/v1",
"apiKey": "local"
}
]
}保存配置后,在 Continue 面板里切换到这个模型即可。如果不想依赖扩展,也可以写一个 Node 或 Python 脚本接受当前编辑器上下文,然后调用 DSH Desktop,再把结果通过 VSCode 的 insertSnippet 或剪贴板插入。
将编辑器上下文拼成请求中的messages
要让补全贴合当前代码,需要把选中的代码、光标前的上下文、甚至文件后缀告诉模型。推荐的结构是:系统消息固定说明补全任务,用户消息包含“当前文件语言 + 代码段 + 光标提示”。
messages = [
{"role": "system", "content": "You are a code completion assistant. Only output the code completion."},
{"role": "user", "content": f"Language: Python\nComplete the following code:\n{selected_code}\n"}
]实际脚本示例(Python,接收选中代码并生成请求体):
import sys, json
selected = sys.stdin.read()
payload = {
"model": "dsh-local",
"messages": [
{"role": "system", "content": "You are a code completion assistant."},
{"role": "user", "content": f"Complete the code:\n{selected}"}
],
"max_tokens": 200
}
print(json.dumps(payload))拼接规则只有一个核心:把“光标需要补全的位置”表达成自然语言要求。不要只丢一段代码进去,否则模型可能不知道从哪开始补。
验证补全流畅度并调整超时
配置完成后,先连续试几次补全。观察两个地方:补全内容是否符合预期,以及从发起到显示结果是否顺畅。如果点击补全后转圈时间过长,说明响应时间已超出编辑器默认等待阈值。
可以先用 curl 测单次请求耗时,关注 total_time 字段。
curl -s -o /dev/null -w "%{time_total}" -X POST http://127.0.0.1:PORT/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "test"}]}'如果这个耗时明显影响手速,就调整编辑器或脚本中的超时参数。比如在 Continue 配置中设置 requestTimeout,在自定义脚本里设置 timeout 字段。通常先设 3000ms,连续几次都超过再往上加。注意,本地模型首次加载或切换模型后首条请求可能慢,这是正常现象,多试几次再下结论。