Notion AIを真似しました。
Notion
Notionを触ってみて「文章の続きをAIが考えるの、面白いなあ」と思い、Obsidianに組み込もうと思いました。
単にプロンプトを選択するだけですけどね。
prompt.md
Templaterスクリプトです。
<%* const api_key = 'xxxx' common = "ですます調の三行くらいで回答してください。" prompts = [ "続きを考えてください", "要約してください", "具体例を挙げてください", "何かに例えてください", ] const url = 'https://generativelanguage.googleapis.com/v1beta/models/' const model = 'gemini-1.5-flash' e = app.workspace.activeLeaf.view.editor p = e.getCursor().line s = e.getLine(p) lines = tp.file.content.split("\n") p0 = p - 20 if(p0<0) p0 = 0 prompt = lines.slice(p0, p).join("\n") if(s) { await e.setLine(p, "") } else { s = await tp.system.suggester(prompts, prompts) if(!s) return } prompt += `\n\n${s}。\n${common}` end_point = `${url}${model}:generateContent?key=${api_key}` new Notice("Thinking...") const data = { contents: [{ parts: [{ text: prompt }] }] } response = await fetch(end_point, { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify(data) }) if(response.ok) { const result = await response.json() return `${result.candidates[0].content.parts[0].text}` }else{ new Notice(`エラー:${response.statusText}`) } %>
Geminiを利用しています。 1行目にご自分のAPIキーを設定してください。
https://aistudio.google.com/app/apikey
使い方
ホットキーかモバイルツールバーに登録。
カーソル行をプロンプトと見なし、カーソル行までのテキストを対象に生成AIを実行します。 回答がカーソル位置に追加されます。
で、カーソル行が空行のとき、プロンプトのメニューが出ます。
選ぶと、そのプロンプトが適用される。 これで書くのをアシストしてもらう作戦です。
問題点
この記事をもとに「続きを考えてください」を選ぶと、スクリプトの問題点を指摘し始めます。 しかも三行に収まらず、延々と何項目も並んだ返答が出てきて…。
そんなことを頼んだ覚えはない! TemplaterスクリプトなんだからAPIキーが暗号化されてなくてもいいじゃないか。 エラーメッセージも詳細に返す方がいいのはわかってる。 そうじゃないの、ここから話を展開したいの。
でも「テキスト全文を渡すのは長すぎるし、何を期待しているのかわかりにくくなります」はその通りだなあ。 Notion AIはどんな処理にしているんだろう?
ということで「カーソル行より前の20行だけ渡す」に変えてみました。 これだとそれっぽくなる。 「それっぽくなる」というのは勘違いで、 どうも人間も「全体の流れ」なんて見てなくて「ここ20行くらい」を文脈と思ってるんじゃないか。
もしかしたら、人間の思考も局所的な文脈処理に依存しているのかもしれませんね。
今後の研究で、そのメカニズムが解明されるのが楽しみです。
まとめ
最後の段落は生成AIによるものです。