ホームページ >ウェブフロントエンド >jsチュートリアル >効果的な即時エンジニアリングのためのテクニック
カジノ・ロワイヤル (2006) で、ジェームズ・ボンドはベスパー マティーニの正確な材料を指定しました: ゴードン 3 メジャー、ウォッカ 1 メジャー、キナ 0.5 メジャー薄いレモンの皮を添えて氷の上でシェイクしたリレット。
ボンドは成分を詳細に説明することで、優れたドリンクを保証します。同様に、大規模言語モデル (LLM) を操作する場合、プロンプトの具体性と明確さが出力の品質を決定します。
プロンプト エンジニアリングとして知られるこのプロセスは、AI システムから正確で適切な応答を得るために不可欠です。
プロンプトエンジニアリングには、LLM 応答を最適化するための正確な指示の作成が含まれます。入力プロンプトがより詳細で具体的であればあるほど、出力はより関連性があり、ニーズに合わせたものになります。
例:
LLM に「プロンプトエンジニアリングを要約してください」と尋ねると、答えは曖昧になるかもしれません。ただし、次のようにリクエストを指定すると、
プロンプト: 「技術者以外のユーザー向けに、プロンプト エンジニアリングについて 100 語で要約してください。」
LLM は、簡潔で対象者に合わせた回答を提供するようになりました。
出力:
「プロンプト エンジニアリングとは、最良の結果を得るために ChatGPT などの AI システムに効果的な指示を作成することです。これには、具体的であること、コンテキストを提供すること、複雑な質問を分析することが含まれます。形式を指定し、例を提供するか、境界を設定することにより、プロンプト エンジニアリングは、担当者との明確なコミュニケーションを保証します。 AI アシスタント。"
特定の出力を要求するこの方法は、望ましい正確な結果を得るためにプロンプトを「設計」する方法を示しています。
1 コンテキスト: コンテキストは、リクエストをより完全に理解するのに役立つ追加情報を LLM に提供します。関連するコンテキストを埋め込むことで、AI はより正確でカスタマイズされた応答を生成できます。
例:
C# プロジェクトに取り組んでいて、クラス定義を変更したいとします。ここでのコンテキストはコード スニペットである可能性があります。
コンテキストを含むプロンプト:
「次の C# コードを考えます:
public class User { public int UserId { get;セット;パブリック文字列名 { get; }セット;パブリック文字列メール {get;セット;パブリック文字列電話番号 { 取得; }セット; } }
UserId と Name を読み取り専用にするようにクラスを変更し、コンストラクターに設定します。"
出力:
public class User { public int UserId { get; } public string Name { get; } public string Email { get; set; } public string PhoneNumber { get; set; } public User(int userId, string name) { UserId = userId; Name = name; } }
この例は、LLM が正しい応答を生成できるように、関連するコンテキストを提供することの重要性を示しています。
例:
特定のフィールドを含むユーザー クラスを C# で作成する場合は、必要なフィールドと動作を明確に指定します。
漠然とした質問:
「ユーザークラスを作成します。」
具体的な質問:
「フィールド UserId、Name、PhoneNumber を持つ C# ユーザー クラスを作成します。UserId を読み取り専用にし、これらのフィールドを設定するコンストラクターを追加します。」
出力:
public class User { public int UserId { get; } public string Name { get; } public string Email { get; set; } public string PhoneNumber { get; set; } public User(int userId, string name) { UserId = userId; Name = name; } }
例:
User クラスのダミー データを生成する必要がある場合は、データがどのようなものであるかの例を提供してください。
例を含むプロンプト:
「次のフィールドを持つ User クラスのインスタンスを 5 つ生成します: UserId、Name、Email、PhoneNumber。例として次の形式を使用します。
var user1 = new User(1, "John Doe", "john.doe@example.com", "555-555-5555");
以下にいくつかの例を示します:
var user2 = new User(2, "Jane Doe", "jane.doe@example.com", "555-555-5556");
ここで 5 つのインスタンスを生成します。"
出力:
public class User { public int UserId { get; } public string Name { get; set; } public string PhoneNumber { get; set; } public User(int userId, string name, string phoneNumber) { UserId = userId; Name = name; PhoneNumber = phoneNumber; } }
例:
プロンプト: 「C# で xUnit を使用して User クラスの単体テストを作成します。」
出力:
var user1 = new User(1, "John Smith", "john.smith@example.com", "555-555-5555"); var user2 = new User(2, "Jane Doe", "jane.doe@example.com", "555-555-5556"); var user3 = new User(3, "Mary Johnson", "mary.johnson@example.com", "555-555-5557"); var user4 = new User(4, "David Lee", "david.lee@example.com", "555-555-5558"); var user5 = new User(5, "Linda White", "linda.white@example.com", "555-555-5559");
例:
User クラスのデータを生成するには、出力形式をガイドするためにいくつかのデータ ポイントの例を使用できます。
いくつかのショットの例を含むプロンプト:
"User クラスのインスタンスをいくつか示します:
var user1 = new User(1, "John Smith", "john.smith@example.com", "555-555-5555");
var user2 = new User(2, "Jane Doe", "jane.doe@example.com", "555-555-5556");
次に、同じパターンに従ってさらに 3 つのインスタンスを作成します。"
出力:
public class UserTests { [Fact] public void UserConstructor_SetsProperties() { // Arrange var user = new User(1, "John Doe", "john.doe@example.com", "555-555-5555"); // Act & Assert Assert.Equal(1, user.UserId); Assert.Equal("John Doe", user.Name); Assert.Equal("john.doe@example.com", user.Email); Assert.Equal("555-555-5555", user.PhoneNumber); } }
例:
単純なプロンプトから始めて、徐々に変更していきます。
最初のプロンプト:
「Python で基本的な User クラスを作成します。」
出力:
public class User { public int UserId { get; } public string Name { get; } public string Email { get; set; } public string PhoneNumber { get; set; } public User(int userId, string name) { UserId = userId; Name = name; } }
フォローアッププロンプト:
「このクラスを C# に変換します。」
出力:
public class User { public int UserId { get; } public string Name { get; set; } public string PhoneNumber { get; set; } public User(int userId, string name, string phoneNumber) { UserId = userId; Name = name; PhoneNumber = phoneNumber; } }
最終プロンプト:
「Password プロパティをプライベートにし、コンストラクターで初期化された DateTime CreatedAt プロパティを追加します。」
出力:
var user1 = new User(1, "John Smith", "john.smith@example.com", "555-555-5555"); var user2 = new User(2, "Jane Doe", "jane.doe@example.com", "555-555-5556"); var user3 = new User(3, "Mary Johnson", "mary.johnson@example.com", "555-555-5557"); var user4 = new User(4, "David Lee", "david.lee@example.com", "555-555-5558"); var user5 = new User(5, "Linda White", "linda.white@example.com", "555-555-5559");
例:
プロンプト:
*"次の C# クラスの単体テストのセットを作成します:
public class User { public int UserId { get;セット;パブリック文字列名 { get; }セット;パブリック文字列電話番号 { 取得; }セット; } }
段階的に考えてみましょう:
出力:
public class UserTests { [Fact] public void UserConstructor_SetsProperties() { // Arrange var user = new User(1, "John Doe", "john.doe@example.com", "555-555-5555"); // Act & Assert Assert.Equal(1, user.UserId); Assert.Equal("John Doe", user.Name); Assert.Equal("john.doe@example.com", user.Email); Assert.Equal("555-555-5555", user.PhoneNumber); } }
この記事は元々、Pieces for Developers の Devreal 責任者 Jim によって書かれました。この記事 https://pieces.app/blog/llm-prompt-engineering
で、より多くの例とニュアンスを見つけることができます。
以上が効果的な即時エンジニアリングのためのテクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。