昨日は代筆してもらうTemplaterを考えたのですが、繰り返しているとネタ切れになって、同じような話がぐるぐる回り始める。 これだと自動書記には程遠い。
そもそも「文を考えるとはどういうことか」のメタレベルの問いだと気づきました。
Cursor
遠藤諭さんのCursorを使った執筆方法が参考になりました。 プロンプトは都度入力するスタイルで、選択範囲を指定して読みやすく修正してもらっています。 あるいは、途中まで書いた文章を補完してもらったり。
とすると、プロンプトは選択式ではなく、自由に入力するのが実用的か。
prompt.md
Templaterスクリプトです。
<%* const api_key ='xxxxx'const url ='https://generativelanguage.googleapis.com/v1beta/models/'const model ='gemini-1.5-flash' s =""prompt = tp.file.selection()if(!prompt){ e = app.workspace.activeLeaf.view.editor p = e.getCursor().line s = e.getLine(p)if(!s){ lines = tp.file.content.split("\n") prompt = lines.slice(0, p).join("\n")}}if(!s){ s =await tp.system.prompt("どうしますか?")if(!s)return}prompt+= `\n\n${s}` end_point =`${url}${model}:generateContent?key=${api_key}`newNotice("Thinking...")const data ={contents:[{parts:[{text: prompt }]}]} response =awaitfetch(end_point,{method:'POST',headers:{'Content-Type':'application/json',},body:JSON.stringify(data)})if(response.ok){const result =await response.json()return`\n${result.candidates[0].content.parts[0].text}`}else{newNotice(`エラー:${response.statusText}`)} %>
api_key
は下記アドレスで取得してください。
https://aistudio.google.com/app/apikey
使用例
スクリプトを呼び出すと:
プロンプトを求めてくるので、何か指示します。 カーソル位置までのテキストを対象に回答がカーソル位置に書き込まれます。
カーソル行があるときは、それをプロンプトと見なします。
また範囲選択すると、その部分だけの修正や置換ができます。
パターン・ランゲージ
井庭さんがコミュニケーション用のパターン・ランゲージとしていくつか考案しています。 「こういう言葉を入れたら対話が展開するんじゃないか」というパターンですね。
これのライティング版を考えれば、執筆に応用できる。 前回のような選択方式で自動書記を展開していけるはずです。
見たところ、いくつかの二項対立で表せようです。
- 深める / 簡略化する
- 広げる / 限定する
- 抽象化する / 具体化する
- etc
こんな感じじゃないかな。
そういう視点でほかの人が書いた文章を読み、「このパラグラフでテーマを広げているなあ」とか分類する。 分類する中で、ほかに軸が必要となれば追加していくので良さそうです。
そうすると、自動書記用のプロンプトも集まってくるでしょう。
井庭さんの「ライティング・パターン論」も出てました。 まだモックアップの段階で止まってるみたい。 13年前の考察かあ。 今の生成AI時代だとどうなるんでしょうね。
まとめ
手始めに『アカデミック・ライティング』からパターンを抜き出してみようかな。
Geminiのおすすめプロンプト
この記事を元にprompt.md
に「具体例を上げてください」と指示しました。
☆
パターン1:文脈と方向性を明確にする
目的:現在書いている文章の文脈と、次に進む方向性を明確化します。
プロンプト例:
- "現在のテーマは〇〇です。次に、〇〇について深掘りしますか?それとも、〇〇と関連する別の側面を検討しますか?"(〇〇には具体的な内容を挿入)
- "直前の段落では〇〇について述べました。この流れを踏まえ、次の段落では〇〇を説明し、結論として〇〇を示したいと考えています。どのように記述すれば良いでしょうか?"
- "今書いているのは〇〇に関する論説です。論点Aを支持する論拠をさらに展開するか、それとも反論を検討しますか?"
パターン2:文章構造を指定する
目的:論理的な文章構造を維持し、脱線を防ぎます。
プロンプト例:
- "このセクションでは、〇〇、〇〇、〇〇の3つの論点を展開します。次に論点を追加する場合はどれですか? それとも、次のセクションに移行しますか?"
- "箇条書きで論点を列挙しますか?それとも、段落形式で記述しますか?"
- "この文章は、導入、本論、結論の3部構成です。現在、どの部分を書いているのか、そして次の部分に進むにはどうすれば良いでしょうか?"
パターン3:表現方法を指示する
目的:文章のスタイルやトーンをコントロールします。
プロンプト例:
- "より学術的な表現にするか、それとも平易な言葉で書くか、選択してください。"
- "この段落は、客観的な記述にするか、主観的な意見を含めるか、どちらが良いでしょうか?"
- "比喩や例えを用いて説明しますか? それとも、事実を淡々と記述しますか?"
パターン4:具体的な質問を提示する
目的:思考の詰まりを解消し、具体的な方向性を示します。
プロンプト例:
- "〇〇について、更なる証拠やデータが必要ですか? あるいは、専門家の意見を引用しますか?"
- "〇〇という概念を、具体例を用いて説明する必要がありますが、どのような例が適切でしょうか?"
- "〇〇と〇〇の違いは何ですか?その違いを明確に説明する文章を生成してください。"
☆
4パターンか。 なるほどなあ。
教訓:プロンプトがわからないときは生成AIに尋ねればよろし。