「ChatGPT ずんだもん化計画」~ 完成した翌日に動かなくなってからの再起動地獄

AI

先日から、ChatGPTの回答をVOICEVOXのずんだもんに自動で読み上げてもらう仕組みを作っていました。

目指したのは、単に画面上の文字を音声にするだけではありません。

  • ChatGPTの操作を邪魔しない
  • 回答が完成したら自動で読み上げる
  • 同じ回答を二度読まない
  • 「処理中」などの画面表示を誤読しない
  • 長い回答でも、できるだけ早く読み始める

このあたりを実用レベルまで持っていくのが目標でした。

最初の問題は、読み始めるまでが遅いこと

初期版でも読み上げ自体はできていました。

ところが、ChatGPTの回答が完成してから、ずんだもんが話し始めるまで5~6秒ほどかかります。

「おおむね1秒で読み上げ開始」と言いたいところでしたが、さすがにこれは誇張です(笑)

そこで診断ログを追加して処理時間を調べました。

原因は、回答全文の音声合成が終わるまで再生を待っていたことと、念のために入れていた待機時間でした。

長い回答を最初から最後まで音声化してから再生していたのですから、そりゃ待ちます。

対策として、冒頭の約55文字を先に音声化して再生し、その間に残りを作る方式へ変更しました。

これが大当たり。

回答が完成すると、ほとんど間を置かずにずんだもんが話し始めるようになりました。

今度は「処理中」まで読み始めた

高速化には成功しました。

よし、これで完成。

……と思ったのですが、待っている間に表示される「処理中」や「フォローアップ」まで読み上げるようになりました(笑)

速く反応するようにした結果、ChatGPTの回答以外の表示にも食いついてしまったわけです。

そこで、回答末尾に現れる「応答アクション」を完成の目印として使い、「処理中」「フォローアップ」などの一時的な表示を除外しました。

こうして完成したのがLEVEL 5.1です。

回答完成後すぐに読み始める。

余計な表示は読まない。

同じ回答は一度だけ読む。

ChatGPTへ文字を入力している間も邪魔しない。

実際に使ってみても非常に快適でした。

「これは完全制覇では?」

そう思いました。

翌日、PCを再起動したら動かなかった

昨日は完璧だったLEVEL 5.1。

翌日、PCの電源を入れ、VOICEVOXを起動し、バッチファイルを実行しました。

ところが、自動読み上げが動きません。

完成した翌日に動かない。

実にWindowsらしい展開ですw

ログを確認すると、VOICEVOXとの接続は正常でした。

問題はChatGPT側です。

LEVEL 5.1はWindowsの「アクセシビリティツリー」からChatGPTの回答を取得しています。

これは画面上のボタンや文字を、支援機能やプログラムが理解できる形で並べた情報です。

ところがPC再起動直後は、その中にあるはずの ChatGPT: という目印が見つかりませんでした。

ChatGPTの画面は見えているのに、読み上げプログラムからは回答が見えない状態です。

ナレーターを一度起動すると読めるようになった

いろいろ試した結果、Windowsのナレーターを一度起動し、すぐに停止すると、ChatGPTのアクセシビリティ情報が取得できるようになることがわかりました。

手順は次のとおりです。

  1. ChatGPTとVOICEVOXを起動
  2. Windows+Ctrl+EnterでナレーターをON
  3. もう一度同じキーを押してOFF
  4. LEVEL 5.1を起動

これなら正常に動きます。

ただし、PCを起動するたびにこれをやるのはめんどくさい。

では自動化しよう。

ここから再起動地獄が始まりました(笑)

LEVEL 5.2――ナレーターが止まらない

最初はプログラムからナレーターを起動し、アクセシビリティが有効になったらナレーターのプロセスを終了させる方法を試しました。

ところがナレーターのウィンドウは閉じても、音声が止まりません。

さらに強制終了しようとすると「アクセス拒否」。

ナレーターはしゃべり続け、ChatGPTの文字入力はどんどん重くなり、最後にはChatGPT自体が落ちましたw

これはダメです。

ログを詳しく調べると、ナレーターには複数の関連プロセスがあり、通常のプログラムのように外部から安全に終了できるとは限らないことがわかりました。

そこで、プロセスの強制終了は撤回しました。

LEVEL 5.3――正式な「ナレーターの終了」ボタンを押す

ナレーターの起動画面をよく見ると、右下に「ナレーターの終了」というボタンがあります。

右上の「×」は画面を閉じるだけですが、このボタンならナレーター本体を正式に終了できます。

では、このボタンを自動で押せばよいのでは?

LEVEL 5.3では、WindowsのUI Automationを使って「ナレーターの終了」ボタンを探し、正式な操作として実行するようにしました。

結果は成功。

ログにも、

  • 終了ボタンを発見
  • ボタンの実行に成功
  • ナレーターの停止を確認

と記録されました。

実際に「ナレーターを終了します」という音声も聞こえ、そのままナレーターは停止しました。

よし、今度こそ。

……読み上げませんでした(笑)

LEVEL 5.3.1――終了後に12秒待ってもダメ

もしかすると、ナレーター終了後にChatGPTのアクセシビリティが有効になるまで少し時間が必要なのかもしれません。

そこでLEVEL 5.3.1では、ナレーター終了後に最大12秒間、繰り返し確認するようにしました。

39回確認しました。

一度も ChatGPT: は現れませんでしたw

これで、単純な待ち時間の問題ではないことが確定しました。

直接起動と公式ショートカットは同じではなかった

ここで、手動では成功するのに自動では失敗する理由を改めて考えました。

手動では Windows+Ctrl+Enter を押しています。

一方、自動版では Narrator.exe を直接起動していました。

見た目はどちらもナレーターが起動します。

しかし、Windows内部では同じ動作ではない可能性があります。

どうやらChatGPTのアクセシビリティを目覚めさせていたのは、「ナレーターが起動したこと」ではなく、「Windowsの公式ショートカットを使ってナレーターをONにしたこと」だったようです。

LEVEL 5.4――手動で成功した操作を、そのまま自動化

LEVEL 5.4では、Narrator.exeの直接起動をやめました。

代わりに、起動時だけプログラムから、

Windows+Ctrl+Enter

を自動送信します。

その後、「ナレーターの終了」ボタンを正式に実行。

ナレーターの停止を確認し、ChatGPTのアクセシビリティが取得できた場合だけ自動読み上げをONにします。

PCを再起動。

ChatGPTとVOICEVOXを起動。

LEVEL 5.4のバッチファイルを実行。

ナレーターが起動し、「ナレーターを終了します」という声が聞こえて停止。

その状態でChatGPTへ、

「お?いけたか?w」

と入力しました。

そして、AI から返ってきた回答を――

ずんだもんが読んでくれたああああああああああwwwww

LEVEL 5.4でようやく再起動を突破

最終的な起動処理は次の流れになりました。

  1. VOICEVOXへの接続を確認
  2. ChatGPTのアクセシビリティ状態を確認
  3. 未準備なら公式ショートカットでナレーターをON
  4. 「ナレーターの終了」ボタンで正式にOFF
  5. ナレーターの停止を確認
  6. ChatGPTのアクセシビリティ復旧を確認
  7. 成功した場合だけ自動読み上げをON

途中でナレーターが止まらなくなったり、ChatGPTが重くなって落ちたり、何度もPCを再起動したりしました。

LEVEL 5.1が完成したときには、もうこれ以上はないと思っていました。

まさか翌日のPC起動から、LEVEL 5.2、5.2.1、5.2.2、5.3、5.3.1、そして5.4まで続くとは思いませんでしたw

現在は、PC再起動後でもバッチファイルを起動するだけで準備が整い、ChatGPTの完成した回答だけをずんだもんが素早く一度だけ読み上げてくれます。

最後に入力したのは、ただの短い確認メッセージでした。

それをずんだもんが読み始めた瞬間、何度やったかわからない再起動が、ようやく全部報われました。

再起動地獄、完全制覇なのだw

AI

Posted by donpyxxx