在前一篇測試中我們已利用架設在 render.com 的仿 GCF 函式執行平台 serverless 做為 LINE Bot 的後端回應伺服器, 順利實作了一個串接 OpenAI API 的 AI 聊天機器人. 本篇旨在測試如何建立一個串接 Gemini 的 AI 聊天機器人.
本系列之前的測試文章參考 :
關於 Gemini API 的用法參考 :
先摘要整理串接 Gemini 模型的程序 :
首先是匯入串接套件 google.generativeai, 在之前重新佈署 Serverless 時已將 Genmini 的 API 套件 google-generativeai 放在 requirements.txt 中, 佈署時便會自動安裝此套件, 因此在聊天機器人函式模組中可以直接匯入 :
import google.generativeai as genai
在佈署時也同時建立了環境變數檔 .env, 其中記錄了 Gemini 的金鑰 GEMINI_API_KEY, 因此在函式模組的 main() 函式中可從傳入的關鍵字參數 **kwargs 取得 config 字典, 再從 config 中取得 GEMINI_API_KEY 金鑰 :
config=kwargs.get('config', {})
gemini_api_key=config.get('GEMINI_API_KEY')
然後呼叫 google.generativeai 套件的 configure() 函式傳入金鑰建立物件 :
genai.configure(api_key=gemini_api_key)
接下來是呼叫 GenerativeModel() 建立聊天模型物件 :
model=genai.GenerativeModel('gemini-2.5-flash')
目前 Gemini 可用的模型如下表 :
| 模型名稱 | 描述 | 適合場景 | 穩定性 |
|---|---|---|---|
| gemini-2.5-flash | 快速、低延遲的輕量模型 | 聊天、即時回應 | 穩定 |
| gemini-2.5-pro | 先進推理模型,支援長上下文 | 複雜問題、程式碼生成 | 穩定 |
| gemini-2.5-flash-lite | 更輕量的 Flash 變體 | 行動裝置、成本敏感應用 | 穩定 |
| gemini-2.0-flash | 舊 2.0 版本,快速但較舊 | 基本任務 | 穩定 |
最後呼叫 generate_content() 方法並傳入提示詞即可取得回應物件 :
response=model.generate_content(prompt)
回應字串放在其 text 屬性裡 :
print(response.text)
完整的串接 Gemini 之 LINE 聊天機器人程式碼如下 :
# linebot_gemini.py
from flask import abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent, TextMessage, TextSendMessage
import os
import google.generativeai as genai
def main(request, **kwargs):
# 取得主程式傳入的 LINE 與 Gemini 金鑰
config=kwargs.get('config', {})
secret=config.get('LINE_CHANNEL_SECRET')
token=config.get('LINE_CHANNEL_ACCESS_TOKEN')
gemini_api_key=config.get('GEMINI_API_KEY', os.getenv('GEMINI_API_KEY'))
# 檢查必要參數
if not secret or not token or not gemini_api_key:
return {'error': 'Missing LINE or Gemini credentials'}
# 初始化 LINE API 與 Webhook Handler
line_bot_api=LineBotApi(token)
handler=WebhookHandler(secret)
# 設定 Gemini API 金鑰
genai.configure(api_key=gemini_api_key)
# 建立模型 (選用 gemini-2.0-flash 或 gemini-2.5-flash)
model=genai.GenerativeModel('gemini-2.5-flash')
# 註冊 LINE 訊息事件
@handler.add(MessageEvent, message=TextMessage)
def handle_message(event):
user_text=event.message.text # 使用者訊息
try:
# 呼叫 Gemini 生成回應
response=model.generate_content(user_text)
reply_text=response.text.strip() if response.text else "(無法取得回覆)"
except Exception as e:
reply_text=f'⚠️ 錯誤:{e}'
# 回覆給使用者
line_bot_api.reply_message(
event.reply_token,
TextSendMessage(text=reply_text)
)
# 驗證簽章
signature=request.headers.get('X-Line-Signature', '')
body=request.get_data(as_text=True)
try:
handler.handle(body, signature)
except InvalidSignatureError:
abort(400, 'Invalid signature')
return {'status': 'ok'}
接下來到我們於 Render 架設的 serverless 平台新增一個函式模組 :
將上面的 linebot_gemini.py 程式碼貼上存檔 :
在函式列表頁上, 將滑鼠移到 linebot_gemini 模組的 "執行" 連結處, 按滑鼠右鍵點選 "複製連結網址" 即可取得此回應程式的 web hook 網址 :
# https://serverless-fdof.onrender.com/function/linebot_gemini
注意, 此網址無法直接執行, 必須經過驗證是從 LINE 伺服器發出的才會回應.
然後登入 Line 開發者控制台將聊天機器人的 Webhook URL 改成這個網址經 Verify 成功即可, 詳細作法參考這篇 :
最後開啟手機 LINE App, 點選 "好友名單" 或 "群組", 切換到 "官方帳號", 找到前面測試中建立 "小狐狸事務所聊天機器人" 即可開始與 Gemini 聊天 :
Gemini 真的蠻長舌的, 言無不盡只好截取前半段.





沒有留言 :
張貼留言