Bloga dön

API ve SDKKılavuz

openai-dotnet ile C# dilinde ilk istek: uç nokta, anahtar, yanıt

İlk sohbet tamamlamanızı bir C# konsol uygulamasından gönderin: resmi OpenAI .NET kütüphanesinde Endpoint'i ayarlayın, anahtarı ortamdan okuyun, yanıtı ve bitiş nedenini yazdırın.

Yazan: CheapTokens TeamYayınlanma tarihi: 4 dk okuma

Kapak: CheapTokens uç noktasına bağlı C# ve OpenAI .NET kütüphanesi
Bu sayfada
  1. Neye ihtiyacınız var
  2. Konsol uygulamasını oluşturun
  3. Kod, satır satır
  4. Görmeniz gerekenler
  5. Mevcut bir servisi değiştirmek
  6. Bir isteğin maliyeti
  7. Çalışmazsa

C# üzerinden CheapTokens'e istek göndermek için resmi OpenAI .NET kütüphanesini koruyun ve OpenAIClientOptions.Endpoint değerini https://api.cheaptokens.dev/v1 olarak ayarlayın. Tam model kimliğini, örneğin deepseek-ai/DeepSeek-V4-Flash-0731, geçirin ve anahtarı bir ortam değişkeninden okuyun. ChatClient ve CompleteChat çağrıları OpenAI örneklerindekiyle tamamen aynı kalır.

Diyelim ki OpenAI ile konuşan bir ASP.NET servisiniz var ve kodun geri kalanına dokunmadan başka bir uç nokta ve model denemek istiyorsunuz. Herhangi bir şeyi ona bağlamadan önce, genellikle yanlış giden üç şeyi (anahtar, uç nokta, model kimliği) küçük bir konsol uygulamasında kontrol edin. Burada kurduğumuz şey bu. Aşağıdaki ayrıntılar kütüphanenin GitHub'daki README dosyasından (openai/openai-dotnet, 5 Kasım 2026'da kontrol edildi) ve CheapTokens belgelerinden geliyor: belgeler sayfası aynı temel URL'ye sahip.

Neye ihtiyacınız var#

Paketin NuGet üzerindeki adı OpenAI. 5 Kasım 2026 itibarıyla en son kararlı sürüm 2.15.0 (değişiklik günlüğü kaydı 4 Kasım tarihli). .NET 8 ve .NET Standard 2.0'ı hedefliyor ve README tüm .NET Standard 2.0 uygulamalarıyla çalıştığını söylüyor, yani daha eski bir proje de sorun değil.

Uygulamaya üç değer giriyor:

  • temel URL: https://api.cheaptokens.dev/v1 (OpenAI Chat Completions uyumlu);
  • model kimliği: deepseek-ai/DeepSeek-V4-Flash-0731. Tam kimliği kullanın, fiyat tablosundaki kısa ad kabul edilmez. DeepSeek-V4-Flash 380K bağlam penceresine ve yanıt başına 32.768'e kadar çıktı token'ına sahip, günün her saatinde tek fiyat;
  • CheapTokens hesabınızdan bir API anahtarı, bir ortam değişkeninde saklanır. Nasıl saklayacağınızdan emin değilseniz, bir API anahtarını güvenle nasıl saklayacağınızı okuyun.

Konsol uygulamasını oluşturun#

Adım adım

Projeyi oluşturun ve çalıştırın

Bir konsol projesi oluşturun

bash
dotnet new console -o FirstRequest
cd FirstRequest

Paketi ekleyin

bash
dotnet add package OpenAI

Anahtarı bir ortam değişkenine koyun

bash veya zsh'de:

bash
export CHEAPTOKENS_API_KEY=your-key

Windows PowerShell'de:

powershell
$env:CHEAPTOKENS_API_KEY = "your-key"

Kodu yapıştırın ve çalıştırın

Program.cs dosyasının içeriğini sonraki bölümdeki kodla değiştirin, ardından dotnet run komutunu çalıştırın.

Konsol uygulamasını oluşturan ve çalıştıran beş komutun bulunduğu terminal
Beş komut: projeyi oluştur, klasöre gir, paketi ekle, anahtarı ayarla, çalıştır.

Kod, satır satır#

csharp
using System.ClientModel;
using OpenAI;
using OpenAI.Chat;

string? apiKey = Environment.GetEnvironmentVariable("CHEAPTOKENS_API_KEY");
if (string.IsNullOrEmpty(apiKey))
{
    Console.WriteLine("Set CHEAPTOKENS_API_KEY first.");
    return;
}

ChatClient client = new(
    model: "deepseek-ai/DeepSeek-V4-Flash-0731",
    credential: new ApiKeyCredential(apiKey),
    options: new OpenAIClientOptions
    {
        Endpoint = new Uri("https://api.cheaptokens.dev/v1")
    });

ChatCompletion completion = client.CompleteChat("Explain in two sentences what a token is.");

Console.WriteLine(completion.Content[0].Text);
Console.WriteLine($"finish_reason: {completion.FinishReason}");

README bu deseni "bir proxy veya kendi barındırdığınız OpenAI uyumlu LLM" için gösteriyor: uç nokta OpenAIClientOptions içine, anahtar bir ApiKeyCredential içine gider (System.ClientModel içinde yaşar, dolayısıyla ilk using). Üstteki kontrol bizim: değişken ayarlanmamışsa net bir mesaj verir.

Düz bir dizeyle CompleteChat tek bir kullanıcı mesajı gönderir ve tüm yanıtı bekler. Yanıt metni completion.Content[0].Text içinde. Bitiş nedeni completion.FinishReason içinde.

Akış: ortamdan anahtar, Endpoint ile ChatClient, CompleteChat, metin ve FinishReason
Programda anahtardan yazdırılan yanıta kadar neler oluyor.

Görmeniz gerekenler#

Token'ların kısa bir açıklamasını ve bitiş nedenini içeren bir satır almalısınız; normal bir bitişten sonra bu Stop olur (README FinishReason ile ChatFinishReason.Stop karşılaştırır). Yanıtın ifadesi çalıştırmadan çalıştırmaya değişir.

Okumaya değer olan ikinci satırdır. README FinishReason ile ChatFinishReason.Stop (model kendi kendine bitirdi) ve ChatFinishReason.ToolCalls (model bir araç çağırmak istiyor) karşılaştırır. Düz bir sohbette Stop dışında herhangi bir şey yanıtın başka bir nedenle bittiği anlamına gelir ve olağan şüpheli bir uzunluk sınırıdır. Cümle ortasında duran bir yanıt görürseniz, bu makale finish_reason ve max_tokens açıklıyor.

Mevcut bir servisi değiştirmek#

Servisiniz OpenAI için zaten bir ChatClient oluşturuyorsa, iki şeyi değiştirirsiniz: model dizesi ve seçenekler. Çağrıların geri kalanı çalışmaya devam eder.

Karşılaştır

Aynı istemci, iki değişen satır

Önce

csharp
ChatClient client = new(
    model: "your-current-model",
    credential: new ApiKeyCredential(apiKey));

Sonra

csharp
ChatClient client = new(
    model: "deepseek-ai/DeepSeek-V4-Flash-0731",
    credential: new ApiKeyCredential(apiKey),
    options: new OpenAIClientOptions
    {
        Endpoint = new Uri("https://api.cheaptokens.dev/v1")
    });

Kısa istekler için ikinci bir seçenek var: zai-org/GLM-5.3-Flash (390K bağlam, 8.192'ye kadar çıktı token'ı). Yalnızca model dizesini değiştirirsiniz. Anahtarınızın kullanabileceği kimliklerin listesi bir istek uzaklıkta, bkz. GET /v1/models ile modelleri listeleyin.

Bir isteğin maliyeti#

Diyelim ki bir servis günde 1.000 istek işliyor, her biri yaklaşık 300 token giriş ve 400 token çıkış. Böyle bir istek DeepSeek-V4-Flash üzerinde $0.000045 tutuyor. Aşağıdaki tablo aynı 1.000 isteği üç modelde OpenRouter'ın yanında gösteriyor. Toplamda, giriş ve çıkış birlikte sayıldığında, DeepSeek-V4-Flash OpenRouter'dan daha ucuz. Güncel fiyatlar fiyatlandırma sayfasında ve DeepSeek sayfası modelin sunduklarını listeliyor.

Model İstek başına 1.000 istek OpenRouter, 1.000 istek
GLM-5.3-Flash $0.000022 $0.022 $0.0433
DeepSeek-V4-Flash $0.000045 $0.0445 $0.077
MiniMax-M2.7 $0.000075 $0.075 $0.90

İstek başına 300 giriş ve 400 çıkış token'ı. 1M token başına fiyatlar günceldir ve tarifelerimizle birlikte değişir; OpenRouter sütunu aynı iş yükü için referans fiyatları gösterir.

Çalışmazsa#

  • 401. Anahtar eksik veya yanlış. Değişkenin ayarlanıp ayarlanmadığını yazdırın (koddaki kontrol bunu yapar) ve dotnet run komutunun export (veya $env:) çalıştırdığınız aynı terminalde başlatıldığından emin olun: değişken yalnızca o oturumda yaşar.
  • 404. Çoğunlukla model kimliği: tam deepseek-ai/DeepSeek-V4-Flash-0731 yerine kısa bir ad veya /v1 olmayan bir uç nokta (ayrıca OpenAIClientOptions değerinin gerçekten ChatClient içine geçirildiğini kontrol edin). Ayrıntılar API 401 veya 404: yanlış anahtar, temel URL veya model kimliği içinde.
  • error CS0246: The type or namespace name 'ApiKeyCredential' could not be found. Program.cs dosyasının üstünde using System.ClientModel; satırı eksik.

Aynı fikir başka bir dilde: openai-go ile Go sürümü.