@ dr-co/dsh- 助手
DSH 捆绑/插件,每个会话都有一个 谁回答 (单位:千美元) 谁问, (中文(简体) ), 并保持那对夫妇的记忆。 当一个DSH安装服务时有用 几个助手、个人、bots或预定的工作,每期都需要一个 可以预测的人a 不改变基础的代理预设.
为什么这样有用
一个DSH安装可以由几个人共享,同时给予每个人一个 独立助理和对齐的背景。 用来设置 否则 需要多个独立的产品装置,例如OpenClaw,一个DSH主机可以 通过会话路由和虚拟用户提供同样的分离方式, 而不是声称要取代这些产品的每一个特性.
行政UI是创建和管理助手和虚拟用户的地方 变相. 这也对子代理工作流程有用: 您可以定义诸如 然后,建筑师、程序员和审查员要求一个序列,例如“让..... 建筑师设计一个计划,然后让程序员加以执行”。 每个副剂是 以为选定角色配置的快捷键解决.
每个助手都有自己的双镜内存: 对用户的了解和如何 用户要求它回应。 内存跟随助手 - 用户对比 比运输或机器人.
此包包含主机插件和浏览器客户端捆绑. 没有 补丁 DSH 核心并不会取代主机的预设、工具、任务或 运输的实施.
安装和捆绑元数据
使用 DSH 主机的普通插件/ bundle 机制安装软件包 。 这个
软件包是自定义 : package.json 声明 dsh.bundle.patch 元数据,
财务报告和审定财务报表 cordis.patch.yml 插入 dsh-assistants 排入主机插件列表.
同一软件包元数据宣布浏览器条目为 dsh.client; 主机负载
lib/client.js 当Web客户端可用时。 没有手动编辑到 index.html 或者说
需要DSH核心.
捆绑是有意通过主机的插件列表选择进入的. 它的状态是 与 DSH 核心分开保存,并可由主机的普通设备禁用或删除 插件控件 。 如果主机不执行 DSH 捆绑/插件元数据 加载器, 此软件包不能安装到那里; 使用支持的主机版本 而不是用手操作补丁.
兼容性和限制
该插件仅使用公共主机服务和可选集成. 没有 承诺官方DSH核心补丁 API. 特别是:
- iM 会话的身份查询需要主机
dshIm.describeConversation· ; 没有它,只能识别运输; - cron 身份需要包含匹配的调度条目
sessionId· ; - 页:1
subagentPersona.resolve仅当主机曝光时才使用成分钩ctx.provide;更古老的主机保持继承的助手行为; - 不可用的浏览器槽被报告并跳过,所以设置卡和 旧的Web主机可能缺少作曲控制;
- 客户端捆绑为 Web; 主机部分仍然可以提供即时,内存,以及 没有浏览器客户端的HTTP功能.
倒置行为是故意的:缺失的可选服务并不能使 插件声称DSH核心支持新的 API, 并且它们不会阻止其余部分 来自加载的插件.
什么样的模型
两个独立的轴:
- 助理人员 一个人,有一个关于自己的文本块;
- 虚拟用户 - 具有即时性的人,关于该人的事实和接触 模式,会话运行在下.
两者都是独立解决的:自己的规则,自己的默认,自己的日志 线条。 一条规则从不分配双轴.
模型看到的提示是包含四个部分的一节,每个部分空出时会掉入:
# who you are the assistant's own text
# who you are talking to user prompt + facts
# about the person you are talking to memory about-user
# additional information about you memory for-this-user
内存由 组合从不在机器人旁边 机器人就是运输 四个 桶,在公共词汇中,工具和即时使用(存储键为 内部短而永不漏入提示或工具描述中 :
| 桶头 | 含义 | 范围 | 撰写人: |
|---|---|---|---|
about-user | 这个助理知道这个人什么 | 用户 | 模型,通过 dsha_save |
for-this-user | 这个人要这个助手怎么回答 | 这对 | 模型,通过 dsha_save |
memory | 长期可搜索集摘要 | 用户 | 模型,通过 dsha_save target=memory |
assistant-notes | 助理本人的笔记 | 助理人员 | 模型,通过 dsha_save target=assistant-notes |
about-user 财务报告和审定财务报表 for-this-user 被注入到提示中. memory 财务报告和审定财务报表
assistant-notes 只搜索:它们从未注入过,只能通过
dsha_search (结果为桶取名). 两家只有搜索的银行在后面
一只旗帜 memoryBanks: false (或 DSH_ASSISTANTS_MEMORY_BANKS=0) 禁用
写入目标及其快速规则块. dsha_search 无 bucket 搜索
全部四个.
每双水桶还有一个 目录 —— 说 rau:<assistant>:<user> 页:1 about-user, (中文(简体) ),
rua:<user>:<assistant> 页:1 for-this-user ——并及时打印摘要
当它存在时, 掉回生行。 一份简要记录记录行数
是从这里建造的,所以"stale"是一个比较. POST /api/assistants/summary 重算一个
通过主机 llm 服务;没有这种服务,它就会回答 503 llm-unavailable 并且摘要可以在同一领域用手书写.
关于助手本身或一般人的一切都是个人物a 字段——人类编辑它,模型没有.
匹配
规则是两份订购名单(助手、用户)。 一个规则是一套条件加
assign;每个条件必须具备,而且会议不能满足的条件
答案让规则落空 第一场比赛获胜. 没有条件的规则就是轴
默认.
users:
- sender_id: "161161619" # this person, in any chat
assign: u-unera
- bot_id: telegram_fc1c… # everybody else who writes to this bot
assign: u-marish
- assign: u-unera # the axis default
条件 : transport (单位:千美元)web, (中文(简体) ), im:telegram, (中文(简体) ), im:discord, (中文(简体) ), cron, (中文(简体) ), bot_id, (中文(简体) ),
group_id, (中文(简体) ), chat_id, (中文(简体) ), sender_id, (中文(简体) ), regexp (通过对话键).
身份来自会话的创造者:
| 运输 | 身份来自哪里 |
|---|---|
| 额 | dshIm.describeConversation(sessionId) |
| 曲线 | 调度中的任务 sessionId 匹配 |
| 网络 | 除了"web",直到人选择表格 |
访问模式
模式属于 虚拟用户,而不是对助手: 来的人 不是回答的人物 一个人来了,一个模式 应用,所以没有什么可调和的.
配置
- id: dsh-assistants
name: '@dr-co/dsh-assistants'
config:
promptLimit: 6000
promptLimit 盖住已提供的部分;在盖上,尾部被放下
损失记录一次。 国家生活 $DSH_HOME/storages/dsh-assistants.json,为
以解剖法写出,观看,并应用而不重新启动。 货船
defaults.json它的种子有一次,在第一个靴子上.
内存搜索(语义,可选)
dsha_search 是杂交的: 精确的 FTS , 然后是语义上的上- k
存储向量,按确定性合并。 嵌入器完全为本地 ONNX 推论
结束 @huggingface/transformers (transfers.js)——无HTTP嵌入API和无
API密钥. 唯一的网络使用是ONNX重量的一次性下载
第一次使用时发生懒惰,从未在插件靴子时发生,也从未在内存写入路径上发生.
- 默认模式 :
Xenova/multilingual-e5-small(384个尺寸,处理俄语和 (英语). BGE 模型使用 CLS 集合, 其他都使用 平均集合, 以及向量 是 L2 的正则化; 集合按模型家族选择. - 模式缓存目录 :
$DSH_HOME/dsh-assistants/models(可以通过embedCacheDir) (中文(简体) ). 新写作在到达时被索引; 先前存在的行是 根据管理员卡或POST /api/assistants/memory/embedding/reindex。 。 。 . - 要完全禁用, 设置
embedDisabled: true(或DSH_ASSISTANTS_EMBED_DISABLED=1) (中文(简体) ). 搜索后保持纯FTS,没有任何内容被下载. 型号是 可配置为embedModel(单位:千美元)DSH_ASSISTANTS_EMBED_MODEL) (中文(简体) ).
当无法使用模型或依赖性时,搜索会完全降低到FTS 和记忆写 保持快速和离线。 嵌入式管理者表面生活在 设置卡( “累积内存” 标签): 它显示模型是否 下载,运行中的下载/再索引进度,以及矢量计数.
HTTP 密码
面板对插件进行讲解 /api/assistants,该
主机只接收一个经认证的拥有者——同一门 /api/settings 坐着
后面 后面那个 身份识别者在JSON体内旅行,从不走道.
| 路径 | 方法 | 机构 |
|---|---|---|
/api/assistants/state | 获取 | —— 说 |
/api/assistants/bots | 获取 | —— 说 |
/api/assistants/models | 获取 | ——(提供者、模式及其推理努力) |
/api/assistants/diag | 邮政 | { session? } |
/api/assistants/preview | 邮政 | { assistant?, user? } |
/api/assistants/prompt | 邮政 | { session } |
/api/assistants/resolve | 邮政 | { session? } 或者说 { transport, bot_id, … } |
/api/assistants/session-info | 邮政 | { session } |
/api/assistants/save | 邮政 | { assistants?, users?, rules?, defaults?, models?, summaries?, memory? } |
/api/assistants/session | 邮政 | { session, assistant?, user?, source?, none?, force? } |
/api/assistants/memory | 邮政 | { session?, assistant?, user?, text?, target?, action?, id? } |
/api/assistants/client-report | 邮政 | 客户端挂载报告 |
/api/assistants/summary | 邮政 | 已禁用( e)410 summary-disabled(中文(简体) ) |
/api/assistants/memory/embedding | 获取 | —— 说 |
/api/assistants/memory/embedding/download | 邮政 | —— 说 |
/api/assistants/memory/embedding/reindex | 邮政 | { batch? } |
/api/assistants/memory/rows | 邮政 | { bank, after?, user?, assistant?, limit? } |
代表团
东道主的股票 subagent 编号 : subagent_fork 工具不包含人a (persona 现在
被彻底拒绝, agentPreset 因为只有产卵,所以一个孩子不能从它们开始
告诉它扮演的助手 插件注册自己的两个工具:
dsha_subagent_fork (孩子继承这个谈话)和 dsha_subagent (续)
双胞胎 assistant 加上常号 prompt, (中文(简体) ), description, (中文(简体) ), cwd 财务报告和审定财务报表
provider编号 :model编号 :reasoning_effort。 。 。 .
他们不通过股票工具。 他们称宿主自己为接缝,
ctx.subagents.startActivation,带有儿童身份证明 插件生成,并撰写
(助手、用户、行距)在会话前按该编号装入商店
已存在。 所以孩子的第一个提示已经解决了 正确的人a,没有呼叫命令
队列涉及, 两个代表团可以同时运行, 一个失败的启动会放弃绑定
再来一次 唯一依赖的主机表面是 subagents 服务startActivation, (中文(简体) ),
resolveMaxDepth),而不是工具定义.
叉使根的系统迅速逐字记录——前缀是即时缓存键——
和孩子自己的人a 在任务文本中旅行, 只有在没有继承
历史来叙. 叉子从定义上看保持了呼叫者的个性 所以它的图谋
没有 assistant· ; dsha_subagent 需要身份证明,或者 null 对于一个完全没有人格的儿童来说
(其具有约束力的记录) none 而提示部分却一无所有.
模型
管理页面有一个 模型 选项卡——一个模型被分配到一个
助理人员。 保单上写着任务的来源: 默认 (东道主)
决定, 从牌 (助理本人) model 字段),或两个名称之一
每个助理都适用插槽。 每个槽都是提供商+模型+推理努力,
从东道主自己的目录中挑选(GET /api/assistants/models),从来没有硬码
id; 不提供广告模式的提供者, 除非路由已经指定
临Τ 面板指定的路由胜出 provider编号 :model 在工具调用中; a
无广告路线被登录,至今仍在使用.
任务达到两地. 一个授权的孩子在开始请求中得到了路线,
所以它从来没有运行一个转 错误的模型。 一个会话,当小组自己的拾取者
写入其对: 插件调用主机 sessionController.selectModel 一样
操纵主机的模型拾取器使用——仅在会话仍为空白时使用; a
对话开始 保持它的模型. selectModel 并坚持路线作为
nEW 会话的默认值, 所以以前的默认值会被写回: 此选项是
每届,不是新的全球默认.
客户一半
浏览器侧面是一个真实的客户端插件( 形状相同) @dr-co/dsh-skills 使用),
不是注入到脚本 index.html数字 : package.json 声明 dsh.client,则
主机负载 lib/client.js 和电话 apply(ctx),每笔捐款
通过公共时间档登记.
| 插槽 | 画什么 |
|---|---|
settings.section | 管理员页面:助手、用户、模型、规则列表、会话 |
conversation.input.left | 作曲排行中的两个选手,每场都瞄准 |
conversation.chat.node | 助手的姓名和图标在转弯上方(显示官员) turn-process 节点和使其内部,不变) |
字符串居住 src/client/locales.js (ru / en / zh); 测试比较密钥集
所以翻译不能默默地错过一个密钥.
构建和测试
npm install # esbuild only
npm run build # writes lib/client.js
npm test # full Node test suite, including the built bundle
npm pack --dry-run # inspect the public package file list
CI任务在测试前运行该建筑,并用
npm pack --dry-run。软件包本身不发布或安装任何内容.
建筑是单层建筑 加上 window.__ModuleLoader__ 包装
壳期望,所以 lib/client.js 可以从 src/client/。 。 。 .
客户端信标
在结束时 apply 捆绑的帖子 {ok, mounted, failed} 改为
POST /api/assistants/client-report;主机将其记录为一行:
[dsh-assistants] client mounted=settings.section,sidebar.panellist,main failed=conversation.input.dock: not mounted on this host
浏览器警告从未到达服务器日志,“页面不存在”就是 该报告需要在日记中填入一行,而不是DevTools会话.