製品のAIスピーカーとしてユーザがそのアプリを開発可能なのは、現状ではAmazonのAlexaに限られます。ただ、音声制御を指向したアプリ開発環境としてはVoiceflowがあり、作成したアプリはAPIを介してAlexaに加えPythonやJavascriptなどの環境からでも使用できます。
この資料では最初にAIスピーカーの基本的な処理の流れを説明した後、AlexaとVoiceflowの基本的なアプリ作成法、さらにはそれらのAPIアクセス方法について説明します。本資料の構成は次の通りで、各章を独立した記事としています。
1.AIスピーカーの処理の流れ
2.Amazon開発環境でのAlexaスキル作成
3.Voiceflowでのプロジェクト作成法
4.Web APIによる他のアプリケーションとの連携
1.1 AIスピーカーと生成AI
生成AIが話題となる中、AIスピーカー=生成AI会話器のようなとらえ方もありますが実際は少し異なります。もともとAIスピーカーは(多少あいまいさのある)人間の音声入力にしたがって確実な動作(リモコン機器の操作)や情報提供を行うことをねらいとしています。生成AIは条件によりハルシネーション(誤情報の作成)を起こすことが知られており創成活動においてはともかく、AIスピーカーにおいては本来の目的にそぐいません。そのため同じAIを名乗りながらも、プログラミングの面からはAIスピーカーはルールベースに基づく古典的なプログラミング技法に沿ったものとなっています。
もちろんAIスピーカーのアプリの一部として生成AIを活用することはあり、チャットボットのような使い方もできます。
1.2 AIスピーカーにおける処理の流れ
ここではAmazon Alexa用のアプリであるAlexaスキルの処理の流れについて説明します。Amazon Alexaを例としていますが、かつて公開されていたGoogle Assistant(Google nest hub) 向けソフトの基本構成、あるいはサードパーティーのVoiceflowも類似の形態となっているのである程度の汎用性はあると考えて構わないでしょう。なおAIスピーカー環境特有の耳慣れない用語も出てくるので注意してください。
一般にAIスピーカーは常に命令待ちの状態で周囲の音声をチェックしています。特定の作業を実行させるには処理のキーとなる言葉を定め、あわせて付随的に必要な情報も与えなければなりません。
Alexaではそれは次のような構成となっています。
英語と日本語とで語順が違うように見えるが実は語順はあまり問題となりません。重要なのは最初に ”wake word”(起動語)が来て、引き続き「何を」(invocation name)、「はじめる(または起動する)」(launch word)の情報が自然な順番で現れることです。各言語に対応したAIの自然言語処理システムが、”wake word”、”invocation name”、”launch word”を抽出します。
“wake word”は端末にいわば「耳を傾けさせる」キーワードです。“wake word”は周辺の会話により不慮の処理が実行されないよう、メーカーによりあらかじめ一定の名称が決められています。Alexaの場合には、”Alexa”, ”Computer”, ”Amazon”, ”Echo”のいずれかひとつを設定できます。
残りの二つの項目は処理項目と処理内容です。AIによる言語解析機能があるので、少々の表現のゆらぎは許容されます。次の三つの例はいずれも同じ意味となります。
・Alexa、マイ時刻表を開いて
・Alexa、マイ時刻表を起動して
・Alexa、マイ時刻表を実行
もう少し、細かい指示が必要な場合には、次のように ”utterance”を指定します。
”utterance”はスキル処理の中では、対応する”intent”(関数ルーチンのようなもの)を起動するイベントとなります。次の図では”湘南線”に類する語がutteranceとして入力されると、対応するintentである”GetShonanIntent”が起動されるイメージを示しています。
なお、実際の処理で頻繁に使用される汎用的なintent(関数)である ”Cancel”、”Help”、”Stop”、”Repeat”などはあらかじめシステムで用意されています。
以上を整理して、音声入力とその後の処理の関係を図示すると次のようになります。
(1) ”アレクサ”というwake wordで音声の取り込みを開始
(2) “マイ時刻表で”というinvocation nameならびにlaunch wordでスキル(アプリ)が起動する。
(3) “湘南線”というutteranceをもとに対応するintentの処理に飛ぶ。
ここで関数に相当するintentについてもう少し詳しく説明します。
Intentは上述のようにUtteranceから直接に起動されることもあれば、アプリ内部の処理(入力やエラー処理など)で起動されることもあります。AIスピーカーへの音声入力でIntentが起動されるパターンには大別して次の2つのパターンがあります。
(1)あらかじめ登録されているサンプル文と一致した場合
サンプル文(または語句)を登録しておき、その文と一致したならIntentが起動するパターン。ただし、どの登録文と一致して起動されたかは、intent中で問題としません。
[例:intent名は仮称]
{おはよう/朝ですね/おはようございます}のいずれかならGetMornigOpIntentを起動
{ねこ/犬/うさぎ/カメ}のいずれかならMyAnimalIntentを起動
(2)あらかじめ登録されている単語群を含むサンプル文と一致した場合
別途、単語が登録された単語帳を用意しておき、その単語帳名を含むサンプル文と一致したならIntentが起動するパターン。
[例:あらかじめ{flowers}という単語帳に{ばら/ひまわり/レンゲソウ/コスモス}を登録しておく]
・{flowers}が好きです
・私の好きな花は{flowers}です
・{flowers} →単語帳名だけのパターンも可
そうすると次のいずれの文例でもこのIntentが起動されます
ひまわりが好きです/コスモスが好きです/私の好きな花はばらです/レンゲソウ
単語帳のどの単語でもサンプル文例に一致すればこのIntentが起動されます。それだけでなく、(文例ではなく)どの単語で起動されたかをプログラムの中で知ることができるので、単語帳の部分に関数の引数のような役割を持たせることができます。
なお複数の単語帳(例として{food},{drink})を用意しておき、それらを用いたサンプル文を設定することもできます。この場合には引数に相当する情報を二つ、Intentに与えます。
[例]
・{food}と{drink}をください
・{food}と{drink}をお願い
当該intent起動後は{food},{drink}にどのような単語が入ったか把握できるので、引数として内部で適切な処理ができます。
なお、Alexaで実行するスキル(アプリ)はあらかじめ端末への登録が必要です。登録されていないスキルや存在しないスキル名が指定された場合には、自然言語処理システムが、関連するスキルの登録を提案したり、ネット検索により関連情報の提示を行います。
1.3 AIスピーカーのアプリ開発環境
AIスピーカーのアプリ開発は上述のような構成のアプリを開発する作業となります。ただ、実際の処理は、音声認識やデータベース操作等、複数の技術要素から構成されています。これらをすべて自前で開発もしくはライブラリなどを使用して実装できるのであれば、ソフト開発にあたり開発言語や環境は問われません。しかし音声合成以外の機能は、端末単体では処理能力に限界がありオンライン接続されたクラウドシステムを利用するのが普通です。
現状ではAmazonがAlexaスキル用の純正開発環境を提供しています。かつてはGoogleもGoogle nest hub用の環境を提供していましたが現在は廃止されています。またサードパーティ製の開発環境も以前はいくつかみられましたが、今はVoiceflowぐらいしか見当たりません。
これらの開発環境でのアプリ開発方法については次章以降で説明してゆきます。