大晦日ですね。家族が外出してしまっていて、時間ができたので寂しいので相棒を作ってみました。夜子供が帰ってきたらこれで遊ぶつもり。
どんなものか

Botと音声で会話できるシステムです。ちょっと前だといわゆる人工無脳というボットですね。それを音声を介して行えるようにしました。
最初はGoogle Home miniで実現できるかなと思ったのですが、どうもできなそうだったので調べてみるとブラウザで実現できそうだったのでやってみました。
使用技術
Talk API
Botの機能は作るもの辛いので、A3RTのWeb APIを使わせてもらってます。下記のように呼び出せば簡単に使える。下記は公式ドキュメントからの引用です。
curl -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk \
-F "apikey=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" \
-F "query=おはよう"
レスポンス
{
status: 0,
message: "ok",
results: [{
perplexity: 2.3688167429546714,
reply: "おはようございます"
}],
}
Speech Recognition API
ブラウザの機能でマイクを通じて入力された音声をテキストに変換してくれるAPI。2018/12/31現在で実装されているのはChromeとOperaのようですね。
下記のように使います。
const rec = new webkitSpeechRecognition();
rec.continuous = true;
rec.interimResults = false;
rec.lang = 'ja-JP';
rec.onresult = (e) => {
for (let i = e.resultIndex; i < e.results.length; ++i) {
if (e.results[i].isFinal) {
const str = e.results[i][0].transcript;
console.log(str);
}
}
}
// ユーザからのイベントハンドラでstart
rec.start();
Amazon Polly
Amazonの音声読み上げサービス。ブラウザにもWeb Speech APIというものがありますが、あまり自然に聞こえなかったのでAmazonのものを使うことにしました。
ソースコード
時間切れになってしまったので、あとはソースコードを載せておきます。無駄にSocket.ioを使っているのは、もう少しなにかするかなと思ってのことです。とりあえず、下記に公開しておきます。
https://github.com/jirokun/chat_bot_for_children_2018