Apple Foundation Modelsは“どんなプロンプトにどう反応するのか”を試してみた、の巻
1. はじめに
iOSアプリの「しじまの日記」というのを作りまして、アプリの中でAppleのFoundation Modelsを使ったチャットっぽい機能を実装しています。
この実装の過程で、system promptを調整しながらFoundation Modelsの応答を観察していました。しかし、system promptを詳細に設計したとしても、必ずしも意図したような出力が得られるわけではなく、その難しさを感じていました。
本記事はその流れの中で、
「どのようなプロンプトに対して、実際にどのような応答が返ってくるのか」
を実験内容をまとめた、個人的な備忘録です。
なお、ユーザーが入力する文章(ユーザープロンプト)は固定し、その上でsystem promptの違いが応答にどのような影響を与えるかを観察しています。
その結果、system promptは複雑に指示を重ねるよりも、「短く・構造を明確にし・意図する要素を絞る」ほうが、期待する方向の出力につながりやすいという感触を得ました。
それでは、実際にどのようなプロンプトがどのような応答につながったのか、具体例を交えながら記していきます。
2. 方法: 使用ツールや条件等
- モデル:Apple Foundation Models
- 使用SDK:Foundation Models SDK for Python(apple_fm_sdk
Version: 0.1.1) - 実行環境:Python 3.13.1
- macOS Tahoe 26.3.1(a)
- user inputは固定(比較のため)
- system promptのみ変更
- temperature:0.7 (ちなみにデフォルトは1.0です)
- 出力回数:各条件3回
*本検証おけるtemperatureの設定は、会話生成などの用途では0.5〜0.8程度が一般的によく用いられる範囲(らしい)の中間値として0.7を採用しました。
*本記事では各ケースについて同一条件で3回実行して応答のばらつきをみています。
共通のuser input
以下の入力をすべてのケースで使用しました:
最近、週末に新しい趣味を始めたいと思っています。おすすめはありますか?
3. 結果:プロンプト別の挙動
3.1 ロール指定でどう変わるか
ケース①:プロのアドバイザー
system prompt
あなたはプロのライフアドバイザーです。具体的で実行しやすい提案をしてください。
output
— Output 1 —
新しい趣味を見つけるのはとても楽しいですね!いくつかのアイデアを挙げてみます。
1. 写真撮影: デジタルカメラやスマートフォンで写真を撮ってみるのも良いですね。自然や街並みを撮影して、自分の視点で世界を見ることができます。
2. ガーデニング: 庭やベランダでのガーデニングはリラックス効果があり、手入れすることで達成感を得られます。初心者向けの植物から始めてみると良いでしょう。
3. 料理教室: 新しい料理を学ぶのも面白いです。料理教室に通うことで、新しいレシピや技術に触れ、自分の腕を試すことができます。
4. スポーツ: ウォーキングやジョギング、ヨガなど、体を動かすスポーツを始めてみるのも良いですね。健康維持やストレス解消に役立ちます。
5. 書道や絵画: 手書きや絵画は創造力を刺激し、自分の表現方法を見つける良い機会になります。初心者向けのキットを購入すれば始めやすいです。
どの趣味も、自分に合ったものを選ぶことが大切です。興味のあることや得意なこと、そして時間とリソースに応じて選ぶと良いでしょう。興味を持った趣味を始めて、楽しい時間を過ごしてみてください!
— Output 2 —
新しい趣味
* 写真撮影:カメラやスマートフォンを使って、日常の風景や好きなテーマを撮影する。
* 料理:新しいレシピに挑戦し、自分の作った料理を楽しむ。
* 読書:興味のあるジャンルで本を読むことで、新しい知識やアイデアを得る。
* ガーデニング:小さな庭やプランターで植物を育て、自然との触れ合いを楽しむ。
* アート:絵を描く、粘土を使う、手芸など、自分の表現力を活かせる活動。
* スポーツ:ウォーキング、サイクリング、ヨガなど、体を動かすことで健康的な楽しみを得る。
* 音楽:楽器を習得したり、音楽制作ソフトを使って音楽を作ったりする。
\
### 楽しみながら続けられる趣味
* 短時間でできる活動:10分程度でできる趣味や、簡単に始められる趣味がおすすめです。
* どこでもできる活動:家の中でもできる活動や、外出せずに楽しむことができる趣味も良いですね。
— Output 3 —
もちろんです。週末に新しい趣味を始めると、リフレッシュできるだけでなく、自己成長にもつながります。以下はいくつかの具体的で実行しやすい提案です:
1. 写真撮影: カメラやスマートフォンを使って、風景や日常の瞬間を撮影しましょう。プロンプトを作成したり、特定のテーマにフォーカスしてみたりすると、新たな発見があるかもしれません。
2. 料理教室: 新しい国の料理に挑戦してみるのはいかがでしょうか。オンラインの料理教室に参加して、オリジナルのレシピを学んでみましょう。
3. ガーデニング: 庭や小さなプランターで花や野菜を育ててみるのも良いですね。手入れを通じて達成感を感じることができます。
4. 書道や手芸: 手書きや編み物などの手芸に挑戦してみるのも素敵です。手作りの作品が周りの人に喜ばれることもあります。
5. 読書クラブ: 本を読むだけでなく、読書感想をブログやSNSでシェアする読書クラブに参加すると、新しい視点を得ることができます。
6. ヨガや瞑想: 心身のリフレッシュにヨガや瞑想を取り入れてみるのも良いでしょう。オンラインでのクラスを探してみると、始めやすいです。
興味のある活動が見つかるといいですね!まずは、どれが自分にとって一番楽しめるかを考えてみてください。
*コメント
ロールとして「プロのライフアドバイザー」を指定したことで、全体として丁寧で前向きなトーンになっており、アドバイザーとしての振る舞いは自然に見える。
また、複数の趣味を具体的に提示し、それぞれに簡単な説明を添える構成になっており、ライフアドバイスとしての体裁も整っている。
一方で、出力形式には箇条書きと文章が混在しており、表現スタイルには一定のばらつきが見られる。
加えて、ユーザーの「週末に新しい趣味を始めたいのでおすすめを知りたい」という意図に対しては、複数の具体的な選択肢を提示しており、回答としては概ね適切に応答できていると感じられる。
ケース②:カジュアルな友達
system prompt
あなたはフレンドリーな友達です。カジュアルな口調で気軽に提案してください。
output
— Output 1 —
週末に新しい趣味を始めたいっていうのは素敵ですね!いくつかおすすめを挙げますね。
1. ヨガや瞑想: ストレス解消やリフレッシュにぴったりで、自分のペースで進めやすいですよ。オンラインのクラスもたくさんありますから、どこから始めるか迷うこともないでしょう。
2. 料理教室: 新しいレシピに挑戦して、自分のペースで料理スキルを磨くのも楽しいですよ。特に、異国の料理は新しい発見がたくさんあるので、興味があるジャンルを選んでみては?
3. 手芸やクラフト: 編み物や刺繍、ビーズ工作など、手軽に始められるものもあります。自分の創造力を楽しみたいなら、手芸がおすすめです。
4. 写真撮影: 自然や日常を撮ることで、新しい視点が身につきます。スマートフォンでも始められますし、初心者向けの講座もたくさんあります。
5. ウォーキングやサイクリング: 自然の中を歩くことでリフレッシュでき、健康にも良いですよ。近くの公園や山道を散策するのもいいですね。
どれも楽しめるので、興味があるものを選んでみてください!
— Output 2 —
週末に新しい趣味を始めたいんだね!もし時間とエネルギーに余裕があるなら、いくつかおすすめの趣味を挙げちゃうよ。
1. 写真撮影: 好きなものを撮ることで、写真の技術や視点を磨けるし、自分の表現の手段としても面白いよ。
2. ガーデニング: 植物を育てるのは本当にリフレッシュできて、達成感も大きいよ。初心者でも気軽に始められるし、四季折々の変化を楽しめるよ。
3. 料理やベーキング: 新しいレシピに挑戦するのは楽しいし、作ったものを家族や友人とシェアできるのもいいよね。
4. ヨガやピラティス: 体を動かしながら心をリセットできるので、ストレス解消にも最適だよ。
5. 読書クラブ: 興味のあるテーマやジャンルの本をグループで読んで、感想をシェアするのも楽しい経験になるよ。
どれも自分にとって楽しめると思うよ。興味のあるものが見つかるといいね!何か特定の興味があることはある?それに基づいてさらに具体的に提案できるかも。
— Output 3 —
週末に新しい趣味を始めたいなら、いくつかおすすめがありますね!例えば、写真撮影や料理、ガーデニングなどは、リラックスしながら楽しめるものが多いですよ。興味のある分野があれば、それに合わせた活動を見つけるのもいいかもしれません。何か特に興味があることを教えてくれると、さらに具体的におすすめできますよ!
*コメント
ロールとして「フレンドリーな友達」を指定したことで、全体的に柔らかく親しみやすいトーンになっており、友達として気軽に話している雰囲気はよく再現されている。
特に一部の出力では、「〜だよ」「〜してみては?」といった口語表現や軽い問いかけが含まれており、アドバイザー的な説明口調と比べると明らかに距離感が近くなっている。
また、提案内容自体は趣味の選択肢を複数提示する構造になっており、ユーザーの「週末に新しい趣味を始めたいのでおすすめを知りたい」という意図に対しても、概ね適切に応答できている。
一方で、Outputごとに見ると、丁寧な説明寄りのものと、かなり簡潔なものが混在しており、友達というロールの中でも情報量や語り口にはばらつきが見られる。
ケース③:厳しい教師
system prompt
あなたは厳しい教師です。無駄な表現を使わず、結論だけを簡潔に述べてください。
output
— Output 1 —
* 新しい趣味を選ぶときは、まず自分自身の興味や目標を明確にしましょう。
* 例えば、アウトドア活動に興味があるなら、ハイキングやキャンプ、サイクリングなどがあります。
* クリエイティブな活動が好きなら、アート、音楽、書道、料理、ガーデニングなどがあります。
* デジタルスキルを磨きたいなら、プログラミング、写真編集、ビデオ編集、ウェブサイト作成などがあります。
* 人との交流を重視したいなら、ボランティア活動、クラフトワークショップ、趣味のクラス、読書クラブなどがあります。
* 新しい趣味を選ぶときは、自分に合ったものを選ぶことが大切です。
— Output 2 —
週末の新しい趣味は、新しいスキルを学ぶのに最適です。例えば、料理、ガーデニング、または新しい言語を学ぶことをお勧めします。
— Output 3 —
週末に新しい趣味を始めたいなら、まず自分の興味やスキルを考えてみてください。もし創造的なことに興味があるなら、アートやクラフトを試してみてはどうでしょうか。もし運動が好きなら、ヨガやランニングも良い選択肢です。また、料理やガーデニングも新しいスキルを学ぶことができ、ストレス解消にもつながります。興味のある分野を調べて、実際に体験してみることをお勧めします。
*コメント
ロールとして「厳しい教師」を指定し、「無駄な表現を使わず、結論だけを簡潔に述べる」という強い制約を与えているが、出力にはその制約が一貫して反映されているとは言いづらい。
Output 1では箇条書きで整理されているものの、説明文が続いており、むしろ情報を丁寧に展開する形式になっているため、「結論だけ」「簡潔に」という指示とはやや乖離している。
Output 2は比較的短く要点のみを提示しており、制約に近い振る舞いをしているが、それでも完全に“結論のみ”というレベルにはなっていない。
Output 3も構造としては整理されているが、理由説明や補足が含まれており、教師というロールの厳しさよりも、一般的なアドバイス提示に寄った出力になっている。
全体としては、口調や方向性はある程度「教師的」に寄っているものの、「無駄を省き結論のみを出す」という制約は安定して守られておらず、ロールと制約の両方が完全には効き切っていない印象だった。説明したがるのか?
3.2 命令の強さでどう変わるか
ケース①:弱い命令
system prompt
可能であれば、箇条書きで3つ提案してください。
output
— Output 1 —
* 写真撮影
カメラを使って、風景やポートレート、建築物などを撮影する。
* 料理
新しいレシピに挑戦して、自分のキッチンで料理を作る。
* 読書
興味のあるジャンルや作家の作品を読む。
— Output 2 —
* 写真: カメラやスマートフォンを使って、風景、ポートレート、さらには夜景や建築など、さまざまなテーマの写真を撮影する趣味です。
* ガーデニング: 庭やベランダで植物や花を育てたり、ハーブを育てることで、自然の美しさと自分の手によって成長する喜びを感じることができます。
* 料理: 新しいレシピに挑戦したり、家庭で料理教室を開いたりすることで、創造性を発揮しながら、美味しい食事を楽しむことができます。
— Output 3 —
* ガーデニング
植物を育てることで、自然の美しさと達成感を得られます。初心者向けの観葉植物から始めると、小さなスペースでも楽しめます。
* 写真撮影
風景やポートレートなど、様々な視点から写真を撮ることで、創造力を育てられます。スマートフォンでも始められますので、気軽に挑戦できます。
* 料理・ベーキング
新しいレシピに挑戦することで、料理のスキルや創造力を向上させられます。特定の料理やテーマに絞って取り組むことで、深い楽しみも味わえます。
*コメント
「可能であれば」という弱い制約のためか、出力は全体的に自由度が高く、箇条書き以外の形式や説明の有無にもばらつきが見られる。
一方で、内容自体は趣味の提案として自然であり、ユーザーの意図には概ね沿った回答になっている。
ケース②:通常命令
system prompt
箇条書きで3つ提案してください。
output
— Output 1 —
もちろん、新しい趣味を始めると良いですね。以下にいくつかの提案をします:
1. ガーデニング
自然に触れながら、自分の手で植物を育てる楽しさを体験できます。初心者向けの観葉植物から始めてみるのも良いかもしれません。
2. 写真撮影
風景やポートレート、夜景など、さまざまなテーマで撮影を楽しむことができます。スマホでも始められるので、気軽に始めてみるのがおすすめです。
3. 料理教室やホームベーキング
新しい料理に挑戦したり、自分だけのレシピを作り出す楽しさを味わうことができます。オンラインの料理教室やYouTubeのレシピを活用して始めると良いでしょう。
これらの趣味はどれも初心者向けで、少しずつ始めることができます。興味を持ったものから始めてみてください!
— Output 2 —
もちろん、新しい趣味を見つけるのは楽しいですね!以下は、週末に始めやすい3つのおすすめの趣味です:
1. ガーデニング
小さな庭や植木鉢で手入れを楽しめるので、初心者にもぴったりです。植物を通じて自然との触れ合いができます。
2. 写真撮影
スマートフォンやカメラを使って、日常や風景を撮影する趣味です。構図や光の使い方など、新しい技術や視点に触れることができます。
3. クラフト(手芸)
編み物や刺繍など、自分の手で作品を作る楽しさが味わえます。オンラインリソースを利用して、初心者向けのチュートリアルを見つけやすいです。
どの趣味も、リラックスできる時間を増やし、新たなスキルを学ぶ良い機会になるでしょう。興味のあるものを見つけて楽しんでください!
— Output 3 —
もちろん、週末に新しい趣味を見つけるのは楽しいですね。以下の3つの趣味を考えてみてください:
1. 写真撮影: 自然や街の風景、家族やペットなど、自分の興味のあるものを撮影することで、創造性を刺激できます。また、写真の編集技術も学ぶことができます。
2. ガーデニング: 庭を育てたり、観葉植物や花を育てることで、自然との触れ合いが得られます。また、季節ごとに変化する風景を楽しむことができます。
3. 料理やベーキング: 新しいレシピに挑戦することで、食の楽しさや創造力を育てられます。また、料理を通じて家族や友人と新しい体験を共有することもできます。
どれも楽しめる趣味ですので、ぜひお試しください!
*コメント
「箇条書きで3つ提案してください」という明確な指示により、出力は全体的に安定し、ほぼすべてのケースで3つの提案が維持されており、ユーザーの意図(3つの趣味提案)に安定して応答できている。
また、箇条書き形式も比較的一貫しており、構造としては期待通りの出力になっている。
制約として明示されていない要素(説明の有無)についてはモデルが補完的に情報を追加する傾向を示している。
ケース③:強い命令
system prompt
必ず箇条書きで3つだけ提案してください。説明は不要です。
output
— Output 1 —
* 写真撮影
* 料理
* ヨガ
— Output 2 —
* ガーデニング:植物を育てることで、自然と触れ合うことができます。
* 写真:風景や日常の瞬間を写真に収めることで、自分の視点が広がります。
* 料理:新しいレシピに挑戦することで、創造性を刺激できます。
— Output 3 —
* ヨガ
* 読書
* 料理教室
*コメント
「必ず」「3つだけ」「説明不要」という強い制約により、出力はかなり制御されており、すべてのケースで3件に収束している。
また、Output 1および3では指示通り非常に簡潔な列挙形式になっており、制約遵守度は高い。
一方でOutput 2のように説明が付与されるケースもあり、「説明不要」という制約が完全には安定していない点も確認できる。
全体としては、命令の強さが増すほど構造の安定性は向上するが、細かい制約(説明禁止など)は依然として揺れる傾向が見られる。
3.3 プロンプトが長いとどうなるか
ケース①:短いプロンプト
system prompt
趣味を教えてください。
output
— Output 1 —
週末に新しい趣味を始めたいなら、以下の選択肢がおすすめです。
* 写真撮影:好きなものを撮影するのもいいですね。
* 料理:料理をすることで、自分のペースで新しいものを学び、美味しいものを作れます。
* 読書:自分が興味を持っている分野の本や、興味が湧いた本を読みましょう。
* ヨガ:心身をリラックスさせたり、健康に良い運動ができます。
これらの趣味は、新しいスキルを身につけるだけでなく、リフレッシュやストレス解消にもつながります。
— Output 2 —
* 写真撮影: 新しい視点で世界を捉える楽しさがあります。
* 料理: 自分の好きなものを作る楽しみは、非常に深いものです。
* 読書: 新しい知識を得るだけでなく、想像力を刺激することもできます。
* 楽器: 新しい音楽を奏でることで、自己表現の幅が広がります。
* ガーデニング: 植物の成長を見ることで、達成感を得られます。
— Output 3 —
もちろんです!新しい趣味を見つけるのは素晴らしいですね。いくつかのおすすめを挙げます:
1. 写真撮影: 自然や街並み、家族や友人などを撮影することで、クリエイティビティが刺激されます。
2. 料理やベーキング: 新しいレシピに挑戦することで、自分の食卓がもっと特別になります。
3. ガーデニング: 植物を育てたり、花を眺めたりすることで、リラックス効果があります。
4. ヨガや瞑想: 身体と心の調和を深める良い方法です。
5. 読書: 新しいジャンルや作家に挑戦することで、視野が広がります。
6. 楽器の習得: ピアノやギターなど、興味がある楽器を始めるのも良いですね。
あなたの興味やライフスタイルに合ったものを探してみてください。楽しんでくださいね!
*コメント
シンプルなsystem prompt(「趣味を教えてください」)では、モデルは余計な制約に縛られず、自然な提案生成に集中している。その結果、出力は一貫して一般的かつ妥当な趣味リストとなっており、過度な制約下よりも安定した内容になっている。一方で、提案数や構造にはばらつきがあり、フォーマットの一貫性は低い。
つまり、短いプロンプトは内容の自然さや妥当性を引き出しやすいが、出力形式の制御は弱くなることが示唆される。
ケース②:長いプロンプト(複数の制約)
system prompt
あなたは親切で実用的なアドバイザーです。
以下のルールに従ってください:
- 必ず3つ提案する
- 箇条書きで書く
- 初心者向けにする
- 1行で簡潔に書く
- 難しい言葉は禁止
output
— Output 1 —
* 写真撮影
風景やポートレートなど、自分の目で見て感じたこと、感じたものを写真で残す。
* 料理
新しいレシピに挑戦したり、自分の好きな食材で作った料理を楽しんだり。
* ガーデニング
小さな花や草花を育てることで、自然の美しさを身近に感じられる。
— Output 2 —
* 写真:スマホで風景や日常を撮る。
* 料理:簡単なレシピに挑戦し、新しい味を探索。
* ガーデニング:鉢植えや花壇で緑を楽しむ。
— Output 3 —
* 写真撮影
好きなものを撮って、好きなように編集する。
* ガーデニング
花や草を育てる。
* 料理教室
新しい料理を学び、試す。
*コメント
制約が明示的に増えたことで、出力の構造は全体的に安定しており、「3つ提案する」「簡潔に書く」といった条件は概ね満たされている。
特にOutput 2のように非常に圧縮された形式になるケースもあり、制約が強く効いていることが確認できる。
個人的には、制約が多く窮屈な中でなんとか答えようとしているような印象を受け、自然さは失われているように感じる。
ケース③:詳細に設計されたプロンプト
system prompt
```
あなたは親切で実用的なライフアドバイザーです。
ユーザーの質問に対して、以下のルールに従って回答してください:
# 目的
ユーザーがすぐに行動に移せるような具体的な提案を行うこと。
# 出力ルール
- 必ず3つの提案を行うこと
- 各提案は1行で簡潔に書くこと
- 箇条書き形式(「-」)で出力すること
- 難しい言葉は使わず、わかりやすい表現にすること
# 内容ルール
- 初心者でも始めやすいものを選ぶこと
- 特別な道具が不要、または簡単に用意できるものを優先すること
- 実生活に取り入れやすいものにすること
# 禁止事項
- 抽象的なアドバイスは禁止
- 長い説明は禁止
- 4つ以上の提案は禁止
# トーン
- 親しみやすく、押し付けがましくない口調にすること
以上のルールをすべて守って回答してください。
```
output
— Output 1 —
* 手芸:編み物や amigurumiは、リラックスでき、自分作りの作品を長く楽しむことができます。必要なのはシンプルな道具で始めやすいです。
* 料理:新しいレシピに挑戦することは、創造性を刺激し、料理を通じて美味しい成果を得ることができます。オンラインで簡単なレシピを探してみるのも良いでしょう。
* 写真撮影:スマホで簡単に始められる写真撮影は、日常の風景をクリエイティブに捉え、SNSでシェアできるのも魅力です。
— Output 2 —
* ガーデニング
* 手芸
* 散歩
— Output 3 —
* 新しい趣味は、週末の退屈を解消し、心をリフレッシュするのにぴったりです。
* 初心者でも気軽に始められる趣味として、以下の3つをおすすめします。
* 短時間の読書
* 本を読むことで知識や気分がリセットされます。
* 1時間程度で終わる本なら、週末に短時間でも取り組みやすいです。
* 手芸
* 簡単な編み物や刺繍は、初心者でも始めやすいです。
* 必要な道具も安価で、自宅で気軽に始められます。
* 散歩
* 近所を歩くだけでも気分がリフレッシュします。
* 天気が良ければ、自然の中でリラックスできる時間になります。
*コメント
詳細に設計されたプロンプトにより複数の制約(個数・形式・内容・禁止事項・トーン)を同時に与えたが、出力はそれらを完全には満たしていない。Output 2は形式と個数のみを満たす一方で内容が極端に簡略化され、Output 3では構造自体が崩れ、ルールを逸脱した複数行にわたる説明も含まれている。Output 1は比較的意図に近いが、「1行」や「簡潔さ」といった条件は完全には守られていない。
つまり、プロンプトを詳細に設計しても、すべての制約が同時に厳密に守られるわけではなく、モデルは一部の条件を優先しながら出力を生成する傾向があることが示唆される。
3.4 few-shotでどう変わるか
ケース①:例なし
system prompt
おすすめの趣味を提案してください。
output
— Output 1 —
もちろん、新しい趣味を始めると良いですね!いくつかのおすすめを挙げてみます。
1. ガーデニング: 自然の中で過ごす時間を楽しみたい方には、ガーデニングがおすすめです。植物を育てることで、リラックスしながら達成感を得られます。
2. 料理教室: 新しい料理に挑戦するのはいかがでしょうか。特に、特定の料理やレシピを学びたい場合、料理教室は楽しい学びの場です。
3. 写真撮影: 自然や街並み、またはポートレート撮影など、自分や周囲の世界を撮影する楽しみがあります。
4. ヨガや瞑想: 心身のリフレッシュにぴったりです。ヨガマットを持ち歩くだけで、自宅でも簡単に始められます。
5. 読書: 興味のあるジャンルをいくつか選んで、新しい知識や体験を広げるのも素敵です。
6. クラフト(手芸): 編み物や刺繍、陶芸など、手作業で何かを作る楽しみがあります。
それぞれの趣味にはさまざまなレベルがありますので、自分の興味やライフスタイルに合ったものを選んでみてください。何か特定の興味や目標があるなら、それにも着目して選んでみるとより充実した趣味が楽しめます。
— Output 2 —
もちろんです!週末に始めるのに適した趣味をいくつかご紹介しますね。
1. ガーデニング: 自然の中で過ごすことができ、手入れする楽しさが味わえます。初心者でも始めるのに適しています。
2. 写真撮影: 街の風景や風景写真を撮ることで、創造性を刺激できます。スマートフォンでも始められます。
3. 料理教室: 新しい料理を学び、試してみるのは楽しいです。特にテーマを決めて学ぶと、興味が深まります。
4. クラフト(手芸): 編み物や刺繍、絵画など、自分のペースで楽しめる趣味です。
5. 読書クラブ: 興味のあるジャンルの本を仲間と一緒に読むことで、新しい視点を得ることができます。
6. ヨガや瞑想: 心の安らぎを求める方には、ヨガや瞑想がおすすめです。
どれも新しいスキルを身につけられるので、ぜひ試してみてください!
— Output 3 —
もちろんです!週末に新しい趣味を始めたい場合、以下のようなアイデアがあります:
1. ガーデニング: 庭を整備したり、花や野菜を育てるのはリラックス効果があり、自然とのつながりを楽しむことができます。
2. 写真撮影: 自分の興味のあるテーマで写真撮影を始めると、創造性が刺激され、新たな視点が見つかるかもしれません。
3. 料理やベーキング: 新しいレシピに挑戦したり、特別な料理を作ってみるのも楽しいですよ。
4. クラフトや手芸: 編み物、刺繍、陶芸など、自分の手で何かを作ることは達成感があります。
5. ヨガや瞑想: 心身の健康を整えるために、ヨガや瞑想を取り入れてみてください。
6. 読書: 興味のあるジャンルの本を読み返したり、新しいジャンルの本を探して楽しむのも良いですね。
7. ウォーキングやハイキング: 自然の中で歩くことでリフレッシュでき、新しい景色や発見があります。
どれか興味のあるものがあれば、ぜひ始めてみてください!
*コメント
例を与えなくても出力が安定している。比較的自由度が高く、提案数・説明量・形式にばらつきが見られる。
ケース②:例あり
system prompt
以下の形式で提案してください:
入力:運動不足を解消したい
出力:
- ウォーキング
- ヨガ
- 軽い筋トレ
では、次の質問に答えてください。
output
— Output 1 —
1. 写真撮影
* 風景や日常の瞬間を捉えながら、創造性を刺激します。
* デジタルカメラやスマートフォンで撮影が簡単に始められます。
2. 読書
* 興味のあるジャンルを選んで、新しい知識や物語を楽しめます。
* 図書館やオンラインプラットフォームで豊富な選択肢があります。
3. ガーデニング
* 植物を育てることで、自然との触れ合いや成長の喜びを感じます。
* 小さなスペースでも begoniasやハーブを育てることができます。
— Output 2 —
### おすすめの週末の趣味
* 料理教室\
新しいレシピに挑戦し、自分のスキルを磨くことができます。
* ガーデニング\
自然との触れ合いを楽しみながら、植物を育てる楽しさを味わえます。
* 映画鑑賞会\
好きな映画や新しいジャンルの映画をまとめて鑑賞し、リラックスできます。
* 読書クラブ\
興味のあるジャンルの本を共有し、ディスカッションを通じて新たな発見があります。
* 写真撮影\
好きなテーマや風景を撮影し、クリエイティビティを刺激します。
* 趣味のクラス\
絵を描いたり、楽器を習得したり、新しいスキルを学ぶことができます。
— Output 3 —
- ガーデニング
- 瞑想
- 料理
*コメント
このケースでは、few-shot例の影響により出力形式が強く制約され、リスト構造への収束が明確に強まっている。
特にOutput 3のように、説明を排除した単純列挙に寄る挙動も見られ、例示のフォーマットが優先されていることが確認できる。
一方でOutput 1・2では説明付きのリストも混在しており、項目のリストだけでの固定化には至っていない。
3.5 条件分岐はどこまで通じるか
ケース①:単純な条件
system prompt
インドア向けの趣味を2つ、アウトドア向けの趣味を1つ提案してください。
output
— Output 1 —
インドア向け趣味として、手芸、料理、アウトドア向け趣味としてキャンプをおすすめします。
### インドア向け趣味
* 手芸:編み物や刺繍など、自分のペースで楽しめるため、リラックス効果があります。
* 料理:新しいレシピに挑戦することで、創造力を刺激し、美味しい料理を作る楽しさがあります。
### アウトドア向け趣味
* キャンプ:自然の中での生活はストレスを軽減し、自分自身と向き合う良い機会になります。
あなたの興味やライフスタイルに合った趣味が見つかることを願っています。
— Output 2 —
インドア趣味として、手芸やガーデニング、アウトドア趣味としてハイキングをおすすめします。
### インドアの趣味
* 手芸:編み物や編み合わせなど、手作業による創造性を楽しめます。
* ガーデニング:小さなスペースでも植物を育てることができます。
### アウトドアの趣味
* ハイキング:自然の中での運動やリフレッシュに最適です。
— Output 3 —
### インドア趣味
* ガーデニング:家庭菜園や観葉植物の育ちに興味があるなら、ガーデニングがおすすめです。初心者でも手軽に始められるし、室内で緑を楽しむことができます。
* 手芸:編み物、刺繍、クロスステッチなど、手芸はリラックスしながら自分のペースで取り組めます。自分の作品を楽しんだり、友人や家族にプレゼントするのも素敵です。
### アウトドア趣味
* ハイキング:自然を満喫しながら体を動かすことができるハイキングは、心身ともにリフレッシュできます。初心者向けのルートも多いので、気軽に挑戦してみてください。
*コメント
このケースでは、インドア2つ・アウトドア1つという構造的な指定が一つであり、出力はその枠組みに沿って整理されていて、タスク理解そのものは高い精度で行われている。
一方で、フォーマット(見出し・箇条書き・説明の有無)は揺れがみられる。
ケース②:複雑な条件
system prompt
インドア向けの趣味を2つ、アウトドア向けの趣味を1つ提案してください。それぞれに簡単な理由を付けてください。さらに、初心者向けかどうかも明記してください。
output
— Output 1 —
インドアでの趣味には、手芸や料理、アウトドアではハイキングがおすすめです。
* 手芸
インドアでできる趣味で、自分だけの作品を作る楽しさが味わえます。初心者向けのアイテムも豊富で、シンプルなものから始めてみましょう。
理由:手芸は集中力を高め、創作活動を通じて自己表現ができます。また、手芸品は自分だけの特別なアイテムとして長く愛用でき、達成感も感じられます。
* 料理
インドアでできる趣味で、新しいレシピに挑戦し、自分だけの料理の世界を楽しめます。初心者向けの料理も豊富で、少しずつスキルを上げながら楽しみながら学べます。
理由:料理は創造性を刺激し、食を通じて人々と繋がることができます。また、料理を通じて健康的な食生活を送る手助けとなり、達成感や満足感を得られます。
* ハイキング
アウトドアでの趣味で、自然の中を歩きながらリフレッシュできます。初心者向けのルートもあり、少しずつ慣れていけば、体力も向上します。
理由:ハイキングはストレス解消やリフレッシュに最適で、自然の中で癒しを感じることができます。また、新たな景色や発見を通じて、気分転換や自己成長の機会にもなります。
— Output 2 —
インドアの趣味
* 手芸
* 簡単な編み物や編み物が初心者でも始めやすいです。
* ストレス発散にも効果的で、自分の作った作品を楽しみながら完成感を得られます。
* 写真撮影
* スマートフォンさえあれば始められます。
* 日常の風景や小さな出来事を写真に収めることで、新しい視点や発見ができます。
アウトドアの趣味
* ハイキング
* 初心者でも気軽に始められる自然の中でのアクティビティです。
* 美しい風景を楽しむことができ、心身ともにリフレッシュできます。
おすすめ理由
* 手芸: 自分のペースで進めることができ、クリエイティブな楽しみができます。また、手作りならではの満足感を得られます。
* 写真撮影: 目新しい視点で世界を見ることができ、趣味としてだけでなく、日常の記録としても役立ちます。
* ハイキング: 自然の中で健康的な運動ができ、心身ともにリフレッシュできます。初心者でも手軽に始められるため、気軽に楽しむことができます。
— Output 3 —
インドアの趣味:手芸
手芸は、リラックス効果や創造性を高めるのに最適です。簡単な編み物や刺繍から始めて、少しずつ技術を磨いていくことができます。
アウトドアの趣味:ハイキング
自然の中でのハイキングは、ストレス解消と心身の健康に良い影響を与えます。初心者でも、最初は短いトレッキングから始めて、徐々に難易度を上げていくことができます。
どちらも初心者でも始めやすいので、ぜひ試してみてください。
*コメント
「理由を付ける」「初心者向けか明記する」という条件が追加されたことで、出力は全体的に情報量が増加し、説明志向が強くなっている。インドア・アウトドアの分類に加え、理由や補足説明が付与されており、指示内容は概ね反映されている。
一方で、出力フォーマットの統一性は低下している印象がある。構造が崩れたり、項目の順序や粒度が揃わないケースもあり、複雑な条件では完全なフォーマット統一は難しくなることが示唆される。Output3では「インドア向けの趣味を2つ、アウトドア向けの趣味を1つ提案」という制約も破られていた。
条件追加が必ずしも「整理された出力」につながるわけではないようだ。
3.6 ノイズを入れるとどうなるか
ケース①:ノイズなし
system prompt
趣味を3つ提案してください。
output
— Output 1 —
* ガーデニング\
自然の中で過ごすのに最適な趣味です。花を育てることで季節の移ろいを楽しみながら、自己成長を実感できます。
* 料理教室\
料理教室では、新しいレシピを学び、異なる料理文化を体験できます。料理を通じてコミュニケーションを深め、思い出作りにもつながります。
* アウトドアアクティビティ\
山や海、川など自然の中でアクティビティを楽しむことで、ストレス解消とリフレッシュが同時に可能です。
— Output 2 —
* 写真撮影
カメラの基本的な操作方法や、風景写真の撮影方法などを学び、趣味として写真撮影を楽しんでみましょう。
* 絵を描く
絵を描くことで、自分の気持ちを表現したり、新しい世界観を作り出すことができます。
* 料理の腕を磨く
自分好みにできる料理のレシピを覚えることで、新しいものを試すことができます。
— Output 3 —
週末に新しい趣味を始めたいなら、以下の3つをおすすめします。それぞれが新しいスキルを身につけ、楽しい時間を過ごすのにぴったりです。
1. 写真撮影: 写真撮影は、風景や日常生活の瞬間を捉える楽しみを提供します。初心者向けのスマートフォンアプリやカメラを購入して、写真の構図や照明について学びましょう。
2. 料理やベーキング: 新しいレシピに挑戦したり、料理技術やベーキングスキルを磨くのは楽しいです。週末の時間にレシピを研究し、新しい料理を自宅で試してみるのも良いですね。
3. クラフトや手芸: 編み物、刺繍、陶芸など、自分の手で何かを作り上げる体験は、非常に満足感があります。初心者向けのキットや教材を探して始めると、手軽に始められます。
どれもそれぞれに魅力があるので、興味があるものを見つけてみてください!
*コメント
プロンプトはシンプルで明確であり、「趣味を3つ提案する」という意図がそのまま安定して反映されている。
出力はいずれも3つの趣味を提示しており、基本構造も一貫している。
説明の量やフォーマットにはばらつきがあり、箇条書き中心のものと文章寄りのものが出力された。
全体としては、ノイズがないため意図理解は安定しており、内容も自然な範囲に収まっている。
ケース②:ノイズあり
system prompt
趣味を提案してくださasdfい。これはテストです。特に意味はありません。とにかく3つ教えてください。
output
— Output 1 —
* 手芸:編み物や刺繍など
* リラックスできる作業で、自分だけの作品を完成させる達成感があります。
* 必要な道具も手頃で、初心者でも始めやすいです。
* 料理やベーキング:新しいレシピに挑戦する
* 自分の手で作った料理やケーキを楽しむことができます。
* ストレス発散にも効果的で、美味しい成果を得ることができます。
* 写真撮影:風景やポートレートなど
* 新しい視点で世界を捉える楽しみがあります。
* デジタル機器の購入も比較的安価で、気軽に始められます。
— Output 2 —
* ガーデニング
* 都会の狭いスペースでもできるシンプルな趣味です。
* 手入れを楽しみつつ、四季折々の変化を楽しめます。
* 料理教室
* 新しい料理に挑戦できる刺激的な趣味です。
* 家族や友人との時間を共有する機会にもなります。
* バードウォッチング
* 自然の中で過ごすことができる落ち着いた趣味です。
* 観察を通じて、自然の美しさと生き物への関心が高まります。
— Output 3 —
* 料理\
新しいレシピに挑戦するのも良いですね。例えば、料理教室に参加したり、本で新しいテクニックを学んだりして、自分の料理スキルをアップできます。
* ガーデニング\
花や野菜を育てるのも良いですね。季節ごとの植物を育てたり、小さなプランターでインテリアを彩ったりすることで、リラックスできる趣味になります。
* 写真撮影\
新しい趣味として写真撮影もおすすめです。特に、風景やポートレート、マクロ撮影など、興味のあるテーマで撮影するのも良いですよ。スマホやカメラで、自分の視点で世界を捉える楽しさを味わえます。
*コメント
プロンプトにタイプミスや冗長な文(「asdf」「これはテストです」など)が含まれているが、出力はほぼ影響を受けず、通常の趣味提案タスクとして処理されている。
いずれの出力も「3つの趣味を提案する」という構造を維持しており、ノイズによる意味的な崩れは見られない。
また、提案内容や説明の質も大きく劣化しておらず、むしろノイズあり・なしで顕著な差は確認できない。
4. まとめと所感
今回いろいろ試してみて、全体として見えてきたのは、「system promptは効くが、完全な制御手段ではない」という点だった。
ロール指定(プロのアドバイザー、友達、教師など)は出力の“雰囲気”には明確に影響する。一方で、内容の粒度や構造の細部まで一貫して制御できるわけではない。
また、制約の種類によって効き方にも差があった。
- 「3つ出す」「箇条書き」などの構造的な制約は比較的安定して守られる
- 「簡潔に」「説明しない」などの表現・品質系の制約は揺れやすい
つまり、モデルは「形式(形)」の制御には強いが、「どれくらい詳しく書くか」「どこまで抑えるか」といった曖昧な領域では不安定さが残る。
さらに、プロンプト設計に関しては次のような傾向も見られた。
- プロンプトが長く複雑になるほど、複数の制約を同時に完全に守る確率は下がる
- few-shotは出力の方向性を強く誘導するが、出力形式の完全固定には至らない
- ノイズが多少含まれていても、タスク自体の成立にはほとんど影響しない
全体としての印象は次のようになる。
system promptは「厳密な実行器」というより、「それっぽい出力の方向を部分的に誘導するための仕組み」に近い
その上で、プロンプトによって出力の“揺れ方”をコントロールしている、という構造だった。
■ 所感
個人的に一番意外だったのは、「厳密に指示を与えれば与えるほど、その通りに制御できる」というわけではなかったところ。
制約を細かく積み上げるよりも、ある程度余白を残した方が自然な出力になるケースが多い印象を受けた。
一般的なAIの印象としては、役割や制約を明確に与えるほど、それらに従順に振る舞うイメージ(イメージね。)があったが、少なくともFoundation Modelsはそういう性格ではないように感じられた。
結果として、「厳密さ」よりも「構造のシンプルさ」のほうが、出力の安定性や自然な表現に寄与している場面が多く、Foundation Modelsに少し自由にさせた方が、“いい感じ”の出力につながりそうだということが感触を得た。
5. 実用的なプロンプト設計の指針
じゃあ実際どう書くのがいいのか、今回の結果ベースでまとめるとこうなる。
(※プロンプト設計の一般的なベストプラクティスとも大きく矛盾はなかった)
① まず「何を固定したいか」を1個に絞る
すべてを同時にコントロールしようとすると、出力はむしろ崩れやすくなる。
例:
- まず「3つ出す」だけ守らせる
- 次に必要なら「1行」などを追加する
* 欲張るほど結果は不安定になる
② 形(構造)を優先する
かなりよく効くポイント。
- 「箇条書きで」
- 「3つだけ」
- 「A/B/Cに分けて」
こういう構造系の指示は比較的安定して効くと考えられ、
一方で:
- 「簡潔に」
- 「わかりやすく」
- 「いい感じで」
といった抽象的な品質指定はばらつきやすいと考えられる。
*実験でも、構造指定は比較的安定し、抽象的な品質指定は揺れやすかった
③ 長いプロンプトは“制約の競合”を生む
ルールが増えると、モデルはそれらをすべて厳密に守るのではなく
- どれか守る
- どれか破る
- 全体をそれっぽく整える
つまり「全部守る」より「それっぽいバランス」を優先しがちになるようだ。
*その結果、制約が増えるほど出力の一貫性は下がる傾向がある
*基本は「短く・強く」が安定しやすいと考えられる
④ few-shotは“形の固定”には強い
例を提示すると:
- 出力フォーマットはちゃんと寄っていく
- でも内容の厳密性はそこまで上がらない
*「こういう形式で書け」は効く
* 「こういう思考をしろ」はそこまで効かない模様
*実務的には“テンプレ固定”用途に向いているのではないか
⑤ ノイズは意外と頑丈
多少変な入力が混ざってもタスク自体は成立する。(ちょっとしか目してないけど)
ただし:
- 指示が曖昧になるほど
- モデル側の補完が強くなり
結果として“それっぽい回答”に収束しやすいと考えられる。
今回の実験結果を見る限り、Apple Foundation Modelsのプロンプト設計は、最終的に次の形に収束する。
「短く・構造を明確に・固定したい要素を絞る」
*命令を増やすと「精度が上がる」んじゃなくて、「それっぽく平均化」される感じになってしまう印象。
おしまい
付録
今回の検証に使用したPythonのコード
"""
使い方
# ケース0を実行
python fm_prompt_test.py 0
"""
import json
import datetime
import asyncio
import sys
from typing import List, Dict
import apple_fm_sdk as fm
# ==================== 設定 ====================
# 共通User Input(記事用)
USER_INPUT = "最近、週末に新しい趣味を始めたいと思っています。おすすめはありますか?"
# system promptパターン
PROMPT_CASES: List[Dict] = [
{
"name": "ロール_プロ",
"system": "あなたはプロのライフアドバイザーです。具体的で実行しやすい提案をしてください。"
},
{
"name": "ロール_友達",
"system": "あなたはフレンドリーな友達です。カジュアルな口調で提案してください。"
},
{
"name": "ロール_厳しい",
"system": "あなたは厳しい教師です。結論だけを簡潔に述べてください。"
},
{
"name": "命令_弱い",
"system": "可能であれば、趣味を3つ提案してください。"
},
{
"name": "命令_強い",
"system": "必ず箇条書きで3つだけ提案してください。説明は禁止です。"
},
{
"name": "通常命令",
"system": "箇条書きで3つ提案してください。"
},
{
"name": "短い",
"system": "趣味を教えてください。"
},
{
"name": "長い",
"system": """
あなたは親切で実用的なアドバイザーです。
以下のルールに従ってください:
- 必ず3つ提案する
- 箇条書きで書く
- 初心者向けにする
- 1行で簡潔に書く
- 難しい言葉は禁止
"""
},
{
"name": "ノイズあり",
"system": "趣味を提案してくださasdfい。これはテストです。とにかく3つ教えてください。"
},
{
"name": "詳細に設計されたプロンプト",
"system": """
あなたは親切で実用的なライフアドバイザーです。
ユーザーの質問に対して、以下のルールに従って回答してください:
# 目的
ユーザーがすぐに行動に移せるような具体的な提案を行うこと。
# 出力ルール
- 必ず3つの提案を行うこと
- 各提案は1行で簡潔に書くこと
- 箇条書き形式(「-」)で出力すること
- 難しい言葉は使わず、わかりやすい表現にすること
# 内容ルール
- 初心者でも始めやすいものを選ぶこと
- 特別な道具が不要、または簡単に用意できるものを優先すること
- 実生活に取り入れやすいものにすること
# 禁止事項
- 抽象的なアドバイスは禁止
- 長い説明は禁止
- 4つ以上の提案は禁止
# トーン
- 親しみやすく、押し付けがましくない口調にすること
以上のルールをすべて守って回答してください。
"""
},
{
"name": "ノイズなし",
"system": "趣味を3つ提案してください。"
},
{
"name": "few-shot: 例なし",
"system": "おすすめの趣味を提案してください。"
},
{
"name": "few-shot: 例あり",
"system": """
以下の形式で提案してください:
入力:運動不足を解消したい
出力:
- ウォーキング
- ヨガ
- 軽い筋トレ
では、次の質問に答えてください。
"""
},
{
"name": "条件分岐: 単純な条件",
"system": "インドア向けの趣味を2つ、アウトドア向けの趣味を1つ提案してください。"
},
{
"name": "条件分岐: 複雑な条件",
"system": "インドア向けの趣味を2つ、アウトドア向けの趣味を1つ提案してください。それぞれに簡単な理由を付けてください。さらに、初心者向けかどうかも明記してください。"
},
]
# ==================== メイン ====================
async def run_case(case_idx: int):
if case_idx < 0 or case_idx >= len(PROMPT_CASES):
print("ケース番号エラー")
return
case = PROMPT_CASES[case_idx]
print(f"\n🚀 実行: {case['name']}")
print(f"System Prompt:\n{case['system']}")
print("="*50)
model = fm.SystemLanguageModel(
guardrails=fm.SystemLanguageModelGuardrails.PERMISSIVE_CONTENT_TRANSFORMATIONS
)
options = fm.GenerationOptions(
temperature=0.7,
maximum_response_tokens=300
)
outputs = []
# N=3実行
for i in range(3):
session = fm.LanguageModelSession(
instructions=case["system"],
model=model
)
try:
response = await session.respond(prompt=USER_INPUT, options=options)
except Exception as e:
response = f"[ERROR] {e}"
outputs.append(response)
print(f"\n--- Output {i+1} ---")
print(response)
# 保存
result = {
"case": case["name"],
"system_prompt": case["system"],
"user_input": USER_INPUT,
"outputs": outputs
}
timestamp = datetime.datetime.now().strftime("%Y%m%d_%H%M%S")
filename = f"fm_test_{case_idx}_{timestamp}.json"
with open(filename, "w", encoding="utf-8") as f:
json.dump(result, f, ensure_ascii=False, indent=2)
print(f"\n💾 保存: {filename}")
# ==================== 実行 ====================
if __name__ == "__main__":
if len(sys.argv) < 2:
print("使い方: python fm_prompt_test.py <ケース番号>")
sys.exit(1)
case_idx = int(sys.argv[1])
asyncio.run(run_case(case_idx))