3.1 Voiceflowとは
VoiceflowはVoiceflow Incが提供する、もともとはAIスピーカー向けのソフト開発環境です。本製品は、かつてはAmazon AlexaとGoogle Assistant両方の音声アプリ開発が可能でしたが、のちにGoogle側の仕様変更によりAmazon Alexaのみの対応となっています。現在のVersionではAlexaとは関係なく、単体で起動したり、他の処理環境からAPI(Application Programming Interface)で呼び出すこともでき、汎用性は高まっています。その一方でAlexaとの親和性は低下しています。
Voiceflowでは作成するソフトをProjectと呼んでいます(以前はAssistantやAgentと呼ばれていました)。作成したProjectはAlexa環境でも一定の制約の下で実行可能ですが、Alexa環境では処理ソフトはスキルと呼ばれます。用語が交錯してまぎらわしいですが原則として使用する環境にしたがって使い分けることとします。
3.2 Voiceflowのアカウントの取得
Voiceflowはサードパーティーの製品であるため、それを利用するためにはアカウントが必要です。すでに取得している場合には新規に取得する必要はありません。Voiceflowアカウントを取得するには https://voiceflow.com/ にアクセスし、ウィンドウ中の"Get Started free"をクリックし、指示にしたがって登録作業を行います。なお、すでにアカウント取得済であれば"Get Started free"もしくは右上の"Sign in” をクリックすることでソフト開発作業を開始できます。
新規ユーザの場合、2025年8月現在で登録後7日間はすべての機能を無料で制約なく使用できます(生成AI関連機能のみ使用可能量に上限あり)。試用期間経過後はProjectを最大2個までしか同時に編集できないなどの制約が生じます。
3.3 Projectの管理(作成、保存、削除)
Voiceflowを新規起動後、テンプレートが読み込まれたデザイン画面となった場合には、いったん左上のVoiceflowアイコンをクリックしてBack to dashboardを選択し、さらに左側のメニューのProjectsをクリックしてProject一覧画面とします。
Project一覧画面では作成中のProjectがなければNo Project existと表示され、Projectを新規作成するNew projectボタンが表示されます。下図の例では作成中のProjectとしてMy first AI agentが表示されています。
3.3.1 新規Projectの作成
ウィンドウ上の New project をクリックします。Project名と利用するテンプレートが求められるので名称をmy testとしてStart from scratchをクリックします。ただちにテンプレートが読み込まれてその実行が開始されますが、無視して左上のVoiceflowアイコンをクリックしてBack to dashboardを選択し、さらにProjectsを選択します。するとProjectが一つ増加しているのがわかります。
3.3.2 Projectの保存と削除
無料ユーザはDashboard上にProjectを2個までしか保存できません(新規登録直後のユーザを除く)。しかし外部ファイルとして保存することはできます。
マウスをProjectリストの枠内に移動すると現れる「・・・」をクリックしてDownload(.vf)を選択するとファイルとしてProjectを外部保存できます。外部保存できるProjectの数には制限はありません。
同様にしてDeleteを選択すればProjectの削除も可能です。ただし誤操作を防ぐために、Deleteの場合には、下図のように削除対象のProject名の入力が求められます。
3.3.3 保存したProjectの読み込み
外部に保存したProject(.vf)をDashboardに再読込するには右上のimportをクリックしポップアップウィンドウでファイル名を入力(もしくはブラウズして選択)し、Importをクリックしてください。
3.4 基本的なProjectの作成と実行
3.4.1新規Projectの作成
用意されているテンプレートの中にいわゆるHello worldのような基本的なものがあればよいのですが、残念ながら見当たりません。そこで、ここでは白紙から簡単なProjectを作成する作業を通じて、Voiceflowの基本的な使用法を説明します。
Project一覧の画面で、先に説明した方法で新規Project(名称は「えいあいくん」とする)を作成します。すると次のようなデザイン画面が開き、テンプレートの実行が開始されます。左上のVoiceflowアイコンをクリックしてBack to dashboardを選択し、ProjectsをクリックするとProjectのリストに「えいあいくん」が追加されているのがわかります。リスト中の「えいあいくん」をダブルクリックすれば、ふたたびデザイン画面に戻ります。
3.4.2 デザイン画面上のブロックの意味と基本編集操作
Projectを編集する前に、簡単にデザインエリアの操作と実行方法を説明しておきます。それぞれのブロックが一つの作業を意味しており、ブロックをつなぐ線が処理の流れを表します。
・Note: 各処理には説明をつけることができ、左下の (Note N)を左クリックしてから、デザインエリアで再度左クリックするとそこにNOTEを追加できます。あわせてプロパティペインが開き、書体や配置などを指定できます。NOTEを削除するには、そのNOTEを右クリックしDeleteを選択して削除します。NOTEの存在は実行処理には何も影響しません。
・Agent~Devのカテゴリー内のブロック: 左横のAgent~Devのカテゴリー内のブロック(部品)は実行処理に直接関係するブロックです。これらのデザイン画面への配置はブロック部品を左クリックしてドラッグしてください。また配置後にはプロパティペインが開きます。デザインエリアを左クリックするとペインは消えます。ブロックのプロパティペインを開きたければ、そのブロックをダブル左クリックします。ブロックを削除するには、そのブロックを右クリックしDeleteを選択して削除します。
ここでは説明を簡単にするため、いったんStart以外のブロックを削除します。なお、ブロックを削除するとそこに接続されている線も削除されます。
左側のAgent~Devのアイコンはブロック部品のカテゴリを表します。例えばTalkカテゴリにマウスを移動すると、Messageほか計5種のブロック選択メニューが現れます。このうちのMessageをそのままデザイン画面上の配置したい位置にドラッグするとMessageブロックが新設されます(ちなみにMessageブロックはメッセージを読み上げるブロックです)。それと同時に、このようにブロックを新規設置したり、既存のブロックをクリックするとそのプロパティペインが右側に開きます。
Messageプロパティのペインでは読み上げるメッセージを指定できるので、「えいあいくんです」と設定してみます。入力欄の上の▷をクリックすると発音を確認できます。またデザイン画面に戻るとブロック内の文字列にも入力文字が反映されます。
ただし話者の初期値は英文話者なので発音が不自然となります。そこで和文話者(たとえばAmazonのTakumi)に変更します。左側のメニューのSettings→Behaviourで話者を設定できます。
話者の設定後に左上のうねった矢印状のアイコン(Workflow) をクリックすればデザイン画面に戻ります。
この状態で、このProjectを実行してみます。右上の「Run」ボタンを押すと実行が開始されます。
下図のように、単に Chat has ended.と表示されるだけです。これは処理線が結ばれていないのでStartブロックだけしか実行されていないためです。そこでChatペインを閉じてデザイン画面に戻り、StartとMessageブロックの間に処理線を引くことにします。
Startブロックの右端の◎から左クリックしたままMessageブロックの上まで移動すれば処理線が引かれます(確定後に破線は実線となる)。なお接続線を削除するには、線を選択してゴミ箱アイコンをクリックしてください。
ここで再度Runをクリックして実行します。今度は「えいあいくんです」と発話・表示されるのがわかります。
さてブロック間を結ぶ接続線は処理の流れを示します。そして複数のブロックが連続して処理される場合には、ブロックを合体させることで接続線を省略することもできます。合体させるにはブロックを上下半分重なるような位置にドラッグしてください。分離するには数段重ねのブロックの最下段を左クリックしてドラッグします(分離後、接続線は引き直す必要があります)。
各ブロックの名称は作成時または分離時に自動的に付与されますが、そのブロックを右クリックしRenameを選択すれば任意の名称に書き換えることができます(ブロックの名称部分を選択して直接の書き換えも可能)。
3.4.3 VoiceflowのProject実行
Voiceflowでの処理は当然のことですがAlexaとは無関係にVoiceflowシステムで実行されます。そのため、別の章で説明するように作成したProjectをAlexaシステム上で実行することはできても、その処理結果が異なる可能性がある点には注意が必要です。Alexa環境での実行が最終目的ならここでの実行はAlexaで実行する前のDebug程度に考えた方がよいでしょう(Alexaで実行する場合には、あらかじめそれを考慮したブログラミングも必要となります)。
さて、Voiceflow上でのProjectの実行方法には途中の処理内容を確認できる方法と、結果だけが確認できる簡易な方法があります。それらについて触れておきます。
(1)途中の処理内容が確認できる実行方法
実行ボタン(右上の▷Run)をクリックすると図のようなChat paneが開きます。
Message属性ブロックの処理部では、結果が右側にチャット形式で文字表示されます。
処理中は実行順にブロックは青く囲まれてゆきます。またそれだけでなくウィンドウの下側に、どのブロックで何の処理が行われたかも表示されてゆきます。
そのためある程度処理が複雑なProjectでは、現在どこまで処理が進んでいるのか視覚的に確認ができます。
もしユーザの入力が必要なブロックがあれば、そこでマイク入力を行うか、もしくはウィンドウの右下の部分からキーボードで入力しキーボードのEnterを押すか ↑ をクリックしてください。
*2025.07現在、マイク入力では日本語を設定してもその認識精度はかなり低いので注意。
Voiceflow上で実行した場合には、Alexaと異なり実行対象はデザイン画面で作成したブロック範囲に限定されます。そのため、起動語であるinvocation nameなしに処理は開始され、処理ブロックの終端(これ以上、接続された矢印がないブロック)まで来ると処理は停止します。
また(アルゴリズム的に問題がなければ)任意のブロックから実行を開始することもできる。その場合には開始したいブロックにマウスを移動し、ブロックの右上に表示される▶をクリックします。
実行画面からデザイン画面に戻るには左上の ←Backを左クリックするかEscキーを押します。
(2) 簡易な実行方法
最初から実行し、入出力結果だけ確認できればよいというのであれば右下にあるTest your agent をクリックしてください。ただちに実行が開始されます。実行ウィンドウを閉じるには下向きの青抜き矢印をクリックします。
3.4.5 ブラウザアプリとしての実行
Voiceflowで作成したAgentは多くのPC用Webブラウザ上で単独実行可能です。これは複数のユーザでのアプリテストを想定した機能です。
VoiceflowのデザインウィンドウでShareをクリックしてShare prototype を選択します。設定ウィンドウが開きます。このウィンドウでChat input(キーボード入力で実行)かVoice input(マイクからの音声入力で実行)などが選択できるので、希望する入力方法を選びます。必要があればパスワードの設定もできます。
下部にある Copy Link を左クリックするとブラウザで実行する際のURLがクリップボードにコピーされます。メールに貼り付けるなどして他の端末に転送すると、その端末のブラウザでProjectの実行ができます。ただし現在のところ実行できるのはPCブラウザに限られています。
なお、下部左側の “Open in new tab”を左クリックすると、現在使用しているPCのブラウザで新しいタブが開いて、そこでブラウザアプリとして編集中のProjectの実行ができます。
3.5 例題によるVoiceflowの基本操作学習
Voiceflowの基本操作として、何か話しかけるとその言葉に「ですね。」を追加した回答が得られるProject を例題として作成します。その操作を通じて、ブロックの概念や編集方法、また入力データの取り扱い方法について理解します。
3.5.1 ブロックの消去と配置
いったん、作業中のデザイン画面の「えいあいくんです」と書かれたMessageブロックを消去します。消去するには対象のブロックを右クリックしてDeleteを選択します。ブロックを消去すると、それに接続されている線も消去されます。なお、右クリックでは削除以外にブロックに色をつけたり、ブロックの名称を変更したりすることもできます。
ブロックを新たにデザイン画面に配置するには先に説明したとおり、左側のブロックカテゴリの上にカーソルを移動し、表示されるサブメニューから必要なブロックをドラッグしてデザイン画面上に配置します。
図の例ではListenカテゴリの中にあるCaptureブロックをドラッグする例を示しています。
この方法でデザイン画面に「こんにちは」と、「えいあいくんです。お話ししましょう。」という二つのMessageブロックを配置します(ブロックの名称はそのままでも、変更してもかまいません)。さらにその次にCaptureブロックを配置します。
3.5.2 Captureブロック
Captureブロックの基本機能の一つはユーザからの入力を受け付けて指定した変数に格納することです。図に画面にCaptureブロックを配置した直後、あるいはCaptureブロック内部を左クリックしたときに開くプロパティpaneを示しています。
初期値は、Captureの文字の横にあるように、受け取り語句が「Entities」となっています。詳細はあとで説明するとして、今はここを「Entire user reply」としておきます(入力をまるごと受け取るという意味)。すると格納変数の入力欄が現れるので「last_utterance」とします(初期値のまま)。任意の変数に格納する場合は last_utternace vをクリックして表示される変数を選択するか、最下段にある変数の新規作成を選択してください。さらに後述するようにEntitiesを用いて受け取り語句を特定のカテゴリの単語に限定したり、任意の変数に格納したりすることもできます。この例題ではいずれも初期値のままとしておきます。
3.5.3 オウム返しとENDブロック
入力された(音声)文字は変数Last_utteranceに格納されているので、それに「ですね」を付加して出力するMessageブロックを配置します。そのPropertyは図のようになります(文字列の連結に+は不要)。Voiceflowでは変数を引用する際にはこのように{ }を用います。
さらに明示的に処理を終了させるためLogicカテゴリーからENDブロックを配置します。
最後にこれらのブロックを処理順に接続線で結んでゆけばProjectの完成です。なお、ブロック名は自動的に付与されるのでそのままでもかまいません。
3.5.4 例題の実行
例題を実行して、動作を確認します。このようにVoiceflowはブロックを流れ図のように配置するだけで直感的にプログラミングができる、いわゆるノーコードツールとなっています(必要ならコードの記述も併用可能)。
3.5.5 Agentブロック(生成AIの利用)
曖昧さを許容する用途であればVoiceflowで生成AIを利用することもできます。それが左上のAgentブロックです。Agentをデザイン画面に配置すると、図のようにプロパティとして生成AIの性格を選択もしくは新規設定するPaneが開きます。初期値では「Customer support specialist」ぐらいしかないので、New agent(またはCreate agent)を選択すると、性格を編集する画面となります。
この画面で性格のみならず、処理も含めて文字列で記述することができます。図の例では対話者が日本人であれば歴史的な話題からその年齢を推定させるものです。
右上のModelボタンで使用する生成AIを選択できます。設定が終われば右上の✕をクリックすれば設定終了です。このブロック単体で実行してみて結果を確認してください。なお生成AIの使用は無料ではなく内部的にトークンとよばれる仮想通貨で管理されています。むやみに使用すると無料範囲の上限に達するので注意してください。
このテキストは処理の確実な実行を目的としているので処理内容にゆらぎのあるAgentについては簡単に触れるにとどめておきますが、どのようにこのブロックが働くか実際に確認することをおすすめします。
3.5.6 ちょっとしたテクニック
以下にちょっとした小技を紹介します。アクセントとして使用してください。(結果は各自で確認を。)
・画像の表示
Voiceflowのデザイン画面にある、TalkカテゴリのImageブロックを利用し、画像ファイルもしくはそのアドレスを指定すると、画像をチャット領域に表示させることができます。
・ブロックの描画色変更
ブロックの上で右クリックすると各種編集操作ができますが、そのメニューの中に”Block color”があります。これを指定するとブロックを指定色で彩色できるので、目的にあわせて色を使い分けると見やすくなります。
3.6 Voiceflowにおける変数の使用と条件判断、コード記述
前節ではノーコードツールの範囲でVoiceflowを説明してきました。しかし実際の情報処理を行う上では、情報を表すシンボルとしての変数も必要ですし、その値により処理を切り替える条件判断も必要です。また変数を用いれば、補助的にコードを記述することで細かい処理も実現できます。
そこで本節ではVoiceflowの簡便性を生かしつつ、変数を用いてより複雑な処理を行う方法について説明します。
3.6.1 変数の設定と削除
変数を管理(変数名の一覧確認、新規設定、削除)するにはデザイン画面左下のContentを選択し、さらに「Variables」をクリックします。すると変数管理用のウィンドウが開きます。このウィンドウのAll variablesの下に現在設定されている変数の一覧が表示されます。初期状態ではシステム変数の一覧が表示されます。
・変数の新規設定
ウィンドウ右上の New variable をクリックすると新規変数の設定画面となります。変数名だけでなく、Description(説明)、Default value(初期値)を設定できます。図の例では変数名:aaa、Description:練習用、Default value:100としています。入力が終わったら、Create variableボタンを押すと変数が作成され、aaaが変数リストに追加されます。
・変数の削除
変数名リストで削除したい変数の左端の□をチェックし、「Delete」をクリックします。ただしシステム変数の削除はできません。
3.6.2 Setブロックによる変数の初期値設定と演算
Voiceflowではプログラムコードを直接記述する場合などを除き、変数は原則として ”{ }” でくくって表します。たとえば、変数ax, byは{ax},{by}のように表します。
変数に対してLogicカテゴリのSetブロックを用いると演算ができます。Setブロックは既存の変数に演算結果(定数を含む)を代入するブロックですが、それだけでなく前項の方法を用いずに直接、新規に変数を作成し初期値設定をすることもできます(ただしSetブロックでは変数の削除はできません)。
Setブロックのプロパティの初期値は図のように「Variable to set +」の1行だけです。「+」をクリックすると数値・式(Value or expression)のセットか文字列(Prompt)のセットかの選択ポップアップが開きます。
どちらかを選択し、さらに代入する変数を選択します。ここで変数の新規設定も可能です(新規設定用ポップアップウィンドウが開く)。そして値や演算式を設定します。演算式において、定数はそのまま表記し、変数は{変数名}として表します。入力が終了したら、プロパティウィンドウ領域をクリックすれば式が反映されます。引き続き他の変数に演算式を設定するのならポップアップウィンドウの「Set another」をクリックします(あるいはプロパティウィンドウの「Variable to set」の行の「+」をクリックします)。演算操作内容を取り消したい場合には、演算式の右の「-」をクリックします。
こうして変数を設定しておけば、たとえばListenカテゴリにあるCaptureブロックでは入力全文(Entire user reply)を取り込む際に標準では入力をシステム変数 ”last_utterance” に取り込むようになっていますが、それを自分で宣言した変数 ”my_var” に変更し、他のブロック中で各種処理に利用することもできます。
3.6.3 変数の利用
変数を用いれば、それを利用して出力表現を多様化したり、判断分岐の材料としたりすることができます。
(1) Messageブロックでの利用
AIスピーカーでは出力表現の多様性が求められます。そして変数を用いると表現の幅に変化を持たせられます。駅の発車案内を想定してみます。Messageブロックのプロパティで左図のように指定すると、列車が変わるごとに新たなMessageブロックが必要です。しかし、右図のようにそれぞれのパラメータを変数としておけば、変数名の部分はその値と置換されて、ひとつのMessageブロックで多数の列車に対応できます。これはデータベースからデータを出力する際に特に有用です。
(2) 条件判断ブロックでの利用
変数を用いるとその値をもとに分岐処理が可能となります。VoiceflowではLogicカテゴリにあるConditionブロックで条件判断と分岐を処理します。
このブロックのプロパティのCondition typeの欄では通常の条件判断をするBusiness logicとこれまでの入力に基づきAIが判断するpromptが選択できますがここではBusiness logicとします。
Pathsの横の+をクリックするとIf~then~else方式で条件判断をメニュー方式で設定するCondition builder か Javascript でコードを記述して True/False 判断をする Expression を選択できます。
下の図はCondition builderを用いて「aaaが5であれば」の設定をした例です。そうするとブロックからの処理接続線が条件を満足した場合と、しない場合の2カ所から接続可能となり条件判断ブロックとしての役割を果たします。
さらに条件を追加したいときにはPathsの横の+をクリックします。またElseが不要であればElse pathの横のスイッチをOffとします。
3.6.4 コードの記述(Javascript)
(1) Javascriptでの変数の取り扱い
変数を利用して、より詳細な処理を行いたい場合には直接Javascriptでコードを記述することもできます。Javascriptで記述する場合、これまで説明した方法で定義された変数(より正確には現在システムに登録されている変数)はグローバル変数として扱われ、それ以外はJavascript記述部のローカル変数となることに気をつけます。特にグローバル変数と同じ変数名をJavascript記述部で不注意に宣言するとローカル変数となってDebugに苦労することとなるので注意してください。
またグローバル変数として配列を使用する場合は、配列名だけをあらかじめ形式的にグローバル変数として用意しておき、具体的な操作(次元の宣言や要素を用いた演算など)はJavascript記述部で記述します。逆に言うと、Javascript記述部以外では配列要素は明示的には変数として使用できません。
(2) コードエディタの起動方法
コードを記述するブロックは ”Dev” カテゴリにある ”Javascript”です(下図)。Javascriptのプロパティではコードエディタが開きます。初期状態ではJavascriptブロック処理終了後の分岐先としては正常処理された場合のDefaultと何らかの異常が発生した場合のFailが用意されています。
右下のPaths横の+をクリックすることにより、処理後の分岐を追加することができます。図では分岐先としてcondition_aを追加しています。このように指定するとJavascript記述部のコード、return “condition_a” に到達したときに分岐します。不要な分岐はPaths右横の-で削除できます。
(3) コード記述を併用したProjectの例
Javascriptによるコード記述を併用する例として、Voiceflow単体では得ることができない時刻をJavascriptで取得し表示するProjectの例を示します。想定する動作は次の通りです。
・起動すると、「Javascript testへ、ようこそ。現在の時刻を知りたいですか。」と出力
・Yesであれば現在の時刻を出力
・Noであれば終了
時刻取得のコードを示します。
また全体のブロック配置は次のようになります。
Conditionブロックの応答変数 {last_utterance}が「はい」と判定されると、右のJavascriptが実行されます。なお「いいえ」の判定ではEndブロックに接続されています。
*Conditionブロックで文字列判定を行う際には文字列は ” ”でくくりません。
3.6.5 一連の処理のマクロ化(Component)
処理内容によっては、デザイン画面上で同じような処理(ブロックの連なり)が複数現れることがあります。このようなときに一連の処理をマクロのように一つのブロックにまとめるのがComponentです。
例として図の青色で囲んだ部分を一つのComponentにします。Shiftキーをおしたままマウスの左ボタンを押して範囲を選択します(青くなる)。その後に、選択範囲で右クリックしてメニューウィンドウを表示させます。そしてCreate Componentをクリックするとポップアップウィンドウが開くのでこのComponentにつける名称と説明(オプション)を入力して登録します。
登録するとデザイン画面左側のComponent一覧にその名前(図の例では「新コンポ」)が追加されます。またデザイン画面において、Component指定した部分のブロック群が一つのComponentブロックで置換されているのがわかるでしょう。また一覧中のComponent名をデザイン画面にドラッグすることでComponentブロックを画面に追加することもできます。
なおComponentを作成した場合には、ブロックの編集画面が全体の処理ブロックの画面と、Componentだけの編集画面に分かれます。その切り替えは画面左側のStart(Startブロックで始まる画面の編集)/Component名(例えば新コンポcomponentの編集)選択で行います。
Componentの名称変更や削除は、デザイン画面左側のComponent一覧の上で右クリックして該当メニューを選択します。
Component化するほどではないが、ある範囲を再利用したいときには、範囲選択後に、右クリックしてCopyメニューをクリックします。すると、選択範囲の内容がクリップボードに読み込まれます。そして、デザイン画面上で右クリック→Pasteで貼り付けることができます。
3.6.6ちょっとしたdebugテクニック
・実行中の変数の確認
先に説明したように、Runで開始した実行画面においてウィンドウ下には、新しい情報が上になるように処理状況が表示されます。これを参照することでどのブロックが処理されているのか、値がどのようになっているかDebugの参考となります(値の変更はできません)。
・Messageブロックを利用したdebug
処理が複雑になってくると、わずかなミスや思い込みから予期せぬ結果となることがあります。そのようなときに他の計算機言語ではDebug目的でPrint,Writeなど、変数値を出力する命令を利用します。それに相当するのがVoiceflowではMessageブロックです。たとえば変数numの値を確認したいのであればMessageブロックを一時的に追加して{num}と指定し、表示させます。
3.7 インテントの概念と入力のゆらぎへの対応
前節までの説明で、一般的な数値処理であればVoiceflowのプログラミングができるようになったといえます。しかしながらAIスピーカーとしての実用的な観点からは、音声による処理の指示や多彩な入力表現への対応という要素が抜けています。
図は第1章でも示したAIスピーカーの処理の流れです。Voiceflowを単独で使用する場合はwake wordやinvocation nameは必要ありません。それでもutteranceとインテントへの対応は必要ですが、まだ説明していません。
本節では、音声で処理を分岐させるインテントについて説明を行い、それに付随して入力表現のゆらぎへの対応方法について説明します。
3.7.1 インテント
インテントとは音声制御ソフトの中で音声によって起動される関数のような役割を持ちます。Visual Basicでいうならイベントに相当します。制御ソフト起動後に音声指示やエラー処理などで内部的に起動される場合もあれば、制御ソフト起動時の補助語句から直接起動される場合もあります。
Voiceflowの場合であればIntentブロックを配置し、それがどのような条件の時に起動されるのかを指定します。ここではキーワード「コスモス」で起動するIntent(名称Intent_a)と、「犬」で起動するIntent(名称Intent_b)の作成例を示します。
(1) インテントの作成
インテントは変数と同様にまず名称やその属性を指定しておき、実際の処理内容はデザイン画面で指定します。インテントを作成するには、左側のContentアイコンをクリックしIntentsメニューを選択します。Intents管理画面で現在登録されているIntentの一覧が表示されます(初期状態ではカラですが、図の例では2つあります)。
Intentの新規作成はウィンドウ右上のNew Intentをクリックします。すると図のようなポップアップウィンドウが開きます。ここでIntentの名称(Intent_a)と説明文(オプション)、Utterances(Intentの起動語句)を指定します。今は単にutteranceを「コスモス」としておきます。なお、「コスモス」だけでなく「ばら」でも起動されるようにしたければ、utterancesの右の「+」をクリックして「ばら」も追加します。このようにutterancesは起動の文例を意味します。そしてCreate intentをクリックします。
まぎらわしいですがGenerateボタンはクリックしないでください。Generateボタンは入力済のutteranceからAIにより類似語句や表現を自動追加する機能ですが、現時点では意味がありません。また、生成AI機能は使用するごとにTokenと呼ばれる仮想通貨が消費されます(AI機能を多用しない限り通常は気にしなくてかまいません)。
Intentを作成すると Not enough … という警告のようなメッセージが表示されますが、これは入力の揺らぎへの対応が不十分であるという意味なので今は放置しておきます。
同様にして、「犬」で起動する(つまりutteranceが「犬」の)Intent_bも用意します。
Intentの用意ができたら、左上のWorkflowsアイコンをクリックしてデザイン画面に戻ります。図のように同じアイコンが二つ並んでいますが左側の方をクリックしてください。
(2) インテントの配置
デザイン画面でIntentを配置するには、デザイン画面上で右クリックし、「Add Trigger」を選択します。「Add trigger」ブロックのプロパティでTriggersの横の「+」をクリックするとトリガーとしてIntentとEventの選択肢が現れるのでIntentを選択します。そうすると現在登録されているIntentの一覧が開きます。その中からこのブロックに割り当てるIntentを選択します(今はIntent_a)。同様にして、もうひとつ「Add trigger」でトリガーブロックを設置してIntent_bを割り当てます。
なおIntentの一覧に「None」とあるのはシステムインテントで、入力語句がどのIntentにも合致しないときに起動されるシステムIntentです。
二つのIntentブロックが用意できたなら、それぞれに、Messageブロックをぶら下げてどのIntentに分岐したかわかるようにします。
(3) インテントへの分岐
Intent分岐には主にCaptureブロックまたはChoiceブロックを用います。Captureブロックを用いると対象となる分岐先がすべてのIntentとなり、Choiceブロックでは指定したIntentのみとなります。
・Captureブロックの使用
単にデザイン画面にCaptureブロックを配置し、「Entire user reply」を選択するだけです。Intentに分岐目的で配置する際は、出力としての接続線は不要です。ただしCapture のプロパティにおいて、intentに分岐する目的でCaptureを使用するスイッチであるListen for other intentsをOnにしておきます。
そして図のようにブロックを配置して実行するとCaptureした内容に応じて、対応するIntentに分岐するのがわかります。
・Choiceブロックの使用
ChoiceブロックにはCaptureと同様に入力語句を判定して適切なIntentに分岐する使用法と、任意のIntentの条件に一致したら、どのような処理をするかを指定する方法があります。Captureと同じ使い方をするなら単にChoiseブロックを配置するだけです。ただしそのプロパティでListen for other intntsがon(初期値)になっている必要があります。
特定のIntentの条件に一致したら、どのような処理をするかを指定する方法はConditionブロックと似た役割を持ちます。ChoseブロックのプロパティでTriggersの横の+をクリックし開いたウィンドウで割り当てるIntent(正確にはIntentの実行条件)を選択します。割り当てるIntentを追加するにはさらにプロパティでTriggersの横の+をクリックし同様の操作を繰り返します。
図ではChoseブロックの判断条件としてIntent_aとIntent_bが割り当てられています。ブロック本体にもIntent_aの条件に一致したときと、Intent_bの条件に一致したときの二つの分岐肢◎が確認できます。
なお、プロパティにおいて判断条件としてのIntentを削除したいときにはそのIntentの右横の-をクリックしてください。
この使用法を用いたときには、それぞれのIntentの条件を満足しても自動的に対応するIntentには分岐しません。ブロック右横の◎から分岐先に接続する必要があります。Intentに接続する際には、Intentの開始ブロックには接続できないのでその次のブロックに接続します。
さらにプロパティ内のスイッチを操作することで、No match(一致する条件なし)、No reply(応答なし)、Listen for other intents(指定されたIntent以外も分岐の対象とする)なども選択できます。
一般的には、例えばIntent_aの条件に一致したらIntent_aに分岐するという使い方が普通ですが、判定だけ特定のIntentの条件で行い、それに一致したら他の処理を行うというChoiceの使い方もできます。
3.7.2 VoiceflowでのEntity(単語帳)の使用
発話入力を受け付ける際には、目的となる単語のカテゴリやリストが限定されることが多くあります。そのためEntityと呼ばれる単語帳のようなリストを用意し、さらには個々の単語にalias(別名)を指定することができます。このようにして作成したEntityはVoiceflowではIntentの起動以外にもCaptureで受付語句を制限する際にも使用できます。
Entityの管理はデザイン画面からContentアイコンをクリックしEntitiesを表示させて行います。Entitiesの画面では現在登録されているEntityの一覧が表示されます(初期状態では図のようにカラです)。
(1) Entityの作成・編集
ウィンドウ上のCreate entityをクリックすると、新しいEntityの設定ウィンドウが開きます。
NameでEntityの名称を指定し、Data typeで単語リストのTypeを指定します。選択できるTypeは少ないのでほとんどの場合Customとなります。
Valuesの欄でそのEntityに単語を追加してゆきます。単語にはAlias(別名)をつけることができるので図の例では「犬」に対して「わんちゃん」という別名をつけています。このようにAliasを指定すると「わんちゃん」と入力しても「犬」に置換されます。
登録単語を追加するにはValuesの横の「+」をクリックし、登録済みの単語を削除するには単語の横の「-」をクリックします。
Generateはすでに登録済みの単語から類推して生成AIにより単語を追加する機能ですが、Tokenを消費するので多用すると所有Tokenが枯渇してすべてのAI支援機能を使用できなくなります。
登録が終了したらCreate entityボタンを押すとEntityが作成されます。
図のようにEntityの一覧にanimalsが追加されています。既存のEntityの編集を行うには、Entityの一覧で対象となるEntityをクリックすれば、編集ウィンドウが開きます。
(2) Entityの使用法
・ Intentでの使用
IntentでEntityを使用すると、入力語句をEntityのリストにある単語に限定できます。またEntityを用いてサンプル発話を表すこともできます。ここではIntent_bの入力語句をEntityのリストに変更することとします。Intents一覧画面を開きIntent_bを選択します。該当するIntentを選択して開くプロパティで、「Utterances」の欄にEntity名を指定します。図の例ではintent_bのutterancesにEntity名の{animals}を指定したのち、既存のutteranceを削除しています。
なお、Intentの編集ウィンドウの下部には Automatically repromptのスイッチがあります。このスイッチがOnであれば適切な入力がされなかった場合に、そのEntityの入力方法を説明する文言を生成AIが返します(例:お好きな動物は?)。確実なrepromptのためには、あらかじめ生成AIに条件を指示しておく必要があります(詳細な説明は割愛)。また生成AI使用の度にトークンが使用され、所有トークンが枯渇すると実行できなくなるので注意が必要です。
さらに、Entityはサンプル発話と組み合わせてUtterancesに指定することもできます。
[{animals}を用いたUtteranceの例]
{animals}/{animals} が好き/私が好きなのは {animals}
IntentでEntityを使用した場合にはそのIntent分岐後に、使用されたEntity名の変数(この例では{animals})に選択された単語が引数として収納されます。
Entitiesの編集を行う他の方法としては、デザイン画面で対象となるIntentをクリックし表示される左図のTriggersプロパティでIntent名をいったんクリックし、さらに表示されるpaneのIntent名横の✎マークをクリックしても設定することができます(他のブロックと異なり、IntentのブロックをクリックしてもIntentのプロパティは開かず、Triggersプロパティが開くので注意)。
・Captureブロックでの使用
CaptureブロックでEntityを指定すると、Captureで入力可能な語句を制限することができます。図のようにCaptureブロックのプロパティでEntity名 {animals}を指定すると、そのEntityに登録された単語のみを受け付け、登録されていない単語の場合には「No match」の処理(No matchの際のメッセージ出力や分岐処理をプロパティで指定)が実行されます*。Captureで入力した語句はそのまま{animals}という変数として扱われます。そのため右図のように、それをMessageブロックで出力すると、選択語句が出力されます(Entityの全リストが出力されるわけではありません)。
*Entityに登録されていない単語の場合でも、デザイン画面内にその単語で起動するIntentがあり、Captureプロパティの「listen for other intents」がOnであれば「No match」ではなく、そちらのIntentに分岐します。
・複数のEntityの使用
必要があればIntentで複数のEntityを受け取ることもできます。例えば料理のEntityとして{dish}、飲み物のEntityとして{drinks}を用意し、次のようなサンプル発話群(Utterances)を設定できます。
・{dish}と{drinks}
・{dish}と{drinks}をください
・{dish}と飲み物は{drinks}
これらの場合にはそのIntentに分岐後に変数{dish}と{drinks}に指定した単語が入ります。
複数のEntityをサンプル発話で使用する際には、そのIntentのすべてのサンプル発話でそれらのEntityを使用してください。上の例でいうなら、{dish}もしくは{drinks}のみが含まれるサンプル発話はエラーとはなりませんが正しく処理されません。必要があればどちらか一つのみを受けるIntentを別に設けてください。
また複数のEntityがある場合、そのintentのプロパティでRequired entities(入力必須Entity)という項目があり、下図の例では{dish}と{drinks}が必須となっています。もし{dish}だけあるいは{drinks}だけを受け付けるIntentを別に設定したい場合には横の「-」をクリックしてこれを解除しておきます。