CCYellowStar2/dsh-astrbot-ingress ↗★ 0
dsh-astrbot-ingress
提供HTTP入口让AstrBot驱动DSH智能体
AI 分析
适合需要通过AstrBot将DSH智能体接入OneBot或官方即时通讯软件的用户。
安装
$
npx -p @deepseek-ai/dsh dsh plugin --profile web add github:CCYellowStar2/dsh-astrbot-ingress说明文档
阅读完整 README ↗配置
DSH 侧(profile 的 cordis.patch.yml)
- id: dsh-astrbot-ingress
config:
host: 127.0.0.1
port: 3188
cwd: '' # 默认工作区;留空 = DSH 已登记的第一个工作区
reasoningMode: first-line # off | first-line | full
showToolCalls: true
toolLineBatch: 5
progressMode: digest # digest | full | minimal
progressIntervalSec: 60 # 10-300
beacon: true # 写 ~/.dsh/astrbot-ingress.json(端口+token)供同机 AstrBot 自动发现
| 项 | 默认 | 说明 |
|---|---|---|
host / port | 127.0.0.1 / 3188 | 默认只监听本机 |
cwd | 空 | 默认工作区;留空则用 DSH 已登记的第一个 |
maxMessageChars | 1500 | 单条消息上限(超出自动切块) |
approvalTimeoutSec | 600 | 审批 / 提问等你回答的上限 |
progressMode | digest | 过程怎么发(见下) |
progressIntervalSec | 60 | digest 的汇报间隔(10-300),必须小于 AstrBot 的 timeout_sec |
reasoningMode | first-line | 思考内容:off / 只发第一行 / full 全文 |
showToolCalls | 开 | full 档是否发工具行;digest 档是否把工具次数写进汇报 |
toolLineBatch | 5 | full 档连续工具行并成一条(1 = 每条单发) |
beacon | 开 | 把实际端口与 token 写进 %DSH_HOME%/astrbot-ingress.json(0600),供同机 AstrBot 自动发现;不想写就设 false |
inboundUrlMaxMb | 200 | URL 入站的单文件上限(AstrBot 侧 inbound_url_max_mb 也要够) |
inboundUrlTimeoutMs | 60000 | 单个 URL 的下载超时 |
outboundUrlMaxMb | 200 | 出站文件「拉取凭证」的单文件上限(AstrBot 侧 outbound_pull_max_mb 也要够) |
endGraceMs | 1200 | 每条助手消息的最后一段只压这么久等 turn/end 来拼 —— 本回合结束;等不到就先发正文。别设太大(设成几千毫秒就会重新出现「正文慢一拍」的手感) |
traceLog | 关 | 诊断追踪:把 adopt-turn / drop-stale / grace-flush / turn-end 写进 %DSH_HOME%/dsh-astrbot-ingress/trace.log(>1MB 自动归档 .old)。只在排查跨进程时序时开 |
过程档位通常由 AstrBot 侧的 progress_mode 逐次带过来,这里的值只是「请求没带」时的兜底:
| 值 | 群里看到 |
|---|---|
digest(默认) | 每 progressIntervalSec 秒一条 ⏳ 已跑 3 分钟 · 工具 7 次 · 最近:edit · bash |
full | 实时发思考首行 + 工具行 + 心跳摘要 |
minimal | 过程不出声 |
三档都照发:最终结果、文件、报错、任务已停止、附件提示、权限确认,以及 —— 本回合结束。
AstrBot 侧
| 项 | 同机 | AstrBot 在 Docker、DSH 在宿主机 |
|---|---|---|
ingress_url | 留空(自动读 %DSH_HOME%/astrbot-ingress.json 里的实际端口) | 一般也留空(自动探 host.docker.internal:3188);只有 ingress 不在默认端口 / 不在本机才手填 |
token | 留空(同上,从信标里读) | 与 DSH config.json 相同(唯一的必填项) |
allow_users / allow_groups | 空 = 仅管理员 | 同左 |
send_file_mode | direct | auto(出站文件有拉取兜底;出站图片 / 视频要共享目录时才填 shared) |
send_protocol_path | 留空 | 出站图片 / 视频要落盘给协议端时填,如 /app/napcat/data/dsh-outbox、/app/snowluma-data/dsh-outbox |
send_outbox_dir | 留空 | 仅当两边挂载点不同名时填(AstrBot 侧那个名字) |
inbound_share_dir | 留空 | 入站大文件(>12MB)暂存目录(AstrBot 侧)。同机留空即可 —— 自动用 DSH 当前工作区下的 .dsh-inbox;分容器才填,如 /mnt/d/proj/.dsh-inbox |
inbound_dsh_prefix | 留空 | 仅分容器时填:同一目录在 DSH 侧的写法,如 D:\proj\.dsh-inbox(同机两边是同一个路径) |
inbound_url_base | 留空 = 自动探测 | URL 入站:DSH 能访问到的 AstrBot 基址(宿主视角),如 http://127.0.0.1:10000。填了就固定用它 |
inbound_url_candidates | 空 | URL 入站的候选(裸端口或完整地址)。宿主机映射端口不是 6185 时写这里,如 10000;插件会让 DSH 侧先真取一次,第一个通的才用 |
ingress_url_candidates | 空 | ingress 地址的额外候选;留空时内置 host.docker.internal:3188 / 127.0.0.1:3188,自动探测 |
outbound_pull | 开 | 出站文件本地看不到时从 ingress 拉(Docker 下免挂盘) |
inbound_url_mode | auto | auto=只有 >12MB 走 URL;always=全走;off=关 |
trace_delivery | 关 | 诊断:每轮在 AstrBot 日志里多几行 [dsh-trace](排「慢一拍」「顺序不对」时开) |
大多数情况不用管这一节:只填 token,出站文件走上面的 outbound_pull 兜底、入站大附件走 URL,
挂盘是可选的老办法。还有一种通用做法是填 AstrBot 主配置的 callback_api_base(协议端能访问到的地址,
如 http://astrbot:6185)—— 出站图片 / 视频也会注册成 URL 交给协议端下载。两者都没配、且协议端与 AstrBot
分容器时,才需要共享目录并填 send_protocol_path。
要挂共享目录时,配置里填的都是容器内视角,在 compose 里把同一块盘挂成同一个路径最省事:
services:
astrbot:
volumes:
- ./napcat-data:/app/napcat/data # 出站:与协议端挂同一路径
- "D:/:/mnt/d" # 入站:DSH 要能读到 AstrBot 写的附件
napcat:
volumes:
- ./napcat-data:/app/napcat/data # 与 AstrBot 完全相同的挂载点
容器里若设了 HTTP_PROXY,插件会 trust_env=False 直连,避免被代理成 502。完整的部署对照表见 astrbot_plugin_dsh。