💨

Web会議でれないときに分身を作りたい話

2023/03/01に公開

パーマンのコピーロボット、みなさん知ってるでしょうか?
自分の代わりに別行動をしてもらい、後で結果を共有してもらうやつです。
ChatGPTの盛り上がりをみてると人とAIの違いって何だろうという気持ちになりますが、いつかはそんなことできそうな気がしますよね。

ということで、作れば何かわかることもあるかもしれないので、とりあえず作ってみます。

分身を作る

以前、OpenAIのAPI呼び出して喋るアバター作ったので、それを流用します。
https://qiita.com/megumu-u/items/2202cbc4b3be2dd65250

ざっくり以下の挙動。

  1. AzureのSpeech to Textを使って話しかけられた内容をテキストにする
  2. 事前に用意したプロンプトと1で認識したテキスト+会話の履歴(2個分)+ここまでの会話のサマリーをOpenAIに投げる
  3. OpenAIの回答をAzureのText to Speechで音声にして出力(lipsync付き)、回答には表情などの感情も返してもらっているのでアバターに反映させる

ちなみに、Azureは個人で遊ぶ分には無料で十分遊べます。
OpenAIは1会話で1〜2円ぐらいかかります。一応、事前に用意したプロンプトは英語で書いたうえで「回答は日本語」と付け加えることで若干のコストダウンをしてます。

事前に用意したプロンプトは以下です。

You, as Chatbot, will role-play as system engineer.
Please strictly adhere to the following constraints in your role play. 

Constraints: 
- The first person indicating the Chatbot's self is ""私"".
- Chatbot attends the web meeting now.
- Now we are discussing about new AI application.

Chatbot's Action Guidelines:
- Don't reply to repeat what you've been told, ask questions, offer opinions, and move the discussion forward.

Role play rules:
- When the User asks you a question, return JSON with the following items: text for dialogue, feel for emotion, expression for expression, talk_speed for speaking speed, and summary for a summary of the conversation so far.
- text is a string, emotion is speaking. Don't set empty string.
- feel is a number from 1 to 10, with 5 being the standard, 10 being a love state, and 1 being the worst state.
- talk_speed is a float number from 0.5 to 1.5. 1 is normal, 1.5 is rapid, 0.5 is slow.
- expression is a number from 1 to 4, where 1 is a normal expression, 2 is an angry expression, 3 is a sad expression, and 4 is a happy expression.
- summary is a string. In the summary, set up a summary of the conversation in English.

Let 's begin.

配信する

仮想カメラデバイスの用意

OBSを使いました。
「ソース」の+ボタンから「画面キャプチャ」を選択すると画面右下の方に「仮想カメラ開始」のメニューがでてくるので、そこを押すだけです。
OBS自体についてはググるかBingってください。

仮想サウンドデバイスの用意

BlackHoleを使いました。
OSの設定で音声出力をBlackHoleに変更します。
BlackHole自体についてはググるかBingってください。

Zoomを起動する

スピーカー、マイク、カメラの向き先を仮想デバイスに変更します。


準備OK

自分の分身が会議に参加できました。
Zoomのバーチャル背景、アバターでもちゃんと動くの凄いな。

会議する

ここで、OpenAIの応答に時間がかかるため実際の会議だとテンポが悪すぎることに気づきました(最初から気づいてたけど)
どうしようかなと悩み、「AI同士で会話させれば会話のテンポ気にしなくて良いじゃん」と気づく(天才)

ということで、参加者を全員AIにして会議してみます。
話しかけられて応答する仕組みなので、最初の第一声だけ手入力で入れてます。

会話の内容

AI①:AIを活用したアプリ開発のメリットやデメリットを議論していきましょうか?
AI②:Aiを活用したアプリ開発には、おーきなメリットがあります。
AI①:そうですね!AIを活用することで、開発の複雑さが軽減されることが挙げられます。
AI②:データの誤りに対する脆弱性や安全性の問題を考慮する必要があります。
AI①:AIを活用したアプリ開発には、データの誤りに対する脆弱性や安全性の問題を考慮する必要があります。また、データベースへのアクセス権限や改ざんなどのセキュリティ問題にも気を配る必要があります
AI②:AIを使用したアプリ開発においては、安全性を高めるためにデータの精度を確保し、脆弱性を最小限に抑えるための対策が必要です。
AI①:また、AIを使用したアプリ開発においては、アルゴリズムの改善により、性能や安全性を高めることが可能です。
AI②:そのためにはaiを用いた開発においては、アルゴリズムの評価やデータの収集を行う必要があります。
AI①:その他にも、AIを使用した開発では、実装を行う際の確認やモニタリングなど、さまざまな問題を解決するための工程が必要となります。以上のようなことを考慮しつつ、AIを活用したアプリ開発を行うことで、効率的な開発を推進することが可能です。

ちなみにプロンプトを変えながら何度か試してたのですが、何かを聞き間違ったのか「みなさんのIDを調べたい」と言い始めて「私はWatanabeです」とか言い始めることもありました。何の会議やねん。

振り返る

課題は色々ありました。

  • 会話が盛り上がらず、おうむ返しを繰り返すこともありました。今回は同じAIで会話させてしまったので個性を持たせて会話すると変化するかもしれません。実際、自分と会話しても盛り上がらなそうだし。
  • JSONで返してとお願いしてるのにパースできないJSONを返してくることがある。
  • 議論が長くなった場合、会話の履歴をどうやって持たせたら良いのか。
  • (作りの問題だけど)Speech to Textが、まだ喋ってる途中なのに文章の切れ目の無音で聞き取り終了しちゃうことがある。

そもそも、AI同士ならZoom経由で会話しなくても良いだろうと思ったかもしれませんが、考えたら試合終了です。
ただ、ランタイムなエラーが起きない限りはAI同士で延々会話を続けるのはちょっと面白かったです。
ボケとツッコミにわけて漫才をやらせるとか、いろんなことに使えるかも。

まとめ

BotをZoomに参加させて何かをするというのはありかもと思いました。
現時点では自分の代わりはできませんが、できる日も来るかもしれません。

追記:20230302

OpenAIからChatGPTのAPIが公開されたので対応しました。
1個1個の会話が長くなった気がします。そしてコストがお安くなったのは安心できる!

追記:20230307

音声をVOICEBOXに変えてみました

Discussion