このドキュメントでは、システム指示の概要と、効果的な指示を作成する際のベスト プラクティスについて説明します。プロンプトにシステム指示を追加する方法については、システム指示を使用するをご覧ください。
システム指示は、モデルがプロンプトを処理する前に処理する一連の指示です。システム指示を使用して、モデルの動作とプロンプトへの応答方法を指定することをおすすめします。たとえば、採用するペルソナ、コンテキスト情報、フォーマット手順などを含めることができます。
システム指示は、エンドユーザーが確認または変更できない情報をモデルに提供する場合に特に便利です。これにより、タスクを理解するための追加のコンテキストをモデルに提供し、よりカスタマイズされた回答を提供できます。また、モデルとユーザーのインタラクション全体で特定のガイドラインに準拠できます。また、同じ指示セットで複数のプロンプトを実行する場合にも、システム指示が役立ちます。
システム指示はリクエスト全体に適用されます。プロンプトに含まれているシステム指示は、複数のユーザーとモデルのターンで機能します。システム指示はプロンプトのコンテンツとは別ですが、全体的なプロンプトの一部であるため、標準のデータ使用ポリシーの対象となります。
ユースケース
一般に、システム指示を使用して、次のうち 1 つ以上を行うことをおすすめします。
- ペルソナまたは役割を定義する
- 出力形式を定義する
- 出力のスタイルとトーンを定義する
- タスクの目標またはルールを定義する
プロンプトに追加のコンテキストを提供する
ペルソナまたは役割
システム指示でペルソナまたは役割を定義することで、モデルがプロンプトにどのように回答するかに影響を与えることができます。
たとえば、モデルを使用して生徒に論文の書き方を教えたいとします。次の役割を定義した場合のモデルの回答の違いを比較してみましょう。
- あなたは、特定のトピックに関する論文の書き方を大学生に教える bot です。
- あなたは、特定のトピックに関する論文の書き方について小学生をサポートする pod です。
| システム指示 | 大学生向けの bot | 小学生向けの bot |
|---|---|---|
| あなたは、特定のトピックに関する論文の書き方を大学生に教える bot です。 | あなたは、特定のトピックに関する論文の書き方について小学生をサポートする bot です。 | |
| プロンプト | テーマ: 光合成 | テーマ: 光合成 |
| 回答 | 光合成に関する論文の作成: 大学の学生向けガイド 光合成は、地球上の生命の基盤を形成する魅力的で複雑なプロセスです。論文を書くことは、その複雑さを深く掘り下げてその重要性を理解できるため、有益な経験になる可能性があります。このタスクに取り組む方法は次のとおりです。
論文のタイトルの例:
注意点: 光合成に関する優れた論文は、明確で、有益で、魅力的である必要があります。これらのステップに従って、研究の確固たる基盤を活用することで、この重要な生物学的プロセスに対する理解を示す優れた論文を作成できます。 |
興味深いテーマですね。光合成は地球上の生命にとって非常に重要です。論文を書く方法は次のとおりです。
注意点: あなたは自分の論文の専門家です。光合成について楽しく学び、文章にまとめましょう。 |
出力形式
システム指示で出力形式(Markdown や JSON など)を定義することで、モデルが回答をフォーマットする方法を制御できます。
たとえば、モデルを使用してビジネスの顧客レビューを要約するとします。次の出力形式を定義した場合のモデルの回答の違いを比較してみましょう。
- 回答を JSON で出力します。最後に、JSON オブジェクトの外側に、改善方法に関する 3~5 文のアドバイスを記述します。
- 書式設定は必要ありません。
| システム指示 | JSON | 書式設定の要件はなし |
|---|---|---|
あなたはハイエンドなビジネスの PR 担当者です。以下の手順に沿って、提供されたユーザー入力に基づいて回答します。 指示:
|
あなたはハイエンドなビジネスの PR 担当者です。以下の手順に沿って、提供されたユーザー入力に基づいて回答します。 指示:
|
|
| プロンプト |
Chad Brocker: 4 つ星 このスパは素晴らしいものでした。入店した瞬間から、全体的な雰囲気がリラックスさせてくれます。まるでトランス状態に入っているようです。何も心配する必要はありません。スタッフがスケジュールを把握しており、体験を案内します。すべてが素晴らしいものでした。マッサージ、フェイシャル、泥風呂。また、携帯電話の持ち込みが禁止されているため、本当に別世界にいるような気分になります。ただし、価格は少し高めです。 プロンプト全体を表示
Lisa Simmens: 5 つ星 楽しい時間を過ごせました。親友と誕生日に 1 日スパを満喫しました。私たちの生活は変わりました。従業員は、お客様に最適なエクスペリエンスを提供するために、全力を尽くしています。質問から質の高いサービス、予約に時間通りに到着することまで、本当に最高でした。また利用したいです。追伸: 全身エクスフォリエーション トリートメントも利用できます。 Allie Wood: 2 つ星 スタッフの顧客対応は素晴らしかったものの、マッサージは痛く、フェイシャルは焼けるようでした。また、携帯電話を持ち込むことも許されず、余計なストレスを感じました。雰囲気は静かで落ち着いていましたが、スマートフォンがないとリラックスできませんでした。しかも、費用も高額でした。 Suzy Michaels: 3 つ星 このスペースの環境は、この世のものとは思えませんでした。本当に天国に足を踏み入れたような感覚です。今まで受けたサービスの中で最高でした。ただし、飲み物は提供されませんでした。少なくとも水は提供すべきでしょう。 Martin Wong: 4 つ星 素晴らしい体験でした。唯一の不満は、スマートフォンを確認できないことです。 Debbie Ruiz: 5 つ星 素晴らしい環境です。素晴らしいスタッフです。素晴らしいサービスです。また、スマートフォンを持ち込めない環境なので、とても解放感があり、平和な雰囲気を醸し出しています。ぜひおすすめします。 Lucy Mantel: 1 つ星 軽食は提供されません。携帯電話は使用できません。マッサージが悪い。エクスペリエンスは良くありません。おすすめしません。 |
|
| 回答 |
{
""pros"": [
""relaxing atmosphere"",
""attentive and efficient staff"",
""high-quality services""
],
""cons"": [
""pricey"",
""no cell phone policy"",
""no refreshments""
]
}
スパは、静かな雰囲気、優秀なスタッフ、一流のサービスで高く評価されていますが、改善の余地もあります。厳格な携帯電話禁止ポリシーと軽食の提供がないことをお客様が懸念している場合は、その懸念を解消することで、全体的なエクスペリエンスを大幅に向上させることができます。必要に応じて宿泊客がスマートフォンを利用できるエリアを設け、無料の水や限られた種類の飲料を提供することを検討してください。 |
肯定的: 静かでリラックスできる雰囲気のスパで、質の高いサービスを提供しています。スタッフによる優れたカスタマー サービスがお客様から高く評価されています。 否定的: スパの携帯電話持ち込み禁止のポリシーは賛否両論です。リラックスできるという意見と、ストレスを感じるという意見があります。価格が高すぎるというレビューが複数寄せられています。 |
スタイルとトーン
システム指示で出力のスタイルとトーン(詳細度、形式、対象読者レベルなど)を定義することで、モデルの回答に影響を与えることができます。
たとえば、モデルを使用して政府のイニシアチブの提案書を作成するとします。次のトーンを定義した場合のモデルの回答の違いを比較してみましょう。
- プロフェッショナル
- カジュアル
| システム指示 | プロフェッショナル | カジュアル |
|---|---|---|
あなたは、政府案の作成者です。あなたは、今後のキャンペーンの提案書を作成しています。テンプレートとユーザーの入力に基づいて、今後のキャンペーンの提案を提供します。
提案書のテンプレート:
|
あなたは、政府案の作成者です。あなたは、今後のキャンペーンの提案書を作成しています。テンプレートとユーザーの入力に基づいて、今後のキャンペーンの提案を提供します。
提案書のテンプレート:
|
|
| プロンプト |
このキャンペーンの目的は、インタラクティブなデジタル エクスペリエンスを通じて、持続可能性に向けて意識を高め、行動につながる変化を促すことです。学生、専門家、家族など、環境に配慮している 20~45 歳の個人に、Facebook と X で教育コンテンツを提供し、コミュニティ主導のイベントを開催することで、関心を高めていきます。私の目標は、一般の認知度を高め、環境に配慮した行動を測定可能な形で改善することです。デジタル マーケティングの専門知識とサステナビリティへの強いこだわりに基づき、個人が日常生活で有意義で持続可能な変化を起こせるようにする、インパクトの強いキャンペーンを設計します。このキャンペーンでは、多様で魅力的でありながら有益なコンテンツを作成したいと考えています。 |
|
| 回答 | 概要: 20~45 歳の個人が、インタラクティブなデジタル エクスペリエンスとコミュニティ エンゲージメントを通じて持続可能な生活を受け入れられるようにする。 課題: 多くの人々は、環境持続可能性を促進するために日常的に実践できる実用的な行動を認識していません。 解決策: Facebook と X を活用したマルチプラットフォーム キャンペーンで、魅力的で教育的なコンテンツを提供し、インタラクティブな体験やイベントを通じてコミュニティの参加を促進します。 ターゲット ユーザー: 環境に配慮している 20~45 歳の個人(学生、専門家、家族など)。 主なメッセージ: 日々の習慣を少し変えるだけで、環境に大きなプラスの影響を与えることができます。 チャネル: Facebook、X。 コンテンツのハイライト: インタラクティブなクイズ、教育ビデオ、専門家による Q&A セッション、持続可能な取り組みを促進するコミュニティ チャレンジ。 期待される結果: 持続可能な生活習慣に対する認知度の向上と、ターゲット オーディエンスにおける環境に配慮した行動の測定可能な改善。 選ばれる理由: デジタル マーケティングにおける実績と持続可能性の推進に対する情熱を活かし、インパクトのある魅力的なキャンペーンを実現します。 行動喚起: Facebook と X でキャンペーンに参加して、持続可能な未来のために学び、関心を持ち、変化を起こしましょう。 |
概要: サステナビリティをクールにするためのデジタル ムーブメントを始めます。インタラクティブなチャレンジと魅力的なコンテンツを使用して、実際の行動を促し、環境に配慮した生活を面倒な作業から共有の旅へと変えます。 課題: 持続可能性について知っていることと、実際に行動に移すことはまったく別のことです。私たちは、日々の簡単な変化に対する無関心と認識不足と戦っています。 解決策: Facebook や X などのプラットフォームで視聴者にリーチし、教育コンテンツ、楽しいチャレンジ、コミュニティ主導のイベントをダイナミックに組み合わせて提供します。インタラクティブなクイズ、共有可能なインフォグラフィック、地域の交流会などを検討しましょう。 対象ユーザー: 環境に配慮し、変化を起こしたいと願う 20~45 歳の学生、社会人、家族をターゲットとしています。 主なメッセージ: 小さな一歩が大きな変化を生む毎日の簡単な選択によって、より持続可能な未来を創造できます。 チャネル: Facebook と X で魅力的なキャンペーンを実施し、ソーシャル メディア マーケティングの力を活用します。 コンテンツのハイライト: 魅力的なインフォグラフィック、考えさせられる動画、簡単なヒント、刺激的な成功事例など、有益で共有可能なコンテンツが提供されます。 期待される結果: エンゲージメント(高評価、共有、コメント)とウェブサイト トラフィックの増加を通じて成功を測定し、最終的にはターゲット ユーザーのエコフレンドリーな行動を測定可能なレベルで増やすことを目標としています。 選ばれる理由: デジタル マーケティングの専門知識と持続可能性に対する真摯な情熱を併せ持つチームが、インパクトとエンゲージメントの両方を兼ね備えたキャンペーンを制作します。 行動喚起: ムーブメントに参加しましょう。ページをフォローしてチャレンジに参加したり、持続可能なライフスタイルへの取り組みを共有しましょう。 |
目標とルール
モデルのレスポンスに影響を与えるには、システム指示で目標またはルール(モデルがすべきこと、すべきでないこと)を定義します。
たとえば、モデルを使用して Python コードを記述するとします。次のルールを定義した場合のモデルの回答の違いを比較してみましょう。
- コードを生成するときは、すべてのメソッドの入力、出力、使用方法を説明するドキュメントを含めるようにしてください。
- コードのみを生成します。docstring は含めないでください。
| システム指示 | docstring あり | docstring なし |
|---|---|---|
| コードを生成するときは、すべてのメソッドの入力、出力、使用方法を説明するドキュメントを含めるようにしてください。 | コードのみを生成します。docstring は含めないでください。 | |
| プロンプト | Python で 2 次元配列を作成し、A* パスファインディング アルゴリズムを作成して、グリッド上の 2 つのポイント間の最短パスを特定します。 | |
| 回答 |
import heapq
class Node:
""""""
Represents a node in the grid for A* pathfinding.
Attributes:
x (int): The x-coordinate of the node.
y (int): The y-coordinate of the node.
parent (Node, optional): The parent node in the path. Defaults to None.
g (int): Cost from the start node to this node. Defaults to 0.
h (int): Estimated cost from this node to the end node. Defaults to 0.
""""""
def __init__(self, x, y, parent=None):
self.x = x
self.y = y
self.parent = parent
self.g = 0
self.h = 0
def __lt__(self, other):
""""""Compares nodes based on their f-score (g + h).""""""
return (self.g + self.h) < (other.g + other.h)
def a_star(grid, start, end):
""""""
Implements the A* pathfinding algorithm.
Args:
grid (list): A 2D array representing the grid, where 0 is walkable and 1 is an obstacle.
start (tuple): The starting point coordinates (x, y).
end (tuple): The end point coordinates (x, y).
Returns:
list: A list of coordinates representing the shortest path, or None if no path is found.
""""""
rows = len(grid)
cols = len(grid[0])
# Create start and end nodes
start_node = Node(start[0], start[1])
end_node = Node(end[0], end[1])
# Initialize open and closed lists
open_list = []
closed_list = set()
# Add the start node to the open list
heapq.heappush(open_list, start_node)
while open_list:
# Get the node with the lowest f-score
current_node = heapq.heappop(open_list)
# Add the current node to the closed list
closed_list.add((current_node.x, current_node.y))
# Check if we've reached the goal
if current_node.x == end_node.x and current_node.y == end_node.y:
# Reconstruct and return the path
path = []
while current_node:
path.append((current_node.x, current_node.y))
current_node = current_node.parent
return path[::-1] # Return reversed path
# Explore neighboring nodes
for dx, dy in [(0, -1), (0, 1), (-1, 0), (1, 0)]: # Up, Down, Left, Right
neighbor_x = current_node.x + dx
neighbor_y = current_node.y + dy
# Check if the neighbor is within the grid bounds
if 0 <= neighbor_x < cols and 0 <= neighbor_y < rows:
# Check if the neighbor is walkable and not in the closed list
if grid[neighbor_y][neighbor_x] == 0 and (neighbor_x, neighbor_y) not in closed_list:
# Create a neighbor node
neighbor_node = Node(neighbor_x, neighbor_y, parent=current_node)
# Calculate the cost to reach the neighbor
neighbor_node.g = current_node.g + 1
# Calculate the heuristic (Manhattan distance)
neighbor_node.h = abs(neighbor_node.x - end_node.x) + abs(neighbor_node.y - end_node.y)
# Add the neighbor to the open list if it's a better path
if neighbor_node not in open_list:
heapq.heappush(open_list, neighbor_node)
# No path found
return None
# Example usage:
grid = [
[0, 0, 0, 0, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0]
]
start = (0, 0)
end = (4, 4)
path = a_star(grid, start, end)
if path:
print(""Shortest path:"", path)
else:
print(""No path found."")
説明:
|
import heapq
class Node:
def __init__(self, position, parent=None):
self.position = position
self.parent = parent
self.g = 0
self.h = 0
self.f = 0
def __lt__(self, other):
return self.f < other.f
def astar(grid, start, end):
rows = len(grid)
cols = len(grid[0])
open_list = []
closed_list = set()
start_node = Node(start)
end_node = Node(end)
open_list.append(start_node)
while open_list:
current_node = heapq.heappop(open_list)
if current_node.position == end_node.position:
path = []
while current_node:
path.append(current_node.position)
current_node = current_node.parent
return path[::-1]
closed_list.add(current_node.position)
for neighbor in get_neighbors(grid, current_node):
if neighbor.position in closed_list:
continue
if neighbor not in open_list:
neighbor.g = current_node.g + 1
neighbor.h = manhattan_distance(neighbor.position, end_node.position)
neighbor.f = neighbor.g + neighbor.h
neighbor.parent = current_node
heapq.heappush(open_list, neighbor)
else:
if neighbor.g > current_node.g + 1:
neighbor.g = current_node.g + 1
neighbor.f = neighbor.g + neighbor.h
neighbor.parent = current_node
heapq.heapify(open_list)
return None # No path found
def get_neighbors(grid, node):
rows = len(grid)
cols = len(grid[0])
row, col = node.position
neighbors = []
if row > 0 and grid[row - 1][col] == 0:
neighbors.append(Node((row - 1, col)))
if row < rows - 1 and grid[row + 1][col] == 0:
neighbors.append(Node((row + 1, col)))
if col > 0 and grid[row][col - 1] == 0:
neighbors.append(Node((row, col - 1)))
if col < cols - 1 and grid[row][col + 1] == 0:
neighbors.append(Node((row, col + 1)))
return neighbors
def manhattan_distance(a, b):
return abs(a[0] - b[0]) + abs(a[1] - b[1])
# Example usage
grid = [
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0],
[0, 1, 1, 1, 0],
[0, 0, 0, 0, 0],
]
start = (0, 0)
end = (4, 4)
path = astar(grid, start, end)
print(path)
|
コンテキスト
システム指示に追加のコンテキストを追加することで、モデルがプロンプトにどのように応答するかに影響を与えることができます。
たとえば、モデルを使用してイベントのスピーチを作成するとします。次のコンテキストを指定した場合のモデルの回答の違いを比較してみましょう。
- スピーチの内容。
- 追加のコンテキストなし。
| システム指示 | スピーチの内容 | 追加のコンテキストなし |
|---|---|---|
提供された情報に基づいて、ユーザーがスピーチを書く手助けをします。
ユーザーからこれらの情報が提供されなかった場合は、「申し訳ございませんが、スピーチの作成に必要な情報がすべて揃っていません。イベント、聴衆数、講演者情報、トーン、長さ、その他の情報をご提供ください。」と回答します。 一般的な内容としては、次のようなものがあります。
|
提供された情報に基づいて、ユーザーがスピーチを書く手助けをします。
ユーザーからこれらの情報が提供されなかった場合は、「申し訳ございませんが、スピーチの作成に必要な情報がすべて揃っていません。イベント、聴衆数、講演者情報、トーン、長さ、その他の情報をご提供ください。」と回答します。 |
|
| プロンプト |
イベント: 高校卒業 聴衆数: 1,000 人 講演者情報: Michael Landish、17 歳 トーン: ノスタルジック、楽観的 スピーチの長さ: 250~500 語 その他: Michael は高校 3 年生のクラス委員でした。お気に入りの教師は 3 年生の英語教師の Martin 先生です。Michael はロサンゼルス カミノス州立大学に進学し、経済学と英語を学ぶ予定です。彼はこれまでスピーチをしたことがないし、ディスレクシアのため緊張しています。 |
|
| 回答 | 「教職員の方々、家族、友人、そして何よりも 2023 年度の卒業生の皆さん、おはようございます。 (ポーズ) ここに立って皆さんを見渡すと、現実とは思えません。昨日まで、私たちは新入生で、目を見開き、少し恐怖を感じていました。初日に緊張した経験はありませんか?私はそうでした。歴史の教科書を持っていて、つまずきそうになったことがあります。[高校名] の歴史に残る大惨事になりかねませんでした。 (笑い声) でも、今では私たちは成長し、多くのことを学びました。ピタゴラスの定理だけでなく、忍耐力、友情、試験期間中に適切に貼られた付箋の力について学びました。 この 4 年間は素晴らしいものでした。自分の成長の多くは、本当に優れた先生方のおかげです。特に、3 年生の英語教師である Martin 先生には感謝しています。先生は、言葉には力があり、失読症でも自分の声を見つけることができると教えてくれました。Martin 先生、ありがとうございます。 (ポーズ) 私たちは、新しくてワクワクする何かの始まりを迎えています。さまざまな大学、さまざまな都市、さまざまな国に進む皆さん、[高校名] で学んだことをこれからの糧にしましょう。笑い声、友情、大きなテストの前に一晩中勉強したことなどを思い出しましょう。 (ポーズ) 卒業生の皆さん、世界が待っています。勇気と楽観的な気持ちで、素晴らしい 2023 年卒業生の揺るぎないサポートを受けながら、前に進んでいきましょう。皆様、おめでとうございます。最高の瞬間は、まだこれからです。 |
「教職員の方々、家族、友人、そして何よりも [Year] 年度の卒業生の皆さん、おはようございます。 Michael Landish としてだけでなく、クラス委員として皆さんの前に立つのは、少し変な感じがします。この 4 年間、この場所は私たちの試練の場でした。笑い声、深夜の勉強会、成功したものもあればそうでないものもありましたが、一生に残る思い出が詰まっています。私たちはこの中で一緒に成長してきました。そして今、未知の何かの瀬戸際に立たされていると、少し圧倒される気持ちになるのは仕方ありません。 振り返ってみると、ぎゅうぎゅう詰めの廊下を歩き回り、自分の居場所を見つけようとしていた、ぎこちない新入生だった昨日のことのように思えます。皆さんを見ると、ここまで来られたことに感動します。勝利を収めたときはお互いを称え合い、挫折したときはサポートし合ってきました。私たちは間違いから学び、成功を祝い、そして何よりも、一生続く友情の絆を築きました。 特に、忍耐強く指導していただいた 3 年生の英語教師の Martin 先生に感謝しています。特に苦労したとき、先生が私を信じてくれたおかげで、生徒としてだけでなく、一人の人間として自分の声を見つけることができました。ありがとうございました 次の章に進みましょう。私のように、経済学や英語をさらに学びたいと、ロサンゼルス カミノス州立大学に進学する人もいます。エキサイティングな別の道を追求する人もいます。それぞれの道は違っても、ここで学んだ教訓と築いた友情を忘れないでください。[年] 卒業生の精神を持ち続けましょう。それは、忍耐力、決意、そして互いを揺るぎなく支え合う精神です。 卒業、おめでとうございます。今後の素晴らしい人生を楽しみにしています。 |
次のステップ
- システム指示を使用する方法を学習する。
- プロンプト ギャラリーでプロンプトの他の例を確認する。