GoogleドキュメントにGPTを実装してNotionAIっぽく使う
はじめに
ChatGPTは便利ですが、長いドキュメントを書いたり、テキストを読ませて何らかの出力を得る場合はNotionAIのほうが便利なこともあります。一方でNotionAIは月額制で、汎用的に使いやすいChatGPTに比べると個人的には割高な印象がありました。
私が普段ドキュメントを書くときに使用するのがGoogleドキュメントということもあり、両方のいいとこ取りを目指して、Googleドキュメント内でChatGPTのAPIを利用してドキュメントツール内でAIを使う方法を模索してみました。 なお、このスクリプト内でのAPI利用には従量課金が発生します。利用の際はご注意ください。
利用イメージ
-
プロンプトを入力して0から文章を生成してもらう
プロンプトによってドキュメントのたたき台を作ってもらうことができます
出力結果 -
テキストを選択し、プロンプトに沿って選択したテキストを加工してもらう
例えばYoutubeから文字起こしをベタ貼りして、選択した部分の要約をしてもらう
出力結果
個人的には、具体のユースケースとして2つめに上げた 「文字起こしの要約」が便利だと感じています。Whisperなどの文字起こしツールで文字起こししたあとに、箇条書きでまとめてもらって大枠を把握するために使っています。接続詞や、「えー」「うん」などの文言をなくしてくれるだけでもかなり読みやすくなります。
実現方法
今回達成したいことは以下です。
- Googleドキュメント上でGPTの利用が完結する
- 一回あたりのリクエストに対する上限トークン数を超えてテキストを扱える
- プロンプトを動的に変更できる
1. Googleドキュメント上でGPTの利用が完結する
GASでGPTのAPIを叩くことで実現できます。方法については下記の記事が詳しいので、引用させていただきます。
2. 一回あたりのリクエストに対する上限トークン数を超えてテキストを扱える
GPTのAPIには入力できるトークン数に限りがあるため、プロンプトと一緒に渡すテキストが長いとエラーになります。これについては テキストを機械的に行数で分割(チャンク分け)し、繰り返し処理でリクエストすることにしました。時間はかかりますが、これで一回のスクリプトの実行で大量のテキストを処理する事ができます。
ただし、あくまでも テキストをぶつ切りにして別々にリクエストしているだけなので、文脈は把握されない点に注意が必要です。また行数の切り方が悪いと、期待取りの結果にならないことがあります。選択範囲や後述する行数の指定を工夫してなんとかやっています。
3. プロンプトを動的に変更できる
選択するテキストによってプロンプトを微妙に変えて出力を期待通りに調整したいときがあります。このときにプロンプトを直接スクリプト内に書いてしまうと都度書き換える必要があり大変なので、サイドバーに入力しそれを受け取れるようにしました。
入力できるのは「チャンク分けの際に分割する行数」「プロンプト」「ロール」の3つです。
「行数」・・・選択するテキストの密度によって、変更します。例えば文字起こしのように、比較的情報密度が低い場合は30行、誰かが入念に書いた情報密度の高いものは10行など細かくリクエストするイメージです。
「プロンプト」・・・テキストとともに渡される命令文です。
「ロール」・・・あらかじめGPTに持たせる役割で、「あなたはプロの議事録係です」といった類の文章を入力します。正直プロンプトとの棲み分けがあまりわかっていませんが、トークン数節約のためにロールになるべく書くのが良いのかなと思っています。
利用方法
GitHbに実際に作成したスクリプトがありますので載せておきます。
スクリプトプロパティにご自身のAPIキーを設定すれば動くと思います。
README
Sidebar
MainScript
改善ポイント
- スクリプトの実行時間が長い
- 実行状況がわからない
- マークダウン形式で出力しても表示が変わらない
- チャンク分けに不満が残る
その他
GoogleがWorkspaceにAI機能を実装していくというニュースもあり、いずれGoogleドキュメントの基本機能として提供されるのかなとも思ったのですが、意外とユースケースはたくさんあり、すぐに期待通りのものが来るかわからないので、自分で実装してみました。
Discussion