Skip to Content
aicentos

DSH Big Fat Fish

Connect aicentos models inside DeepSeek Harness (DSH), raise a fish that scrolls Bilibili and Douyin, then put it in a QQ group

Last updated:

DSH (DeepSeek Harness) is DeepSeek's open-source Agent framework. The desktop edition, DSH Desktop, packages the runtime, plugins, and sessions into one installer. "Big Fat Fish" (大肥鱼) is a community plugin for it named dsh-bili-whale: an AI fish that wakes on its own schedule, scrolls Bilibili, actually understands videos, keeps two diaries, and @-mentions you with the ones worth watching.

This page has four parts: first point DSH at aicentos, then raise the Bilibili fish, then the Douyin edition, and finally wire it into QQ direct messages and groups with the official plugin. The plugins are maintained by the community and by Tencent respectively, and are not affiliated with Bilibili, Douyin, or DeepSeek.

Prerequisites

ItemRequirementNotes
DSH DesktopRequiredDownload the macOS / Windows installer from the official site; the runtime is bundled
Node.js18+Only needed when starting DSH from the command line; the plugin toolchain is .mjs and needs a real node
ffmpegOptionalOnly used for frame extraction; without it, subtitles, danmaku, and top comments still work
Bilibili accountOneThe account the fish itself uses, to read cookies; a secondary account is recommended
aicentos API KeyOneCreate a dedicated key (named dsh) so usage is easy to track per project

Configuration to fill in

FieldValue
Provider IDaicentos
Display nameaicentos
Base URLhttps://aicentos.com/v1
API protocolopenai-completions
API KeyThe key created in the console
ModelA model name from the Model Gallery in the console

Setup steps

Install DSH Desktop

Open https://www.dshdesktop.com/ and pick the installer for your system (Windows, macOS Apple silicon, macOS Intel), then double-click to install. On first launch, follow the guide: configure a model, create a session, and confirm it replies.

Connect aicentos inside DSH

The UI route is recommended:

  1. Open Settings → Models and click Add a custom provider.
  2. Fill in Provider ID, Display name, Base URL, API protocol, and API Key from the table above.
  3. In Model catalog, click Fetch available models and select the models you need; if fetching fails, type the model ID manually.
  4. Click Save, return to the chat view, and pick the model in the model selector at the top.

You can also edit ~/.dsh/settings.yaml directly:

agent-default-model:
  provider: aicentos
  model: your-model-name

llm-pi-ai:
  providers:
    aicentos:
      api: openai-completions
      baseURL: https://aicentos.com/v1
      apiKeyEnv: AICENTOS_API_KEY
      models:
        - id: your-model-name

Then export the variable and start:

export AICENTOS_API_KEY="sk-your-API-Key"

The API Key is stored locally in $DSH_HOME/.credentials.yaml; the UI never shows it in plain text.

Install the fish plugin

No manual clone needed — just send one line in the DSH chat:

帮我安装这个插件,插件地址:https://github.com/Alterssss/dsh-bili-whale

After it finishes, refresh the DSH page and open Settings → Raise a Fish (养鱼) in the left sidebar. If that entry is missing, fully quit DSH and reopen it: plugins are assembled at startup, so skipping the restart is the same as not installing.

Grant the session full permissions

This is the step people miss most. Her session lives under Workspace → Ungrouped in the left sidebar (you cannot see it without expanding that folder). Open the session and switch permissions to Full access (danger-full-access), otherwise she cannot run commands, post comments, or write diaries after waking.

Log in to the Bilibili account

In Settings → Raise a Fish → Bilibili login, click Scan to log in and confirm with the Bilibili app on your phone. The QR code is valid for about 3 minutes; cancelling or letting it expire never replaces the existing login state.

You can also paste cookies manually: log in to the account the fish uses in a browser, press F12, open Application → Cookies → https://www.bilibili.com, copy SESSDATA, bili_jct, and buvid3, paste them one by one, then click Write credentials.

Do not read cookies with document.cookie. SESSDATA is HttpOnly and unreadable from scripts; doing it that way gives you an incomplete cookie and the health check will keep failing.

Run the dependency health check

Click Dependency health check on the settings page. It makes a real request to Bilibili to verify the login state, then checks cookies, ffmpeg, Node, the data directory, and the schedule item by item. It passes only when everything is green ("All available ✓").

If it reports ffmpeg missing, do not go hunting for a tutorial — send "install ffmpeg on this computer" in the DSH chat and let it handle the installation, then run the check again.

Always click Save after editing. Inputs are staged locally and only written to disk when you save; the page itself warns that unsaved changes have not taken effect. Saving applies immediately — only replacing plugin code or version requires restarting DSH.

Set the persona and schedule

  • Who she is: character name, how she addresses you, how she refers to herself.
  • Her persona: the body is written to ~/.bili-ai/persona.md; click Inject persona when done (limit 20000 characters, only the first 3000 are injected, attached on every wake and listen).
  • You (owner): fill in your mid; both @-mentions and direct messages use it.
  • Share method: @-mention you in comments, or Bilibili direct message.
  • Schedule window: defaults to 20:00–24:00; she wakes at a random moment inside the window, never on the hour.

The plugin ships no built-in personality — the default is a neutral assistant that does not call you "master" and does not act cute. To make her "Big Fat Fish", spell out her identity and origin, speaking style, what she cares about, and what she must not do.

Test

Run the self-test on the command line first; it checks configuration, credentials, login state, data directory, and dependencies in one pass:

node ~/.dsh/plugins/dsh-bili-whale/tools/bili.mjs selftest

On Windows, replace the path with %USERPROFILE%\.dsh\plugins\dsh-bili-whale\tools\bili.mjs:

node "$env:USERPROFILE\.dsh\plugins\dsh-bili-whale\tools\bili.mjs" selftest

Every item ticked and a final "全部通过 ✓ 可以用了" means you are ready. Common commands:

node ~/.dsh/plugins/dsh-bili-whale/tools/bili.mjs deps           # dependency health check
node ~/.dsh/plugins/dsh-bili-whale/tools/bili.mjs dm --status    # DM quota + mutual follow status
node ~/.dsh/plugins/dsh-bili-whale/tools/bili.mjs traffic status # request protection values

To watch her run a round right away, set the schedule window on the settings page to a two-minute slot starting now, save, and wait for her to wake (health check → pick topics → understand → write both diaries → push to you). You can also ask her in the chat to wake up and scroll Bilibili once.

Finally, open the usage page in the aicentos console and confirm the requests are recorded against the key you created for DSH.

Connect Douyin

The Douyin edition is a separate project with the same idea: dsh-douyin-scroll. It never looks at the picture — it reads captions, tags, author, duration, engagement counts, and top comments, picks a few videos a day, and writes a Markdown report.

Install

git clone https://github.com/NEWJO123/dsh-douyin-scroll.git
cd dsh-douyin-scroll
node selfcheck.mjs

Once the pre-check passes, install it into the web profile and restart DSH once:

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

After the restart, open Settings → Scroll Douyin (刷抖音).

First-time configuration

  1. Click Install main dependencies: it creates a dedicated venv and installs curl_cffi and httpx (about 30 seconds; progress goes to install.log).
  2. Log in: run node tools/qr-login.mjs start and scan, or paste the cookies of an already logged-in Douyin browser session into the settings page.
  3. Set what to scroll: keywords, categories, specific authors, videos per day, candidates per round, then click Run one round now.

Cookies stay on this machine at $DSH_HOME/douyin-duty/douyin_cookie.txt, never enter logs, and are never uploaded.

Capabilities and limits

ItemDetail
What it judges byCaptions, tags, author, duration, engagement ratios, top comments; no frames, no speech recognition
Candidate sourceRead-only recommendation feed plus the hot list; Douyin's web has no usable search API, so keywords only annotate the report
ReportWritten to out/<date>.md; optional Windows notification or webhook
SendingDMs, share cards, and comments are off by default and each requires confirm
Group chatThe author's observation is that messages "may not send in groups"; another account may behave differently

Plain-text URLs are not clickable inside Douyin — only share cards are. DMs, cards, and comments need Chrome installed (it looks for chrome.exe only, not Edge); fetching candidates and writing reports do not. Frequent commenting triggers rate limiting, and accuracy is lower than the Bilibili edition: without subtitles it can only read how the audience reacted.

Connect a QQ group

QQ Bot ships an official plugin, @tencent-connect/dsh-qqbot, installed into a dedicated qqbot profile. Bind it by scanning a QR code and it can talk in QQ direct messages and groups.

npx @deepseek-ai/dsh plugin --profile qqbot add @tencent-connect/dsh-qqbot
npx @deepseek-ai/dsh --profile qqbot

On first launch, scan the QR code as prompted; no manual key configuration is needed. After binding:

  • Isolated sessions: every direct message and every group has its own context, with no cross-talk, and sessions recover after a restart.
  • Switch models in chat: switch directly in the conversation and the existing context is kept, so you do not start over.
  • Quiet mode: set it to respond only when @-mentioned, so it does not flood the group.

The model is configured inside the qqbot profile: open Settings → Models → Add a custom provider there and fill in aicentos using the table above. If you want to manage several IM channels in one place, look at the community bundle dsh-im, which covers ten channels in one bundle with multi-bot and streaming replies.

Conversations in the group are read into the context and sent to the model, so do not let it handle accounts or keys in a group; binding credentials live in the local profile, so never sync that profile directory to a public repository.

Desktop pet and comment cleanup

Two optional plugins, separate projects from the fish:

PurposeProjectHow to install
An animated fish on your desktophttps://github.com/QCYTSN/dsh-dafeiyuSend the URL to DSH and let it install; a transparent native window appears, draggable, animating per task state
Hide suspected AI accounts in commentshttps://github.com/liyupi/dafeiyu-cleanerBrowser extension: download the zip from Releases, unzip, open chrome://extensions, enable developer mode, load the unpacked extension

The cleaner only hides comments in your own browser — it deletes nothing, never auto-reports, and misjudged accounts can be restored. Its offline rule set detects roughly 85% of accounts, a figure measured in one comment section and not guaranteed to hold elsewhere.

Notes

  • Leave auto-commenting off at first. It is disabled by default; once enabled it posts one comment per round, up to 20, and only once per video. Even so, public flooding becomes a "fish plague" for everyone else. Start with Bilibili direct messages to yourself.
  • The DM channel needs two accounts. Choosing Bilibili direct message requires two distinct accounts that follow each other (relation.attribute === 6). With a single account, watching videos, writing diaries, and generating reports still work; DMs do not.
  • Authorize with a secondary account. The plugin speaks with your own account, so do not hand your main account's cookies to a third-party plugin, and never buy accounts of unknown origin.
  • Stop on rate limiting. On 412 / 429, captchas, or throttling, the plugin pauses for 5–30 minutes and reports; do not retry in a loop, and signed endpoints are no guarantee against platform limits.
  • Pick a cheap model. She screens 5 videos, deep-reads 2–3, and writes two diaries every day, which means many requests per round. Choose a low-cost model with enough context in aicentos (see supported models) and create a dedicated key for DSH to track cost.
  • Headless mode does not work. The plugin must run on a DSH instance with the web UI, otherwise it stays at pending (waiting for services: sessionController, webServer, connection).
  • The plugin is the public release of a personal tool and is not affiliated with Bilibili or DeepSeek; you act with your own account and at your own risk, so follow the platform's community rules.