如何使用 OpenClaw 在 Telegram 上構建多智能體協作系統

Mar 11, 2026

Telegram 已經從一個簡單的即時通訊應用演變為強大的自動化、機器人開發和 AI 整合平台。擁有超過 8 億活躍用戶和強大的機器人 API,Telegram 為開發者提供了部署複雜 AI 解決方案的理想環境。當結合已獲得超過 60,000 個 GitHub Star 的開源 AI 智能體框架 OpenClaw 時,Telegram 成為複雜的多智能體協作中心。本指南向您展示如何使用 OpenClaw 在 Telegram 上構建強大的多智能體協作系統。

與簡單的聊天機器人不同,OpenClaw 使多個 AI 智能體能夠協同工作,具有定義的角色、共享記憶和協調的任務執行。想像一個團隊,其中指揮官智能體路由用戶請求、研究智能體收集資訊、創意智能體生成內容、支援智能體處理技術問題——所有這些都在您的 Telegram 機器人內無縫協作。

前提條件:在設置 OpenClaw 多智能體系統之前,您需要一個 Telegram 帳號和機器人令牌。如果您需要 Telegram 註冊或手機號驗證方面的幫助,請查看我們的綜合指南:如何使用簡訊驗證平台註冊 Telegram

什麼是 OpenClaw 多智能體協作?

超越簡單的 Telegram 機器人

傳統的 Telegram 機器人單獨回應命令。OpenClaw 多智能體系統作為協調團隊運作:

  • 基於角色的專業化:每個智能體都有特定的目的和專業知識
  • 共享上下文:智能體可以訪問共享記憶和對話歷史
  • 協作決策:多個智能體可以為複雜任務做出貢獻
  • 工作流編排:任務根據要求在智能體之間流動
  • 跨平台能力:同時在 Telegram、WhatsApp、Discord 和其他平台上運行

實際應用

組織正在 Telegram 上使用 OpenClaw 多智能體系統用於:

  • 客戶支援:分層支援,專業智能體處理不同類型的諮詢
  • 內容創作:用於研究、寫作和編輯的多智能體工作流
  • 技術支援:代碼調試、系統診斷和技術文件
  • 社群管理:內容審核、成員入職和活動協調
  • 電子商務:產品推薦、訂單跟踪和支付協助
  • 教育:輔導系統、測驗生成和個性化學習路徑
  • 新聞聚合:多源資訊收集和摘要

架構概述

閘道器-智能體模式

OpenClaw 多智能體系統通常遵循以下架構:

┌─────────────────────────────────────────────────────────────┐
│                      閘道器進程                             │
│         (統一消息接收和路由)                               │
└─────────────────────────────────────────────────────────────┘
                              │
        ┌─────────────────────┼─────────────────────┐
        │                     │                     │
        ▼                     ▼                     ▼
┌──────────────┐    ┌──────────────┐    ┌──────────────┐
│    指揮官     │    │    研究      │    │    創意      │
│   (路由器)  │    │  (收集者)   │    │  (生成器)  │
└──────────────┘    └──────────────┘    └──────────────┘
        │                     │                     │
        └─────────────────────┼─────────────────────┘
                              │
                              ▼
                    ┌──────────────┐
│    支援      │
│ (助手)     │
└──────────────┘

關鍵組件

  1. 閘道器:中央消息路由器,將任務分發給適當的智能體
  2. 智能體:具有定義角色和功能的專業化 AI 實例
  3. 記憶存儲:用於智能體通信的共享或隔離上下文存儲
  4. 工具註冊表:智能體可以調用的可用函數和 API
  5. Telegram 整合:用於消息處理的 Telegram 機器人 API 連接

智能體角色示例

角色 職責 示例任務
指揮官 請求路由和協調 分析傳入消息、委派給專家、綜合響應
研究 資訊收集 搜索資料庫、獲取 API、分析文件
創意 內容生成 撰寫文章、生成圖像、製作營銷文案
支援 用戶協助 回答常見問題、解決問題、提供指導
分析師 數據處理 生成報告、分析趨勢、提供洞察

前提條件

在 Telegram 上構建 OpenClaw 多智能體系統之前,確保您擁有:

  • Telegram 帳號:已驗證的 Telegram 帳號(註冊指南
  • Telegram 機器人:透過 @BotFather 創建的帶有 API 令牌的機器人
  • OpenClaw 安裝:Python 3.9+ 和 OpenClaw 框架已安裝
  • API 金鑰:OpenAI API 金鑰或其他 LLM 提供商憑證
  • 開發環境:用於部署的本地或雲環境

創建您的 Telegram 機器人

  1. 打開 Telegram 並搜尋 @BotFather
  2. 開始聊天並發送 /newbot
  3. 按照提示命名您的機器人並選擇用戶名
  4. 保存 BotFather 提供的 HTTP API 令牌
  5. (可選)使用 /setcommands 設置機器人命令
  6. (可選)配置機器人描述和關於文本

分步實現

第一步:設置開發環境

# 創建項目目錄
mkdir openclaw-telegram-agents
cd openclaw-telegram-agents

# 創建虛擬環境
python -m venv venv
source venv/bin/activate  # Windows 上: venv\Scripts\activate

# 安裝依賴
pip install openclaw python-telegram-bot asyncio

# 創建項目結構
mkdir -p agents config logs

必需的包

openclaw>=0.9.0
python-telegram-bot>=20.0
asyncio-mqtt>=0.13.0
python-dotenv>=1.0.0
redis>=4.5.0

第二步:配置環境變數

創建 .env 文件:

# Telegram 配置
TELEGRAM_BOT_TOKEN=your_bot_token_here
TELEGRAM_WEBHOOK_URL=https://your-domain.com/webhook

# OpenAI 配置
OPENAI_API_KEY=your_openai_api_key
OPENAI_MODEL=gpt-4

# 智能體配置
AGENT_MEMORY_TYPE=redis
REDIS_URL=redis://localhost:6379/0

# 日誌
LOG_LEVEL=INFO
LOG_FILE=logs/agent_system.log

第三步:定義智能體配置

創建 config/agents.yaml

agents:
  commander:
    name: '指揮官'
    role: '編排器'
    description: '將請求路由到適當的智能體並協調響應'
    model: 'gpt-4'
    temperature: 0.3
    system_prompt: |
      你是指揮官智能體。你的角色是:
      1. 分析傳入的用戶請求
      2. 確定哪個專業智能體應該處理任務
      3. 在需要時協調多智能體工作流
      4. 將多個智能體的響應綜合成連貫的輸出

      可用智能體:
      - 研究:用於資訊收集和數據檢索
      - 創意:用於內容生成和創意任務
      - 支援:用於技術協助和故障排除

      始終提供清晰、可操作的路由決策。

  research:
    name: '研究'
    role: '專家'
    description: '從各種來源收集資訊'
    model: 'gpt-4'
    temperature: 0.2
    tools:
      - web_search
      - database_query
      - document_analysis
    system_prompt: |
      你是研究智能體。你的角色是:
      1. 使用可用工具搜索相關資訊
      2. 分析和綜合發現
      3. 提供準確、有據可查的資訊
      4. 注意不確定性和資訊缺口

      始終引用你的來源並表明置信度。

  creative:
    name: '創意'
    role: '專家'
    description: '生成創意內容和想法'
    model: 'gpt-4'
    temperature: 0.8
    system_prompt: |
      你是創意智能體。你的角色是:
      1. 生成引人入勝的原創內容
      2. 根據受眾調整語氣和風格
      3. 在適當時提供多個選項
      4. 根據反饋進行迭代

      要有創意,但要與用戶需求保持相關。

  support:
    name: '支援'
    role: '專家'
    description: '提供技術協助和故障排除'
    model: 'gpt-4'
    temperature: 0.3
    system_prompt: |
      你是支援智能體。你的角色是:
      1. 提供清晰的分步技術指導
      2. 解決常見問題
      3. 適當地升級複雜問題
      4. 為未來參考記錄解決方案

      始終保持耐心、清晰和徹底。

workflows:
  default:
    - commander

  research_task:
    - commander
    - research
    - commander

  creative_task:
    - commander
    - creative
    - commander

  complex_task:
    - commander
    - research
    - creative
    - commander

第四步:實現閘道器服務

創建 gateway.py

"""
用於 Telegram 的 OpenClaw 多智能體閘道器
處理消息路由和智能體編排
"""

import os
import asyncio
import logging
from typing import Dict, List, Optional
from dataclasses import dataclass
from datetime import datetime

from telegram import Update
from telegram.ext import Application, CommandHandler, MessageHandler, filters, ContextTypes
from openclaw import Agent, AgentTeam, MemoryStore
from dotenv import load_dotenv

# 加載環境變數
load_dotenv()

# 配置日誌
logging.basicConfig(
    level=logging.INFO,
    format='%(asctime)s - %(name)s - %(levelname)s - %(message)s',
    handlers=[
        logging.FileHandler('logs/gateway.log'),
        logging.StreamHandler()
    ]
)
logger = logging.getLogger(__name__)


@dataclass
class MessageContext:
    """傳入消息的上下文"""
    user_id: int
    chat_id: int
    message_id: int
    text: str
    timestamp: datetime
    thread_id: Optional[str] = None


class AgentGateway:
    """
    在 Telegram 和 OpenClaw 智能體之間路由消息的中央閘道器
    """

    def __init__(self):
        self.agent_team: Optional[AgentTeam] = None
        self.memory_store: Optional[MemoryStore] = None
        self.active_conversations: Dict[int, List[Dict]] = {}
        self.telegram_app: Optional[Application] = None

    async def initialize(self):
        """初始化閘道器並加載智能體"""
        logger.info("正在初始化智能體閘道器...")

        # 初始化記憶存儲
        self.memory_store = MemoryStore(
            backend=os.getenv('AGENT_MEMORY_TYPE', 'redis'),
            url=os.getenv('REDIS_URL', 'redis://localhost:6379/0')
        )
        await self.memory_store.connect()

        # 從配置初始化智能體團隊
        self.agent_team = AgentTeam.from_config('config/agents.yaml')
        await self.agent_team.initialize()

        # 初始化 Telegram 機器人
        self.telegram_app = Application.builder().token(
            os.getenv('TELEGRAM_BOT_TOKEN')
        ).build()

        # 註冊處理器
        self._register_handlers()

        logger.info("智能體閘道器初始化成功")

    def _register_handlers(self):
        """註冊 Telegram 消息處理器"""
        # 命令處理器
        self.telegram_app.add_handler(CommandHandler("start", self._cmd_start))
        self.telegram_app.add_handler(CommandHandler("help", self._cmd_help))
        self.telegram_app.add_handler(CommandHandler("agents", self._cmd_list_agents))
        self.telegram_app.add_handler(CommandHandler("status", self._cmd_status))

        # 消息處理器
        self.telegram_app.add_handler(
            MessageHandler(filters.TEXT & ~filters.COMMAND, self._handle_message)
        )

    async def _cmd_start(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
        """處理 /start 命令"""
        welcome_msg = """
🤖 歡迎使用 OpenClaw 多智能體系統!

我是一個由多個專業智能體組成的 AI 助手,可以幫助您:

📊 **研究** - 收集資訊和分析數據
🎨 **創意** - 生成內容和創意想法
🔧 **支援** - 技術協助和故障排除
🎯 **指揮官** - 為複雜任務編排團隊

只需向我發送一條消息描述您需要什麼,我會將您的請求路由到適當的智能體。

命令:
/agents - 列出可用智能體
/status - 檢查系統狀態
/help - 顯示幫助資訊

今天我能如何幫助您?
        """
        await update.message.reply_text(welcome_msg)

    async def _cmd_help(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
        """處理 /help 命令"""
        help_msg = """
🤖 **OpenClaw 多智能體機器人幫助**

**如何使用:**
只需用自然語言輸入您的請求。示例:

• "研究 AI 的最新趨勢"
• "為我的產品寫一封營銷郵件"
• "幫我調試這個 Python 錯誤"
• "為初學者創建鍛煉計劃"

**提示:**
- 具體說明您需要什麼
- 對於複雜任務,指揮官將協調多個智能體
- 智能體可以在對話中記住上下文

**命令:**
/start - 歡迎消息
/agents - 列出所有可用智能體
/status - 系統狀態和統計
/help - 顯示此幫助資訊

需要 Telegram 帳號?[在此註冊](/blog/how-to-register-telegram-with-sms-platform)
        """
        await update.message.reply_text(help_msg)

    async def _cmd_list_agents(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
        """處理 /agents 命令"""
        agents_info = "🤖 **可用智能體:**\n\n"

        for agent_name, agent_config in self.agent_team.agents.items():
            agents_info += f"**{agent_config['name']}**\n"
            agents_info += f"角色:{agent_config['role']}\n"
            agents_info += f"描述:{agent_config['description']}\n\n"

        await update.message.reply_text(agents_info)

    async def _cmd_status(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
        """處理 /status 命令"""
        status_msg = f"""
📊 **系統狀態**

🟢 閘道器:在線
🟢 智能體團隊:已加載 {len(self.agent_team.agents)} 個智能體
🟢 記憶存儲:已連接

活躍對話:{len(self.active_conversations)}
        """
        await update.message.reply_text(status_msg)

    async def _handle_message(self, update: Update, context: ContextTypes.DEFAULT_TYPE):
        """處理傳入消息並路由到適當的智能體"""
        # 創建消息上下文
        msg_ctx = MessageContext(
            user_id=update.effective_user.id,
            chat_id=update.effective_chat.id,
            message_id=update.message.message_id,
            text=update.message.text,
            timestamp=datetime.now()
        )

        # 顯示正在輸入指示器
        await context.bot.send_chat_action(
            chat_id=msg_ctx.chat_id,
            action='typing'
        )

        try:
            # 通過指揮官智能體路由消息
            response = await self._route_to_agents(msg_ctx)

            # 發送響應
            await update.message.reply_text(response)

        except Exception as e:
            logger.error(f"處理消息時出錯:{e}")
            await update.message.reply_text(
                "很抱歉,我在處理您的請求時遇到了錯誤。"
                "請重試或聯繫支援人員(如果問題持續存在)。"
            )

    async def _route_to_agents(self, msg_ctx: MessageContext) -> str:
        """
        將消息路由到適當的智能體並返回響應
        """
        # 獲取或創建對話歷史
        conversation_key = f"conv:{msg_ctx.user_id}:{msg_ctx.chat_id}"
        history = await self.memory_store.get(conversation_key) or []

        # 將用戶消息添加到歷史
        history.append({
            'role': 'user',
            'content': msg_ctx.text,
            'timestamp': msg_ctx.timestamp.isoformat()
        })

        # 通過指揮官智能體路由以進行任務分析
        commander = self.agent_team.get_agent('commander')
        routing_decision = await commander.analyze(
            message=msg_ctx.text,
            history=history
        )

        # 基於路由決策執行工作流
        if routing_decision.get('workflow'):
            workflow = routing_decision['workflow']
            response = await self.agent_team.execute_workflow(
                workflow=workflow,
                input_data={
                    'message': msg_ctx.text,
                    'history': history,
                    'user_id': msg_ctx.user_id
                }
            )
        else:
            # 單個智能體執行
            target_agent = routing_decision.get('target_agent', 'commander')
            agent = self.agent_team.get_agent(target_agent)
            response = await agent.execute(
                message=msg_ctx.text,
                history=history
            )

        # 更新對話歷史
        history.append({
            'role': 'assistant',
            'content': response,
            'timestamp': datetime.now().isoformat()
        })

        # 如果歷史太長則修剪(保留最後 20 條消息)
        if len(history) > 20:
            history = history[-20:]

        await self.memory_store.set(conversation_key, history)

        return response

    async def run(self):
        """運行閘道器服務"""
        logger.info("正在啟動智能體閘道器...")
        await self.telegram_app.initialize()
        await self.telegram_app.start()
        await self.telegram_app.updater.start_polling()

        logger.info("智能體閘道器正在運行。按 Ctrl+C 停止。")

        # 保持運行直到中斷
        try:
            while True:
                await asyncio.sleep(1)
        except KeyboardInterrupt:
            logger.info("正在關閉...")
        finally:
            await self.telegram_app.updater.stop()
            await self.telegram_app.stop()
            await self.telegram_app.shutdown()
            await self.memory_store.disconnect()


if __name__ == '__main__':
    gateway = AgentGateway()
    asyncio.run(gateway.initialize())
    asyncio.run(gateway.run())

第五步:創建智能體工具註冊表

創建 tools.py

"""
OpenClaw 智能體的工具註冊表
定義智能體可以調用的可用函數
"""

import json
import aiohttp
from typing import Any, Dict, List
from datetime import datetime


class ToolRegistry:
    """智能體可用工具的註冊表"""

    def __init__(self):
        self.tools: Dict[str, callable] = {
            'web_search': self.web_search,
            'fetch_url': self.fetch_url,
            'calculate': self.calculate,
            'get_current_time': self.get_current_time,
            'format_json': self.format_json,
        }

    async def web_search(self, query: str, num_results: int = 5) -> List[Dict]:
        """
        搜索網絡資訊
        注意:這是一個佔位符 - 與您首選的搜索 API 整合
        """
        # 使用 SerpAPI、Google Custom Search 或類似工具實現
        return [{"title": "示例結果", "url": "https://example.com", "snippet": "..."}]

    async def fetch_url(self, url: str) -> str:
        """從 URL 獲取內容"""
        async with aiohttp.ClientSession() as session:
            async with session.get(url) as response:
                return await response.text()

    async def calculate(self, expression: str) -> float:
        """計算數學表達式"""
        try:
            # 安全評估 - 只允許基本數學運算
            allowed_names = {
                "abs": abs, "max": max, "min": min, "sum": sum,
                "round": round, "pow": pow
            }
            return eval(expression, {"__builtins__": {}}, allowed_names)
        except Exception as e:
            return f"錯誤:{str(e)}"

    async def get_current_time(self, timezone: str = "UTC") -> str:
        """獲取指定時區的當前時間"""
        from datetime import datetime
        import pytz

        tz = pytz.timezone(timezone)
        return datetime.now(tz).isoformat()

    async def format_json(self, data: Any) -> str:
        """將數據格式化為美觀的 JSON"""
        return json.dumps(data, indent=2, ensure_ascii=False)

    def get_tool(self, name: str) -> callable:
        """按名稱獲取工具"""
        return self.tools.get(name)

    def list_tools(self) -> List[str]:
        """列出所有可用工具名稱"""
        return list(self.tools.keys())

第六步:創建部署腳本

創建 deploy.py

#!/usr/bin/env python3
"""
OpenClaw Telegram 多智能體系統的部署腳本
"""

import os
import sys
import argparse
import subprocess


def check_prerequisites():
    """檢查是否滿足所有前提條件"""
    print("正在檢查前提條件...")

    # 檢查 Python 版本
    if sys.version_info < (3, 9):
        print("❌ 需要 Python 3.9+")
        return False
    print("✅ Python 版本正常")

    # 檢查環境變數
    required_vars = ['TELEGRAM_BOT_TOKEN', 'OPENAI_API_KEY']
    missing = [var for var in required_vars if not os.getenv(var)]
    if missing:
        print(f"❌ 缺少環境變數:{', '.join(missing)}")
        return False
    print("✅ 環境變數正常")

    # 檢查 Redis 是否可用(可選)
    try:
        import redis
        r = redis.from_url(os.getenv('REDIS_URL', 'redis://localhost:6379/0'))
        r.ping()
        print("✅ Redis 連接正常")
    except:
        print("⚠️  Redis 不可用 - 將使用內存存儲")

    return True


def setup_environment():
    """設置環境"""
    print("\n正在設置環境...")

    # 創建必要的目錄
    os.makedirs('logs', exist_ok=True)
    os.makedirs('config', exist_ok=True)

    # 安裝依賴
    subprocess.run([sys.executable, '-m', 'pip', 'install', '-r', 'requirements.txt'])

    print("✅ 環境設置完成")


def run_tests():
    """運行系統測試"""
    print("\n正在運行測試...")
    # 在此處添加您的測試套件
    print("✅ 測試通過")


def deploy_production():
    """部署到生產環境"""
    print("\n正在部署到生產環境...")
    # 添加生產部署步驟
    print("✅ 部署完成")


def main():
    parser = argparse.ArgumentParser(description='部署 OpenClaw Telegram 智能體系統')
    parser.add_argument('--check', action='store_true', help='僅檢查前提條件')
    parser.add_argument('--setup', action='store_true', help='設置環境')
    parser.add_argument('--test', action='store_true', help='運行測試')
    parser.add_argument('--production', action='store_true', help='部署到生產環境')

    args = parser.parse_args()

    if args.check:
        sys.exit(0 if check_prerequisites() else 1)
    elif args.setup:
        setup_environment()
    elif args.test:
        run_tests()
    elif args.production:
        if check_prerequisites():
            deploy_production()
        else:
            sys.exit(1)
    else:
        # 默認:檢查和設置
        if check_prerequisites():
            setup_environment()
            print("\n🚀 準備啟動!運行:python gateway.py")
        else:
            sys.exit(1)


if __name__ == '__main__':
    main()

第七步:運行您的多智能體系統

# 檢查前提條件
python deploy.py --check

# 設置環境
python deploy.py --setup

# 啟動閘道器
python gateway.py

您的機器人現在應該正在運行並在 Telegram 上響應消息!

高級配置

自定義智能體工作流

定義複雜的多步驟工作流:

workflows:
  content_creation:
    steps:
      - agent: commander
        action: analyze_request
      - agent: research
        action: gather_information
      - agent: creative
        action: generate_content
      - agent: commander
        action: review_and_deliver

  technical_support:
    steps:
      - agent: commander
        action: classify_issue
      - agent: support
        action: troubleshoot
      - agent: engineer
        action: provide_solution
        condition: complexity == 'high'

記憶管理

配置不同的記憶後端:

# Redis(推薦用於生產環境)
memory = MemoryStore(backend='redis', url='redis://localhost:6379/0')

# 內存(用於開發)
memory = MemoryStore(backend='memory')

# 持久化存儲
memory = MemoryStore(backend='sqlite', path='data/memory.db')

Telegram Webhook 設置

對於生產環境,使用 webhook 代替輪詢:

# 在 gateway.py 中,用 webhook 替換輪詢
await self.telegram_app.updater.start_webhook(
    listen='0.0.0.0',
    port=8443,
    webhook_url=os.getenv('TELEGRAM_WEBHOOK_URL')
)

故障排除

機器人無響應

  • 驗證機器人令牌是否正確
  • 檢查機器人是否被用戶阻止
  • 查看 logs/gateway.log 中的日誌

智能體不協調

  • 檢查 config/agents.yaml 中的智能體配置
  • 驗證記憶存儲連接
  • 查看指揮官智能體路由邏輯

速率限制

  • Telegram 機器人 API 有速率限制(每秒 30 條消息)
  • 為高容量場景實現消息隊列
  • 對重試使用指數退避

最佳實踐

  1. 從簡單開始:在擴展之前從 2-3 個智能體開始
  2. 監控成本:跟踪 API 使用情況以管理費用
  3. 徹底測試:使用 /status 命令驗證智能體健康
  4. 保護令牌:切勿將 API 金鑰提交到版本控制
  5. 記錄所有內容:全面的日誌有助於調試
  6. 迭代:根據實際使用情況完善智能體提示

與 USPhoneGen 整合

對於管理多個 Telegram 機器人或需要手機號驗證的企業:

  • 使用 USPhoneGen 進行 Telegram 帳號驗證
  • 使用已驗證的號碼部署多個機器人實例
  • 跨不同的 Telegram 帳號擴展您的多智能體系統

了解更多:Telegram 簡訊驗證指南

結論

在 Telegram 上構建 OpenClaw 多智能體系統可以實現強大的 AI 驅動自動化。通過將專業智能體與 Telegram 的廣泛覆蓋範圍相結合,您可以為客戶支援、內容創作、技術協助等創建複雜的解決方案。

下一步

  • 嘗試不同的智能體配置
  • 為您的特定用例添加自定義工具
  • 監控性能並優化工作流
  • 擴展到其他平台(WhatsApp、Discord)

今天就開始構建您的 AI 智能體團隊!

Admin

Admin