ChatGPTをはじめとしたAIは、文章のリライトや要約などに活用することができます。
この記事では、GASとChatGPTのAPIを使って、スプレッドシート上で文章のリライトができるツールの作り方を紹介します。以下のキャプチャがツールの完成イメージです。
Contents
【事前準備】OpenAIのAPIキーの取得
事前準備として、ChatGPTの開発元であるOpenAIのAPIキーを取得する必要があります。まだ取得していない場合は、手順がわかりやすく記載されている以下のサイトを参照してAPIキーを取得してください。
【2023年版】OpenAIのAPIキー発行手順!ChatGPTや文章生成AI、画像生成AIを利用可能
ChatGPT APIとスプレッドシートを連携したリライトツール
リライトツールを作るためのスプレッドシートを用意します。新規作成のスプレッドシートでも、すでに業務等で使っている既存のスプレッドシートでも構いません。
スプレッドシートに入力欄を用意する
スプレッドシートに「ChatGPTに送るプロンプト」と「リライトしたい文章」の入力欄を用意します。以下がシートの構成イメージです。
- A2セル:プロンプト(ChatGPTへの指示文)を入力する欄
- A列(A4セル以降):リライトしたい文章を入力する欄
- B列(B4セル以降):ChatGPTによるリライト文を出力する欄
なお、この記事内で使用しているプロンプトは以下です。
あなたはプロの編集者です。
以下の条件に従って、入力文を読みやすくリライトしてください。
# 条件:
・一文は80文字以内にしてください。
・文の論理関係をわかりやすくするため、なるべく接続詞を用いてください。
・丁寧語(です・ます調)にしてください。
# 入力文:
{content}
A列に入力したリライト対象の文章を、プロンプト内の{content}に置き換えてChatGPTに送信する仕組みです。そのため、プロンプト内の#入力文: {content}は書き換えないでください。その他、リライトの条件は自由に書き換えてOKです。
※この記事は「ツールの作り方」に焦点を当てているため、プロンプトのリライト条件はシンプルな内容にしています。ChatGPTにより良いリライトをしてもらうためのプロンプトの作り方については、また別の記事で紹介したいと思います。
ほんの一例ですが、リライト条件を工夫することで、以下のようなリライトに活用できそうです。
- 文章を要約する
- 誤字脱字をチェックする
- 読点(、)を打ち直して読みやすくする
- 「話し言葉」を「書き言葉」に変換する
それでは、スクリプトエディタにGASを書いてツールを作りましょう。
GASでChatGPT APIにリクエストするコードを書く
ChatGPTのAPIにリクエストを送るコードです。変数API_KEY
は各自のAPIキーを設定してください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
/** * ChatGPTで文章をリライトする関数 * * @param {String} 原文 * @return {String} リライトされた文章 * @customfunction */ function RewriteWithGPT(originalSentence) { const API_KEY = "★各自で設定★"; const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("gpt"); const basePrompt = sheet.getRange("A2").getValue(); const prompt = basePrompt.replace("{content}", originalSentence); const messages = [{ role: "user", content: prompt }]; const payload = { model: "gpt-3.5-turbo", messages: messages }; const options = { contentType: "application/json", headers: { Authorization: "Bearer " + API_KEY }, payload: JSON.stringify(payload), muteHttpExceptions: true }; const url = "https://api.openai.com/v1/chat/completions"; const response = JSON.parse(UrlFetchApp.fetch(url, options).getContentText()); const rewritedSentence = response.choices[0].message.content.trim(); return rewritedSentence; } |
参考1:https://platform.openai.com/docs/guides/chat
参考2:https://platform.openai.com/docs/api-reference/chat
カスタム関数(RewriteWithGPT関数)でリライトする
RewriteWithGPT関数の引数に「入力文のセル」を指定します。ChatGPTのAPIにリクエストが送られて、レスポンス(ChatGPTによるリライト文)が返ってきます。
(APIへのアクセス状況などによっては、関数を入力してからしばらく待つ場合もあります)
スプレッドシートを開きなおしたり、またはスプレッドシート上でなんらかの処理をしたりすると、RewriteWithGPT関数が再実行されて別の結果が返ってきます。ChatGPTは、まったく同じプロンプトを送信しても、都度応答文が変わるからです。
そのため、リライト文を保存したい場合は、コピー&値貼り付けなどで残しておきましょう。
逆に、期待どおりのリライト文にならなかった場合は、再度関数を実行して別の結果を取得することができます。
ChatGPTによるリライト結果を確認する
2つの(読みにくい)文章を作成して、スプレッドシート上でリライトした結果です。
文章1
172文字の1文です。1文の文字数が多くなると読みにくくなるので、適度に文を分けることが望ましいです。さて、どのようなリライト結果になるでしょうか。
【原文】
プログラミングはとても難しそうで理系のイメージや男性がやるものだというイメージが多くありますが、最近では文系出身の女性が社会人になってからプログラミングを勉強する人も増え始めたと聞いているし実際に私の会社でもエンジニアとして活躍している女性をみてるとプログラミングに文理の差も性別差もないと思っていて、大事なのは学習の目的と習慣化だと感じます。
↓
【リライト後】
プログラミングは一般的に、理系のイメージや男性がやるものだというイメージがあり、難しいと思われています。しかし、最近では文系出身の女性が社会人になってからプログラミングを勉強する人も増えているようです。私の会社でもエンジニアとして活躍している女性を見ていると、文理の差や性別差は関係なく、プログラミングが誰にでもできると感じます。大切なのは、学習の目的と習慣化です。
きちんと意味を保ったまま4つの文に分けられて、読みやすくなりました。細かな点ですが「みてる」→「見ている」などのリライトもされています。
文章2
「だ・である調」と「です・ます調」が混在しています。また、読点が一つもなく、思いついたままに書いたような文章です。
【原文】
私は毎日朝起きてコーヒーをのむのですが毎日ちゃんとコーヒー豆を挽くのがこだわりで今朝もそうしたかったのに寝坊してしまったから時間がなかった。私は結局朝コーヒーを飲めずに家を出ることになって会社に行く途中のコンビニで缶コーヒーを買った。
↓
【リライト後】
私は毎朝、起きてからこだわりのコーヒー豆を挽いて、コーヒーを飲みます。しかし、今朝は寝坊してしまい、時間が足りませんでした。そのため、会社に行く途中のコンビニで缶コーヒーを買いました。
条件どおりに「です・ます調」でリライトされました。また、文脈に沿って適切に接続詞が使われているので、意味が理解しやすくなりました。
今回の記事では「ツールの作り方」に焦点を当てて紹介しました。そのため、プロンプトに指定したリライト条件は簡易な内容になっていますが、プロンプトに指定する「リライト条件」をもっと上手く工夫すれば、リライト文も良い結果になりそうです。
より良いリライト結果をChatGPTから引き出すためのプロンプトの作り方は、また別の記事で紹介したいと思います。