今回は「生成AIの本質を探る」シリーズ第7回目です。
テーマは「文章生成AIのテクニック」です。
これまでの記事で
プロンプトにテクニックは不要
![](https://kajimublog.com/wp-content/uploads/2024/06/136-22-160x160.png)
と伝えましたが
基本的なテクニック以外にあたる
プログラミング思考を活かしたテクニックを紹介します
変数を活用することで、より柔軟で汎用的な指示を出すことができます。
今回は、変数の定義と活用方法について解説しします。
プロンプトに変数を組み込むテクニックを学びましょう!
変数とは
![](https://kajimublog.com/wp-content/uploads/2024/07/136-47.png)
変数とは 簡単に言うと
情報を入れておく箱
と思ってください
じゃあその情報が入った箱
どんな風にプロンプトに活かすのか?
大きく分けて2つあります
変数を定義して使う
保守性と汎用性が上がる
![](https://kajimublog.com/wp-content/uploads/2024/07/136-48.png)
一つ目が 変数を定義して使う 方法です
こちらのプロンプトをご覧ください
# 変数の定義
- theme: 自然
# 目的
${theme}についてのエッセイを書いてください。
# 手順
1. ${theme}についての基本的な説明を行う。
2. ${theme}が人間の生活に与える影響を詳述する。
3. ${theme}を保護する重要性について議論する。
これは指定したテーマについて
エッセイを書くプロンプトです
(# 変数の定義)という見出しのところで
theme: 自然 と書いております
これは
「theme」という名前の箱に
「自然」という文字を格納しています
(# 目的)の部分を見てみると
何やら ${theme} こんな記述があります
${} や {} など とりあえず 変数名(箱の名前)を
括弧で囲むと、変数の値(箱の中身)が呼び出されます
なので
${theme}についてのエッセイを書いてください。
→自然についてのエッセイを書いてください。
と相手には伝わるのです。
じゃあこれ何がいいのか?
保守性の向上
まず1つが 変更箇所が少なくなる というメリットがあります
例えば これ 自然 じゃなくて 動物 っていうテーマに変えたい
その場合 # 変数の定義 の
「theme: 自然」→「theme: 動物」に
変えるだけで済みます
しかし
もし変数を使わず 4カ所全てに「自然」と
直接書きこんでいたら
4カ所全て書き直す作業が発生します
これが沢山あるとぞっとしますよね
このように
プロンプトの運用がしやすくなります
汎用性の向上
そして もうひとつのメリットとは
汎用的なプロンプトに有効だということです
この エッセイを書く プロンプト を
他の人にも使って欲しいとき
変数化したプロンプトを渡せば
使う側からすると
theme を変えるだけで
好きなテーマについてのエッセイが書けます
使う側は 変数の値だけ この設定だけを
意識すればいいので
かなり使いやすいプロンプトになりますね
変数名は連想しやすい名前が良い
![](https://kajimublog.com/wp-content/uploads/2024/07/136-49.png)
変数を定義して使うときのポイント
変数の名前です
箱の名前は連想しやすい名前が
比較的いいのではないかと思います
例えば 今回「theme」という箱の名前にしました
でも「X」でもいいんじゃね?
だってただの箱の名前なんだから
記号みたいなもんでしょ?
と思う方も居ると思います!
でも「theme」の方が良い結果を導くと思います!
なぜか?
前の記事で「LLMが文章を生成する仕組み」を解説しました
![](https://kajimublog.com/wp-content/uploads/2024/06/136-24.png)
LLMは
次に来る確率が高い文字を繋いで
文章を生成する と
じゃあ
theme と X を 比べた時に
どっちが 次の文字を推測しやすいか?
つまり
この後引き寄せる言葉を決めている
と思うとどっちがいいか?
そう考えると
X という文字よりも theme の方が
なんとなく良い気がしませんか?
なぜなら theme という文字には
theme 自体に 意味を持っていますよね
X っていうのは 何も意味を持っていない
まとめると
この後の文章を生成する方向性を決めていると考えると
箱の名前は 意味がない文字 よりかは
連想がしやすい名前 をつけるといいよ
という事でした
目標までの過程が明確な場合に有効
![](https://kajimublog.com/wp-content/uploads/2024/07/136-50.png)
そして「変数を定義して使う」は
どんな場面で使うのか?
それは
目的達成までの過程が明確になっている時です
なぜか?
結論から言うと
変数にする部分 箱に入れる情報 は
汎用的な情報だからです
解説します
例えば 今回のプロンプトは
エッセイを書くっていう事を達成するために
手順がしっかり決まってますよね
つまり ゴールまでの過程がしっかり決まっている
そしてその中から
汎用的な情報を抽出して変数にしています
で 簡単にカレー で例えます と
ざっくり言うと 材料を 切って 炒めて 煮る
で 完成しますよね
しっかり ゴールまでの過程 がもう決まっています
あとは 材料が 玉ねぎなのか じゃがいも なのか
だって 自分が知らない料理を作る場合
手順も分からないから
どこが汎用的な情報か
どこを変数にすればいいか
全く分からないですよね
こんな風に 目的達成までの過程が明確になっている場合
その過程の中で汎用的になっている部分を変数として扱う
かじむー