Skip to main content
A

feiyu-chat-companion

airpineapplea/feiyu-chat-companion

Desktop companion for DeepSeek Harness: a Win32 layered window that keeps a whale-girl above other applications, speaks through a bubble, comments on its own when you stay on one window for ten seconds, and answers a single question typed into a right-click input box.

Install

dsh plugin --profile web add github:airpineapplea/feiyu-chat-companion

README

feiyu-chat-companion · 肥鱼陪聊

一只永远待在桌面上的桌宠。她不属于任何窗口,能拖、会眨眼、头顶弹气泡说话;看见你停在某个页面十秒,会自己开口说一句。右键能问她一句话。

独立实现,不依赖 dsh-pet。


前置条件

项要求说明
系统Windows 10 / 11用了 Win32 layered window,别的平台跑不了
DSH0.2.x(桌面版)插件用 dsh.bundle.patch 挂载
PythonDSH 自带的那份不用另装,Host 会去 resources/runtime/primary-runtime/dependencies/python 找
Python 包Pillow、numpy、tkinterDSH 自带,不用管
Python 包uiautomation要手动装,见下。不装也能跑,只是读不到 B站 BV 号

装 uiautomation(B站 特化要用)

用 DSH 自带的 Python 装,别用系统 Python:

& "C:\Users\<你>\AppData\Local\Programs\DeepSeek Harness\resources\runtime\primary-runtime\dependencies\python\python.exe" -m pip install uiautomation

不装会怎样:桌宠照常工作,但只能拿到窗口标题,读不到地址栏,也就没有 BV 号——看 B站 时它只能凭标题猜。


安装

git clone <本仓库>
dsh plugin --profile desktop add "link:D:\你的路径\feiyu-chat-companion"

装完重启 DSH。 Host 是服务端代码,启动期加载。

侧栏会多出一个「肥鱼陪聊」,排在「肥鱼日记」后面。


她会做什么

能力说明
待在桌面上置顶、不进任务栏、不抢焦点。全屏独占地盘盖不上去(系统限制)
拖动按住拖,撞到屏幕边缘贴住,不会拖丢
眨眼随机 2.5~6.5 秒眨一次
说话头顶气泡,宽度自适应,顶到天花板翻到脚下
自己找话说你停在某个窗口 10 秒,她会说一句
戳一下左键点她一下,她立刻应一声,不用等十秒,也不看冷却
问一句右键 → 问她一句 → 打字回车,答案回到气泡里
念出来装了语音插件时,她的话可以真的出声(见下面的联动)
记住位置拖到哪,下次还在哪

设置

侧栏「肥鱼陪聊」面板里:

项可选说明
启动 / 关掉—关掉是真退出进程,不会自己回来
显示露着 / 藏着藏着是隐藏窗口,进程还在
说话会出声 / 已暂停暂停后不弹气泡,但话不会积压
归位—挪回右下角
换一条短会话—丢掉她现在的记忆,建一条新的(见「她有自己的会话」)
说话频率低 / 中 / 高低:15 秒一句,同页 60 秒可再说
中:2 分钟,同页 5 分钟
高:10 分钟,同页 1 小时
回话长度短 / 中 / 长短 ≤20 字、中 ≤45 字、长 ≤80 字
看什么只看标题 / 标题 + B站内容只有装了「刷B站」插件才出现这一组,没装就整组不渲染。见下面的联动
朗读会念出声 / 只冒气泡只有装了语音插件才出现这一行,没装就整行不渲染

右键点她也能开同一个菜单(问她一句 / 归位 / 暂停说话 / 退出)。

设置存在 ~/.dsh/storages/feiyu-chat/settings.json,改完即时生效(Host 每 2 秒读一次)。


戳一下,或者问她一句

左键点她一下,她先往下沉一下、再弹回原位,同时应你一声——不等「停够十秒」,也不看冷却。因为她知道是你主动叫的。三秒内连戳不会变成复读机:那几下会并进下一句,她知道「你连着戳了好几下」,而不是装没听见。(拖动和点一下会自动区分:鼠标没怎么动、按得也不久,才算点。)

右键她,菜单第一项是「问她一句」。弹一个小输入框,打字,回车。Esc 取消。

  • 提交后气泡先冒一个「…」,二十秒内答不出来会说「想太久,我放弃了」。
  • 答案在气泡里停 14 秒,朗读开着的话同时念出来。
  • 问完就关,不留聊天记录。想再问就再点一次——这样最省。

两种都是她那条短会话多一轮,价钱和她自己说一句话一样。


她怎么知道你在看什么

桌宠(每秒)   GetForegroundWindow + GetWindowText  →  foreground.json
              标题变了才去读地址栏(UIA,0.7 秒,后台线程)
              B站 视频页 → 提取 BV 号一起写进去

Host(每 2 秒)读 foreground.json
              停够 10 秒?冷却过了?这窗口刚说过没?
              → 送进她自己那条短会话

她自己        用 pet_say 说一句

桌宠           读 say.json → 弹气泡

只看窗口标题,不读页面正文。唯一的例外是 B站 视频页——有了 BV 号,模型可以自己去拉字幕和评论。

不说话的窗口:DSH 自己、Program Manager、无标题、设置页。


隐私:它到底看到了什么

这一点没有藏着掖着的必要,写清楚比较好。

读什么

  • 前台窗口的标题,每秒取一次(GetForegroundWindow + GetWindowText)
  • 只在 B站 视频页额外读一次地址栏,目的只有一个:抠出 BV 号

不读什么

页面正文、剪贴板、键盘输入、屏幕画面、任何一个文件的内容。全是标题,就只是标题。

标题会去哪

去处内容
~/.dsh/storages/feiyu-chat/foreground.json当前窗口标题(本地文件,明文)
她那条短会话每次开口时标题会被送进模型,模型据此决定说什么
~/.dsh/storages/feiyu-chat/debug.json标题副本,排错用
~/.dsh/storages/feiyu-chat/pet.log她说的原话;她常常会复述标题,所以日志里也会带一点

所以要留心

窗口标题经常不只是个名字:编辑器会写文件名和路径,终端会写当前命令,播放器会写片名,聊天工具会写对面是谁。这些都在“标题”里,都会按上面那张表走。

默认不开口的只有 DSH 自己、Program Manager、无标题和设置页。其它窗口一律会被读,包括银行页面和密码管理器——它们不在黑名单里。

  • 不想被看:设置里把「看什么」关掉,她就完全不读前台窗口了,只剩「问她一句」还能用。
  • 想求助:贴 debug.json 或 pet.log 之前,自己先看一眼里面的 title。

她有自己的会话

这一点最重要:她说的话不挂在你的对话上。

以前的坑是:桌宠每说一句,都要把你那条几十万 token 的会话整个重算一遍,一句三分钱。现在她第一次要开口时会自己开一条空会话(~/.dsh/feiyu-chat-voice),从零开始,只装「看着窗口说一句」这点活。

  • 攒够 30 句自动换一条新的,免得它自己长回去。
  • 旧的那条会被自动归档:它从侧栏挪进归档(文件还在,可以取消归档),免得用一周下来侧栏被几十条「新对话」塞满。她每说 30 句就换一条,没人收拾的话那个列表迟早没法看。
  • 侧栏会多出一个 feiyu-chat-voice 分组,那是她当前那条会话。点进去能看到她背着你都嘀咕了什么。
  • 面板上的「换一条短会话」可以随时手动丢掉重来,那条也会被归档。

花多少钱

实测数据,模型 deepseek-flash,推理档位 off,回话长度开「长」(最贵的一档):

场景token花费
刚开的新会话说第一句10,5290.53 分(含第一次写缓存)
之后每句(稳态)1.2 万~3.2 万0.10~0.14 分
上下文 3.2 万32,4830.135 分
一条会话跑满 30 句—约 4 分
一天说 60 句(两条会话)—约 8 分,不到一毛

0.53 分只能用来算第一句。 它包含第一次写缓存的钱,之后每句只有 0.1 分左右。拿首句单价乘句数会把总价高估四倍。

两个反直觉的地方:

  • 上下文涨,价钱涨得很慢。 从 1.2 万涨到 3.2 万(+154%),价钱只从 0.10 分涨到 0.135 分(+35%)。因为新长出来的那段是对话历史,缓存命中后便宜得多。
  • 贵不贵不看「读了多少内容」。 她去看字幕、翻评论,那点 token 只占千分之一。真正决定价格的是回话长度——输出 token 比输入贵好几倍,而且永远不缓存。

对比一下:同一句话如果挂在一条 128 万 token 的主会话上,是 3 分。差六倍,全部来自「不用背你聊过的话」。


和别的插件联动

肥鱼日记(feiyu-memory)

装了,她就有记忆和人格;不装,她就是一只没有记忆的桌宠。 就这么简单。

  • 肥鱼日记监听 agent/created,给每个新会话挂一段个人设定。她那条短会话也是这么被挂上的,所以她说起话来是「那条鱼」,不是通用助手。
  • 这不是依赖关系。feiyu-chat-companion 的 package.json 里没有 feiyu-memory,两边的 inject 也不重叠。桌宠只用 DSH 自带的 tools、webServer、connection、agents 四个口子。
  • 你把肥鱼日记停掉:桌宠照跑、照说话、照收钱,只是语气变成一台普通的 AI。

语音(@memef1f1y/dsh-plugin-tts)

装了,「念出来」那一节才出现。

  • 探测方式:看它的客户端有没有把 window.__dshTtsSettings 挂上。没有就当它不在,整行不渲染(不是灰按钮——灰色会让人以为坏了)。
  • 音色、引擎、语速全部跟随语音插件自己的面板:Edge TTS / RVC / Index-TTS2 / CosyVoice / Google Cloud 都跟着走。
  • 声音是在网页里放的。桌宠是独立的 Win32 窗口,没有播放器,所以—— 网页关掉,她照样在桌面冒气泡,只是没声音。
  • 浏览器可能拦自动播放:第一次没声,先在页面上随便点一下。

刷B站(dsh-bili-scroll)

装了,「看什么」那一组才出现。

这件事得说清楚:本插件自己一个 B站 工具都没有。 读字幕、翻评论靠的是「刷B站」注册的 bili_subtitle / bili_comments。没有它,她只能凭窗口标题说话。

dsh plugin --profile desktop add github:c1overzz/dsh-bili-scroll
  • 探测方式是问 DSH 的工具表里有没有 bili_subtitle——「能不能读到内容」本来就等于「工具在不在」,不去猜包名。
  • 没装:「看什么」整组不渲染,Host 也不会再把 BV 号塞进给她的话里(省一句废话)。
  • 装了:才有「标题 + B站内容」这一档。这一档会多花一点钱——她真去拉字幕和评论了。
  • 想把地址栏抠出 BV 号,还要给 DSH 自带的 Python 装 uiautomation(见「前置条件」);不装就停在标题这一步。

被安全软件挡了怎么办(卡巴斯基、其他杀软)

症状很好认:侧栏面板能打开,点「启动」没反应,桌面上不出现她,而且 pet.log 里连一条新记录都没有。

原因不是我藏了什么,是桌宠靠 DSH 自带的 Python 起一个窗口进程,安全软件常把「一个后台程序去起另一个 Python 进程、还画一个置顶透明窗口」判成可疑行为,直接拦掉进程创建。

卡巴斯基(21.x 实测):

  1. 打开设置 → 安全设置 → 入侵防御(也叫应用程序控制)→ 管理应用程序
  2. 添加下面这两个文件,规则设为 受信任,子项全部允许:
    <DSH 安装目录>\resources\runtime\primary-runtime\dependencies\python\pythonw.exe
    <DSH 安装目录>\resources\runtime\primary-runtime\dependencies\python\python.exe
    
    默认在 C:\Users\<你>\AppData\Local\Programs\DeepSeek Harness\。 AppData 是隐藏目录,选择框里往往看不到,直接粘贴路径,别用“浏览”。
  3. pythonw.exe 是关键那个;python.exe 一起加上,省得以后换个入口再犯一次。

不用去「排除项」加扫描白名单。扫描白名单管的是「别扫它」,这里被拦的是「别运行它」,那是两回事——排除项里加完照样起不来。

其它杀软同理:找「受信任的应用程序 / 白名单 / 应用控制」,把这两个 exe 加进去。


已知限制

  • 只在 Windows 上跑,而且只测过 Windows 11 + DSH 0.2.1-rc.2
  • 全屏独占的游戏盖不住:那种模式下任何窗口都在下面
  • DSH 刚重启后需要一次会话活动:重启后第一个 agent 出现之前,攒着的话发不出去(两分钟内有效)
  • 声音只在网页开着的时侯有:见上面的语音联动
  • B站 特化只认 bilibili.com/video/BVxxxx,直播页没有 BV 号
  • 她看窗口只看标题,不读正文。能不能读到 B站 视频的字幕和评论,取决于你有没有装「刷B站」插件

数据在哪

~/.dsh/storages/feiyu-chat/
├── state.json        窗口位置、静音状态
├── settings.json     频率档、回话长度、看什么、朗读
├── control.json      Host → 桌宠的遥控指令
├── say.json          Host → 桌宠的「要说的话」
├── ask.json          输入框 → Host 的「问一句」
├── poke.json         左键点一下 → Host 的「催她说一句」
├── foreground.json   桌宠 → Host 的「前台是什么」
└── debug.json        诊断留痕(卡住的时候看它)

Host → 桌宠走文件,不走 HTTP:桌宠每 60ms 看一眼 mtime,变了就播。这样两边解耦,别的插件也能往 say.json 写一句话让她开口。

HTTP 路由前缀是 /feiyu-chat(/state、/config、/voice),需要 DSH 的会话凭证,从浏览器里调用即可。


许可

MIT

Related plugins