用自然语言描述,找出讨论该话题的会话
29.4/100
综合分
0
GitHub 星标
—
npm 周下载
—/5
用户评分
数据截至 2026/10/23 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。
安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add minhaoli/dsh-session-query-vector该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)
状态速览
判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态信任档位:仅索引
是什么
dsh 原生插件 · chat
装得上吗
本站尚未做安装检查
安全吗
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
还在维护吗
活跃:最近一次提交在 15 天前
档位由哪些信号合成
本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。
社区实装还没有人打卡 · 装过的第一个就是你
安全扫描自动 · 静态分析源码v2.7.0🔵 扫描:含敏感能力尚无人工评估展开查看扫描说明与证据 ↓
安全扫描自动 · 静态分析源码
v2.7.0静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。
读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 11 处,展示前 11 条)
- 发起网络请求lib/index.js:289
res = await fetch(url, { method: "POST", headers, body: JSON.stringify(body), signal: ctrl.signal }); - 读取密钥环境变量indexer.mjs:41
const API_KEY = process.env.VEC_API_KEY ?? ""; - 读取本地文件indexer.mjs:70
try { dirs = readdirSync(root, { withFileTypes: true }); } catch { return map; } - 读取本地文件indexer.mjs:75
try { subs = readdirSync(p1, { withFileTypes: true }); } catch { continue; } - 读取本地文件indexer.mjs:80
try { files = readdirSync(p2); } catch { continue; } - 读取本地文件indexer.mjs:84
const m = statSync(join(p2, target)).mtimeMs; - 发起网络请求indexer.mjs:106
const res = await fetch(url, { - 写入本地文件indexer.mjs:166
mkdirSync(dirname(DB_PATH), { recursive: true }); - 读取本地文件indexer.mjs:172
try { holder = readFileSync(LOCK_PATH, "utf8").trim(); } catch {} - 写入本地文件indexer.mjs:182
writeFileSync(LOCK_PATH, String(process.pid)); - 删除本地文件indexer.mjs:183
process.on("exit", () => { try { unlinkSync(LOCK_PATH); } catch {} });
扫描于 2026/11/2(0 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库
静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。
依赖的 DSH / Cordis 模块
@deepseek-ai/cordis@deepseek-ai/dsh-session-query@deepseek-ai/schemastery给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个
DSH 的语义会话搜索后端,由 Ollama 或任意 OpenAI 兼容的嵌入端点提供支持。
README
由 DeepSeek 最新模型翻译生成dsh-session-query-vector
给 DSH 的会话语义搜索后端,跑在 Ollama 或任何 OpenAI 兼容的 /v1/embeddings 接口上。
DSH 自带一个 SQLite 全文后端(@deepseek-ai/dsh-session-query-sqlite),回答的是「哪个会话出现过这个词」。这个包把它换成向量后端,回答的是「哪个会话在讲这件事」—— 你用自己的话问,查询被嵌入成向量,最接近的片段带着会话和摘录一起返回。
它是对官方后端的直接替换:两者都扩展同一个 sessionQuery 服务,所以同一时刻只能挂一个。
适用版本
| DSH | 0.2.1-rc.2(开发与验证所用版本) |
| @deepseek-ai/cordis | ~4.0.5 |
| @deepseek-ai/schemastery | 3.18.5(DSH 自带) |
| Node.js | 22+ —— 索引器用的是内置 node:sqlite(DatabaseSync) |
| 嵌入服务 | 本地 Ollama,或任何 OpenAI 兼容 API |
更早的 DSH 版本未验证。
两个部分
| 部分 | 是什么 |
| lib/index.js | 查询侧 —— 一个 SessionQueryEngine 子类,作为插件挂载。
展开完整文档(README 剩余 1 节)
dsh-session-query-vector
给 DSH 的会话语义搜索后端,跑在 Ollama 或任何 OpenAI 兼容的 /v1/embeddings 接口上。
DSH 自带一个 SQLite 全文后端(@deepseek-ai/dsh-session-query-sqlite),回答的是「哪个会话出现过这个词」。这个包把它换成向量后端,回答的是「哪个会话在讲这件事」—— 你用自己的话问,查询被嵌入成向量,最接近的片段带着会话和摘录一起返回。
它是对官方后端的直接替换:两者都扩展同一个 sessionQuery 服务,所以同一时刻只能挂一个。
适用版本
| DSH | 0.2.1-rc.2(开发与验证所用版本) |
| @deepseek-ai/cordis | ~4.0.5 |
| @deepseek-ai/schemastery | 3.18.5(DSH 自带) |
| Node.js | 22+ —— 索引器用的是内置 node:sqlite(DatabaseSync) |
| 嵌入服务 | 本地 Ollama,或任何 OpenAI 兼容 API |
更早的 DSH 版本未验证。
两个部分
| 部分 | 是什么 |
| lib/index.js | 查询侧 —— 一个 SessionQueryEngine 子类,作为插件挂载。搜索时只读索引,从不触发嵌入。 |
| indexer.mjs | 索引侧 —— 独立脚本。遍历 ~/.dsh/sessions,嵌入消息正文,写入向量。 |
刻意分开:搜索必须快,嵌入很慢。查询侧在搜索路径上绝不触发嵌入;索引没建好就返回空结果。
两侧必须用同一个嵌入模型。 否则存的向量和查询向量不在同一个空间里,所有分数都是噪声。embedModel 两边要配成一样。
安装
dsh plugin --profile <你的 profile> add github:minhaoli/dsh-session-query-vector
包里声明了 dsh.bundle.patch,所以 dsh plugin add 会把它写进 dsh.profile.bundles,下次启动即挂载。
bundle patch 同时会 disable 官方后端,因为两者都注册 sessionQuery:
本包自带的 cordis.patch.yml
- id: session-query-sqlite
disabled: true
- insert:
- id: session-query-vector
name: 'dsh-session-query-vector'
config:
provider: ollama
baseUrl: 'http://127.0.0.1:11434'
embedModel: bge-m3
openAt: first-search
如果你想保留官方后端,就把第一行删掉、并且不要挂这个包 —— 两者不能共存。
配置
写在 profile 的 cordis.patch.yml 里。patch 是整块替换目标行的 config 而不是合并进去,所以要保留的键必须一起重写。
~/.dsh/profiles/<profile>/cordis.patch.yml
- insert:
- id: session-query-vector
name: 'dsh-session-query-vector'
config:
path: 'C:/Users/<you>/.dsh/storages/session-query-vector.sqlite'
provider: openai
baseUrl: 'https://api.siliconflow.cn/v1'
apiKey: 'sk-...'
embedModel: 'BAAI/bge-m3'
openAt: first-search
topK: 20
minScore: 0.45
| 键 | 默认值 | 含义 |
| path | ~/.dsh/storages/session-query-vector.sqlite | 索引库。首次使用时创建。 |
| openAt | first-search | startup 挂载时开库;first-search 首次查询时开;never 完全禁用搜索。 |
| provider | ollama | ollama 或 openai。openai 指任何 OpenAI 兼容的 /v1/embeddings。 |
| baseUrl | http://127.0.0.1:11434 | 嵌入接口地址。结尾的 /v1 会被剥掉再加回去,所以 https://host/v1 和 https://host 都能用。 |
| apiKey | "" | 非空时以 Authorization: Bearer 发送。Ollama 不需要。 |
| embedModel | bge-m3 | 必须和索引器一致。 |
| embedTimeoutMs | 120000 | 单次请求超时。 |
| topK | 20 | 排序前从索引里取的候选数。 |
| minScore | 0.45 | 余弦相似度下限。 |
| relMargin | 0.10 | 相对截断:只有分数落在最佳命中 relMargin 之内的才算。 |
| snippetChars | 240 | 结果里摘录的长度。 |
| readWindowMax | 50 | 引擎「优先读活会话」的读取窗口。 |
接口契约
Ollama(provider: ollama)
POST {baseUrl}/api/embeddings
content-type: application/json
{ "model": "bge-m3", "prompt": "要嵌入的文本" }
返回 { "embedding": [0.013, -0.021, ...] }。
先把模型拉下来:
ollama pull bge-m3
OpenAI 兼容(provider: openai)
POST {baseUrl}/v1/embeddings
authorization: Bearer <apiKey>
content-type: application/json
{ "model": "BAAI/bge-m3", "input": ["片段一", "片段二"] }
返回 { "data": [{ "index": 0, "embedding": [...] }, ...] }。用之前会按 data[].index 排序 —— 有些提供方不按顺序返回。
baseUrl 结尾的 /v1 会先被剥掉再拼 /v1/embeddings,所以 https://api.siliconflow.cn/v1 不会变成 /v1/v1/embeddings。
满足这个契约的接口都能用:SiliconFlow、OpenAI、Azure OpenAI、Together、本地 vLLM 或 LM Studio,等等。把 baseUrl、apiKey、embedModel 设成那家自己的叫法即可。
建索引
indexer.mjs 不由 DSH 启动 —— 查询侧配好之后自己跑。它需要能 import 到 @deepseek-ai/,所以要用 DSH 的运行时跑(见下)。
分层:先第 1 层(用户消息),再第 2 层(助手消息)
node indexer.mjs
node indexer.mjs --layer=1 # 只跑用户消息 —— 最快让搜索可用
node indexer.mjs --layer=2 # 只跑助手消息
node indexer.mjs --limit=200 # 本次最多处理 200 个会话
node indexer.mjs --status # 只打印进度,不索引
node indexer.mjs --force # 强制重跑未变更的会话
node indexer.mjs --quiet # 不刷进度行,只记关键事件
node indexer.mjs --skip-active=5 # 跳过最近 5 分钟内有写入的会话
| 环境变量 | 默认值 | 含义 |
| DSH_HOME | ~/.dsh | DSH 主目录,其余路径都由它推导。 |
| DSH_MODULES | $DSH_HOME/node_modules/@deepseek-ai | 从哪里解析 @deepseek-ai/。打包版桌面应用要覆盖。 |
| VEC_DB | $DSH_HOME/storages/session-query-vector.sqlite | 索引路径 —— 必须等于插件的 path。 |
| VEC_SESSIONS | $DSH_HOME/sessions | 会话日志根目录。 |
| VEC_PROVIDER | ollama | ollama 或 openai —— 必须等于插件的 provider。 |
| VEC_BASE_URL | http://127.0.0.1:11434 | 必须等于插件的 baseUrl。 |
| VEC_API_KEY | "" | 必须等于插件的 apiKey。 |
| VEC_MODEL | bge-m3 | 必须等于插件的 embedModel。 |
| VEC_CHUNK | 1200 | 每个片段的字符数。 |
| VEC_BATCH | 16 | 每次嵌入请求的片段数。 |
| VEC_SUBAGENTS | — | 设为 1 时把子 agent 会话也纳入。 |
对打包版桌面应用跑索引器
Electron 应用的 @deepseek-ai/* 模块在 app.asar 里,普通 node 读不到。把 DSH_MODULES 指向 asar,并用应用自己的二进制以 Node 模式跑:
$env:ELECTRON_RUN_AS_NODE = '1'
$env:DSH_MODULES = 'D:/APP/deepseek harness/resources/app.asar/dsh/node_modules/@deepseek-ai/'
& 'D:\APP\deepseek harness\DeepSeek Harness.exe' indexer.mjs --status
从源码检出跑的话,直接 node indexer.mjs 就行 —— DSH_MODULES 已经指向真实文件。
索引结构
单个 SQLite 文件,application_id = 1146308690(和官方后端区分开),user_version = 1。application_id 属于别的应用的文件会被拒绝,而不是覆盖掉。
| 表 | 作用 |
| vec_chunks(session_id, seq, type, time, chunk_idx, text, dim, vector BLOB) | 每个嵌入片段一行。主键 (session_id, seq, chunk_idx)。 |
| vec_sessions(id, revision, indexed_at, chunks, cwd, layer) | 每会话的簿记;revision 决定增量跳过。 |
| vec_queries(text, vector, dim, at) | 查询向量缓存,重复搜索省掉一次嵌入往返。 |
所有表都是 STRICT。每个会话一个事务,中断不会留下写了一半的会话。
值得知道的失败模式
- 结果为空但没报错。 索引没建,或者建的时候用了别的模型。跑一下 --status。
- database ... belongs to another application。 path 指向了本包没创建过的文件。
- database ... is not an empty or recognized index。 文件存在且有表,但没有 application_id —— 换个 path 或删掉它。
- /v1/v1/embeddings 404。 baseUrl 带结尾 /v1 的情况代码已经处理;这里还 404 说明那家提供方的路径不符合 OpenAI 契约。
- 两个后端同时挂着。 sessionQuery 被注册两次,第二个挂载失败。把 session-query-sqlite disable 掉。
配套插件
- dsh-session-tree —— 带标签、分组、拖拽移动的侧栏。
- dsh-session-manager —— 会话维护的 agent 工具与 REST API。
- dsh-session-search —— 对话内查找栏(基于 DOM,与本插件互补)。
- dsh-ui-reload —— 一键重载前端按钮。
许可
MIT —— 见 LICENSE。预览分享卡片长什么样 ↓
分享 · DeepSeek Harness Hub
minhaoli/dsh-session-query-vector
用自然语言描述,找出讨论该话题的会话
相关插件 · 对话 / 记忆
上下文中枢oceanbase/powercontext
上下文跟着工作走 —— 跨会话、跨智能体、跨人。
★ 1,482已汉化DSH
73
智能体记忆库plastic-labs/honcho
Honcho 是记忆基础设施,用来构建有状态的智能体。这些智能体能理解不断变化的人、智能体、群组、项目和想法。
★ 7,848已汉化DSH
71.7
长程智能体控制面loopx-project/loopx
给 Agent 一个目标,让工作持续向前。
★ 6,358已汉化DSH
71.3
智能体上下文数据库volcengine/OpenViking
给 AI 智能体用的上下文数据库
★ 41,246已汉化DSH
71.3
长效机器人团队Fei2411/DS-Bot
DS Bot 是一个基于 DeepSeek Harness简称 dsh的 bot 插件,插件将 dsh 改造为 bot…
★ 4,717已汉化DSH
71.1
可携带记忆层EverMind-AI/EverOS
为什么选择 EverOS
★ 13,711已汉化DSH
71.1