從 .NET AI 聊天應用程式深入解析您的資料
開始使用 .NET 8 主機應用程式連線至 OpenAI gpt-3.5-turbo
模型進行 AI 開發。 您將使用語意核心連線至 AI 模型,以分析健行資料並提供深入解析。
必要條件
- .NET 8.0 SDK - 安裝 .NET 8.0 SDK。
- OpenAI 中的 API 金鑰,因此您可以執行此範例。
- 在 Windows 上,需要 PowerShell
v7+
。 若要驗證您的版本,請在終端機中執行pwsh
。 其應該會傳回目前的版本。 如果傳回錯誤,請執行下列命令:dotnet tool update --global PowerShell
。
使用 .NET 8 主機應用程式連線至部署在 Azure 上的 OpenAI gpt-3.5-turbo
模型,開始 AI 開發。 您將使用語意核心連線至 AI 模型,以分析健行資料並提供深入解析。
必要條件
- .NET 8 SDK - 安裝 .NET 8 SDK。
- Azure 訂用帳戶 - 建立免費帳戶。
- 存取 Azure OpenAI 服務。
- Azure 開發人員 CLI (選擇性) - 安裝或更新 Azure 開發人員 CLI。
取得範例專案
複製範例存放庫
您可以使用先前各節中的步驟建立自己的應用程式,也可以複製包含所有快速入門已完成範例應用程式的 GitHub 存放庫。 如果您打算使用 Azure OpenAI,範例存放庫也會結構化為可為您布建 Azure OpenAI 資源的 Azure 開發人員 CLI 範本。
git clone https://github.com/dotnet/ai-samples.git
建立 Azure OpenAI 服務
範例 GitHub 存放庫的結構是 Azure 開發人員 CLI (azd
) 範本, azd
可用來為您布建 Azure OpenAI 服務和模型。
從終端機或命令提示字元中,流覽至
src\quickstarts\azure-openai
範例存放庫的目錄。azd up
執行 命令來布建 Azure OpenAI 資源。 建立 Azure OpenAI 服務並部署模型可能需要幾分鐘的時間。azd up
azd
也會為範例應用程式設定必要的用戶密碼,例如 Azure OpenAI 端點和模型名稱。
請嘗試健行聊天範例
從終端機或命令提示字元中,瀏覽至
src\quickstarts\openai\semantic-kernel\03-ChattingAboutMyHikes
目錄。執行下列命令,將 OpenAI API 金鑰設定為範例應用程式的祕密:
dotnet user-secrets init dotnet user-secrets set OpenAIKey <your-openai-key>
使用
dotnet run
命令來執行應用程式:dotnet run
從終端機或命令提示字元中,瀏覽至
semantic-kernel\02-HikerAI
目錄。使用
dotnet run
命令來執行應用程式:dotnet run
提示
如果您收到錯誤訊息,Azure OpenAI 資源可能尚未完成部署。 請稍候幾分鐘再試一次。
探索程式碼
應用程式使用 Microsoft.SemanticKernel
套件來傳送及接收 OpenAI 服務的要求。
整個應用程式都包含在 Program.cs 檔案中。 前幾行程式碼會設定組態值,並取得先前使用 dotnet user-secrets
命令設定的 OpenAI 金鑰。
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = "gpt-3.5-turbo";
string key = config["OpenAIKey"];
OpenAIChatCompletionService
服務促進要求和回應。
// Create the OpenAI Chat Completion Service
OpenAIChatCompletionService service = new(model, key);
建立 OpenAIChatCompletionService
用戶端之後,應用程式會讀取檔案 hikes.md
的內容,並藉由新增系統提示為模型提供更多內容。 這會影響模型行為和交談中產生的完成。
應用程式使用 Microsoft.SemanticKernel
套件來傳送及接收在 Azure 中部署的 Azure OpenAI 服務之要求。
整個應用程式都包含在 Program.cs 檔案中。 前幾行程式碼會載入應用程式佈建期間在 dotnet user-secrets
中設定的秘密和組態值。
// == Retrieve the local secrets saved during the Azure deployment ==========
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
AzureOpenAIChatCompletionService
服務促進要求和回應。
// == Create the Azure OpenAI Chat Completion Service ==========
AzureOpenAIChatCompletionService service = new(deployment, endpoint, new DefaultAzureCredential());
建立 OpenAIChatCompletionService
用戶端之後,應用程式會讀取檔案 hikes.md
的內容,並藉由新增系統提示為模型提供更多內容。 這會影響模型行為和交談中產生的完成。
// Provide context for the AI model
ChatHistory chatHistory = new($"""
You are upbeat and friendly. You introduce yourself when first saying hello.
Provide a short answer only based on the user hiking records below:
{File.ReadAllText("hikes.md")}
""");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
以下程式碼使用 AddUserMessage
函式將使用者提示新增至模型中。 GetChatMessageContentAsync
函式指示模型根據系統和使用者提示產生回應。
// Start the conversation
chatHistory.AddUserMessage("Hi!");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(
await service.GetChatMessageContentAsync(
chatHistory,
new OpenAIPromptExecutionSettings()
{
MaxTokens = 400
}));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
應用程式將模型的回應新增至 chatHistory
中,以維護聊天記錄或内容。
// Continue the conversation with a question.
chatHistory.AddUserMessage(
"I would like to know the ratio of the hikes I've done in Canada compared to other countries.");
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
chatHistory.Add(await service.GetChatMessageContentAsync(
chatHistory,
new OpenAIPromptExecutionSettings()
{
MaxTokens = 400
}));
Console.WriteLine($"{chatHistory.Last().Role} >>> {chatHistory.Last().Content}");
自訂系統或使用者提示,以提供不同的問題和内容:
- 我在下雨時健行了多少次?
- 2021 年我健行了多少次?
模型根據您的輸入產生對每個提示的相關回應。
清除資源
當您不再需要範例應用程式或資源時,請移除對應的部署和所有資源。
azd down
疑難排解
在 Windows 上,執行 azd up
之後,您可能會收到下列錯誤訊息:
postprovision.ps1 未以數位方式簽署。 指令碼不會在系統上執行
執行指令碼 postprovision.ps1 以設定應用程式中使用的 .NET 使用者密碼。 若要避免此錯誤,請執行下列 PowerShell 命令:
Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass
然後重新執行 azd up
命令。
另一個可能的錯誤:
'pwsh' 並未經辨識為內部或外部命令、可執行程式或批次檔案。 警告:'postprovision' 攔截失敗,結束代碼為:'1',路徑:'.\infra\post-script\postprovision.ps1'。 :結束代碼:1 會繼續執行,因為 ContinueOnError 已設定為 true。
執行指令碼 postprovision.ps1 以設定應用程式中使用的 .NET 使用者密碼。 若要避免此錯誤,請使用下列 PowerShell 命令手動執行指令碼:
.\infra\post-script\postprovision.ps1
.NET AI 應用程式現在已設定使用者祕密,且可以進行測試。