ホームページ >ウェブフロントエンド >jsチュートリアル >効果的な即時エンジニアリングのためのテクニック

効果的な即時エンジニアリングのためのテクニック

Susan Sarandon
Susan Sarandonオリジナル
2025-01-06 16:35:39870ブラウズ

echniques for Effective Prompt Engineering

カジノ・ロワイヤル (2006) で、ジェームズ・ボンドはベスパー マティーニの正確な材料を指定しました: ゴードン 3 メジャー、ウォッカ 1 メジャー、キナ 0.5 メジャー薄いレモンの皮を添えて氷の上でシェイクしたリレット。

ボンドは成分を詳細に説明することで、優れたドリンクを保証します。同様に、大規模言語モデル (LLM) を操作する場合、プロンプトの具体性と明確さが出力の品質を決定します。

プロンプト エンジニアリングとして知られるこのプロセスは、AI システムから正確で適切な応答を得るために不可欠です。

プロンプトエンジニアリングとは何ですか?

プロンプトエンジニアリングには、LLM 応答を最適化するための正確な指示の作成が含まれます。入力プロンプトがより詳細で具体的であればあるほど、出力はより関連性があり、ニーズに合わせたものになります。

例:
LLM に「プロンプトエンジニアリングを要約してください」と尋ねると、答えは曖昧になるかもしれません。ただし、次のようにリクエストを指定すると、

プロンプト: 「技術者以外のユーザー向けに、プロンプト エンジニアリングについて 100 語で要約してください。」

LLM は、簡潔で対象者に合わせた回答を提供するようになりました。

出力:

「プロンプト エンジニアリングとは、最良の結果を得るために ChatGPT などの AI システムに効果的な指示を作成することです。これには、具体的であること、コンテキストを提供すること、複雑な質問を分析することが含まれます。形式を指定し、例を提供するか、境界を設定することにより、プロンプト エンジニアリングは、担当者との明確なコミュニケーションを保証します。 AI アシスタント。"

特定の出力を要求するこの方法は、望ましい正確な結果を得るためにプロンプ​​トを「設計」する方法を示しています。

優れた LLM プロンプトのコンポーネント

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 が正しい応答を生成できるように、関連するコンテキストを提供することの重要性を示しています。

  1. ユーザーの質問: 質問はプロンプトの主要部分です。目的は単一で、具体的で、簡潔である必要があります。

例:
特定のフィールドを含むユーザー クラスを 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;
    }
}
  1. 出力ガイダンス: 必要な形式の例を提供することで、モデルの出力をガイドできます。

例:
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;
    }
}

効果的な即時エンジニアリングのためのテクニック

  1. ゼロショット プロンプト: LLM は、明示的な例を使用せずに、トレーニング データに基づいて応答を生成します。これは、確立されたパターンに基づいて一般的な解決策や回答を生成する場合に効果的です。

例:
プロンプト: 「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");
  1. 少数ショット プロンプト: モデルが目的の出力形式を生成できるように、いくつかの例を提供します。

例:
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);
    }
}
  1. プロンプトチェーン: 以前の応答に基づいてクエリを繰り返し調整し、以前のインタラクションに基づいてモデルを構築できるようにします。

例:
単純なプロンプトから始めて、徐々に変更していきます。

最初のプロンプト:

「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");
  1. 思考連鎖プロンプト: 複数のステップからなる指示を提供し、LLM が複雑な問題に段階的にアプローチできるようにします。

例:
プロンプト:

*"次の C# クラスの単体テストのセットを作成します:

public class User { public int UserId { get;セット;パブリック文字列名 { get; }セット;パブリック文字列電話番号 { 取得; }セット; } }

段階的に考えてみましょう:

  1. テストする主要なシナリオを特定します。
  2. xUnit を使用して単体テストを作成します。
  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);
    }
}

この記事は元々、Pieces for Developers の Devreal 責任者 Jim によって書かれました。この記事 https://pieces.app/blog/llm-prompt-engineering

で、より多くの例とニュアンスを見つけることができます。

以上が効果的な即時エンジニアリングのためのテクニックの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。