Skip to content

RX5950XT/line_bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 

Repository files navigation

LINE 聊天機器人專案說明書

專案概述

本專案是一個基於 LINE Messaging API 的智能聊天機器人,使用 Python 開發,結合意圖識別、圖片分析和網路搜尋功能。機器人能夠處理用戶的文字訊息和圖片訊息,根據訊息內容進行智能回應,並支援多種功能,包括問候、一般對話、個人問題解答、天氣/新聞查詢等。專案使用 Flask 作為 Web 框架,透過 ngrok 提供公開 Webhook URL,並整合 OpenRouter API(用於文字和圖片處理)以及 Serper API(用於網路搜尋)。

專案特性

  • 智能意圖識別:自動分類用戶訊息為問候、一般對話、個人問題或需要搜尋的複雜問題。
  • 圖片分析:支援上傳 JPEG/PNG 圖片,透過 OpenRouter 的模型進行內容分析。
  • 網路搜尋:針對需要最新資訊的問題,使用 Serper API 搜尋並提供結果。
  • 錯誤處理:包含全面的錯誤處理,確保穩定性和用戶友好性。
  • 詳細日誌:記錄用戶訊息、意圖識別結果和 API 回應,便於除錯。
  • 指令支援:支援 !help!intent 指令,方便測試和查詢功能。

技術棧

  • 程式語言:Python 3.12
  • Web 框架:Flask
  • LINE SDK:line-bot-sdk 3.0.0+
  • AI 處理:OpenRouter API(預設:Gemma 和 Deepseek 模型)
  • 搜尋服務:Serper API
  • 其他依賴:requests, python-dotenv, pytz, pydantic
  • 本地測試工具:ngrok

功能說明

本機器人提供以下主要功能:

1. 文字訊息處理

  • 問候語:識別「嗨」「你好」「早安」等問候,快速回應友善訊息。
    • 範例輸入:你好
    • 範例輸出:嗨!很高興見到你!😎 今天有什麼特別的事情想分享嗎?
  • 一般對話:處理「謝謝」「再見」「哈哈」等簡單對話,提供輕鬆回應。
    • 範例輸入:謝謝
    • 範例輸出:不客氣!😊 有什麼我可以幫你的?
  • 個人問題:回答「你是誰」「你會什麼」等問題,介紹機器人功能。
    • 範例輸入:你是誰
    • 範例輸出:我是你的智能 LINE 助手,擅長聊天、分析圖片和搜尋資訊!😎 試試問我天氣或上傳圖片吧!
  • 複雜問題:對於天氣、新聞、股價等問題,結合 Serper API 搜尋最新資訊並生成回應。
    • 範例輸入:台北今天的天氣如何?
    • 範例輸出:根據最新資訊,台北今天多雲,氣溫約 28°C,記得帶傘哦!😉

2. 圖片訊息處理

  • 支援上傳 JPEG/PNG 圖片(建議 <5MB),預設使用 OpenRouter google/gemma-3-27b-it:free模型分析圖片內容。
  • 預設問題為「請描述這張圖片」,可搭配文字問題進行具體分析。
    • 範例輸入:上傳一張貓咪圖片
    • 範例輸出:哇,這是一隻超可愛的貓咪!😺 看起來毛茸茸的,可能正在懶洋洋地曬太陽。

3. 特殊指令

  • !help幫助:顯示機器人功能說明。
    • 範例輸出:
      🤖 LINE AI 聊天機器人功能說明
      這是一個具備智能意圖識別與圖片處理的聊天機器人!😎
      📝 主要功能
      • 文字對話:直接發送訊息與我聊天
      • 圖片分析:上傳圖片,我會幫你分析內容
      • 指令:
        - `!help` 或 `幫助`:顯示此說明
        - `!intent <訊息>`:測試意圖識別功能
      ...
      
  • !intent <訊息>:測試意圖識別功能,返回訊息的意圖類型和是否需要搜尋。
    • 範例輸入:!intent 早安
    • 範例輸出:
      意圖識別結果
      輸入訊息: 早安
      識別意圖: greeting
      需要搜尋: 否
      

安裝與設置

1. 環境要求

  • 作業系統:Windows(或任何支援 Python 的系統)
  • Python 版本:3.12
  • 依賴套件
    • line-bot-sdk>=3.0.0
    • flask
    • python-dotenv
    • openai
    • requests
    • pytz
    • pydantic==1.10.13
  • 外部工具:ngrok(用於本地測試)
  • API 憑證
    • LINE Messaging API:Channel Access Token 和 Channel Secret
    • OpenRouter API:API 金鑰
    • Serper API:API 金鑰

2. 安裝步驟

  1. 安裝 Python
    • 確認 Python 3.12 已安裝:
      python --version
    • 若未安裝,前往 Python 官網 下載並安裝。
  2. 安裝依賴套件
    • 在專案目錄中執行:

      pip install --upgrade line-bot-sdk flask python-dotenv openai requests pytz pydantic==1.10.13
    • 檢查套件版本:

      pip show line-bot-sdk pydantic
      • 確保 line-bot-sdk 為 3.0.0 或更高,pydantic 為 1.10.13。
  3. 下載 ngrok
    • 前往 ngrok 官網 下載 Windows 版本的 ngrok.exe
    • 儲存至專案目錄或加入系統 PATH。
    • 配置 authtoken:
  4. 設置 .env 檔案
    • 在專案目錄創建 .env 檔案,內容如下:
      LINE_CHANNEL_ACCESS_TOKEN=你的Channel Access Token
      LINE_CHANNEL_SECRET=你的Channel Secret
      OPENROUTER_API_KEY=你的OpenRouter API金鑰
      SERPER_API_KEY=你的Serper API金鑰
      
    • 獲取 LINE 憑證
      • 登錄 LINE Developers,選擇您的 Messaging API 頻道。
      • 在「Basic settings」複製 Channel Secret
      • 在「Messaging API」點擊「Issue」生成 Channel Access Token
    • 獲取 API 金鑰
    • 確保 .env 無多餘空格或換行。
  5. 儲存程式碼
    • 將提供的 line_bot.py(見前回應中的 <xaiArtifact>,或確認現有檔案一致)儲存至 D:\Workbench\project\line_bot\line_bot.py

3. 運行程式

  1. 啟動 Flask 伺服器
    • 開啟終端機,進入專案目錄:

      cd 專案路徑
    • 執行程式:

      python line_bot.py
    • 確認輸出:

      LINE_CHANNEL_ACCESS_TOKEN: 設
      OPENROUTER_API_KEY: 設
      SERPER_API_KEY: 設
      * Running on http://127.0.0.1:5000
      * Running on http://192.168.0.108:5000
      
    • 若端口 5000 被占用,修改 line_bot.py 中的 port=5000(例如 port=5001)。

  2. 啟動 ngrok
    • 執行:
      .\ngrok.exe http 5000
    • 確認輸出:
      Forwarding       https://abc123.ngrok.io -> http://localhost:5000
      
  3. 設置 LINE Webhook
    • 在 LINE Developers 控制台的「Messaging API」標籤,設置 Webhook URL:
      https://(隨機生成的一串東西).ngrok-free.app/callback
      或
      https://abc123.ngrok.io/callback
      
    • 啟用「Use webhook」,點擊「Verify」,確認返回「Success」。

使用方法

1. 加入機器人

  • 在 LINE 應用中,掃描您的 Messaging API 頻道 QR 碼(在「Basic settings」中)。
  • 將機器人加入個人聊天或群組。

2. 測試功能

  1. 文字訊息
    • 問候:發送「你好」「早安」。
      • 預期輸出:嗨!很高興見到你!😎 今天有什麼特別的事情想分享嗎?
    • 一般對話:發送「謝謝」「哈哈」。
      • 預期輸出:不客氣!😊 有什麼我可以幫你的?
    • 個人問題:發送「你是誰」「你會什麼」。
      • 預期輸出:我是你的智能 LINE 助手,擅長聊天、分析圖片和搜尋資訊!😎 試試問我天氣或上傳圖片吧!
    • 複雜問題:發送「台北今天的天氣如何?」。
      • 預期輸出:根據最新資訊,台北今天多雲,氣溫約 28°C,記得帶傘哦!😉
    • 指令
      • 發送「!help」:顯示功能說明。
      • 發送「!intent 早安」:顯示意圖識別結果。
  2. 圖片訊息
    • 上傳 JPEG/PNG 圖片(<5MB)。
      • 預期輸出:哇,這是一隻超可愛的貓咪!😺 看起來毛茸茸的,可能正在懶洋洋地曬太陽。
    • 可搭配問題,例如:「這張圖片是什麼動物?」。
  3. 檢查日誌
    • 終端機應記錄:
      [2025-07-22 21:55:00] 用戶ID: U123..., 訊息: 你好
      識別意圖: greeting
      是否需要搜尋: 否
      OpenRouter 回應:嗨!很高興見到你!😎 ...
      

3. 輸入格式

  • 文字訊息:任意文字,無長度限制(建議簡潔)。
  • 圖片訊息:JPEG 或 PNG 格式,建議大小 <5MB。
  • 指令
    • !help幫助
    • !intent <任意訊息>

4. 預期輸出

  • 文字回應:友善、繁體中文、帶表情符號的回應,長度根據問題複雜度(100-2000 字元)。
  • 圖片分析:詳細描述圖片內容,包含場景、物品或人物,約 100-500 字元。
  • 錯誤訊息:若發生錯誤,回應格式為:
    哎呀,出了點小問題:{錯誤訊息} 😅 請再試一次!
    

除錯指南

1. 常見問題與解決方法

  • 問題無效的簽名(HTTP 400)
    • 原因LINE_CHANNEL_SECRET 不正確。
    • 解決
      • 檢查 .env 中的 LINE_CHANNEL_SECRET 是否與 LINE Developers 控制台的「Basic settings」一致。
      • 若不一致,重新生成(點擊「Reissue」)並更新 .env
      • 重啟 Flask 伺服器:
        python line_bot.py
  • 問題UnauthorizedException: (401)(Authentication failed)
    • 原因LINE_CHANNEL_ACCESS_TOKEN 無效或過期。
    • 解決
      • 在 LINE Developers 控制台的「Messaging API」重新生成 Token(點擊「Issue」)。
      • 更新 .env 並重啟伺服器。
  • 問題:Webhook 無回應
    • 原因:ngrok 未運行或 Webhook URL 錯誤。
    • 解決
      • 確認 ngrok 運行:
        .\ngrok.exe http 5000
      • 檢查 LINE Webhook URL(https://your-ngrok-url.ngrok.io/callback)。
      • 使用 ngrok Web 介面(http://127.0.0.1:4040)檢查 POST /callback 請求。
  • 問題:圖片或搜尋功能無回應
    • 原因:OpenRouter 或 Serper API 金鑰無效或配額耗盡。
    • 解決
      • 檢查 .env 中的 OPENROUTER_API_KEYSERPER_API_KEY
      • 登錄 OpenRouterSerper,確認 API 配額。
  • 問題ValidationError'Configuration' object has no attribute 'select_header_accept'
    • 原因line-bot-sdkpydantic 版本不匹配。
    • 解決
      • 確認版本:
        pip show line-bot-sdk pydantic
      • 更新套件:
        pip install --upgrade line-bot-sdk pydantic==1.10.13

2. 日誌檢查

  • 查看終端機輸出,搜尋「錯誤」、「HTTP」或「無效的簽名」。
  • 常見日誌:
    • 成功:
      [2025-07-22 21:55:00] 用戶ID: U123..., 訊息: 你好
      識別意圖: greeting
      是否需要搜尋: 否
      OpenRouter 回應:嗨!很高興見到你!😎 ...
      
    • 錯誤:
      無效的簽名
      127.0.0.1 - - [22/Jul/2025 21:53:29] "POST /callback HTTP/1.1" 400 -
      
  • 若需協助,提供:
    • 終端機輸出:pip show line-bot-sdk pydantic 的結果。
    • 完整 Flask 和 ngrok 日誌。
    • LINE Developers 控制台的「Basic settings」和「Webhook settings」截圖。
    • 測試時發送的訊息和回應情況。

注意事項

  • ngrok 免費版限制
    • 公開 URL 每次運行會變更,需重新更新 LINE Webhook。
    • 連線時間限制為 2 小時,需定期重啟 ngrok。
  • API 配額
    • 定期檢查 LINE、OpenRouter 和 Serper API 的配額。
    • 若收到 429 Too Many Requests,聯繫 API 提供商或升級計劃。
  • 圖片限制
    • 圖片大小建議 <5MB,避免 OpenRouter API 處理延遲。
  • 安全性
    • 保護 .env 檔案,勿公開分享。
    • 若 Token 或 Secret 洩漏,立即在 LINE Developers 控制台重新生成。
  • 生產環境
    • Flask 開發伺服器不適合生產環境,部署時使用 Gunicorn:
      pip install gunicorn
      gunicorn -w 4 -b 0.0.0.0:5000 line_bot:app

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages