【路由】源码构建PilotDeck 智能体

项目地址

部署环境

  • 设备:软路由N100
  • 设备架构:X86
  • 部署方式:源码构建

项目资源

项目优势

  • PilotDeck 以 WorkSpace 为基本单位,将文件、记忆、技能在项目级别完整隔离与沉淀,并配套提供 白盒记忆、智能路由、Always-on 三大能力,整套系统原生支持 Model Context Protocol (MCP),跨前端(Web / CLI / IM)行为一致。支持将不同的大模型APi统一在这个项目中,根据任务难度来智能调用不同的模型能力,以降低生产者的Token费用。同时也支持后台自动跑任务,支持将该项目,接入微信APP,随时可以用微信APP处理工作。

PilotDeck 完整部署与维护包

这是一个可直接解压到 iStoreOS / OpenWrt 软路由使用的完整源码与部署包。
它已经包含本项目部署过程中遇到的鉴权构建问题和 DeepSeek 模型配置修正。

版本与修复内容

  • PilotDeck main 源码快照。
  • 源码提交:1732d07dc5f90cf243180b451c250e15f3a947ab。
  • Dockerfile 在构建 UI 时接收 PILOTDECK_DISABLE_LOCAL_AUTH。
  • Compose 的构建参数和运行时鉴权设置保持一致。
  • 默认模型改为 DeepSeek 官方 API:
    • 主模型:deepseek/deepseek-v4-flash
    • 轻量模型:deepseek/deepseek-chat
    • API URL:https://api.deepseek.com/v1
  • 持久化目录直接映射到宿主机 ./data。
  • 智能体工作区直接映射到宿主机 ./workspace。
  • 提供安装、备份、更新和诊断脚本。

详细版本信息见 VERSION.txt。

目录说明

PilotDeck-Deploy-2026-10-22/
├── PilotDeck/                 # 完整项目源码,Docker build context
├── docker-compose.yml
├── .env.example
├── config/
│   └── pilotdeck.deepseek.example.yaml
├── data/                      # 运行后保存认证库、配置、会话和记忆
├── workspace/                 # 智能体可读写的独立工作区
├── backups/                   # 备份和升级下载目录
├── scripts/
│   ├── install.sh
│   ├── backup.sh
│   ├── update.sh
│   ├── patch-dockerfile.sh
│   └── diagnose.sh
├── VERSION.txt
└── README.md

包内故意不包含以下内容:

  • 真实 API Key。
  • 当前路由器的 data/、账号数据库和聊天数据。
  • 构建生成的 Docker 镜像。
  • .git 历史目录。

全新部署

将整个目录放到软路由:

/mnt/mydisk/docker/pilotdeck

进入目录:

cd /mnt/mydisk/docker/pilotdeck
cp .env.example .env
chmod 600 .env

首次部署建议先保持 API Key 为空,通过网页配置:

sh scripts/install.sh
docker compose logs -f --tail=200 pilotdeck

打开:

http://软路由局域网IP:3001
  • Screenshot-20261022-114638-730

首次进入必须创建 PilotDeck 自己的账号。Lucky 账号、iStoreOS 账号和
PilotDeck 账号互不通用。

注册并登录后进入 Settings → Model Pool。

DeepSeek 官方 API 配置

不要将 DeepSeek Key 配置在 openrouter provider 下。

正确参数:

字段值
Provider IDdeepseek
Protocolopenai
API URLhttps://api.deepseek.com/v1
Model IDdeepseek-v4-flash
完整主模型引用deepseek/deepseek-v4-flash
轻量模型引用deepseek/deepseek-chat

网页操作:

  • Screenshot-20261022-120220-286
  1. 打开 Settings → Model Pool。
  2. 点击 + 添加 Provider。
  3. 选择内置的 DeepSeek。
  4. API Key 只填写 Key 本身,不要添加 Bearer。
  5. 添加模型 ID deepseek-v4-flash。
  6. 保存并点击连接测试。
  7. 将主模型设为 deepseek/deepseek-v4-flash。
  8. 在 Settings → Route 检查是否还存在 openrouter/... 引用。
  9. 将所有路由和 Token Saver 引用迁移到 DeepSeek 后,再删除 OpenRouter。

PilotDeck 也会拒绝格式明显错误的模型引用。不要写成:

openrouter/deepseek/deepseek-v4-flash

语言切换为中文入口

  • Screenshot-20261022-114944-469
  • 左侧返回箭头下方那个菜单选项便是切换语言的选项。

首次启动前通过 .env 自动生成配置

如果希望首次启动时自动建立 DeepSeek 配置,在 .env 中填写:

PILOTDECK_MODEL=deepseek/deepseek-v4-flash
PILOTDECK_LIGHT_MODEL=deepseek/deepseek-chat
PILOTDECK_API_URL=https://api.deepseek.com/v1
PILOTDECK_API_KEY=sk-your-deepseek-api-key

entrypoint 只在 data/pilotdeck.yaml 不存在时读取这些值。
配置文件生成之后再修改 .env 不会覆盖现有模型配置,此时应使用网页设置。

后台访问

IP:3001  #局域网
  • Screenshot-20261022-120329-782

Lucky 反向代理

推荐规则:

项目值
监听端口1871
TLS开启
前端域名pilotdeck.hello.com
后端地址http://192.168.100.8:3001
服务类型反向代理
跨域支持开启
禁用长连接关闭

Lucky 2.27.x 会自动透传 WebSocket Upgrade,不需要单独的 WebSocket 开关。
确认日志没有持续出现下面的错误:

[WARN] WebSocket authentication failed

正确登录后应出现:

[OK] WebSocket authenticated for user: <用户名>

如果 Lucky 跑在 Docker 容器里,不能使用 127.0.0.1:3001 指向 iStoreOS
宿主机的 PilotDeck;应改成宿主机的局域网 IP。当前 Lucky 安装在宿主机时,
使用 http://192.168.100.8:3001 是正确做法。

从现有部署迁移

不要用本包的空白 data/ 覆盖已有数据。先停止服务并备份:

cd /mnt/mydisk/docker/pilotdeck
docker compose stop pilotdeck
sh scripts/backup.sh

将新包解压到临时目录,然后:

  1. 保留新包中的 docker-compose.yml。
  2. 保留新包中已修正的 PilotDeck/Dockerfile。
  3. 将旧部署的整个 data/ 复制到新包。
  4. 按需复制旧 workspace/。
  5. 确认 .env 中的 PILOTDECK_DISABLE_LOCAL_AUTH=0。

确认完成后再运行安装脚本。

备份

cd /mnt/mydisk/docker/pilotdeck
sh scripts/backup.sh

备份保存到 backups/<时间>/,包含:

  • data.tar.gz
  • workspace.tar.gz
  • .env 的本地副本
  • Compose 配置
  • 版本信息

env.backup 可能包含 API Key,不要上传到网盘或发送给他人。

升级

不要运行:

docker compose pull

PilotDeck 当前需要从源码构建,没有可直接拉取的官方应用镜像。

使用提供的升级脚本:

cd /mnt/mydisk/docker/pilotdeck
sh scripts/update.sh

脚本会:

  1. 自动备份当前数据和配置。
  2. 下载最新 main 源码。
  3. 自动重新应用登录鉴权构建补丁。
  4. 保留旧的 PilotDeck 源码目录。
  5. 新镜像构建失败时恢复旧源码。

升级不会删除 data/、workspace/ 或 backups/。

常用维护命令

cd /mnt/mydisk/docker/pilotdeck

docker compose ps
docker compose logs -f --tail=200 pilotdeck
docker compose restart pilotdeck
docker compose down
docker compose up -d
sh scripts/diagnose.sh

故障排查

页面显示 Model configuration unavailable

查看完整诊断:

sh scripts/diagnose.sh

如果错误为 Access denied. No token provided:

  • 确认访问的是 PilotDeck 自己的登录页面。
  • PILOTDECK_DISABLE_LOCAL_AUTH=0 必须与 Dockerfile 构建参数一致。
  • 本包已包含该修复,不要从旧镜像继续启动。

WebSocket authentication failed

检查:

docker compose logs --tail=200 pilotdeck

同时确认 Lucky 后端地址直接指向 http://192.168.100.8:3001,
并已保留原始 /ws?token=... 请求路径和查询参数。

Incorrect API key / Missing Authentication header

通常是 provider 与 Key 不匹配:

Key正确服务
sk-or-v1-...OpenRouter
普通 sk-...具体的 OpenAI 兼容服务,需确认服务商

如果使用 DeepSeek 官方 API,provider 必须是 deepseek,不是 openrouter。

构建卡住或拉取失败

本包不需要 git。构建需要访问 Docker Hub、Debian 源、npm registry
和 GitHub Release。软路由有代理时,可在执行构建命令时传入:

HTTP_PROXY=http://宿主机IP:7890 \
HTTPS_PROXY=http://宿主机IP:7890 \
DOCKER_BUILDKIT=1 \
docker compose build --build-arg PILOTDECK_DISABLE_LOCAL_AUTH=0 pilotdeck

若出现 signal: killed 或退出码 137,通常是内存不足。

安全边界

  • 不要把 PilotDeck 的 3001 端口直接暴露到公网。
  • 对外访问使用 Lucky HTTPS 反向代理。
  • 建议给 PilotDeck 设置独立强密码。
  • 不要将 /var/run/docker.sock 挂载给容器。
  • 不要把路由器根目录或 /mnt/mydisk/docker 整个挂载到 /workspace。
  • 只将需要处理的文件放在 workspace/。
  • 外部磁盘优先使用 ext4;exFAT/NTFS 可能导致权限和 SQLite 异常。
消息盒子

# 暂无消息 #

只显示最新10条未读和已读信息