dsh-semble:DSH 中的语义代码搜索工具

前言

DeepSeek Harness(DSH)插件生态采用「一切皆插件」的架构,智能体在会话中通过注册的工具访问外部能力。现有的 grep 等工具需要已知字符串才能检索,而智能体在代码库中往往只有行为描述,例如「哪里处理请求失败时的重试策略」或「哪个模块决定评分权重」。这种时候,智能体通常开始猜测文件名,检索效率低且容易偏离目标。

dsh-semble 将 Semble 引入 DSH 会话,以两个原生工具提供语义代码搜索:semble_search 与 semble_find_related。插件从 3.0.0 版本起不再依赖 MCP 层,直接将工具注册到宿主的工具注册表,每次调用通过 uvx 启动 Semble CLI。检索时返回匹配片段而非整文件,一次查询的 token 数量约为 grep+read 的 1%,上游基准测试显示检索质量与专用 transformer 检索器相当。

核心能力

插件提供两个工具与一个斜杠命令:

  • semble_search:输入对代码行为的描述或位置说明,返回按相似度排序的 file:line 位置与代码片段。
  • semble_find_related:输入已知位置,返回其邻居:其他实现、调用方、测试等。
  • /semble:报告子命令,包括 /semble savings、/semble file-types、/semble version 与 /semble clear <index|savings|orphans|all>。

工具参数包括:
- repo:仓库的绝对路径或 https:// Git URL。可一次搜索多个仓库。
- top_k:默认 5,检索数量。首次命中不足时可提升到 10–20。
- max_snippet_lines:默认 10,片段最大行数;设为 0 仅返回位置。
- content:默认 code,可选 docs、config 或 all,控制索引内容类型。

第一次查询会构建索引(较慢,一次性);后续查询复用磁盘缓存。命中结果按相似度排序,分数为 RRF 值(约 0.0x),可视为相对排序,空结果表示未找到相关代码。

安装与启用

桌面应用

  1. 打开 DSH 桌面应用。
  2. 进入 Settings → Plugins → Install。
  3. 输入插件名:
dsh-semble
  1. 若需锁定版本,可在插件行配置中输入 dsh-semble@3.0.0。

桌面应用仅支持通过设置页安装 desktop 配置文件,CLI 会拒绝直接安装到该配置文件。

命令行

dsh plugin --profile web add dsh-semble

该命令在 web 配置文件中运行 pnpm add,并协调 dsh.profile.bundles,使插件在下一次启动时挂载。无构建步骤,无需额外豁免配置。

从仓库安装

若需跟踪 main 分支、fork 或未发布提交,使用:

dsh plugin --profile web add github:CodeIntegrity/dsh-semble

支持 github:owner/repo、git+https://…、https://github.com/owner/repo 以及 .tgz URL,需要 git 在 PATH。

本地检出安装

dsh plugin --profile web add link:/absolute/path/to/dsh-semble   # macOS / Linux
dsh plugin --profile web add link:D:\path\to\dsh-semble          # Windows

安装后配置文件指向工作副本,修改 cordis.patch.yml 后重启即可生效,无需重新安装。

前置依赖

插件依赖 uv,通过 uvx 从 PyPI 启动 Semble:

  • Windows:
winget install astral-sh.uv
  • macOS:
brew install uv
  • macOS / Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh

首次启动时会下载 Semble 包与嵌入模型(约 1–2 分钟),之后索引与查询在本地运行,无需 API 密钥、GPU 或外部服务。安装后重启 DSH,设置行可能显示「待重启」。

配置与调优

在 Settings → Plugins 编辑插件行,配置项为加载器行的 config,插件在每次调用时读取。

字段 默认值 修改原因
command uvx 若仅安装 .cmd 包装,指向 uvx.exe
args --from 'semble[mcp]' semble 追加 --content all 可同时索引文档与配置
args(版本) 浮动 使用 semble[mcp]==X.Y.Z 锁定版本
toolTimeoutMs 300000 首次调用构建索引并下载模型,调低可更快失败
env 空 限制网络下设置 HF_ENDPOINT 为镜像,设置 SEMBLE_CACHE_LOCATION 移动索引位置

修改配置会重新注册工具,磁盘索引缓存保留。

环境变量

工具通过进程环境读取配置,将变量放在插件 config 的 env 字段。/semble 命令启动独立进程并继承宿主环境,若报告与搜索需一致,建议同时在两者导出相关变量。

变量 默认值 作用
SEMBLE_INDEX_WORKERS 4 首次索引时分片仓库的工作进程数,设为 0 在进程内分片。多核机器可提升,避免后台搜索占用过多 CPU
SEMBLE_MCP_IDLE_TIMEOUT 0(永不) MCP 模式下空闲索引在内存缓存中停留的秒数;CLI 每次调用退出,该变量对该模式无影响
SEMBLE_MODEL_NAME minishlab/potion-code-16M-v2 替换为本地路径或 Hugging Face 仓库的嵌入模型
SEMBLE_MAX_FILE_BYTES 1000000 超过该大小的文件将被跳过,生成代码需索引时可调高
SEMBLE_CLONE_TIMEOUT 60 克隆 https:// 仓库允许的最长时间(秒)
HF_ENDPOINT https://huggingface.co 模型下载时的镜像地址

适用场景与注意

  • 适合需要根据行为描述而非文件名检索代码的智能体场景,如代码理解、迁移与重构辅助。
  • 插件以当前 DSH 进程的权限运行,安装前应检查源码与许可证。
  • 依赖 uv 与网络(首次下载模型),网络受限时可配置镜像。
  • 首次索引较慢,后续查询在毫秒级完成,索引增量更新。

小结

dsh-semble 为 DSH 提供了基于语义的代码检索能力,通过 semble_search 与 semble_find_related 让智能体根据行为描述而非猜测文件名定位代码,显著降低 token 消耗并提升检索精度。插件在本地完成索引与查询,无需外部服务,适合需要深度代码理解的智能体开发场景。

  • 插件目录:https://www.skillhub.cn/plugins/CodeIntegrity/dsh-semble
  • GitHub:https://github.com/CodeIntegrity/dsh-semble
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

Xiaoye