第7話 ChatGPTのためにパワオトメを使う。無理にでも。

 このエッセイは「パワオトメを使ってみよう。」がお題です。それなのに全然、パワオトメの話題を取り上げていなかった。


 反省しています。トピックスくらいすぐ見つかると思っていたんですが、たまたま遭遇する機会がありませんでした。


 その代わりに話題のAI「ChatGPT」(愛称「チャグくん」)を味見してきました。


 その結果、プロンプトと呼ばれるコメント文にそれなりの条件を入れてやれば、そこそこ「文章校正」ロボットとして機能してくれることがわかった。


 編集さんがついていない作家ワナビーにとって強い味方になってくれるかもしれないわけです。チャグくんが。


 ところが、問題点発生!


 🤖チャグ君は長文チャットに対応していない。


 ためしに1エピソード丸ごと(3500~4000字くらい)をぶち込んでみたら、長すぎてエラーになりました。


 たぶん1500字くらいなら問題なく答えてくれると思うので、分割してぶち込めばよいのですが、手で切り分けてコピペするのも味気ない。


 💡そこで、「作業の自動化といえば」でお馴染みのパワオトメくんの登場になるわけです。


 🖋「長文」を1000文字強くらいの塊に切り分けて、チャグくんに校正させてくれる?


 そういうフローを組んでみました。


 📜メインフローはこんな感じ:


 1 ブラウザーでチャグくんを呼び出す。

 ・自分のIDでログインしたチャット用のページを呼び出します。

 ・チャグくんは複数の会話を保存してくれますので、文章校正用の会話ページを選ぶのがコツです。(そういうセッションを自分で作っておく。なければ新規でも良い)


 2 プロンプトを待機。

 ・ウチのネット接続とおんぼろPCは動きが鈍いので、チャグくんが「話を聞いてくれる」体制を取るまで待たなければならない。

 ・「Send a message...」というプロンプトが画面最下部に表示されるのを待ちます。


 3 クリップボードテキストを取得します。

 ・あらかじめ構成させたい文章を全文コピーして、クリップボードに送っておきます。

 ・変数「ClipboardText」に保存します。


 4 【ループ処理】


 🖋大事なのはこの【ループ処理】の内容ですよね。はい。


 ・ループ条件:変数「Position」がゼロ以上である限り処理を継続。

 →「Position」とはいわばポインタで、現在処理中の文書でポインタがどこにあるかを先頭からの文字数で表します。(先頭は「0」、10文字目は「9」、etc.)


 📜ループ処理の中身:


 1 サブフロー「abstract_10k」を実行します。


 2 「Ctrl + V」キーをフォアグラウンド・ウィンドウに送信します。


 3 プロンプト「Send a message...」が表示されるのを待機します。


 4 メッセージボックスを表示します。

 ・「次に進んで良ければ、OKをクリックしてください」

 ・ボタンは「OK」と「キャンセル」を表示。

 ・押されたボタンの内容を、変数「ButtonPressed」に保存します。


 5 If文を実行します。

 ・「キャンセルがクリックされたら、ループを終了する」


 6 ループの先頭に戻る。


 🖋これだけです。が、パワオトメには癖があります。


 ⚠癖その1:サブフロー名は英数表記しか認めません。日本語なんて知らないよ!

 ⚠癖その2:「キャンセル」ボタンが押された時、変数「ButtonPressed」に格納される値は「Cancel」。日本語は知らないって言ったでしょ!


 🖋お気をつけください。


 🖋ちなみに、#4でメッセージボックスでのやり取りを入れたのは、チャグくんの回答描画に時間がかかるため。むか~しの映画に出て来る「コンピューター」みたいに「テケテケ……」って1文字ずつ打って来るので、制御が戻る瞬間がわかりづらい。仕方ないので、人間が判断して上げようと。😢


 📜サブフロー「abstract_10k」の内容:


 1 If文を実行します。

 ・ClipboardTextの長さが1500字以上あるか?

 ・【真】→ClipboardTextの先頭から1500字を変数「Subtext」にセットする。

 ・【偽】→ClipboardTextそのものを変数「Subtext」にセットする。


 2 If文を実行します。

 ・Subtextの長さが1000字以上あるか?

 ・【真】→Subtextの「位置1000」から「。」を検索し、見つかったらその位置を変数「Position」にセットする。見つからなかったら、変数「Position」に1000をセットする。

 ・【偽】→変数「Position」にSubtextの長さをセットする。そしてPositonを「1」小さくする。


 3 Positionを「1」大きくする。


 4 Subtextの先頭から文字数「Position」長さのテキストを切り出し、Subtextにセットする。


 5 「次の文章に「誤字、脱字、衍字、文法的ミス」があればその個所を抽出して教えて。」という文章の末尾に「(改行)(改行)Subtext」を追加して、Subtextにセットする。


 6 Subtextの内容をクリップボードに保存する。


 7 If文を実行する。

 ・Positionの値が1000以上か?

 ・【真】→変数「ClipboardText」の中身から、先頭からPositionの値の文字数まで切り出して、ClipboardTextにセットする。

 ・【偽】→Positionに「0」をセットする。


 🖋これだけです。解説しましょう。


 ・最初のIf文はプロンプトに投げる文章を概ね1500字以内に抑えるための条件です。処理の結果、Subtextの長さは最大で1500字となります。


 ・2番目のIf文では1000文字目から後ろで最初に登場する「。」(句点)の位置を探します。意味の区切りとして句点を目印にするためです。「。」が見つからない時は、(諦めて)先頭から1000文字を取り出します。もし、Subtextが1000文字より短い場合は、Positionに「Subtextの長さから1引いた値」をセットします。

(これは「文字列の長さ」と「位置」がちょうど「1」だけずれるからです)


 ・つってんのに、次の#3ではPositionに「1」を加えます。これは文字列の長さとして値を使いたいからです。


 ・#4ではここまでで決めた長さだけ文字列を切り出し、Subtextにセットします。


 ・#5は、Subtextの頭に「次の文章に「誤字、脱字、衍字、文法的ミス」があればその個所を抽出して教えて。」という依頼分を挿入する処理です。これを入れないと、チャグくんは読んだ文章の評価だというかぐわしいコメントを返したりします。


 🖋チャグくんは過去の膨大なデータを学習して、リクエストが想定するであろう答えを「パターンから」作り出します。したがって、「考えている」わけではありません。


 🖋回答内容は毎回微妙にぶれたりします。


 🖋カクヨム記法を知らないと、いちいち無駄だといって訂正を提案してきたりします。→これは教えてあげれば、学習すると思います。


(例)「」という記法は「カクヨム記法」と呼ばれる表記方法です。「|」と「《》」の間に挟まれた語句のルビとして「《》」の中の語句を使用します。したがって校正する目的上は「|」を無視し、「《》」の中の語を読み飛ばしてください。


 🖋ウチの環境では上のコメントを投げたら、ルビの記法を理解してくれました。


 いかがでしょうか。パワオトメ+チャグくんで、「マイ編集さん」ができあがります。こんなことしなくても、文章校正サービスが世の中にある?


 それを言っちゃあお終いですよ~。😢

  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る