alexaをbedrockで少し賢くしてみた

April 10, 2025

■ はじめに

AWS Bedrock を使って、Alexa を少し賢くしてみました。具体的には、Alexa のスキルを作成し、Bedrock の LLM を利用して質問応答機能を実装しました。 いちいちググらずで済むのは便利ですね。

■ 構成図

構成図

bedrock だけ料金が多少かかるかもしれませんが、ほぼ 0 円で運用できると思います。

処理フロー

  1. 家の Alexa に「AI スキルを開いて」と言い、スキル起動させる
  2. ◯◯ について教えて、検索して、翻訳して等リクエストする
  3. Alexa が AWS Lambda の API にリクエストを送信し、Lambda が Bedrock の LLM (claude3.7) に質問を投げる。
  4. LLM が質問に対する回答を生成し、Lambda がその回答を Alexa に返す。
  5. Alexa が回答を音声で読み上げる。

■ Code

https://github.com/h-neco/generative-ai-for-alexa

# API開発
./applications/bedrock-responder/
# Alexa スキル
./applications/alexa/
# AWS構築
./terraform/

開発・構築のポイント

  1. 制限
  • 子供が変なことを聞かないように、質問の内容をモデレーションして、NG ワードが含まれている場合は、回答しないようにしました。
# https://github.com/h-neco/generative-ai-for-alexa/blob/main/applications/bedrock-responder/src/llm.ts#L8
<moderation-rules>
- 意味のない数字や文字列は入力禁止です。
- 公序良俗に反するものは入力禁止です。
</moderation-rules>
  • パラメータにトークンを付けて、無制限に実行されないようにしました。
# https://github.com/h-neco/generative-ai-for-alexa/blob/main/applications/bedrock-responder/src/index.ts#L100
  if (body.token !== process.env.TOKEN) {
    console.error('token is invalid');
    return false;
  }
  1. LLM 戻り値の固定化
  1. インフラ
  • パラメータを外部変数化して、再利用できるようにしました。
  • LambdaFunctionURLs のみ利用してリソースを最小化してシンプルな構成にしてます。
Nifty tech tag lists from Wouter Beeftink