DSH Desktop 集成到本地开发工作流做代码补全

文章导读
要把 DSH Desktop 接入到 VSCode 这类本地编辑器里做代码补全,最直接的方法不是安装官方插件,而是先确认 DSH Desktop 是否暴露了本地 HTTP 接口,然后用编辑器支持自定义 HTTP 请求的机制去调用它。由于 DSH Desktop 不是标准 LSP 服务,也没有通用的官方扩展,因此接入过程需要你自己确认端口、请求格式和超时行为。
📋 目录
  1. 确认DSH Desktop是否监听本地HTTP端口
  2. 用curl测试补全接口返回格式
  3. 在VSCode中配置自定义HTTP提示词请求
  4. 将编辑器上下文拼成请求中的messages
  5. 验证补全流畅度并调整超时
A A

要把 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 的日志,搜索类似 Listeninghttp://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。记录这个字段路径,编辑器配置时需要告诉它如何取出补全结果。

DSH Desktop 集成到本地开发工作流做代码补全

在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,接收选中代码并生成请求体):

DSH Desktop 集成到本地开发工作流做代码补全
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,连续几次都超过再往上加。注意,本地模型首次加载或切换模型后首条请求可能慢,这是正常现象,多试几次再下结论。