Google Gemini AIを利用したLINE Botです。Geminiの検索機能を活用して、より正確で最新の情報を含む応答を提供します。
- Google Gemini AIによる自然言語処理
- Google検索機能の統合
- マークダウン形式でのリッチな応答表示
- コードブロックの適切な表示
- エラーハンドリングとロギング
- Python 3.11
- FastAPI
- LINE Messaging API
- Google Gemini AI
- Docker & Docker Compose
- ngrok(開発環境用トンネリング)
-
必要な環境変数を設定
cp .env.example .env
以下の環境変数を設定してください:
LINE_CHANNEL_SECRETLINE_CHANNEL_ACCESS_TOKENGOOGLE_API_KEYNGROK_AUTHTOKEN
-
Dockerでビルド・起動
docker-compose up --build
| 変数名 | 説明 | 必須 |
|---|---|---|
| LINE_CHANNEL_SECRET | LINE Messaging APIのチャンネルシークレット | ✅ |
| LINE_CHANNEL_ACCESS_TOKEN | LINE Messaging APIのアクセストークン | ✅ |
| GOOGLE_API_KEY | Google Gemini AIのAPIキー | ✅ |
| NGROK_AUTHTOKEN | ngrokの認証トークン | ✅ |
| DEBUG | デバッグモードの有効化(true/false) | - |
- LINE Developersでチャンネルを作成
- Google Cloud Platformでプロジェクトを作成し、Gemini APIを有効化
- ngrokアカウントを作成し、認証トークンを取得
- 本番環境用のWebhook URLを設定
- 環境変数を本番環境に設定
- Dockerコンテナをビルド・起動
POST /callback
{
"destination": "xxxxxxxxxx",
"events": [
{
"type": "message",
"message": {
"type": "text",
"id": "xxxxx",
"text": "fizzbuzzのpython"
},
"timestamp": 1703999771818,
"source": {
"type": "user",
"userId": "xxxxx"
},
"replyToken": "xxxxx",
"mode": "active"
}
]
}{
"candidates": [
{
"content": {
"parts": [
{
"text": "はい、FizzBuzzをPythonで実装する方法ですね。..."
},
{
"text": "```python\ndef fizzbuzz(n):\n for i in range(1, n + 1):\n ..."
}
],
"role": "model"
},
"grounding_metadata": {
"web_search_queries": [
"fizzbuzz explanation",
"what is fizzbuzz"
]
}
}
]
}{
"type": "flex",
"altText": "Geminiからの応答",
"contents": {
"type": "bubble",
"body": {
"type": "box",
"layout": "vertical",
"contents": [
{
"type": "text",
"text": "説明テキスト",
"wrap": true,
"size": "md"
},
{
"type": "box",
"layout": "vertical",
"backgroundColor": "#f5f5f5",
"contents": [
{
"type": "text",
"text": "コードブロック",
"wrap": true,
"size": "sm",
"color": "#333333"
}
]
}
]
}
}
}- LINEからのWebhookを受信
- メッセージテキストを抽出しGemini APIに送信
- Geminiからの応答をパース
- マークダウン形式のテキストをFlex Messageに変換
- LINEへ応答を送信
/
├── app/
│ ├── __init__.py
│ ├── main.py
│ └── config.py
├── docker-compose.yml
├── docker-compose.example.yml
├── Dockerfile
├── requirements.txt
├── .env
├── .env.example
├── .gitignore
└── readme.md
MIT License
- Google Gemini AIの利用料金が発生する可能性があります
- LINE Messaging APIの利用制限に注意してください
- 本番環境では適切なセキュリティ対策を実施してください
- このリポジトリをフォーク
- 新しいブランチを作成 (
git checkout -b feature/amazing-feature) - 変更をコミット (
git commit -m 'Add some amazing feature') - ブランチにプッシュ (
git push origin feature/amazing-feature) - プルリクエストを作成
jydie5
- Google Gemini AI
- LINE Messaging API
- FastAPI
- その他、利用しているオープンソースプロジェクト
DEBUG=true
LINE_CHANNEL_SECRET=your_line_channel_secret_here
LINE_CHANNEL_ACCESS_TOKEN=your_line_channel_access_token_here
GOOGLE_API_KEY=your_google_api_key_here
NGROK_AUTHTOKEN=your_ngrok_auth_token_here
services:
api:
build: .
ports:
- "8000:8000"
volumes:
- ./app:/app/app
- ./.env:/app/.env
environment:
- DEBUG=true
- GOOGLE_API_KEY=${GOOGLE_API_KEY}
- LINE_CHANNEL_SECRET=${LINE_CHANNEL_SECRET}
- LINE_CHANNEL_ACCESS_TOKEN=${LINE_CHANNEL_ACCESS_TOKEN}
restart: unless-stopped
ngrok:
image: ngrok/ngrok:latest
depends_on:
- api
ports:
- "4040:4040"
volumes:
- ./.env:/app/.env
command: http --domain=your-domain-here.ngrok-free.app api:8000 --log stdout
environment:
- NGROK_AUTHTOKEN=${NGROK_AUTHTOKEN}