DSH HUB
HomePlugin StorePlugin PacksCommunityRankingsResourcesPublish Guide
Plugin source
Back to catalog

MrLsss /

MrLsss/cyber-self

Verified

cyber-self —— 赛博镜像:为每个身份建一座本地资料库,收集、整理、索引你的数据,随时用提问的方式复用它。

★ 0 Stars0 Forks0 IssuesN/A Community rating0 Confirmed installs
View on GitHub
READMESource: main@433220e0

CyberSelf——赛博镜像

一个人可以有多重身份,每种身份一套只属于自己的资料库。把资料收进来,自动整理、建立索引,之后用说话的方式提问,回答会注明出处。

这是一个 DSH 插件:一个身份对应一个 DSH 工作区,工作区里挂着它自己的本地资料库。

适合什么场景

  • 喜欢听歌的人(身份 A):录入歌单、乐评、歌词笔记。之后说"下雨天、一个人在家,想听安静的",从自己的资料里筛出符合的歌。
  • 数据整理工作者(身份 B):录入工作中的数据。之后按条件让它整理出符合需求的条目。
  • 学生(身份 C):录入各科资料、学习笔记。之后直接问某个知识点、某一道题。
  • 销售、服务人员(身份 D):录入多名客户的聊天记录。之后问"某个客户推进到哪一步了"。

A、B、C、D 可以是同一个人的多重身份。身份之间互相隔离,互不影响。

实际的角色五花八门,但用法始终是同一条线:

  1. 收集这个身份的相关数据;
  2. 整理归纳、向量化、建立索引;
  3. 提问,复用这些数据。

身份怎么隔离

一个身份 = 一个 DSH 工作区 = 一个资料库。库文件就放在工作区目录里的 .cyberself/kb.db,全部内容只在本机。

检索只在当前工作区的库里进行,没有跨身份检索。删掉这个工作区,它的资料库也一起删掉。

安装

需要 Node.js 22、pnpm、DSH 0.2.1-rc 系列。向量化用本机的 Ollama;扫描件和图片转写需要一个能看图的对话模型。

ollama pull bge-m3
pnpm install
pnpm build

构建产物是 lib/index.js(Host 侧)和 lib/client.js(浏览器侧)。

两个 profile 的区别

desktop(默认) kb(独立专用)
定位 日常使用的默认 profile,插件和其他插件共存 单独建一个 profile,只跑 CyberSelf,环境干净
工作区来源 已有的全部工作区,挑需要的设为资料库 只放作为身份的工作区,界面只显示资料库
适合 已经常用 DSH Desktop,想顺手给某些工作区加资料库 想严格区分"身份管理"和日常开发,或做演示

两种方式可以同时存在,各自的资料库互不影响(资料库跟着工作区走,不跟着 profile 走)。

装进 desktop profile(默认)

Desktop 默认使用的 profile 就是 desktop。把插件加进去:

dsh plugin --profile desktop add link:"$PWD"

然后编辑 ~/.dsh/profiles/desktop/package.json,把 cyberself 加进 dsh.profile.bundles:

"dsh": {
  "profile": {
    "bundles": [
      "@deepseek-ai/dsh-base",
      "@deepseek-ai/dsh-web-app",
      "cyberself"
    ]
  }
}

打开 DSH Desktop(默认就是 desktop profile)即可使用。

装进 kb profile(独立专用)

新建一个名为 kb 的 profile,只装 CyberSelf:

dsh --profile kb --from-default-profile web
dsh plugin --profile kb add link:"$PWD"

然后编辑 ~/.dsh/profiles/kb/package.json,把 cyberself 加进 dsh.profile.bundles:

"dsh": {
  "profile": {
    "bundles": [
      "@deepseek-ai/dsh-base",
      "@deepseek-ai/dsh-web-app",
      "cyberself"
    ]
  }
}

启动:

dsh --profile kb

Desktop 里切换到 kb profile 即可。

改 Host 代码要重启 profile,改客户端代码要重新 pnpm build 再刷新页面。

使用四步

1. 收集录入

打开身份对应的工作区,点顶栏的「资料库」按钮(或右栏的「资料库」页签),点「设为资料库」,然后上传文件,或填入 Host 上的目录绝对路径整目录导入。

数据 格式
文档 .pdf .docx(Word 内嵌的图片也会解析)
表格 .xlsx .xls .csv(每行一段,工作表名作为小节标题)
笔记、纯文本 .md .markdown .txt .text .log(自动识别 UTF-8 与 GBK)
网页 .html .htm(取正文、标题和表格)
图片、扫描件 .png .jpg .jpeg .webp .gif(视觉模型转写)
聊天记录 从聊天软件导出为 txt、Markdown 或 html 后导入

单个文件最大 64 MB。目录导入会递归扫描,跳过隐藏目录和 node_modules、.git、.cyberself、dist、build、lib。.doc 不支持,先另存为 .docx 或 PDF。

2. 结构化整理(自动)

导入时自动完成:按格式解析出正文,按标题、表格行、段落切成块,按内容 hash 去重。同一份文件再导一次,直接提示「这个文件已经导入过」;换个文件名、内容一样,也认得出来。

3. 向量化、索引(自动)

切块进入 SQLite,同时建两份索引:全文索引(trigram)和向量(默认 Ollama bge-m3)。向量在后台补齐,面板上能看到「已向量化 K 段 / 共 M 段」。向量还没跑完也能提问,此时只按关键词匹配。

4. 资产复用

在对话里直接问。插件先检索资料,把命中的片段交给对话模型,回答里每句结论后面带 [1]、[2] 编号,编号对应面板里能查到的原文块。资料里没有的内容,回答会直说缺什么,不猜。

举个例子。身份 D 的「客户跟进」工作区里导入了 客户-林总.txt:

3月12日 林总:报价收到,内部还要过一遍采购流程。
3月20日 我:发了第二版方案,增加了分期付款。
3月27日 林总:方案可以,约下周三下午当面签合同。

问:「和林总推进到哪一步了?」

回答:

已到签约阶段。3 月 27 日林总确认第二版方案可行,约好下周三下午当面签合同。[1]

此前 3 月 12 日报价进入对方采购流程,3 月 20 日发出了增加分期付款的第二版方案。[1]

面板上的检索框可以只查资料、不调用模型,用来核对原文和分数。

面板功能

  • 统计:几份资料、几段、已向量化几段、占用大小。
  • 文档列表:点开一份能看到每一段的原文、页码、小节标题,可以单独删除。
  • 检索框:只查资料库,不调用模型。
  • 操作:向量化全部、清空资料、删除数据。

「清空资料」删掉全部文档、分块和向量,保留资料库标记;「删除数据」删掉整个 .cyberself 目录,这个工作区不再算资料库。

回答范围

每个身份单独设置:

  • 仅资料库:只依据检索到的原文回答,资料里没有就说明缺哪类资料。
  • 允许补充:先查资料库,没覆盖的部分可以补充,补充内容单独成句并注明「(资料库外)」。

这是对模型的指令约束。要让模型完全不能联网、读文件、执行命令,在 profile 的 cordis.patch.yml 里禁用对应工具:

- id: tool-bash
  disabled: true
- id: tool-fs
  disabled: true
- id: tool-web
  disabled: true

设置

设置 → 资料库:

字段 说明
服务地址 Ollama 地址,默认 http://127.0.0.1:11434
模型 嵌入模型名称,输入框会列出已安装的模型
单次超时 单次嵌入请求的超时,默认 120 秒
每批条数 每次送给模型的文本条数,默认 8
每块字符上限 0 表示整块送入;设小可以加快向量化,代价是每块后半段不参与语义匹配
表格分块去重 打开后,Excel 和 CSV 里只有数字不同的行共用一个向量

改动模型、每块字符上限或去重开关,会清空已有向量并在后台重新生成。设置保存在 $DSH_HOME/cyberself/settings.json。

其余参数(分块长度、每次检索几条、回答温度等)写在 profile 的 cordis.patch.yml 里,全部字段和默认值见 src/host/config.ts:

- id: cyberself
  config:
    retrieval:
      topK: 8
    answer:
      model: deepseek-chat
      verify: true

数据

内容 位置
资料库数据库 <工作区>/.cyberself/kb.db
资料库标记与回答范围 <工作区>/.cyberself/config.json
嵌入服务设置 $DSH_HOME/cyberself/settings.json

开发

pnpm install
pnpm build      # 生成 lib/index.js 与 lib/client.js
pnpm typecheck
pnpm test       # node:test,94 个用例
目录 内容
src/host/ 解析、分块、SQLite、检索、问答、HTTP 路由、模型工具、会话规则
src/client/ 右栏面板、设置页、样式、数据请求
src/shared/ 前后端共享的类型与路径
test/ 测试用例、网关客户端、样例文件
test-docs/ 各种格式的样本文件与测量脚本

限制

  • .doc 不支持。
  • 扫描件和图片依赖能看图的模型,模型不支持图片时导入会失败。
  • 向量检索在 JavaScript 里逐块计算,耗时随分块数量线性增长,1 万段约 0.8 秒。
  • Word 转出来的分块可能比章节更碎,检索粒度比 Markdown 差一些。
  • 一个工作区一个库,没有跨身份检索。
  • 同一时间每个库只跑一个向量化任务。

常见问题

连不上 Ollama。 先确认服务在跑:curl http://127.0.0.1:11434/api/tags。

提示 Ollama 里没有模型。 执行 ollama pull bge-m3,然后点设置页的「重新检测」。

导入成功但搜不到。 看面板统计里「已向量化」是不是 0。向量没生成时只按关键词匹配,可以换个更贴近原文的说法。

回答没有编号。 先确认 answer.verify 是打开的;重答一次仍无编号会附警告。也可以把 answer.model 换成更强的模型。

—/ 5

No ratings yet

Verified DSH bundle

Commit 433220e0bf44

Community comments

No comments yet. Be the first to write one.

DSH HUB

A community index for DSH plugins. Not an official GitHub or DeepSeek AI product.

CommunityResourcesAPIAbout