はじめに
Alexaで自由に会話できるスキルを作るために、
Google GeminiとAWS Lambdaを組み合わせて雑談スキルを構築しました。
本記事では以下をまとめています:
- Alexaスキル作成
- AWS Lambda構築
- DockerでのLambdaレイヤー作成(自動化)
- requirements.txtによる依存管理
- Windowsでも再現可能な構成
構成図
🛠 手順
① Alexaスキル作成
Amazon Developer Consoleで作成します。
👉 https://developer.amazon.com/alexa/console/ask
■ 設定
| 項目 | 内容 |
|---|---|
| スキル名 | 任意 |
| モデル | Custom |
| ホスティング | Alexa-hosted (Python) |
② Intent作成(自由入力)
■ Intent名
FreeAnswerIntent
■ スロット
| 名前 | タイプ |
|---|---|
| anyText | AMAZON.SearchQuery |
■ サンプル発話
{anyText} について
{anyText} を教えて
{anyText} とは
👉 自由入力型の会話が可能になります
③ AWS Lambda関数作成
■ 基本設定
- 一から作成
- ランタイム:Python 3.10
- 実行ロール:基本Lambda権限
■ Lambdaコード
以下のGitHubから取得してください:
👉 https://github.com/sagantosu17/alexa-gemini-chat
特に使用するファイル:lambda_function.py
このファイルをそのままLambda関数としてデプロイしてください。
■ Lambdaタイムアウト設定(重要)
Alexa × Gemini構成では、API応答時間の影響を受けるため
Lambdaのタイムアウト設定を延長する必要があります。
■ 設定手順
- AWSマネジメントコンソールにアクセス
- Lambdaサービスを開く
- 対象の関数を選択
- 「設定(Configuration)」タブを開く
- 「一般設定(General configuration)」をクリック
- 「編集(Edit)」を選択
- 以下を設定
| 項目 | 設定値 |
|---|---|
| タイムアウト | 10秒〜30秒(推奨:15秒) |
- 保存をクリック
■ なぜ必要か
- Gemini APIの応答時間が変動する
- デフォルト(3秒)だと途中で切れる可能性あり
- Alexa側で「応答なし」になる原因になる
👉 安定動作には15秒以上を推奨
④ Alexaトリガー設定
- トリガー:Alexa Skills Kit
- スキルIDを登録
■ スキルIDの確認方法
スキルIDは以下の手順で確認できます:
- Amazon Developer Console(https://developer.amazon.com/alexa/console/ask) にログイン
- 作成したスキルを選択
- 左メニュー「設定(Settings)」を開く
- 「スキルID(Skill ID)」をコピー
⑤ Lambdaレイヤー作成(Dockerで自動化)
❗ なぜDockerを使うか
Windows環境では以下の問題が発生します:
- importエラー
- ネイティブ依存不整合
- Lambdaとの差異
👉 Linux環境でのビルドが必須
⚠️ 重要:Docker事前準備
この手順を実施する前に、Dockerのインストールが必要です。
👉 https://www.docker.com/products/docker-desktop/
🐳 ⑥ Docker自動化構成
■ requirements.txt
google-generativeai
requests
ask-sdk-core
ask-sdk-model
ask-sdk-runtime
pydantic
urllib3
cryptography
tenacity
httpx
httpcore
anyio
sniffio
certifi
charset-normalizer
idna
rsa
pyasn1
pyasn1-modules
cffi
typing-extensions
typing-inspection
distro
python-dateutil
websockets
■ Dockerfile
FROM amazonlinux:2
# Pythonとzipをインストール
RUN yum install -y python3 pip zip
WORKDIR /app
# 依存関係をコピー
COPY requirements.txt .
# Lambdaレイヤー用にパッケージ作成
RUN mkdir -p python && \
pip3 install -r requirements.txt -t python && \
zip -r layer.zip python
■ ビルド手順
docker build -t lambda-layer .
■ layer.zip取得
docker create --name tmp lambda-layer
docker cp tmp:/app/layer.zip .
docker rm tmp
⑦ Lambdaにレイヤー追加
- layer.zipアップロード
- Python 3.10選択
⑧ 環境変数設定
環境変数の編集から、自身のGeminiのAPIキーを入力する
| キー | 値 |
|---|---|
| GEMINI_API_KEY | 自身のAPIキーを入力 |
⚠️ 注意事項(重要)
■ Gemini APIについて
本システムは Google Gemini API(有料版 / Vertex AI版推奨) を推奨します。
※ Gemini APIは無料枠ではレスポンス制限や不安定な挙動が発生する場合があります
👉 安定動作には「課金有効化済みのGemini API」を推奨します
⑨ デプロイ&テスト
- Lambdaデプロイ
- Alexaスキルビルド
- テスト実行
🎤 動作例
アレクサ、このスキルを開いて。おすすめの映画は?
🚀 おわりに
今回の構成では、
- Alexaによる音声インターフェース
- AWS Lambdaによるサーバーレス処理
- Dockerによる依存関係の完全再現
- Gemini APIによる自然言語生成
を組み合わせることで、
「音声で雑談できるAIスキル」を構築しました。
特にポイントは以下です:
- LambdaレイヤーをDockerで自動生成し、環境依存を排除
- AlexaのIntent設計で自由入力会話を実現
- Gemini APIを中核にした柔軟な応答生成
💡 今後の発展
この構成は以下のように拡張できます:
- 会話履歴の保持(DynamoDB連携)
- ストリーミング応答(より自然な会話)
- ユーザーごとのパーソナライズ
- CI/CDによる自動デプロイ
📦 ソースコード
👉 https://github.com/sagantosu17/alexa-gemini-chat
👍 最後に
この構成をベースにすると、
「音声 × 生成AI × サーバーレス」の実践的なアプリを簡単に構築できます。
ぜひ自分なりに拡張してみてください。