telegram-copilot-bot

想做什麼

aw-telegram-botgh-aw(GitHub Agentic Workflows)框架驅動,功能很完整。但 gh-aw 是一個額外的框架層,有額外的認識負擔。

這個專案的目標:做一個功能完全相同、但不依賴 gh-aw 的版本。直接用 Copilot CLI + Python 腳本,架構更簡單。


架構對照

兩個版本的架構幾乎一樣,差異只在 AI 引擎的安裝方式和工具層:

使用者 (Telegram)
  │
  ▼
Cloudflare Worker(驗證 + 白名單 + 轉發)
  │  workflow_dispatch
  ▼
GitHub Actions
  │
  ├── 原版:gh-aw compile → .lock.yml → Copilot + Safe-Inputs + MCP
  │
  └── 輕量版:npm install -g @github/copilot → copilot --autopilot --yolo + Python 腳本 + MCP

差異對照表

項目 aw-telegram-bot(原版) telegram-copilot-bot(輕量版)
AI 引擎安裝 gh-aw(GitHub Agentic Workflows 框架) npm install -g @github/copilot(直接安裝)
Prompt 格式 telegram-bot.mdgh aw compile 編譯成 .lock.yml prompt.md 直接使用,不需編譯
工具腳本 Safe-Inputs(gh-aw 原生沙箱機制) Python 腳本(.github/scripts/
圖片生成 Nanobanana MCP Server 直接呼叫 Gemini REST API
網路搜尋 Tavily MCP Server Tavily MCP Server(相同)
影片下載 yt-dlp yt-dlp(相同)
App Factory 事件驅動開發鏈 事件驅動開發鏈(相同)
子 Repo 結構 implement.yml + review.yml + skills 相同

怎麼做的

1. 用 npm 裝 Copilot CLI

原版用 gh-aw 編譯 Markdown 成 GitHub Actions workflow,背後還是跑 Copilot CLI。

輕量版跳過框架,直接裝:

- name: Install Copilot CLI
  run: npm install -g @github/copilot

- name: Run agent
  run: |
    copilot --autopilot --yolo \
      --max-autopilot-continues 30 \
      -p "$(cat prompt.md)

      User message from chat_id $:
      $"

--autopilot 不需要人確認,--yolo 允許執行所有工具,--max-autopilot-continues 30 讓它跑最多 30 個回合。

2. Python 腳本取代 Safe-Inputs

原版的 Safe-Inputs 跑在 gh-aw 沙箱裡,有檔案存取和網路防火牆的保護。

輕量版直接用 Python 腳本,放在 .github/scripts/

.github/scripts/
├── send_telegram_message.py    # 傳文字
├── send_telegram_photo.py      # 傳圖片
├── send_telegram_video.py      # 傳影片
├── download_video.py           # yt-dlp 下載
├── generate_image.py           # Gemini 圖片生成
├── create_repo.py              # 建 GitHub Repo
├── fork_repo.py                # Fork Repo
├── setup_repo.py               # 推送初始檔案
├── create_issues.py            # 建 Issue
├── setup_secrets.py            # 設定 Secret
├── trigger_workflow.py         # 觸發 Workflow
├── post_comment.py             # Issue/PR 留言
└── manage_labels.py            # 標籤管理

共 13 個腳本,跟原版的 12 個 Safe-Inputs 功能一一對應,多了一個 generate_image.py

3. Gemini 直接 API 取代 Nanobanana MCP

原版用 Nanobanana MCP Server 做圖片生成。在輕量版測試時發現 MCP 工具在 Copilot CLI 的 --autopilot 模式下不穩定 — 工具載入了但呼叫時回報「Tool does not exist」。

解法:寫一個 generate_image.py,直接呼叫 Gemini REST API:

models = [
    "gemini-3-pro-image-preview",
    "gemini-3.1-flash-image-preview",
    "gemini-2.5-flash-image",
]

三個模型輪流 fallback。用 responseModalities: ["TEXT", "IMAGE"] 拿回圖片的 base64 資料,存成 PNG。

踩坑:Gemini 的 model ID 不是你想的那樣。gemini-3.0-pro-preview → 404,正確的是 gemini-3-pro-image-preview(要加 -image-preview 後綴)。gemini-2.5-flash → 400(不支援圖片輸出),正確的是 gemini-2.5-flash-image

4. App Factory 範本

App Factory 建立的子 Repo 需要 implement.ymlreview.yml 才能跑自動開發鏈。

.github/templates/ 放好範本,Prompt 指示 Copilot 在建 Repo 時讀取範本並推送:

.github/templates/
├── workflows/
│   ├── implement.yml     # 自動實作 Issue
│   └── review.yml        # 自動審查 PR + Playwright 測試
└── skills/
    ├── issue-workflow-SKILL.md
    ├── code-standards-SKILL.md
    ├── testing-SKILL.md
    └── deploy-pages-SKILL.md

子 Repo 的事件驅動鏈跟原版完全一樣:

Issue → implement.yml → PR → review.yml → merge → 下一個 Issue → 循環

踩坑紀錄

坑 1:MCP 在 autopilot 模式下不穩定

Copilot CLI 的 --autopilot 模式下,MCP Server 的工具有時載入失敗,回報 Tool 'generate_image' does not exist

試過調整 MCP config 格式(加 type: local、移除 type: local、加 tools: ["*"]),都不穩定。

解法:圖片生成改用直接 REST API 呼叫,不依賴 MCP。Tavily MCP 則正常運作。

坑 2:Gemini model ID 不是 semver

Google 的 Gemini 圖片生成模型 ID 不遵循語義化版本號:

你以為的 ID 實際的 ID
gemini-3.0-pro-preview gemini-3-pro-image-preview
gemini-3.1-flash-preview gemini-3.1-flash-image-preview
gemini-2.5-flash gemini-2.5-flash-image

必須加上 -image-image-preview 後綴才支援圖片輸出。

坑 3:node_modules 沒 gitignore

Worker 的 node_modules/ 沒被 .gitignore 排除,一次 git add -A 就把 113MB 的 workerd 二進制檔 commit 進去了,push 被 GitHub 擋下。

解法git reset --soft 回到上一個乾淨的 commit,加上 .gitignore,重新 commit。

坑 4:GitHub Pages 沒自動啟用

setup_repo.py 推送檔案後立即呼叫 Pages API,有時因為 Repo 剛建好還沒完全準備好而失敗。

解法:加上 retry(3 次、間隔 5 秒),並在 Prompt 裡加一個額外的驗證步驟。


功能驗證

全部功能都經過實際測試:

功能 狀態
一般聊天
/draw 圖片生成
/research 網路研究
/translate 翻譯
/download 影片下載
/app 從零建立
/app fork: Fork 客製化
/build 觸發建置
/issue 建立 Issue
/msg 訊息轉發
App Factory 事件驅動鏈 ✅(implement → review → merge → 下一個 Issue)

結論

gh-aw 是好框架 — Safe-Inputs 的沙箱保護、結構化的 Prompt 管理、和 MCP 整合都很成熟。如果你想要更簡單的架構、少一層框架依賴,這個輕量版是功能等價的替代方案。

核心差異就一個:原版靠框架,輕量版靠腳本


Repo