首頁 >web前端 >js教程 >有效的快速工程技術

有效的快速工程技術

Susan Sarandon
Susan Sarandon原創
2025-01-06 16:35:39870瀏覽

echniques for Effective Prompt Engineering

皇家賭場(2006)中,詹姆斯·邦德詳細說明了他的維斯珀馬提尼的精確成分:3 杯戈登、 1 杯伏特加、半杯基納利萊,與一片檸檬皮薄片一起在冰上搖勻。

透過詳細說明成分,邦德確保了優質的飲料。同樣,在與大型語言模型 (LLM) 交互作用時,提示的特定性和清晰度決定了輸出的品質。

這個過程被稱為快速工程,對於從人工智慧系統獲得準確且相關的回應至關重要。

什麼是即時工程?

及時工程涉及製定精確的說明以優化 LLM 響應。輸入提示越詳細和具體,輸出就越符合您的需求。

範例:
如果你問法學碩士“總結即時工程”,答案可能會很模糊。但是,透過像這樣指定請求:

提示: 「給出一個 100 字的提示工程摘要,針對非技術使用者。」

法學碩士現在被指導給出簡潔的、針對特定受眾的答案。

輸出:

「即時工程正在為ChatGPT 等人工智慧系統制定有效的指令,以獲得最佳結果。它涉及具體、提供上下文和分解複雜的問題。透過指定格式、提供範例或設定邊界,即時工程可確保與人工智慧助理。

這種要求特定輸出的方法示範如何「設計」提示以獲得所需的精確結果。

良好的 LLM 提示的組成部分

1

上下文:上下文為法學碩士提供了額外的信息,幫助其更全面地理解您的請求。透過嵌入相關上下文,人工智慧可以產生更準確和客製化的回應。

範例: 假設您正在處理 C# 專案並想要修改類別定義。這裡的上下文可以是程式碼片段。

依上下文提示:
「給這個 C# 程式碼:
公有類別使用者{公共int使用者Id{取得;放; } 公有字串名稱{ 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;
    }
}
這個例子說明了提供相關背景來指導法學碩士產生正確答案的重要性。

  1. 使用者問題:問題是提示的主要部分。它應該是單一目的、具體且簡潔的。

範例:
如果您想要用 C# 建立具有某些欄位的使用者類,請明確指定所需的欄位和行為。

模糊問題:

「建立使用者類別。」

具體問題:

「建立一個包含以下欄位的 C# 使用者類別:UserId、Name、PhoneNumber。將 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. few-shot Prompting:提供幾個範例來指導模型產生所需的輸出格式。

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

最後提示:

「將密碼屬性設為私有,並加入建構函式中初始化的 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# 類別建立一組單元測試:

公有類別使用者{公共int用戶Id{取得;放; } 公有字串名稱 { 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn