In this quickstart, you learn how to create a .NET console chat app to connect to and prompt an OpenAI or Azure OpenAI model. The app uses the Microsoft.Extensions.AI library so you can write code using AI abstractions rather than a specific SDK. AI abstractions enable you to change the underlying AI model with minimal code changes.
On Windows, PowerShell v7+ is required. To validate your version, run pwsh in a terminal. It should return the current version. If it returns an error, execute the following command: dotnet tool update --global PowerShell.
You can also use Semantic Kernel to accomplish the tasks in this article. Semantic Kernel is a lightweight, open-source SDK that lets you build AI agents and integrate the latest AI models into your .NET apps.
Clone the sample repository
You can create your own app using the steps in the sections ahead, or you can clone the GitHub repository that contains the completed sample apps for all of the quickstarts. If you plan to use Azure OpenAI, the sample repo is also structured as an Azure Developer CLI template that can provision an Azure OpenAI resource for you.
The sample GitHub repository is structured as an Azure Developer CLI (azd) template, which azd can use to provision the Azure OpenAI service and model for you.
From a terminal or command prompt, navigate to the src\quickstarts\azure-openai directory of the sample repo.
Run the azd up command to provision the Azure OpenAI resources. It might take several minutes to create the Azure OpenAI service and deploy the model.
Azure Developer CLI
azd up
azd also configures the required user secrets for the sample app, such as the Azure OpenAI endpoint and model name.
From a terminal or command prompt, navigate to the root of your project directory.
Run the following commands to configure your Azure OpenAI endpoint and model name for the sample app:
Bash
dotnet user-secrets init
dotnet user-secrets set AZURE_OPENAI_ENDPOINT <your-openai-key>
dotnet user-secrets set AZURE_OPENAI_GPT_NAME <your-azure-openai-model-name>
Configure the app
Navigate to the root of your .NET projet from a terminal or command prompt.
Run the following commands to configure your OpenAI API key as a secret for the sample app:
Bash
dotnet user-secrets init
dotnet user-secrets set OpenAIKey <your-openai-key>
dotnet user-secrets set ModelName <your-openai-model-name>
Add the app code
The app uses the Microsoft.Extensions.AI package to send and receive requests to the AI model.
In the Program.cs file, add the following code to connect and authenticate to the AI model.
C#
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.AI;
using Azure.AI.OpenAI;
using Azure.Identity;
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string endpoint = config["AZURE_OPENAI_ENDPOINT"];
string deployment = config["AZURE_OPENAI_GPT_NAME"];
IChatClient client =
new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential())
.AsChatClient(deployment);
Note
DefaultAzureCredential searches for authentication credentials from your local tooling. If you aren't using the azd template to provision the Azure OpenAI resource, you'll need to assign the Azure AI Developer role to the account you used to sign-in to Visual Studio or the Azure CLI. For more information, see Authenticate to Azure AI services with .NET.
C#
using Microsoft.Extensions.AI;
using Microsoft.Extensions.Configuration;
using OpenAI;
var config = new ConfigurationBuilder().AddUserSecrets<Program>().Build();
string model = config["ModelName"];
string key = config["OpenAIKey"];
// Create the IChatClient
IChatClient client =
new OpenAIClient(key).AsChatClient(model);
Read the benefits.md file content and use it to create a prompt for the model. The prompt instructs the model to summarize the file text content.
C#
// Create and print out the promptstring prompt = $"""
summarize the the following text in 20 words or less:
{File.ReadAllText("benefits.md")}
""";
Console.WriteLine($"user >>> {prompt}");
Call the InvokePromptAsync function to send the prompt to the model to generate a response.
C#
// Submit the prompt and print out the response
ChatCompletion response = await client.CompleteAsync(prompt, new ChatOptions { MaxOutputTokens = 400 });
Console.WriteLine($"assistant >>> {response}");
Use the dotnet run command to run the app:
.NET CLI
dotnetrun
The app prints out the completion response from the AI model. Customize the text content of the benefits.md file or the length of the summary to see the differences in the responses.
Clean up resources
When you no longer need the sample application or resources, remove the corresponding deployment and all resources.
The source for this content can be found on GitHub, where you can also create and review issues and pull requests. For more information, see our contributor guide.
.NET feedback
.NET is an open source project. Select a link to provide feedback:
This module walks through the steps to connect an existing Blazor application to an Azure Cosmos DB for NoSQL account and an Azure OpenAI account. Your application sends prompts to the model in Azure OpenAI and parses the responses. Your application also stores various conversation sessions and their corresponding messages as items colocated in a single container within Azure Cosmos DB for NoSQL.