Skip to content

Lin-jun-xiang/agent-line-bot

Repository files navigation

Agent Line Bot

🤖 簡介

將 AI Bot 整合到 Line。並且完全免費支援一般問答、連網、圖片生成、圖片推理、線上圖片搜索、文字生影片、圖片生影片...等功能。

✨ 功能

  • 自然語言對話

  • 在線連網查詢(即時新聞、股價、時事...)

  • 圖片生成

  • 圖片推理

  • 文字生成影片

    text2video.mp4

  • 圖片生成影片

    571128484571906539.mp4

  • YouTube 音樂 頻道的定時推播

  • 在線圖片搜尋(即時)

Note

如果你有任何功能請求,請隨時提交 PR 或 ISSUE。

🏗️ 系統架構

flowchart TD
    User([👤 LINE 用戶]) -->|傳送訊息| LB[LINE Bot Webhook]
    LB --> Agent{🤖 Agent<br/>意圖判斷}

    Agent -->|一般對話| CC[💬 Chat Completion<br/>ZhipuAI GLM-4-Flash]
    Agent -->|連網查詢| WS[🌐 Web Search<br/>DuckDuckGo]
    Agent -->|生成圖片| IG[🎨 Image Generate<br/>ZhipuAI CogView]
    Agent -->|搜尋圖片| IS[🔍 Image Crawler<br/>iCrawler / SerpAPI]
    Agent -->|圖片推理| VLM[👁️ Image Inference<br/>ZhipuAI VLM]
    Agent -->|文字生影片| TV[🎬 Text→Video<br/>ZhipuAI CogVideoX]
    Agent -->|圖片生影片| IV[📹 Image→Video<br/>ZhipuAI CogVideoX]

    WS -->|搜尋結果| LLM_SUM[🧠 LLM 摘要回答]
    LLM_SUM --> Reply
    CC --> Reply([📤 回覆用戶])
    IG --> Reply
    IS --> Reply
    VLM --> Reply
    TV --> Reply
    IV --> Reply

    style Agent fill:#ff9800,stroke:#e65100,color:#fff
    style WS fill:#2196f3,stroke:#0d47a1,color:#fff
    style CC fill:#4caf50,stroke:#1b5e20,color:#fff
Loading

🔨 工具

  • Python FastAPI:創建 AI 回應 API
  • zhipuai免費使用 ZhipuAI API(GLM-4-Flash)
  • duckduckgo-search免費連網搜尋,無需 API Key
  • Line messaging API channel:連接 AI API
  • GitHub:代碼存儲庫
  • replit/render/ngrok免費部署你自己的 FastAPI
  • CronJob:免費發送定時請求,實現定時推播消息

🧠 免費 AI API

本專案使用 Zhipu AI(智譜AI) 開放平台作為免費 AI API。訪問 官方網站 註冊帳戶,無需信用卡或費用。在 個人中心 添加 API 金鑰,如下所示。將此 API 金鑰設置在環境變量 GPT_API_KEY 中。

🎈 安裝步驟

獲取 Tokens

  1. 獲取 Line Tokens:
    1. 登錄 Line Developer
    2. 創建一個 bot:
      1. 創建一個 Provider -> 點擊 Create
      2. 創建一個 Channel -> 選擇 Create a Messaging API channel
      3. 填寫所需的基本信息
      4. 完成後,進入 Basic Settings -> 在 Channel Secret 下,點擊 Issue 生成 LINE_CHANNEL_SECRET(後面會用到)。
      5. Messaging API 下,點擊 Issue 生成 Channel access token(後面會用到)。

專案設置與執行

  1. Fork GitHub 專案:

    • 註冊/登錄 GitHub
    • 前往 AI-Line-Bot
    • 點擊 Star 支持開發者
    • 點擊 Fork 將所有代碼複製到你的存儲庫
  2. 選擇部屬方式

    🏠 本地免費部署

    本地部署步驟

    2.1 啟動 Python FastAPI Server ```bash

    $env:LINE_CHANNEL_SECRET="..."; $env:LINE_CHANNEL_ACCESS_TOKEN="..."; $env:SERPAPI_API_KEY="..."; $env:GPT_API_KEY="..."; python main.py

    * `GPT_API_KEY`:提供你的 Zhipu AI API 金鑰
    
    #### 2.2 使用 ngrok 建立隧道
    使用本地電腦作為服務器來部署 API:
    
    1. [建立 ngrok 環境](https://dashboard.ngrok.com/get-started/setup/)
    2. 下載適合你操作系統的 `ngrok` 版本
    3. 將 `ngrok.exe` 路徑添加到系統的環境變量中
    4. 執行:`ngrok config add-authtoken <token>`。從你的個人 [ngrok dashboard](https://dashboard.ngrok.com/get-started/your-authtoken) 獲取 token。
    5. 執行:`ngrok http --url=<YOUR STATIC DOMAIN>.ngrok-free.app 8090` (若失敗請改嘗試 `ngrok http --hostname=<YOUR STATIC DOMAIN>.ngrok-free.app 8090`)
    
        <img src="static/images/2025-02-11-16-16-27.png" width="60%" />
        <img src="img/2024-05-15-14-03-09.png" width="60%"/>
    
    #### 2.3 設置 Webhook URL
    將 `https://<YOUR STATIC DOMAIN>.ngrok-free.app/callback` 替換 Line Developer 控制台 `Messaging API` 區域中的 webhook URL。
    
    <img src="static/images/2025-02-11-16-26-05.png" width="60%" />
    
    </details>
    
    <details>
    <summary><b>☁️ 雲端免費部署</b></summary>
    
    ### 雲端部署選項
    
    #### 選項 1:Render 部署
    1. 前往 [Render](https://render.com/) 並註冊帳戶
    2. 點擊 "New Web Service"
    3. 連接你的 **GitHub** 存儲庫    4. 設置環境變數:
    - `LINE_CHANNEL_SECRET`
    - `LINE_CHANNEL_ACCESS_TOKEN`
    - `SERPAPI_API_KEY`(可選)
    - `GPT_API_KEY`
    5. 部署完成後,使用提供的 URL 作為 webhook
    6. 結合 [cronjob](https://console.cron-job.org/jobs) 觸發定時調用服務,避免服務閒置過久關閉
        ![](static/images/2025-07-22-16-32-04.png)
    
    ### 設置 Webhook URL
    將雲端服務提供的 URL(例如:`https://your-app.render.com/callback`)設置為 Line Developer 控制台中的 webhook URL。
    
    </details>
    
    
    

連接服務與 Line Bot

回到 Line Developer 首頁,點擊 Add Friend Guide,掃描 QR 碼將 Line Bot 添加為好友。

首頁 -> 選擇你的 bot -> 添加好友工具 -> 創建好友動作條碼(https://manager.line.biz/account//gainfriends)

恭喜!你已創建了你的第一個 Line Bot。試著與它交談——它會回覆你!

⛄ 群組對話 vs. 個人對話

  • 在一對一對話中,任何消息都會觸發回應。
  • 在群組對話中,使用 @chat 前綴與機器人互動,例如,@chat hi~

🎃 功能詳介

自定義 Bot 個性

隨時修改 LineBot 的 System Instruction,個別定義屬於你喜歡的風格

  • 透過關鍵字@prompt修改: @prompt 你是一個個性溫和的AI助理,請用繁體中文回答
初始化 Bot

初始化 Bot 的 System Instruction,並且初始化歷史對話紀錄

  • 透過關鍵字@init初始化: @init
🌐 在線連網查詢(Web Search)

當 Agent 判斷用戶問題需要即時網路資料時(新聞、股價、天氣、時事等),會自動觸發連網搜尋。

技術細節:

  • 使用 duckduckgo-search 套件,完全免費、無需 API Key
  • 支援三層自動 Fallback:DDG HTML → DDG Lite → DDG Default (Bing)
  • 搜尋結果會交給 LLM 進行摘要整理後回覆用戶
  • 為低記憶體環境(≤500 MB RAM)優化設計

使用範例:

  • 個人聊天:今天台灣有什麼新聞?, 台積電股價多少?, 搜尋 Python 最新版本
  • 群組聊天:@chat 最近有什麼地震消息?, @chat 2024世界盃結果
在線圖片搜尋

當你的消息包含圖片請求時,網絡爬蟲將抓取圖片:

  • 個人聊天:在線找到林翔抽煙的圖片, 給我在線林翔抽煙的圖片, ...
  • 群組聊天:@chat 在線找到林翔抽煙的圖片, @chat 給我在線林翔抽煙的圖片, ...
圖片生成

只要你輸入「生成」或「創建」相關的圖片請求,Bot 會自動使用 AI 生成圖片並回傳。

  • 例如:生成一隻貓的圖片, 創建一張風景圖
圖片推理(VLM)

先上傳一張圖片,再詢問與圖片內容相關的問題,Bot 會用 AI 進行推理並回覆。

  • 例如:上傳圖片後這張圖片裡有什麼?幫我分析這個截圖
文字生成影片

只要你輸入「生成」或「創建」相關的影片請求,Bot 會自動使用 AI 生成影片並回傳。

  • 例如:生成一段正在走動的貓的影片
圖片生成影片

只要你輸入圖片後,接著輸入「根據圖片生成」或「根據圖片創建」相關的影片請求,Bot 會自動使用 AI 生成影片並回傳。

  • 例如:根據剛剛上船的圖片生成一段...的影片,
自動廣播消息 - 每日 YouTube 推薦
  • 使用 broadcast API,Line Bot 可以一次性推送消息給所有用戶。
  • 此示例演示了 Line Bot 如何每天早上推送 3 首隨機選擇的 YouTube 歌曲:
    • 創建文件 ./data/favorite_videos.json。參考作者的數據集。

      (數據集是使用 YouTube Data v3 API 抓取喜愛視頻生成的。本指南不涉及 YouTube API 的使用。)

    • 使用 ./ChatGPT_linebot/modules/youtube_recommend.py 隨機選擇 3 首歌曲,由 LLM 格式化。

    • ./ChatGPT_linebot/urls.py 中添加 /recommend 路由:

      videos = recommend_videos() # 獲取 3 首歌曲
      
      if videos:
          line_bot_api.broadcast(TextSendMessage(text=videos)) # 廣播給用戶
      
          # 推送消息給已知群組
          known_group_ids = [
              'C6d-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
              'Ccc-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
              'Cbb-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
          ]
          for group_id in known_group_ids:
              line_bot_api.push_message(group_id, TextSendMessage(text=videos))

      要獲取群組 group_id,在控制台中打印:

      elif event.source.type == 'group' and user_message.startswith('@chat'):
          group_id = event.source.group_id
          print(group_id) # 輸出 group_id
    • 現在,訪問 /recommend 路由將廣播消息給所有用戶和指定群組。

    • 使用 cron-job.org 每天早上 8:00 定時推送:

      1. 註冊/登錄 cron-job.org
      2. 點擊右上角的 CREATE CRONJOB
      3. 標題:AI-Line-Bot,URL:例如,https://AI-Line-Bot.jimmylin.repl.co/
      4. 設置為每 5 分鐘 运行
      5. 點擊 CREATE
自動廣播消息 - 財經資訊推播 * 與 **每日 YouTube 推薦** 一樣,只需要將 `/recommend` 替換成 `/cwsChannel` 即可。 * 可於 CronJob 設置每 `3 小時` 運行

參考資料

  1. Line_Bot_Tutorial

  2. ChatGPT-Line-Bot (Original Fork)

返回頂部

About

🤖Free Agent Line Bot with Web Search, Google Image Search, Image Generator, Video Generator...

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages