🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

门店选址工作台 dataelement/dsh-site-selection

DeepSeek Harness
dataelement34 天前有提交已提供中文文档扫描:含敏感能力

门店选址工作台 — DSH 插件。真实三维城市地图上点选即分析,DSH 按口头要求批量找点位。地理数据来自…

42.4/100
综合分
13
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/10/2 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

该插件未发布到 npm,按作者文档从 GitHub 源安装即可(静态检查只覆盖 npm 路径,不代表插件不可用)。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add dataelement/dsh-site-selection
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么
dsh 原生插件 · tool
装得上吗
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
更新放缓:最近一次提交在 34 天前
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →
社区实装还没有人打卡 · 装过的第一个就是你
安装兼容性检查需源码安装

仓库 package.json 标记 private,未发布到 npm,需从源码安装

展开查看检查明细 ↓

以下结论由程序自动检查 npm 包、engines 声明与入口文件得出,未做人工实机验证——能装不等于用着没问题。

✗npm 包dsh-site-selection(未发布到 npm,仅可源码安装)
✓Node 引擎要求 >=20 · 基线 Node 22.19 满足
✓dsh CLI 依赖未声明 dsh 版本约束
✓入口文件main/exports/bin 已声明

源码安装时若 pnpm 拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑。

验证方式:npm registry 存在性 + package.json 静态校验 · 最后检查 2026/11/1 12:53:07

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件发起外部网络请求
查看扫描证据(共 30 处,展示前 17 条)
  • 读取本地文件
    src/index.js:62
    const read = async file => (file ? JSON.parse(await readFile(join(ROOT, 'data', file), 'utf8')) : null)
  • 读取本地文件
    src/index.js:600
    try { if (await readFile(target, 'utf8') === content) return } catch {}
  • 写入本地文件
    src/index.js:601
    await writeFile(target, content, 'utf8')
  • 写入本地文件
    src/index.js:609
    mkdir(join(folder, 'photos'), { recursive: true }),
  • 写入本地文件
    src/index.js:610
    mkdir(join(folder, 'exports'), { recursive: true }),
  • 读取本地文件
    src/index.js:615
    state = migrate(JSON.parse(await readFile(statePath, 'utf8')), folder, id)
  • 写入本地文件
    src/index.js:618
    await writeFile(statePath, `${JSON.stringify(state, null, 2)}\n`, 'utf8')
  • 写入本地文件
    src/index.js:634
    await writeFile(temp, `${JSON.stringify({ ...persist, referenceModel: null, districtModel: null }, null, 2)}\n`, 'utf8')
  • 写入本地文件
    src/index.js:635
    await rename(temp, statePath)
  • 读取本地文件
    src/index.js:659
    const entries = await readdir(DATA_ROOT, { withFileTypes: true })
  • 读取本地文件
    src/index.js:666
    const raw = JSON.parse(await readFile(join(DATA_ROOT, entry.name, 'project.json'), 'utf8'))
  • 读取本地文件
    src/index.js:848
    const bytes = await readFile(file)
  • 发起网络请求
    lib/client.js:159
    const response = await fetch(path, options)
  • 读取本地文件
    src/datasets.js:72
    try { names = readdirSync(dir) } catch { return {} }
  • 发起网络请求
    public/app.js:371
    const doc = await fetch(`/api/site-selection/dataset?name=${encodeURIComponent(name)}`).then(r => r.json())
  • 发起网络请求
    public/app.js:387
    state.market = await fetch(`/api/site-selection/market?name=${encodeURIComponent(name)}`).then(r => r.json())
  • 发起网络请求
    public/app.js:1178
    const response = await fetch(path, options)
扫描于 2026/11/3(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-host-webserver@deepseek-ai/dsh-client-connection
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

界面预览

3 张 · 点击查看大图

功能亮点

  • 三维城市地图点选分析
  • 按口头要求批量找点位
展开完整介绍(75 字)↓

门店选址工作台 — DSH 插件。真实三维城市地图上点选即分析,DSH 按口头要求批量找点位。地理数据来自 OpenStreetMap (ODbL)。

README

由 DeepSeek 最新模型翻译生成
门店选址工作台 DSH (DeepSeek Harness) 插件。在真实三维城市地图上点任意位置,立刻得到这个点的选址分析—— 把要求用大白话说给 DSH,它按同一套模型批量找位置、写进名单;看中哪个位置,再把那里在租的铺收进来;踩点后回填,右侧对话全程读得懂你选中的是哪个点。 功能 - 点哪算哪 — 地图上任意位置毫秒级出分析:三个维度分、每项指标的百分位、风险提示、客群构成 - 按业态打分 — 开咖啡店和开药店,同一个点分数不一样:以本市同业态已开门店的位置分布为基线 - 说人话找位置 — 「地铁 200 米内、餐饮多、同类店别超过 3 家,找 10 个」,DSH 翻成查询跑同一份数据 - 两级清单:位置 → 铺源 — 先判断位置行不行,再看那里有什么铺可租。
展开完整文档(README 剩余 1 节)
门店选址工作台

DSH (DeepSeek Harness) 插件。在真实三维城市地图上点任意位置,立刻得到这个点的选址分析——
把要求用大白话说给 DSH,它按同一套模型批量找位置、写进名单;看中哪个位置,再把那里在租的铺收进来;踩点后回填,右侧对话全程读得懂你选中的是哪个点。

功能

- 点哪算哪 — 地图上任意位置毫秒级出分析:三个维度分、每项指标的百分位、风险提示、客群构成
- 按业态打分 — 开咖啡店和开药店,同一个点分数不一样:以本市同业态已开门店的位置分布为基线
- 说人话找位置 — 「地铁 200 米内、餐饮多、同类店别超过 3 家,找 10 个」,DSH 翻成查询跑同一份数据
- 两级清单:位置 → 铺源 — 先判断位置行不行,再看那里有什么铺可租。铺源收进来自动挂在最近的位置下,地图、列表、详情都用铺源自己的棕黄色,不和位置混淆
- 铺源图层 — 一键在地图上叠加在租铺源,标签就是租金(元/㎡/天);点开位置详情自动列出 400m 内的铺
- 候选清单 — 所有点位的每项指标并排,按分排序,点行在地图上定位
- 三维城市底图 — 真实路网、用地、建筑轮廓与高度,自绘 canvas,不用瓦片、不用 Key、离线可跑
- 踩点闭环 — 待看 → 看过 → 上会中 → 签约 / 否决,每一步在列表里一键推进;定案有记录、能撤回
- 换城市一条命令 — fetch-city.mjs 建好数据集,重启即可用,不改代码

Desktop 工作台适配(1.2.2)

需要提供 desktopWorkbenches.register、isActive 与 ownsSession 的 DSH Desktop。安装提供方插件后,在「工作台市场」添加并打开「门店选址」,入口固定、仓库身份和会话归属由 Desktop 管理。运行时 ID 为 wb-dataelement-dsh-site-selection;市场条目通过 legacyWorkbenchIds: [site-selection] 授权 Desktop 把旧安装的状态、收藏和会话归属迁移到仓库身份。

业务区域默认在左侧占 65%,可折叠;右侧保留唯一的原生 Agent 会话。插件不覆盖侧边栏、设置、模式切换和公共导航。新建选址项目时会请求 Desktop 建立并打开该工作台的原生会话;模式、模型、工具和权限遵循原生会话。

打开工作台即可在业务面板选择、新建和编辑选址项目。新建项目会自动建立并打开工作台会话,把开场白填入原生草稿供用户确认,不会自动发送;打开已有项目不自动创建会话,仍可在没有会话时浏览和编辑。选址项目是业务资料,DSH 工作区是原生项目文件夹,两者不要求相同。多个会话可以使用同一个选址项目;每个会话记住自己的选址项目选择,重启后恢复。旧 project.sessionId 仅作为兼容的选择提示,不抢占旧会话或恢复旧工作区。

会话对应的项目选择保存在数据根目录的 .desktop-session-projects.json;尚无会话时,最近选择保存在当前 Desktop 来源的 localStorage。新建项目时 Desktop 使用该项目文件夹建立会话;之后创建的会话会继承正在浏览的项目,已有会话的明确选择优先。切换工作台或会话保留已挂载业务 iframe,消息只有在对应工作台和会话处于前台时才会追加到原生草稿,不自动发送,不覆盖原文。离开整个工作台页面或重启前,请保存业务表单修改。

开发及安装包检查:

npm run check
npm pack --dry-run

包包含客户端、服务端、城市数据与样例。workbench.json 仅保留给旧版工具读取;现行市场以 package.json、运行时注册和仓库中的真实截图为准。插件加载由宿主插件安装机制完成;注册后才可与市场条目合并。公开市场收录仍需在 awesome-dsh-workbench 单独提交目录 PR。

发布 GitHub Release 安装包

本包保留 private: true,通过 GitHub Release 分发。每次发布前在对应版本的干净提交上执行:

npm run check
npm run pack:release

脚本会使用 npm pack 生成 dist/dsh-site-selection.tgz,检查市场要求的入口和 bundle patch、8 MiB 下载限制及解包限制,并输出 SHA-256。发布正式 GitHub Release 时,tag 与 package.json 版本保持一致(例如 v1.2.2),上传这个文件,且每个版本都使用相同的附件名,以便目录累计历史下载次数。发布后,在 awesome-dsh-workbench 的 data/workbenches/dataelement__dsh-site-selection.yml 中填写:

tarball: https://github.com/dataelement/dsh-site-selection/releases/latest/download/dsh-site-selection.tgz

目录更新和上线由市场仓库另行完成;上传前可用输出的 SHA-256 核对附件。

现行市场元数据草案见 docs/market-entry.yml。该文件用于源仓库审查和后续目录投稿,不会被 Desktop 当成运行时配置。

界面截图

三维地图与候选点位

点位详情与评分依据

参照系与指标分布

数据和能力边界

保留地图、评分、点位/铺源/项目增删改查与踩点记录。地图/评分使用随包城市数据,可离线使用;模拟商业数据在页面内标明,不作为真实测量数据。通过「交给 DSH」把项目路径与点位上下文追加到当前草稿,文件访问仍需原生会话的工具及授权,不自动扩大工作区权限。项目删除只移动到 .trash/,不删除 DSH 会话或工作区;移除工作台入口也不清除业务资料。

所有 API 和 iframe 静态资源使用宿主 connection 的请求校验与认证。写请求要求同源 JSON;文件读取拒绝符号链接跨出选址项目;iframe 消息校验来源窗口、同源、项目、当前会话及工作台归属。

快速上手

打开工作台 → 业务项目下拉 → 选一个示例:

| 示例 | 场景 | 候选点位 |
| 主理人咖啡厅 · 静安 | 在上海静安—南京西路开第一家主理人咖啡厅 | 5 个,82 → 31 分 |
| 去茶山 · 北京朝阳 | 茶饮品牌进京,朝阳区先开 3 家 | 5 个,76 → 27 分 |

示例里的点位都是真实商业地址,由工作台自己的模型从城市数据里选出来、拉开分差;面积租金等只有谈了才知道的字段留空,不编。

然后在地图上随便点一个位置,或者直接跟右侧 DSH 说:

帮我找地铁 200 米以内、周边餐饮多、但同类茶饮店别超过 3 家的位置,找 10 个

它把要求翻成查询表达式,用工作台同一套模型和数据去查,念给你听,你认可后才写进名单;找到位置之后顺手把附近在租的铺也一起报给你。

看中某个位置,点开它,下面就列着 400m 内在租的铺,点「收进」即挂到这个位置下面。
踩完点说「A、C 我去看过了,pass」,它改状态、记原话,后续查询自动排除。

点位流转

每个点位只有四步:待看 → 看过 → 上会中 → 已签约 / 已否决。新点位一进来就是待看,没有「初筛」这种没人操作的中间态。

- 在列表里推进 — 鼠标放到一行上,右侧浮出「看过了 / 上会 / 去定案」和退一步的「‹」,不用打开详情
- 一眼看出在哪一步 — 行上用彩色标签标出 看过 / 上会中 / 已签约 / 已否决,已否决连理由一起写在行里;筛选栏按 待看 / 看过 / 上会 / 定案 分开
- 去定案有引导 — 点「去定案」会展开右侧详情、滚到底部的定案区并高亮,签约或否决就在那两个按钮
- 定案有记录 — 已定案的点位,名字下方一条红 / 绿横幅写明结论、日期和理由;底部定案区是完整记录卡(时间、理由标签、说明);「记录」页里也有一笔
- 能反悔 — 记录卡下的「撤回定案,退回上会中」(或列表行上的「‹」)把点位退回去,定案记录随之清掉,活动记录里保留撤回这一笔
- 否决必须有理由 — 签约 / 否决只能走定案流程,直接改状态改不到已签约

交给 DSH

详情面板底部的四个按钮把当前点位(坐标、面积租金、百分位、风险、踩点记录)连同你的要求一起填进右侧对话框,确认后回车即可:

| 按钮 | 用途 |
| 查商圈信息 | 让 DSH 查工作台看不到的公开信息:在建项目、地铁规划、大型客流源、地方性限制 |
| 生成材料 | 生成一页上会材料初稿,先在对话里给你看,确认后再落盘 |
| 带上这个点位发过去 | 带上点位上下文问任意问题 |
| 解析铺源(顶栏) | 把中介 / 房东发来的一段文字解析成结构化点位追加进名单 |

没选中点位也能发:会带上基线和整份名单,「找 10 个 80 分以上的位置」这种要求不需要先点谁。

评分

基线随业态变。 项目设了业态(咖啡、茶饮、正餐、快餐、烘焙、便利店、药店……共 25 种),就以本市已开的同业态门店位置为尺子,拿候选点和它们比百分位。
同业态样本不足 80 家的城市退回全零售基线,界面会说明。
OSM 对部分业态覆盖太薄时,thicken-formats.mjs 按真实门店的选址特征在真实商业地址里取样补足;真实门店少于 8 家的业态不扩样。

分三个维度,先各自算百分位平均,再把三个维度平均:

| 维度 | 指标 |
| 客流基础 | 500m 建筑面积、500m 餐饮、最近商场 |
| 可达性 | 最近地铁口、300m 公交站、150m 过街设施、300m 停车场 |
| 位置质量 | 120m 内道路数、500m 街道总长 |

同业竞争和客群结构照常显示但不计分——它们没有「越高越好」的方向。
无排烟 / 办不出食品经营许可 / 无独立上下水,命中任一条直接判「不建议」。

分数是排名不是绝对好坏,每项都摊开给你看原始值、在基线里排第几、基线中位数。

真实数据 vs 模拟数据

| 层 | | 说明 |
| POI、路网、建筑、楼面面积 | 真实 | OpenStreetMap |
| 评分、百分位、基线 | 真实 | 完全由上面那层算出 |
| 铺源、租金、客流、商场档次 | 模拟 | *-market.json,程序生成 |

模拟层演示的是接口契约:字段口径对齐国内数据商实际售卖的内容(文件里 vendors 写明现实中向谁买),买到真数据后按同一 schema 灌进来,上层代码不用动。

模拟数据永远不进分数,有单测守着。整个数据集作为演示夹具,标记只在选择数据集处出现一次。

加你自己的城市

自带北京、上海、广州。换城市不用改代码:

node scripts/fetch-city.mjs --id shenzhen-futian \
--label "深圳 · 福田区" --bbox 113.90,22.50,114.10,22.60

从 Overpass 抓 POI、路网、建筑、楼面面积、公交/停车/过街,写进 src/data/。
重启 DSH,新城市自动出现在建项目的下拉里。

Overpass 是免费服务,一个城区要跑一阵子。中断了重跑同一条命令即可续传。

数据

| | 北京 · 五环内 | 上海 · 外环内 | 广州 · 主城区 |
| POI | 48896 | 58942 | 26011 |
| 路网 | 35421 条 | 29864 条 | 22213 条 |
| 三维建筑 | 3011 栋(最高 528m) | 4459 栋(最高 632m) | 4195 栋(最高 440m) |
| 模拟铺源 | 2700 | 1900 | 1300 |

项目文件落在 ~/Documents/DSH 选址项目/<项目名>/,可用 DSH_SITE_SELECTION_ROOT 改。
删除项目只是移到同目录的 .trash/,不会真删。

命令行(给 DSH 用)

DSH 通过项目文件夹里的 CONTEXT.md 读懂结构,再用这几个脚本干活:

node scripts/query-sites.mjs --where "..." --limit 10 # 按条件找位置
node scripts/query-listings.mjs --near-sites --radius 400 # 每个位置附近的在租铺源
node scripts/query-listings.mjs --adopt lst-0123 # 把一间铺收进清单,字段自动带入

已知限制

- 顶级商场未必在 OSM 里(如上海恒隆、兴业太古汇),那一带租金会偏低
- 「路网交汇度」用 120m 半径,说的是有几条路在附近汇合,不等于这个铺是拐角位
- 三里屯这类靠品牌聚集吸客的商圈会被低估,现有特征抓不到
- OSM 的 POI 覆盖不如商业地图,要门牌号级搜索和路径规划得接持牌服务商

开发

npm run check # 语法 + 57 个单测
npm run sample # 重新生成两个示例项目
npm run fetch-city # 加城市
npm run market # 重新生成模拟商业数据

许可

代码 MIT(LICENSE)。

src/data/ 下的地理数据是 OpenStreetMap 衍生数据库,ODbL 1.0,具有传染性—— © OpenStreetMap contributors。对外分发或商业化前请读 DATA-LICENSE.md。

开场白草稿(1.2.2)

新建业务项目后,工作台会自动打开工作台会话,把原版开场白追加到原生草稿,由用户确认后发送,不会自动调用模型。打开已有项目时不会自动创建会话;其待准备的开场白仍可在关联会话后追加。尚无会话时先保存待准备内容;创建或打开对应会话后自动追加。同一会话与同一业务资料只准备一次。已有普通文字保留,引用卡片或正在提交的草稿会延后追加,待可用时重试。待准备内容与交付记录保存在当前 Desktop 来源的 localStorage,刷新后继续;清除浏览器存储会清除该记录。
预览分享卡片长什么样 ↓dataelement/dsh-site-selection
分享 · DeepSeek Harness Hub
dataelement/dsh-site-selection

门店选址工作台 — DSH 插件。真实三维城市地图上点选即分析,DSH 按口头要求批量找点位。地理数据来自…

这是你的仓库?认领条目

回到顶部