中文EN

dsh-aurachat

identitynpmMIT

让 agent 以人设住进自建网页,分主人和客人两种账号:会随着时间回落到平常值的心情、可查看可修改的记忆、表情库、客人能评论的空间动态、闲置搭话、语音条、语音识别与朗读。内置网页服务默认监听 0.0.0.0:2332;对外暴露端口前请先创建主人账号,客人账号只能由主人创建。

下载量 / Downloads
452

安装

dsh plugin --profile web add dsh-aurachat

沙箱测试

这个插件还没测过。提交测试 →

README

dsh-aurachat

DeepSeek Harness(DSH)插件,AI 伙伴,该项目仿照(抄袭)accomplish07zrh-eng/dsh-aurabot-qq,区别是不依赖QQ,目前已实现:有人格、心情和记忆,能看图、发语音、听语音、发和收表情包、写日记、逛空间回评论、还会主动找你聊天。

[实机截图](./test/1.png)

客户端(可选)

客户端登录意义:后台运行,消息提示,绕过ssl限制

不能使用客户端直接连接刚安装的客户端,需要在 Web 界面或 DSH 内走完初始化流程

入口

  • 默认绑定0.0.0.0:2332可直接通过浏览器访问,ip和端口可在设置修改
  • DSH 左侧栏「自动化任务」下面的「AuraChat」,功能基本一致,但无法发送语音

聊天

  • 主人 + 客人两套身份:主人建号,客人在「设置 → 客人」里创建,不能自助注册。
  • 每个客人可选「只聊天日记」或「完全权限」;「只聊天」的客人碰不到电脑上的工具。
  • 模型和思考强度从 DSH 的模型列表里选,不直连任何 /v1。
  • 连发合并:你连着发几条,等你说完一起回;你还在输入框里打字时压着不回。
  • 提示音:来消息 / 发消息各自可开可关,各种预设可选,也能填自己的音频地址。
  • 语音条:按键录音、松手发送;也能把音频文件当语音发。

Ta

  • 人设是 markdown 文件(personas/),内置两套;向导里能当场写一套,设置里能改、能加、能删。
  • 心情是 0~100 的数,偏离平常区间后按半衰期慢慢回去;心情好话多、爱发表情和语音,心情差话少。
  • 记忆分四块:人物小档案、相处经验、说话方式、全部记忆,都能在面板里改、加、删。
  • 表情库:上传(支持动图、可多选)、改名、删除;聊天里别人发的图看懂了会自己起名收进库。
  • 「空间」:按计划自己写动态,你和客人能评论,每小时回访新评论。
  • 闲置搭话:闲够时间开口,带免打扰时段和每日上限。
  • 自驱:照一张共享便签(markdown)想事、做事,做完跟你说一声。

多模态支持

  • 朗读(TTS)七种后端:自动、微软 edge-tts、本地 CosyVoice、本地 GPT-SoVITS、OpenAI 兼容 /audio/speech、任意 HTTP 接口、Windows 自带语音。edge-tts 有 16 个中文音色,可一键装进插件自己的 Python 环境。
  • 听写(STT):用 DSH 自带的 SenseVoice,本地推理、不用联网、不用填地址(好像只在 DSH 桌面版里可用)。
  • 生图四种后端:OpenAI 兼容 /images/generations、SD WebUI、ComfyUI,或让自己写代码画。

外观

  • 跟随 DSH 明暗自动切换;主题四选一:浅色 / 深色 / 亚克力 / 毛玻璃,后两种透背景图。
  • 背景图、头像都能换;没传头像时,页内头像和浏览器图标用同一张 public/icon.svg。
  • 网页名称、浏览器标题都能自己在设置里改,不跟着名字自动变。

安装

需要 DeepSeek Harness 桌面版(官方)(当然也最好是官方桌面版)。

1. 把整个目录放到你放插件的位置,比如 D:\dsh-aurachat。

2. 在 DSH 的 profile 里登记成依赖(路径换成你自己的):

   {
     "dependencies": {
       "dsh-aurachat": "file:D:/dsh-aurachat"
     }
   }

3. 重启 DSH。侧栏会出现入口,或者用浏览器打开 http://127.0.0.1:2332/。

4. 也有更轮椅的方法,把该项目丢给DSH帮你安装

想让Ta在 DSH 里用工具(改文件、跑命令),需要在 DSH 那边给完全权限;只想聊天不需要。

首次配置

第一次打开是初始化向导:起名字 → 怎么称呼你 → 挑人设和头像(也可以现场写一个)→ 选模型和思考强度 → 设主人账号。

设完自动登录。之后在「设置」里可以追加修改,右上角「保存设置」立即生效。

端口与反代

  • 自行记住监听地址和端口反代即可
  • nginx 反代示例:
  location / {
      proxy_pass http://127.0.0.1:2332;
      proxy_buffering off;
      proxy_read_timeout 3600s;
      proxy_set_header Host $host;
      client_max_body_size 32m;
  }

proxy_pass 末尾不要带 /;必须proxy_buffering off

  • 嵌在 DSH 侧栏的那份走 DSH 自己的 web 服务(/aurachat/ 前缀),和固定入口互不影响。

麦克风、剪贴板功能需要SSL:127.0.0.1 和 localhost 除外;从别的设备打开就需要https

DSH 桌面版侧边栏访问无法使用麦克风功能:DSH 桌面版的内嵌页拿不到麦克风权限

数据

~/.dsh/plugins-data/aurachat/(例如Windows 是 C:\Users\<用户名>\.dsh\plugins-data\aurachat\):

文件 · 内容

config.json · 设置(密钥单独存,不回传前端)

users.json · 主人和客人账号(密码 scrypt 哈希)

chats/<会话>/index.json · 这个会话的分片目录(每片多少条、起止时间)

chats/<会话>/seg-*.json · 消息分片,一片最多 100 条,只存文字和媒体 id

media/<会话>/<mediaId> · 图片/语音文件本体(不再塞进 JSON)

sessions.json · 会话和人设/权限的对应

memories.json · 记忆四块

diary.json · 空间动态和评论

selfdrive.md · 共享便签

chatlog/ · 按天归档的对话原文,记忆整理用

personas/ · 人设文件

聊天记录怎么存、怎么过期

  • 文字和媒体分开存:image / voice 落成 media/<会话>/<mediaId>,分片里只留 { mediaId, mediaMime }。

一条媒体的 base64 约 300KB,而一条文字消息只有 150 字节左右,分开之后分片文件基本是 KB 级。

  • 一片 = 界面一页:文件名带序号(seg-001-…、seg-002-…),目录按文件名排就是时间顺序。

网页首屏只渲染最新那一片(刚切完就是几条,看起来干净),往上翻才整片加载上一片,

所以文件边界和你眼睛看到的页边界永远一致。

  • 聊天途中不切片:消息一直追加到当前片,聊 200 条也还是一个文件,不会突然把前面的藏起来。
  • 空闲 2 分钟后自动切:把当前片按 100 条一份切开(250 条 → 100+100+50),最后一份留作新的当前片。
  • 保留天数(设置 → 聊天记录,history.keepDays,1–365 天,默认 7):

聊天记录和媒体一起过期;过期的片整片删,跨过期线的片把过期的那几条掐掉再重写(所以"保留 7 天"就是 7 天,

不会因为凑不满一片而多留十几天);媒体文件跟着一起删。

  • 往上翻:网页里翻到顶会出现「查看更早的记录 · 第 N/M 片」,点一下按

GET /api/messages?file=prev&before=<本片最早消息时间> 取上一整片,滚动位置保持不动。

老接口 ?limit=&before= 还在(按 100 条跨片分页),App 暂时用那个。

  • 客户端(网页/App)也把取过的媒体缓存在本地,下次只看不重下;服务端对 GET /api/media/<id> 发

cache-control: private, immutable + ETag,客户端拿到 304 就不再下字节。

日志不落盘:只在内存里留最近几百条(上限可调),重启即丢失

客户端预留接口

http 接口,客户端需要 base URL + token:

  • 固定入口的根路径就是 API 根,GET /api/state 免登录,可用来探活和取站点信息。
  • 登录:POST /api/login 拿 token,之后带 Authorization: Bearer <token>;也支持 ?token= 深链。
  • 收发:GET /api/messages(?file=last 取最新一整片、?file=prev&before=<t> 取再往前一整片;

老参数 ?before=<时间戳>&limit=<1-100> 仍按条数跨片分页)、

POST /api/messages、POST /api/voice、POST /api/typing。

  • 媒体:GET /api/media/<mediaId>(图片/语音本体,支持 ?token=;带 ETag 和强缓存)。
  • 实时:GET /api/stream(SSE,message / typing / history 事件,25s 心跳)。

history 表示有分片过期被删,客户端按 droppedBefore 丢掉更早的气泡。

  • 其余:/api/config、/api/mood、/api/diary、/api/memory、/api/stickers*、/api/logs、/api/status。

客户端不需要知道 DSH 的路径,也不依赖 cookie。

升级

暂无打算,写完这一版我快上班了,如果这个项目真的对大家有用,可以fork之后自行迭代

常见问题

Ta听不见我说话? 首先确认宿主是是 DSH 桌面版,然后进入设置-插件-实验性插件-「语音输入」已开且在运行;从浏览器进入时,麦克风需要 https 或 localhost/127.0.0.1。

模型不回话? 看「日志」页有没有报错;确认 DSH 那边模型可用、插件有权限起会话。

客人能看到别人的聊天吗? 不能。每个账号只有自己的会话,空间动态按可见性过滤。

会偷偷联网吗? edge-tts、OpenAI 兼容 TTS/生图、以及你自己填的地址会联网,其余全本地;语音听写是本地模型。

项目存在的意义? 首先是规避QQ风控。其次是我职业很特殊,一年有大半时间没有网,这个项目搭配本地部署大模型可以实现全程不联网。

目录结构

dsh-aurachat/
├── src/                    插件本体(在 DSH 里跑的 Node 侧代码)
│   ├── host.js             入口:注册插件、注入宿主能力、拼系统提示词、挂定时器与网页
│   ├── chat/               会话层
│   │   ├── access.js       权限分级:主人 / 客人
│   │   ├── hub.js          消息落库、连发合并、投递回复、发语音表情图
│   │   └── reply.js        把模型一轮回复拆成多条,过滤旁白与占位文
│   ├── core/               基础设施
│   │   ├── config.js       配置默认值与逐字段校验
│   │   ├── logger.js       内存日志(环形缓冲,超上限丢最旧)
│   │   ├── store.js        JSON 文件读写
│   │   ├── net.js          HTTP 请求 / 下载
│   │   ├── redact.js       密钥脱敏(日志里不出现明文)
│   │   ├── image.js        图片尺寸、格式、动图判定
│   │   ├── time.js         时间格式化
│   │   ├── version.js      版本号(唯一来源是 package.json)
│   │   └── llm.js          给内部小任务(判断、抽取)的单次调用
│   ├── features/           功能模块
│   │   ├── azone.js        空间:写日记、评论、回访
│   │   ├── azone-social.js 串门:看客人的空间并留言
│   │   ├── memory.js       记忆:全部记忆、相处经验、说话方式、人物档案、整理
│   │   ├── stickers.js     表情库:收集、打标签、按情绪挑图
│   │   ├── i

…(truncated)

以上内容来自 npm 上的 README,我们只做格式化,不改内容。

版本

npm 上共发布:2,最后更新 2026-11-04

链接

GitHub · Homepage · npm

同类插件