こんにちは、AMBLの広報の小野です。
AMBLでは、さまざまな部署のエンジニアが集まって、最新情報やナレッジの共有を行うslackチャンネルを運営しています。
日々のTipsの備忘や技術系トピック、qiitaやzennといった外部メディアのアウトプットの共有、業務や技術的に分からないことの質疑応答なども行っています。
本連載では、チャンネルに投稿された技術系トピックを外部向けに編集して、投稿していきます!
今回は、インテグレーション第1事業部FSEビジネス推進部のメンバーが投稿した記事を共有させていただきます。
目次
- AI時代に必須のスキル? 課題の整理にも最適な「宣言型」の考え方をマスターしよう
- 命令型 vs 宣言型:HowとWhatの違い
- 具体例で見る「命令型」と「宣言型」
- 「宣言型」で書くことの有用性とは?
- まとめ~宣言的であることの難しさと本質的な価値~
AI時代に必須のスキル? 課題の整理にも最適な「宣言型」の考え方をマスターしよう
AIへの指示(プロンプト)に苦戦していませんか?
コピペで使えるテクニックもありそれはそれで価値があるのですが、今回は原理や考え方に近い部分の話を紹介します。
最近、AIを活用したコーディングや文章作成において、「宣言的な指示」が重要だという声を耳にすることが増えました。しかし、「宣言型」とは一体何なのでしょうか。
その対極にある「命令型」との違いを通して、AIと上手に付き合うためのヒントを探ってみましょう。
命令型 vs 宣言型:HowとWhatの違い
プログラミングや指示の出し方には、大きく分けて「命令型」と「宣言型」の2つのスタイルがあります。
命令型 (Imperative)
実行してほしい手順(How)を、一つひとつ具体的に、順を追って記述するスタイルです。コンピュータに「ああして、こうして」と細かく命令することから、この名前がついています。
宣言型 (Declarative)
達成したい目的(What)そのものを記述するスタイルです。
具体的な手順はシステム側に任せ、「これが欲しい」と宣言するイメージです。
具体例で見る「命令型」と「宣言型」
違いをより深く理解するために、具体的な例を見てみましょう。
日常の例え:誰かに目的地へ行ってもらう
誰かに「大崎アートヴィレッジ」へ行ってもらいたい、とします。
命令型の指示 「まずJR山手線に乗ってください。次に大崎駅で降りて、南改札口を出ます。そのまま真っすぐ300メートルほど歩き、最初の大きな交差点を右に曲がってください…」 このように、目的地までの道のり(How)を細かく指示します。
宣言型の指示 「大崎アートヴィレッジに行ってください。交通手段やルートは問いません。」
こちらは目的地(What)を伝えるだけで、そこへ至る方法は相手に任せています。
コードの例:配列の各要素を2倍にする
[1, 2, 3, 4, 5]という数字の配列があり、各要素を2倍にした新しい配列を作りたいとします。
【命令型のコード JavaScript】
//命令型:処理の制御フローを順番に記述し、結果的に2倍の配列を生成
const numbers = [1, 2, 3, 4, 5];
const doubled = [];
for (let i = 0; i < numbers.length; i++) { // ループ処理の初期化、継続条件、インデックスの更新
doubled[i] = numbers[i] * 2;
}
ループ処理の初期化、継続条件、インデックスの更新、値の計算と代入といった手順(How)をすべてプログラマーが記述しています。
【宣言型のコード JavaScript】
//「配列を2倍に変換する」という意図を直接記述し、実装詳細はmapメソッドに委譲
const numbers = [1, 2, 3, 4, 5];
const doubled = numbers.map(x => x * 2);
ここでは「numbers配列のすべての要素に対して、それぞれを2倍にする(x => x * 2)という操作を適用(map)せよ」と、やりたいこと(What)を直接記述しています。具体的な処理はmapの内部に隠蔽されており、私たちはその詳細を意識する必要がありません。
「宣言型」で書くことの有用性とは?
なぜAIへの指示やコーディングは宣言型/宣言的な方が良いという意見があるのでしょうか?
理由は3つあります。
1つは、AIが非常に有能な「実行者」だからです。
AIに「どのようにやるか(How)」を細かく指示するのは、まるで優秀なシェフに「野菜を1cm角に切って、次に塩を小さじ1杯入れて…」とマイクロマネジメントするようなものです。それではシェフの能力を最大限に引き出せません。
むしろ、「何がしたいか(What)」というゴールを明確に伝えることで、AIは自らの膨大な知識と能力を駆使して、最適な手順を自ら考え出し、期待以上の結果を返してくれる可能性が高まります。
2つ目は、コンテキスト(文脈)理解のしやすさです。
AIは目的がはっきりしている方が解釈がぶれないので指示に従わないことが減ります。
3つ目は、「何を」の部分を言語化することによってAIのアウトプットにフィードバックを与えやすくなるからです。
出力がイメージとずれていた場合も、最初に定義した「何を」との違いをAIに伝えることで修正が効きやすくやすくなります。
ちなみに「宣言的」の考え方は、プログラミングだけでなく、メールの文面作成やアイデア出しといった、AIとの対話にも応用できます。
例えば、以下のような例です。
宣言的:「取引先への丁寧な断りメールを作成してください」
命令的:「まず『お世話になっております』と書いて、次に理由を3つ挙げて…」
ただ、明確に書きたい文面がある、つまりHOWがわかっている場合は命令的な方が良いでしょう。
宣言的/命令的は綺麗に線を引けるものではないため、どちらを選ぶかは状況によります。が、自分のプロンプトが宣言的/命令的なのかどうかは自覚的であることは重要です。
まとめ~宣言的であることの難しさと本質的な価値~
宣言型で書くのがおすすめだという話をしましたが、実はやってみると結構難しいです。
「何を」を定義するのは、システム開発で言われる要件定義にあたる部分であり、ある側面においては最も難しい部分です。
初期段階では、要望を出している当人にとってみても、脳内にあいまいなイメージしか存在しないことの方が多いくらいです。
また踏み込んで言えば、目の前にそのアウトプットを出されたとしても、それが自分が本当に欲しかったものかどうかを判断することは難しく、実際に眺めたり触ったりすることで初めて「本当に欲しかったもの」が分かります。
不思議な話ですが、何をしたいかが明確になっているのであれば、それを実現するための手段はある程度見えてくるはずです。
であるならば
「AIに指示をするために試行錯誤し、目的を整理し、それを言語化する」
この過程にこそ、宣言的にプロンプトを書くことを試みる際の本質的な価値はあります。
何が欲しいのかを自分の中に整理することは重要な一歩というかほぼ全てであり、もしそれがAIに解決されなかったとしても、具体的なイメージが頭にあるのであれば解決に大きく近づいているでしょう。
AIを使いこなすために、ぜひ「宣言型」の考え方を意識してみてください。
AMBLでは一緒に働くメンバーを募集しています。
この記事を読んで、AMBLに興味を持った方は下記採用ページをぜひご覧ください。
●AMBL採用ページ
-メンバーインタビュー (1日の仕事の流れ/やりがい/仕事内容)
-プロジェクトストーリー (プロジェクトでの実績/苦労エピソード)