用 telegram 把 DeepSeek Harness 接到 Telegram 私聊

前言

DeepSeek Harness(命令名 dsh)把智能体运行时拆成可组合的插件:模型、工具、会话、沙箱和界面都可以在 Cordis 内核上增删。官方开发者预览页把这件事概括成 Everything is a plugin(一切皆插件)。日常入口通常是终端或 npx @deepseek-ai/dsh web 打开的网页界面。人一旦离开电脑,就没法继续给同一个 agent 发消息。

社区插件 telegram 做的是另一条通道:用 Telegram Bot API 的长轮询,把私聊文本桥接到 harness 里的 agent 会话。手机上给 bot 发一句话,当前 dsh 进程里对应聊天的 agent 接着跑;助手回复再按 HTML 格式分片送回同一条私聊。它不注册给模型用的工具或技能,只负责「聊天 ↔ 会话」这一层。

需要先说明:下文引用的目录页来自独立社区站点 DeepSeek Harness 插件库,About 页写明该站与 DeepSeek / 幻方没有官方从属关系,不能当成官方应用商店。官方仓库是 deepseek-ai/deepseek-harness。本文按目录详情页、GitHub README / package.json / cordis.patch.yml / src/,以及官方 Harness 说明交叉核对,核实日期为 2026-08-18

这是什么

telegram 是一款通知与集成插件,由 LoserFox 维护,仓库为 LoserFox/telegram。目录页与 GitHub 仓库描述一致:Telegram Bot API 桥接,长轮询、per-chat 会话、HTML 格式化。

几个已核对的归属信息:

  • npm 包名:@loserfox/telegrampackage.json 版本 0.1.0
  • 插件插入行 id:telegram(见 cordis.patch.yml
  • 主要语言:TypeScript
  • GitHub topic:dsh-plugin
  • 星标:目录页与 GitHub API 均为 6
  • 许可证:package.json 声明 BSD-3-Clause;仓库根目录没有独立 LICENSE 文件,GitHub 的 license 字段因此为空,安装前应自行核对
  • 目录收录日期:2026-08-05;仓库最近推送:2026-08-13(当前 main 顶端提交 a0a9ca11e427b62217250e2e561f6ad3c49d13f2

它声明 inject: ['agents'],依赖宿主组合里已经挂上 @deepseek-ai/dsh-agent。LLM 适配器、会话持久化和 bash / 读文件等工具都不在这个包里,而是由外围 cordis.yml(或当前 profile 的其它层)提供。README 写明设计参照 NousResearch/hermes-agent 的 telegram 平台适配器,再裁成 harness 的纯文本接缝。

核心功能

按 README 与 src/bridge.ts / src/index.ts,能力可以收成下面几条。

1、长轮询收消息。 插件用 Bot API 的 getUpdates 拉更新,默认超时 30 秒。没有 webhook 模式,也不要求公网 IP 或域名;运行 dsh 的主机需要能出站访问 Telegram API。单条轮询循环服务所有聊天;空批次会睡 50ms,避免事件循环空转。

2、每个聊天一个 agent 会话。 已授权的文本消息会按 chat 创建或复用 agent(ctx.agents.create),经 followup 把原文当成用户消息送进去。会话 id 形如 telegram:<chatId>/new/clear 会换新的 session 并释放旧 agent。

3、白名单默认关闭。 allowedUserIds 默认为空列表,空列表拒绝所有人(fail closed)。allowAllUsers 默认 false,README 标明仅开发用。未授权用户会收到 Access denied.

4、Token 加载即校验。 token 为空时回退环境变量 DSH_TELEGRAM_TOKEN;两者都缺则 apply 直接抛错,不会惰性启动。

5、回复做 HTML 格式化并按 4096 分片。 助手文本按保守的 Markdown 子集转成 Telegram HTML(围栏代码、行内代码、**粗体**,其余转义),再按 maxMessageLength(默认 4096)切开,优先在换行、中文句号、句点加空格处断开。某一片 HTML 被 Telegram 拒绝时,该片回退为纯文本。turn/start 会发 typing 聊天动作。投递是 fire-and-forget,失败记日志后丢弃,没有发送重试账本。

6、斜杠命令不到达模型。 /start 欢迎,/new/clear 开新会话,/help 列出命令。其它以 / 开头的文本按未知命令处理。普通用户消息则原样进入该聊天的会话历史。

安装与启用

社区目录页给出的安装命令如下,在 DeepSeek Harness 终端里运行:

dsh plugin add github:LoserFox/telegram

仓库 README 还写了挂到指定 profile(例如 web)的写法,以及装完后的核对与卸载:

# 安装到某个 profile,bundle 声明会进入组合层
dsh plugin --profile web add <dir|git-url>

# 验证插入行
dsh --profile web --dump-config | grep telegram

# 卸载
dsh plugin --profile web remove telegram

目录页提示:如需可复现安装,可固定 commit 哈希,形式为 dsh plugin add github:LoserFox/telegram#commit。以 2026-08-18 看到的 main 顶端为例:

dsh plugin add github:LoserFox/telegram#a0a9ca11e427b62217250e2e561f6ad3c49d13f2

几点安装约束:

  • 组合层变更不参与 HMR,装完或卸完需要重启目标 profile 的 DSH 进程。
  • 宿主必须已经挂载 agents 服务。peerDependencies 里写的是 @deepseek-ai/dsh-agent ^0.1.0-rc.6,以及 @deepseek-ai/dsh-llm@deepseek-ai/dsh-session@deepseek-ai/cordis@deepseek-ai/schemastery 等组合包。
  • 目录页写明:插件以当前 dsh 进程的权限运行,安装时可能执行代码。安装前检查源代码仓库和许可证。

配置与典型用法

配置项

src/index.ts 里的 TelegramConfig 与 README 表格一致:

默认 含义
token '' @BotFather 创建的 bot token;空则读 DSH_TELEGRAM_TOKEN
allowedUserIds [] 允许对话的 Telegram 用户 id;空列表拒绝所有人
allowAllUsers false 允许任意用户(仅开发用)
provider deepseek-official 创建 agent 时传入的 LLM provider id
model deepseek-v4-flash 创建 agent 时传入的模型 id
maxMessageLength 4096 单条 Telegram 消息长度上限
pollingTimeoutSec 30 长轮询超时(秒)

日志会经 ctx.logger 输出,bot token 会被脱敏。生产环境走全局 fetch 和真实定时器;clientsleep 只是测试接缝。

仓库自带的 telegram-agent 示例

仓库 examples/telegram-agent/ 是一份可运行的 cordis.yml:Telegram 桥接加上 DeepSeek 适配器、bash / 文件工具、subagent、todo、JSONL 会话持久化和自动压缩。它挂载的是本仓库构建产物 ../../lib/index.js,需要本机已有能解析 @deepseek-ai/* 的 DeepSeek Harness checkout,并且 dsh 在 PATH 上。

运行时环境变量(摘自该示例的中文 README):

变量 用途
DSH_TELEGRAM_TOKEN bot token(必填)
DSH_TELEGRAM_ALLOWED_USER_IDS 允许的用户 id,逗号分隔
DSH_TELEGRAM_ALLOW_ALL_USERS true 时放开所有用户(仅开发)
DEEPSEEK_API_KEY 传给 OpenAI 兼容端点的凭据
DEEPSEEK_BASE_URL dsh-llm-deepseek 使用的主机端点
DSH_CWD bash 与文件工具的工作目录
DSH_SESSION_ROOT JSONL 轨迹目录
DSH_SYSTEM_PROMPT 编码 persona

示例启动命令:

cd examples/telegram-agent
DSH_TELEGRAM_TOKEN=<token> DSH_TELEGRAM_ALLOW_ALL_USERS=true \
  DEEPSEEK_API_KEY=<key> dsh --config cordis.yml

allowAllUsers=true 只适合本机试跑。对外服务应改成显式的 DSH_TELEGRAM_ALLOWED_USER_IDS,不要开全员访问。token 和白名单都从环境变量读入,cordis.yml 里不落密钥。

在 Telegram 里怎么说话

先用 @BotFather 建 bot、拿到 token,再把 token 和自己的用户 id 配进插件。进程起来之后,私聊里可用:

  • /start:建立会话,回复欢迎词 Hello! I am the DeepSeek Harness agent. Send me a message or /help for commands.
  • /help:列出 /start/new/clear/help
  • /new/clear:换新会话,旧 agent 释放,回复 Started a fresh session.
  • 普通文本:进入该 chat 的 agent,助手最终文本分片发回

模型侧看不到轮询帧和投递调用;命令也不会进上下文。工具中间进度不会作为独立 Telegram 消息流式发出,用户看到的是每条 assistant 输出对应的一组分片。

适用场景与注意事项

适合已经在跑 DeepSeek Harness、希望用 Telegram 私聊当展示层的人:出差时追问当前 agent、给 bot 发一句让它在本机工作区里改文件或跑命令。模型可见的工具集合完全取决于外围组合——示例里是 bashread / write / editsubagenttodo_write;只把插件加进 web profile、却没有对应工具层,私聊里就只有会话,没有那些工具。

README 列出的已知限制,使用前要按字面理解:

  • 仅文本。 照片、文档、语音、贴纸和 caption 会被忽略。
  • 仅私聊。 群聊 @ 提及和话题(topics)未处理。
  • 没有 webhook。 进程必须能出站访问 Telegram API;国内网络若访问不到,这个包本身没有代理配置项。
  • 没有投递重试。 除 HTML 失败回退纯文本外,发送失败记日志后丢弃。
  • 组合层不热更新。 改完插件要重启 dsh 进程。

安全方面再强调一次。插件以当前 dsh 进程权限运行,示例里的 bash 与文件工具作用在 DSH_CWD(默认当前工作目录)上。Bot token 等同登录凭证,不要写进可提交的配置文件。白名单为空时拒绝所有人,这是有意的 fail closed,不要为了「先通一下」就在生产环境打开 allowAllUsers

小结

telegram 把 Telegram 私聊接到 DeepSeek Harness 的 agent 会话上:长轮询收文本、一聊天一会话、HTML 分片回写。它是社区维护的后台桥接插件,不是官方应用,也不代替 LLM、工具和会话层。目录页与源码仓库如下,装之前核对许可证和当前提交:

  • 目录页:https://deepseek-harness-plugin.com/zh-CN/plugins/telegram/
  • GitHub:https://github.com/LoserFox/telegram
  • 官方 Harness:https://github.com/deepseek-ai/deepseek-harness
羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜