文件
-
瞭解思考提示鏈如何簡化提示工程。
-
使用檢索增強生成技術將您的資料整合至 AI 應用程式中 - .NET
瞭解擷取增強產生如何讓您搭配 LLM 使用您的數據,以在 .NET 中產生更佳的完成。
-
瞭解內嵌如何擴充 .NET 中 AI 模型的限制和功能。
在本文中,您將探索基本的提示工程概念。 許多 AI 模型都是以提示 (提示) 為基礎,這表示它們會回應使用者輸入的文字,透過預測演算法產生的內容 (完成) 來加以回應。 較新的模型通常還支援聊天形式的回覆,並透過根據角色(系統、使用者、助理)和聊天歷史記錄的訊息來保留對話。
請考慮下列文字產生範例,其中「提示」為使用者輸入,而「完成」為模型輸出:
提示:「任期最短的總統是」
完成:「Pedro Lascurain」。
完成看起來是正確的,但如果您的應用程式是為了幫助學習美國歷史的學生呢? Pedro Lascurain 的 45 分鐘任期是所有總統中任期最短的,但他曾擔任過墨西哥總統。 學習美國歷史的學生可能正在尋找有關 "William Henry Harrison" 的資料。 很顯然的,如果您能為應用程式提供某些內容,其對目標使用者來說可能就更實用。
提示工程會藉由提供指示、範例和提示來為提示添加上下文,以幫助模型生成更好的完成答案。
支援文字生成的模型通常不需要任何的特定格式,但您應該組織您的提示,以便模型能清楚什麼是指示、什麼是範例。 支援基於聊天的應用程式的模型會使用三個角色來組織回應:控制聊天的系統角色、代表使用者輸入的使用者角色,以及用於回應使用者的助理角色。 將您的提示分成適於每個角色的訊息:
指示是告訴模型如何回應的文字。 指示可以是指示詞或命令式:
指令比命令更開放且更具彈性:
您可以提供內容來將更多的上下文新增至指示中。
「主要內容」是您想要模型使用指示來處理的文字。 無論指示採取何種動作,模型都將在主要內容上執行該動作以完成任務。
「支援內容」是您在指示中參考的文字,但其不是指示的目標。 模型會使用支援內容來完成指示,這表示支援內容也會出現在完成中,通常會以某種結構 (例如標題或資料行標籤) 顯示。
將標籤與您的指示內容搭配使用,以協助模型了解如何將之與指示搭配使用。 不要太過擔心精確度:標籤不必與指示完全相符,因為模型將會處理字組形式和大小寫之類的內容。
假設您使用「摘要說明美國總統的成就」指示來產生清單。 模型可能會以多種方式進行組織及排序。 但是,如果您希望清單依一組特定類別來將成就分組,該怎麼做? 使用支援內容,將該資訊新增至指示。
調整指示,讓模型依類別分組,並附加指定那些類別的支援內容:
prompt = """
Instructions: Summarize US Presidential accomplishments, grouped by category.
Categories: Domestic Policy, US Economy, Foreign Affairs, Space Exploration.
Accomplishments: 'George Washington
- First president of the United States.
- First president to have been a military veteran.
- First president to be elected to a second term in office.
- Received votes from every presidential elector in an election.
- Filled the entire body of the United States federal judges; including the Supreme Court.
- First president to be declared an honorary citizen of a foreign country, and an honorary citizen of France.
John Adams ...' ///Text truncated
""";
範例是對模型表示如何透過提供樣本使用者輸入和模型輸出來回應的文字。 模型使用範例來推斷要在完成中包含的內容。 範例可以出現在工程提示中的指示之前或之後,但這兩者不應混用。
範例會以提示開頭且可選擇性地包含完成內容。 範例中的完成不需包含逐字回應,其可能僅包含一個格式化的字組、未排序清單中的第一個項目符號,或者指出每個完成應如何開始之類的內容。
範例會根據其是否包含逐字完成來分類為「零樣本學習」或「少樣本學習」。
指引是傳達所需輸出結構或格式的文字。 像指示一樣,模型不會將提示處理成使用者輸入。 如同範例,指引會對模型表示您所需的內容,而不是告訴模型該怎麼做。 您可以隨意新增多個提示,這樣您就可以反覆調整以獲得您想要的結果。 指引可與指示或範例搭配使用,而且應位於提示結尾。
假設您使用指示來告訴模型依類別產生總統成就清單,以及告訴模型要使用哪些類別的支援內容。 您決定要模型產生一個巢狀清單,其中類別以全大寫顯示,而且在每個類別下,各位總統的成就將依時間順序排列,列出每位總統的名字和成就於一行。 在您的指示和支援內容之後,您可以新增三個指引,以對模型表示如何建構及格式化清單:
prompt = """
Instructions: Summarize US Presidential accomplishments, grouped by category.
Categories: Domestic Policy, US Economy, Foreign Affairs, Space Exploration.
Accomplishments: George Washington
First president of the United States.
First president to have been a military veteran.
First president to be elected to a second term in office.
First president to receive votes from every presidential elector in an election.
First president to fill the entire body of the United States federal judges; including the Supreme Court.
First president to be declared an honorary citizen of a foreign country, and an honorary citizen of France.
John Adams ... /// Text truncated
DOMESTIC POLICY
- George Washington:
- John Adams:
""";
.NET 提供各種工具來提示和與不同的 AI 模型聊天。 使用語意核心來連線到各種不同的 AI 模型和服務以及其他 SDK,例如官方 OpenAI .NET 程式庫。 語義核心包括用於建立具有不同角色的提示和維護聊天歷史記錄的工具,以及許多其他功能。
請思考下列程式碼範例:
using Microsoft.SemanticKernel;
using Microsoft.SemanticKernel.ChatCompletion;
// Create a kernel with OpenAI chat completion
#pragma warning disable SKEXP0010
Kernel kernel = Kernel.CreateBuilder()
.AddOpenAIChatCompletion(
modelId: "phi3:mini",
endpoint: new Uri("http://localhost:11434"),
apiKey: "")
.Build();
var aiChatService = kernel.GetRequiredService<IChatCompletionService>();
var chatHistory = new ChatHistory();
chatHistory.Add(
new ChatMessageContent(AuthorRole.System, "You are a helpful AI Assistant."));
while (true)
{
// Get user prompt and add to chat history
Console.WriteLine("Your prompt:");
chatHistory.Add(new ChatMessageContent(AuthorRole.User, Console.ReadLine()));
// Stream the AI response and add to chat history
Console.WriteLine("AI Response:");
var response = "";
await foreach (var item in
aiChatService.GetStreamingChatMessageContentsAsync(chatHistory))
{
Console.Write(item.Content);
response += item.Content;
}
chatHistory.Add(new ChatMessageContent(AuthorRole.Assistant, response));
Console.WriteLine();
}
前面的程式碼提供了以下概念的範例:
AuthorRole.System
訊息配置 AI。AuthorRole.User
的上下文中使用不同類型的提示。您也可以使用更進階的提示工程技術來增強您的提示的能力,這些技術在其自己的文章中進行了深入介紹。
文件
瞭解思考提示鏈如何簡化提示工程。
使用檢索增強生成技術將您的資料整合至 AI 應用程式中 - .NET
瞭解擷取增強產生如何讓您搭配 LLM 使用您的數據,以在 .NET 中產生更佳的完成。
瞭解內嵌如何擴充 .NET 中 AI 模型的限制和功能。
訓練
模組
使用 Azure OpenAI 服務進行提示設計 - Training
在本課程模組中,瞭解提示工程如何協助建立及微調自然語言處理模型的提示。 提示工程涉及設計和測試各種提示,以優化模型的效能,以產生精確且相關的回應。
認證
Microsoft Certified: Azure AI Engineer Associate - Certifications
使用 Azure AI 服務、Azure AI 搜尋服務和 Azure Open AI 來設計及實作 Azure AI 解決方案。