Azure OpenAI Chat in C#:
// Install the .NET library via NuGet: dotnet add package
Azure.AI.OpenAI --version 1.0.0-beta.5
using System;
using System.Threading.Tasks;
using Azure;
using Azure.AI.OpenAI;
namespace ConsoleApp
{
internal class Program
{
static async Task Main(string[] args)
{
OpenAIClient client = new OpenAIClient(new Uri("https://xxx-xxxxxxxxx.openai.azure.com/"),
new
AzureKeyCredential("123456895a5bcef0hijklmnopqrstuvwx"));
Response<ChatCompletions> responseWithoutStream = await client.GetChatCompletionsAsync("model_deployment_name",
new
ChatCompletionsOptions()
{
Messages = {
new ChatMessage(ChatRole.System, @"You are an AI assistant that helps people find information."),
new
ChatMessage(ChatRole.User, @"Summarize:
Full-stack developer with Azure Development")
},
Temperature = (float)0.7,
MaxTokens = 800,
NucleusSamplingFactor = (float)0.95,
FrequencyPenalty = 0,
PresencePenalty = 0,
});
ChatCompletions response = responseWithoutStream.Value;
Console.WriteLine(response.Choices[0].Message.Content);
Console.ReadKey();
}
}
}
internal class Program
{
static async Task Main(string[] args)
OpenAIClient client = new OpenAIClient(new Uri("https://xxx-xxxxxxxxx.openai.azure.com/"),
Messages = {
new ChatMessage(ChatRole.System, @"You are an AI assistant that helps people find information."),
Temperature = (float)0.7,
NucleusSamplingFactor = (float)0.95,
PresencePenalty = 0,
});
ChatCompletions response = responseWithoutStream.Value;
Console.WriteLine(response.Choices[0].Message.Content);
Console.ReadKey();
}
}
}
Azure OpenAI Chat in Python:
from openai import AzureOpenAI
client = AzureOpenAI(
azure_endpoint = "https://xxx-xxxxxxxxx.openai.azure.com/",
api_key = "123456895a5bcef0hijklmnopqrstuvwx",
api_version="2024-02-15-preview"
)
message_text = [
{"role":"system",
"content":"You are an AI assistant that helps people find information."},
{"role":"user","content":"Summary
\nFull-stack developer with Azure Development"}
]
completion = client.chat.completions.create(
model="model_deployment_name",
messages = message_text,
temperature=0.7,
max_tokens=800,
top_p=0.95,
frequency_penalty=0,
presence_penalty=0,
stop=None
)
print(completion.choices[0].message.content)
Azure OpenAI DALL-E 3 in Python:
# Note: DALL-E 3 requires version 1.0.0 of the openai-python library or later
# !pip install openai
import os
from openai import AzureOpenAI
import json
client = AzureOpenAI(
api_version="2024-02-01",
azure_endpoint="https://mydemo.openai.azure.com/",
api_key='key' # os.environ["AZURE_OPENAI_API_KEY"],
)
result = client.images.generate(
model="Dalle3", # the name of your DALL-E 3 deployment
prompt="A relisting image of a futuristic skyline consisting of the world's
tallest building ",
n=1
)
image_url = json.loads(result.model_dump_json())['data'][0]['url']
print(image_url)
Use Azure OpenAI APIs in your app c#:
// {
// "AzureOAIEndpoint": "https://rg1openailab.openai.azure.com/",
// "AzureOAIKey": "e9742dc25fd446a38492fecb6f3c8e3d",
// "AzureOAIDeploymentName": "gpt35turbo16kdemo"
// }
// dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Azure;
using Azure.AI.OpenAI;
IConfiguration config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json").Build();
string? oaiEndpoint = config["AzureOAIEndpoint"];
string? oaiKey = config["AzureOAIKey"];
string? oaiDeploymentName = config["AzureOAIDeploymentName"];
if (string.IsNullOrEmpty(oaiEndpoint) || string.IsNullOrEmpty(oaiKey) ||
string.IsNullOrEmpty(oaiDeploymentName))
{
Console.WriteLine("Please check your appsettings.json file for missing
or incorrect values.");
return;
}
OpenAIClient client = new OpenAIClient(new Uri(oaiEndpoint),
new AzureKeyCredential(oaiKey));
string systemMessage = "I am a hiking enthusiast named Forest who helps
people discover hikes in their area. If no area is specified, I will
default to near Rainier National Park. I will then provide three
suggestions for nearby hikes that vary in length. I will also share an
interesting fact about the local nature on the hikes when making a
recommendation.";
var messagesList = new List<ChatRequestMessage>()
{
new ChatRequestSystemMessage(systemMessage),
};
do
{
Console.WriteLine("Enter your prompt text (or type 'quit' to exit): ");
string? inputText = Console.ReadLine();
if (inputText == "quit") break;
if (inputText == null)
{
Console.WriteLine("Please enter a prompt.");
continue;
}
Console.WriteLine("\nSending request for summary to Azure OpenAI
endpoint...\n\n");
messagesList.Add(new ChatRequestUserMessage(inputText));
ChatCompletionsOptions chatCompletionsOptions = new
ChatCompletionsOptions()
{
MaxTokens = 1200,
Temperature = 0.7f,
DeploymentName = oaiDeploymentName
};
foreach (ChatRequestMessage chatMessage in messagesList)
{
chatCompletionsOptions.Messages.Add(chatMessage);
}
ChatCompletions response =
client.GetChatCompletions(chatCompletionsOptions);
string completion = response.Choices[0].Message.Content;
messagesList.Add(new ChatRequestAssistantMessage(completion));
Console.WriteLine("Response: " + completion + "\n");
} while (true);
Utilize prompt engineering in your app in c#:
// {
// "AzureOAIEndpoint": "https://openailab.openai.azure.com/",
// "AzureOAIKey": "e8762dc15fd441a68495fecb7f3c8e3d",
// "AzureOAIDeploymentName": "gpt35turbo16kdemo"
// }
// dotnet add package Azure.AI.OpenAI --version 1.0.0-beta.14
//dotnet run - to run app
using System.Text;
using System.Text.Json;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Configuration.Json;
using Azure;
using Azure.AI.OpenAI;
IConfiguration config = new ConfigurationBuilder().
AddJsonFile("appsettings.json").Build();
string? oaiEndpoint = config["AzureOAIEndpoint"];
string? oaiKey = config["AzureOAIKey"];
string? oaiDeploymentName = config["AzureOAIDeploymentName"];
bool printFullResponse = true;
do
{
Console.WriteLine("-----------\nPausing the app to allow you to change
the system prompt.\nPress any key to continue...");
Console.ReadKey();
Console.WriteLine("\nUsing system message from system.txt");
string systemMessage = System.IO.File.ReadAllText("system.txt");
systemMessage = systemMessage.Trim();
Console.WriteLine("\nEnter user message or type 'quit' to exit:");
string userMessage = Console.ReadLine() ?? "";
userMessage = userMessage.Trim();
if (systemMessage.ToLower() == "quit" ||
userMessage.ToLower() == "quit")
{
break;
}
else if (string.IsNullOrEmpty(systemMessage) ||
string.IsNullOrEmpty(userMessage))
{
Console.WriteLine("Please enter a system and user message.");
continue;
}
else
{
await GetResponseFromOpenAI(systemMessage, userMessage);
}
} while (true);
async Task GetResponseFromOpenAI(string systemMessage, string userMessage)
{
Console.WriteLine("\nSending prompt to Azure OpenAI endpoint...\n\n");
if (string.IsNullOrEmpty(oaiEndpoint) || string.IsNullOrEmpty(oaiKey)
|| string.IsNullOrEmpty(oaiDeploymentName))
{
Console.WriteLine("Please check your appsettings.json file for
missing or incorrect values.");
return;
}
OpenAIClient client = new OpenAIClient(new Uri(oaiEndpoint),
new AzureKeyCredential(oaiKey));
Console.WriteLine("\nAdding grounding context from grounding.txt");
string groundingText = System.IO.File.ReadAllText("grounding.txt");
userMessage = groundingText + userMessage;
var chatCompletionsOptions = new ChatCompletionsOptions()
{
Messages =
{
new ChatRequestSystemMessage(systemMessage),
new ChatRequestUserMessage(userMessage)
},
Temperature = 0.7f,
MaxTokens = 800,
DeploymentName = oaiDeploymentName
};
Response<ChatCompletions> response =
await client.GetChatCompletionsAsync(chatCompletionsOptions);
ChatCompletions completions = response.Value;
string completion = completions.Choices[0].Message.Content;
if (printFullResponse)
{
Console.WriteLine($"\nFull response:
{JsonSerializer.Serialize(completions, new JsonSerializerOptions
{ WriteIndented = true })}\n\n");
}
Console.WriteLine($"\nResponse:\n{completion}\n\n");
}