Kembali ke blog

API & SDKPanduan

Permintaan pertama di C# dengan openai-dotnet: endpoint, kunci, balasan

Kirim chat completion pertama Anda dari aplikasi konsol C#: setel Endpoint di pustaka resmi OpenAI .NET, baca kunci dari env, cetak balasan dan alasan selesai.

Oleh CheapTokens TeamDiterbitkan 4 menit baca

Sampul: C# dan pustaka OpenAI .NET terhubung ke endpoint CheapTokens
Di halaman ini
  1. Yang Anda butuhkan
  2. Bangun aplikasi konsol
  3. Kode, baris demi baris
  4. Yang seharusnya Anda lihat
  5. Mengalihkan layanan yang sudah ada
  6. Berapa biaya satu permintaan
  7. Jika tidak berhasil

Untuk mengirim permintaan dari C# ke CheapTokens, pertahankan pustaka resmi OpenAI untuk .NET dan setel OpenAIClientOptions.Endpoint ke https://api.cheaptokens.dev/v1. Berikan id model lengkap, misalnya deepseek-ai/DeepSeek-V4-Flash-0731, dan baca kunci dari variabel lingkungan. Panggilan ChatClient dan CompleteChat tetap persis seperti pada contoh OpenAI.

Misalkan Anda sudah memiliki layanan ASP.NET yang berbicara dengan OpenAI, dan Anda ingin mencoba endpoint dan model lain tanpa menyentuh sisa kode. Sebelum menghubungkan apa pun ke dalamnya, periksa tiga hal yang biasanya salah (kunci, endpoint, id model) di aplikasi konsol kecil. Itulah yang kami bangun di sini. Detail di bawah ini berasal dari README pustaka di GitHub (openai/openai-dotnet, diperiksa 5 November 2026) dan dari dokumentasi CheapTokens: halaman docs memiliki base URL yang sama.

Yang Anda butuhkan#

Paketnya bernama OpenAI di NuGet. Versi stabil terbaru pada 5 November 2026 adalah 2.15.0 (entri changelog-nya bertanggal 4 November). Paket ini menargetkan .NET 8 dan .NET Standard 2.0, dan README menyatakan bahwa paket ini berfungsi dengan semua aplikasi .NET Standard 2.0, jadi proyek lama pun tidak masalah.

Tiga nilai dimasukkan ke aplikasi:

  • base URL: https://api.cheaptokens.dev/v1 (kompatibel dengan OpenAI Chat Completions);
  • id model: deepseek-ai/DeepSeek-V4-Flash-0731. Gunakan id lengkap, nama pendek dari tabel harga tidak diterima. DeepSeek-V4-Flash memiliki jendela konteks 380K dan hingga 32.768 token keluaran per jawaban, satu harga kapan pun sepanjang hari;
  • kunci API dari akun CheapTokens Anda, disimpan di variabel lingkungan. Jika Anda tidak yakin cara menyimpannya, baca cara menyimpan kunci API dengan aman.

Bangun aplikasi konsol#

Langkah demi langkah

Buat proyek dan jalankan

Buat proyek konsol

bash
dotnet new console -o FirstRequest
cd FirstRequest

Tambahkan paket

bash
dotnet add package OpenAI

Masukkan kunci ke variabel lingkungan

Di bash atau zsh:

bash
export CHEAPTOKENS_API_KEY=your-key

Di Windows PowerShell:

powershell
$env:CHEAPTOKENS_API_KEY = "your-key"

Tempel kode dan jalankan

Ganti isi Program.cs dengan kode dari bagian berikutnya, lalu jalankan dotnet run.

Terminal dengan lima perintah yang membuat dan menjalankan aplikasi konsol
Lima perintah: buat proyek, masuk ke folder, tambahkan paket, setel kunci, jalankan.

Kode, baris demi baris#

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 menunjukkan pola ini untuk "proxy atau LLM self-hosted yang kompatibel dengan OpenAI": endpoint dimasukkan ke OpenAIClientOptions, kunci ke ApiKeyCredential (kunci berada di System.ClientModel, maka using pertama). Pemeriksaan di bagian atas adalah milik kami: pemeriksaan ini memberikan pesan yang jelas jika variabel tidak disetel.

CompleteChat dengan string biasa mengirim satu pesan pengguna dan menunggu seluruh jawaban. Teks balasan ada di completion.Content[0].Text. Alasan selesai ada di completion.FinishReason.

Alur: kunci dari env, ChatClient dengan Endpoint, CompleteChat, teks dan FinishReason
Apa yang terjadi dalam program dari kunci hingga balasan yang dicetak.

Yang seharusnya Anda lihat#

Anda seharusnya mendapatkan penjelasan singkat tentang token dan satu baris dengan alasan selesai; setelah akhir normal nilainya Stop (README membandingkan FinishReason dengan ChatFinishReason.Stop). Kata-kata balasan berubah dari satu eksekusi ke eksekusi berikutnya.

Baris kedua adalah yang layak dibaca. README membandingkan FinishReason dengan ChatFinishReason.Stop (model selesai dengan sendirinya) dan ChatFinishReason.ToolCalls (model ingin memanggil alat). Apa pun selain Stop dalam obrolan biasa berarti jawaban berakhir karena alasan lain, dan tersangka utamanya adalah batas panjang. Jika Anda melihat balasan yang berhenti di tengah kalimat, artikel ini menjelaskan finish_reason dan max_tokens.

Mengalihkan layanan yang sudah ada#

Jika layanan Anda sudah membuat ChatClient untuk OpenAI, Anda mengubah dua hal: string model dan opsi. Panggilan lainnya tetap berfungsi.

Bandingkan

Klien yang sama, dua baris yang diubah

Sebelum

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

Sesudah

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")
    });

Untuk permintaan pendek ada opsi kedua: zai-org/GLM-5.3-Flash (konteks 390K, hingga 8.192 token keluaran). Anda hanya mengubah string model. Daftar id yang dapat digunakan kunci Anda hanya berjarak satu permintaan, lihat Daftar model dengan GET /v1/models.

Berapa biaya satu permintaan#

Misalkan sebuah layanan menangani 1.000 permintaan sehari, masing-masing sekitar 300 token masuk dan 400 token keluar. Satu permintaan seperti itu berbiaya $0.000045 pada DeepSeek-V4-Flash. Tabel di bawah ini menunjukkan 1.000 permintaan yang sama pada ketiga model di samping OpenRouter. Secara total, dengan input dan output dihitung bersama, DeepSeek-V4-Flash lebih murah daripada OpenRouter. Harga terkini ada di halaman harga, dan halaman DeepSeek mencantumkan apa yang ditawarkan model tersebut.

Model Per permintaan 1.000 permintaan OpenRouter, 1.000 permintaan
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

300 token input dan 400 token output per permintaan. Harga per 1 juta token adalah harga saat ini dan berubah seiring tarif kami; kolom OpenRouter menunjukkan harga referensi untuk beban kerja yang sama.

Jika tidak berhasil#

  • 401. Kunci hilang atau salah. Cetak apakah variabel sudah disetel (pemeriksaan dalam kode melakukan ini) dan pastikan dotnet run dijalankan di terminal yang sama tempat Anda menjalankan export (atau $env:): variabel hanya hidup di sesi itu.
  • 404. Paling sering id model: nama pendek alih-alih deepseek-ai/DeepSeek-V4-Flash-0731 lengkap, atau endpoint tanpa /v1 (juga periksa bahwa OpenAIClientOptions benar-benar diteruskan ke ChatClient). Detailnya ada di API 401 atau 404: kunci, base URL, atau id model yang salah.
  • error CS0246: The type or namespace name 'ApiKeyCredential' could not be found. Baris using System.ClientModel; hilang di bagian atas Program.cs.

Ide yang sama dalam bahasa lain: versi Go dengan openai-go.