dsh-duckdb:在 DSH 里用 SQL 查本地数据文件

前言

在 DeepSeek Harness(dsh)里让模型分析 CSV、Parquet 等本地表,常见做法是再接一层 Python MCP 或外部服务。社区里已有类似方案会依赖 mcp-server-duckdb 和单独的安装脚本。若你希望模型直接在工作区内用 SQL 读文件、先看 schema 再查数,且不想维护 Python 运行时或联网服务,需要一种挂在 Cordis 上的原生插件路径。下面介绍维护者 alitrack 发布的 dsh-duckdb。

这是什么

dsh-duckdb 是 DeepSeek Harness 的 Cordis 原生插件:通过 ctx.tools 注册两个面向模型的工具,在本地调用系统上的 duckdb 可执行文件,对附件数据文件执行 SQL。插件本身不依赖 Python,也不发起网络连接。分类上属于工作流类插件;源码与说明见 GitHub,目录页见 SkillHub。

核心功能

插件暴露两个工具,用途如下。

工具 作用
duckdb_query 对本地数据文件执行一条 SQL(DuckDB 引擎)
duckdb_schema 在查询前查看列名、类型、可空性、样例行与近似行数

通过 files 参数挂载文件时,按顺序映射为视图名 f0、f1、……。支持的输入格式包括:.csv、.tsv、.parquet、.json、.jsonl、.ndjson、.duckdb。

与生态中仅有的可比项目(通过 Python MCP 接入 DuckDB 的方案)相比,本插件以零额外依赖的方式直接运行本地 duckdb 二进制。README 注明:截至 2026-10-29,公开 DSH 插件仓库中尚无其它原生 DuckDB 工具。

安装与启用

使用前需在 PATH 上安装较新版本的 duckdb CLI;也可通过环境变量 DSH_DUCKDB_BIN 指定二进制路径。

从插件目录安装:

dsh plugin --profile web add dsh-duckdb

或从 GitHub 添加:

dsh plugin --profile web add github:alitrack/dsh-duckdb

版本匹配。 插件声明 peerDependencies 为 @deepseek-ai/dsh-tools: ^0.0.1-rc.1,README 标明在 dsh 0.2.1-rc.2 上测试。若运行时因 peer 版本不匹配而拒绝加载,可固定 dsh 到测试版本,或使用 profile 侧的 compatibility.json / dsh plugin allow-version 机制(README 对 CLI 提示与真实机制有补充说明)。

本地开发时可用 overlay 指向插件 index.js 的绝对路径,无需 pnpm;示例见仓库 README 中的 local-overlay.yml。

典型用法

对话中可以先用 schema 再看数据,再用 query 聚合。README 中的示例如下(路径需为会话工作区内的绝对路径):

You: Look at /workspace/sales.csv and total the amount by city.

Agent: [duckdb_schema target=/workspace/sales.csv]
       columns: city VARCHAR, amount BIGINT
       approx rows: 3

       [duckdb_query sql="SELECT city, sum(amount) AS total FROM f0 GROUP BY city ORDER BY city"
        files=["/workspace/sales.csv"]]
       BJ | 300
       HZ | 100
       SH | 200

duckdb_query 参数摘要

参数 类型 说明
sql string(必填) 单条语句;附件表引用 f0、f1、……
files string 数组 工作区内绝对路径,按序挂载为视图
max_rows integer 默认 200,硬上限 1000
read_only boolean 默认 true

duckdb_schema 参数摘要

参数 类型 说明
target string(必填) 绝对文件路径,或已挂载视图名
sample_rows integer 默认 5,硬上限 50

安全模型与运行注意

一切在本地执行;插件不持有凭据、不连网。模型提交的 SQL 视为不可信输入,插件实现了多层约束:

  1. 工作区限制:路径必须为绝对路径且解析后会话工作区根目录内;拒绝 ..、指向外部的符号链接、根外绝对路径、目录与缺失文件。
  2. 默认只读:默认仅接受 SELECT / WITH / VALUES / FROM / DESCRIBE / SHOW / SUMMARIZE / EXPLAIN / PRAGMA;写操作需显式 read_only: false。
  3. 始终禁止的语句:即便开启写模式,COPY、ATTACH、DETACH、INSTALL、LOAD、SET 等仍可触及进程外资源的语句仍被拦截。
  4. 行数上限与单语句:结果在 max_rows 处截断并返回真实 row_count;每次调用只允许一条语句;单次调用超时 30 秒。

插件以当前 dsh 进程的用户权限运行 SQL 与文件访问。安装前建议阅读仓库源码与 MIT 许可证,确认符合你的安全策略。

适用场景

  • 智能体需要在不离开工作区的前提下,对 CSV / Parquet / JSON 等做聚合、过滤、JOIN。
  • 希望零 Python、零外部 MCP 服务,仅依赖本机 duckdb CLI。
  • 需要先 duckdb_schema 探表,再 duckdb_query 写 SQL 的两步工作流。

不适合依赖网络数仓、或需要在插件内执行任意 DuckDB 扩展安装(INSTALL / LOAD 被禁止)的场景。

结尾

dsh-duckdb 把 DuckDB 以 Cordis 工具形式接进 dsh:两条工具、本地二进制、工作区与只读策略内置。若你在 DSH 生态里做本地数据分析工作流,可从目录页或 GitHub 安装并在对话中直接挂载文件路径使用。

  • 目录页:https://www.skillhub.cn/plugins/alitrack/dsh-duckdb
  • 仓库:https://github.com/alitrack/dsh-duckdb

DSH 社区插件目录为独立站点,与 DeepSeek / 幻方无官方从属关系;插件由社区维护者 alitrack 发布。

羽毛球分组比赛记分
小程序二维码

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

小夜