后台任务
编写长篇报告、批量处理数据、抓取渲染网页等耗时数分钟至数十分钟的工作,可由聊天模型通过 delegate 工具委托给后台任务。每个任务在隔离环境中由编程助手 Pi 执行:Linux 部署包使用本机沙箱(bubblewrap),Docker 部署与 Windows 部署包使用 Docker 任务容器。任务运行期间,群内日常聊天照常进行。
后台任务默认关闭,日常聊天、查资料和记忆功能不依赖它。
启用步骤
进入面板能力 → 后台任务,打开启用后台任务。面板按部署方式预填运行环境:
部署方式 运行方式 预填内容 Linux 部署包 Linux 本机沙箱 bwrap程序路径与任务运行时目录Docker 部署 Docker 任务容器 同版本的 ghcr.io/lendevs/lenbot-worker镜像,任务目录放在lenbot-data数据卷内Windows 部署包 Docker 任务容器 Docker Desktop 地址 npipe:////./pipe/docker_engine与同版本镜像本机沙箱点击检查本机沙箱,依次确认 bwrap、用户命名空间、任务运行时、沙箱读写和 Pi 启动,失败的步骤附原始输出,可改用 Docker 任务容器。Docker 任务容器点击检查 Docker,镜像不在本机时点击拉取镜像。
选择任务模型是否支持推理后保存并重启。任务默认跟随聊天模型;如需独立编程模型,在模型 → 用途中配置后台任务(
worker)。页面顶部的清单逐项列出运行方式、任务模型、群聊和文件发送的状态,缺少的项附跳转:
- 在群聊 → 设置中开启允许委托任务,并在权限矩阵中勾选可以委托任务的成员身份;
- 在角色 → 工具与技能中允许
delegate、task、send_file与tool_search; - 文件可在面板下载,也可通过发送工具交付到所属群聊,见下文发送到群聊。
群聊一项显示可以委托任务后,点击运行示例任务创建一个写入
hello.txt并交付的任务,在群任务页查看过程和交付文件。
任务环境不能直接联网,模型请求、按联网方式放行的访问、浏览器操作与本群数据工具(记忆、资料、历史聊天查询、网页搜索与网页读取)都经由宿主进程代理。模型请求计入用量额度;联网访问、浏览器和网页工具的字节数计入流量上限;记忆、资料和历史聊天查询在本机完成,不计流量。API Key 始终留在宿主进程内。
数据工具跟随角色权限和任务的联网方式(worker.egress.mode):
| 工具 | off | allowlist | public |
|---|---|---|---|
knowledge(本群资料检索) | 角色允许且有资料时提供 | 角色允许且有资料时提供 | 角色允许且有资料时提供 |
web_read(读取网页) | 不提供 | 只读 allowed_hosts 里的域名 | 提供 |
web_search(网页搜索) | 不提供 | 不提供 | 提供 |
web_read 的目标网址、重定向的每一跳和服务返回的最终网址都按联网方式检查,不在清单内的结果被丢弃;这些访问在任务的联网记录里列为连接,字节数计入任务与群每日上限。任务事件为每次调用记一条 data_tool。
任务环境
任务里的 python3 预装 pandas、openpyxl、matplotlib、python-docx、pypdf 和 Pillow,不联网也能处理 CSV、XLSX、图表、DOCX 和 PDF;matplotlib 已配置中文字体。Node 的 fetch() 在开启联网时同样经任务代理访问。
| 运行方式 | pandoc、ffmpeg、poppler 与中文字体 | 网页渲染 lenbot-render 与浏览器 |
|---|---|---|
| Docker 任务容器 | 镜像内置 | 镜像内置 |
| Linux 本机沙箱 | 使用系统已安装的版本 | lenbot-render 在 Chromium 下载并试渲染成功后提供;浏览器需要 Docker 任务容器 |
Linux 本机沙箱启用任务后,宿主把 Playwright 的无头 Chromium(解压后约 350 MB)下载到 ~/.cache/lenbot/,在沙箱里试渲染一页 HTML,成功后新开始的任务即可使用 lenbot-render。同一台机器上的实例共用这份下载。Chromium 使用系统的 NSS、ATK 等库,PDF 页数由 poppler 的 pdfinfo 读取;试渲染失败时,日志的 task_browser_failed 记录 Chromium 的原始输出,补装系统库后重启 LenBot 会再试一次。Debian 和 Ubuntu 可以用部署包里的 Node 安装 Chromium 需要的库:
sudo releases/<版本>/task-runtime/node/bin/node \
releases/<版本>/task-runtime/browser/node_modules/playwright-core/cli.js install-deps chromium
sudo apt install poppler-utils每个任务启动时,环境说明列出这个环境实际有的程序和库(programs),内置技能按同一份清单加载:
| 内置技能 | 加载条件 |
|---|---|
pdf、presentation、skill-writing、group-summary | 始终 |
html-document | 有 lenbot-render |
media-processing、media-analysis | 有 ffmpeg |
spreadsheet、data-analysis、word-document | 有对应的 Python 库 |
web-research | 联网方式不是不联网 |
public-browser | 联网方式不是不联网,且有 lenbot-browser |
能力 → 后台任务里的自定义技能目录存放自定义技能:群共享技能放在 shared/ 下,本群技能放在 scenes/<群目录>/ 下,保存后与内置技能一起提供给任务。
本机沙箱用进程数上限(pids_limit)限制每个任务可创建的进程。该上限依赖 Linux 内核 5.14 及以上:从 5.14 起,进程数按用户命名空间分别计数,每个任务有自己的额度;更早的内核按宿主用户统一计数,同一宿主用户下的任务共用一份额度,一个任务创建大量进程会拖住其他任务。Docker 任务容器的进程数上限按容器计算,与内核版本无关。
联网方式
在能力 → 后台任务 → 任务能力中选择任务的联网方式:
| 联网方式 | 任务能连接的地址 |
|---|---|
| 不联网(默认) | 只能经宿主调用模型 |
| 按域名放行 | 只连可连接的域名中的域名;*.example.com 匹配它的所有子域名,不含 example.com 本身;不能直接连 IP 地址。加入软件包源一次填入 pypi.org、files.pythonhosted.org、registry.npmjs.org |
| 公网 | 公网地址;内网、环回和保留地址始终不可连接 |
三种方式都受更多限制中的流量、速度和连接数上限约束,每个任务的上传量另有上限(默认 20 MB)。被拒绝的连接及原因记入任务事件,任务可用 network_status 读取。浏览器 lenbot-browser 跟随联网方式:不联网时不可用,按域名放行时只能打开名单内的网站。本地 HTML 渲染 lenbot-render 离线运行,不受联网方式影响。
磁盘空间
- 每个任务的工作区与运行目录合计不超过每个任务的目录大小上限(默认 2 GB),超过时任务停止并记录原因。
- 任务目录所在磁盘剩余空间低于 5 GB 时不接收新任务,已排队的任务等空间恢复后再开始;低于 2 GB 时停止运行中的任务。
- 任务结束 14 天后自动删除工作区与运行目录,交付文件和任务记录保留。
- 以上数值都在更多限制中调整。
日常使用与空间管理
在群聊 → 任务页签下可通过四个视图管理单群工作流:
- 资料输入:在任务空间与文件视图中可上传本群共享资料,也可从历史任务的工作区或交付副本中挑选文件(单个新建任务最多挂载 16 份只读输入快照)。
- 实时预览、提问与续接:任务执行期间可在面板查看实时输出流与每一步操作事件。任务需要发起人确认方案或补充信息时会进入等待回答状态(等待期间不占用并发运行槽位);任务完成后,只要工作区尚未释放,群友或运营者均可追加要求按原会话和原目录继续任务。
- 网页渲染:无头渲染工具
lenbot-render可将生成的 HTML 页面直接导出为排版好的 PDF 或高清长截图。Docker 任务容器内置;Linux 本机沙箱在 Chromium 下载并试渲染成功后提供。 - 任务编写的技能:任务在执行过程中编写的可复用技能可在任务详情的更多 → 任务编写的技能中审阅,并一键采纳移入本群或共享技能库(之后可在能力 → 技能中管理)。
- 分级清理空间:在任务空间与文件中可按时间筛选任务并计算磁盘用量。清理临时文件仅移除控制管道、运行日志和浏览器临时目录,保留工作区与会话供后续续接;释放环境彻底删除工作区和运行目录(不可再续接),已登记的交付副本、本群共享资料和数据库任务记录仍然保留。
发送到群聊
任务在容器内产出文件后,登记为交付与发送到群聊是两个独立步骤。登记后的交付文件可在面板中预览下载,聊天模型调用 send_file 把它发到所在的群或私聊:QQ 上传为群文件或私聊文件,Telegram 以文档发送(单个文件最大 50 MB),飞书先上传再发送。
QQ 上 LenBot 把文件内容以 base64:// 随上传请求发给 OneBot 协议端,协议端与 LenBot 不需要共用目录,分处两台机器或两个容器都可以。单个文件最大 36MiB。每次上传的回执(成功、明确失败或结果未知)记录在任务事件中。
重启与版本更新
重启 LenBot 会中断当时正在运行的任务,并将其状态记为中断;工作区文件与任务会话完整保留,重启后可直接续接,排队中的任务保留原队列顺序。
部署包与 Docker 部署更新版本时,官方 worker 镜像的配置随之切换到同一版本,镜像在面板中点击拉取镜像或用 docker pull 获取。Linux 本机沙箱的任务运行时随部署包更新。