APIとSDKガイド
openai-dotnet を使った C# での最初のリクエスト: エンドポイント、キー、返信
C# コンソールアプリから最初のチャット補完を送信します: 公式 OpenAI .NET ライブラリで Endpoint を設定し、キーを環境変数から読み取り、返信と終了理由を出力します。

C# から CheapTokens にリクエストを送るには、公式の OpenAI .NET ライブラリをそのまま使い、OpenAIClientOptions. を https:/ に設定します。完全なモデル id(例えば deepseek-)を渡し、キーは環境変数から読み取ります。ChatClient と CompleteChat の呼び出しは OpenAI のサンプルとまったく同じままです。
すでに OpenAI と通信する ASP.NET サービスがあり、残りのコードに触れずに別のエンドポイントとモデルを試したいとします。組み込む前に、よくある 3 つの失敗要因(キー、エンドポイント、モデル id)を小さなコンソールアプリで確認しましょう。ここで作るのはそれです。以下の詳細は、GitHub 上のライブラリの README(openai/openai-dotnet、2026 年 11 月 5 日確認)と CheapTokens のドキュメントに基づいています。ドキュメントページ にも同じベース URL が記載されています。
必要なもの#
パッケージは NuGet 上で OpenAI という名前です。2026 年 11 月 5 日時点の最新安定版は 2.15.0 です(変更履歴のエントリは 11 月 4 日付)。.NET 8 と .NET Standard 2.0 をターゲットにしており、README にはすべての .NET Standard 2.0 アプリケーションで動作するとあるので、古いプロジェクトでも問題ありません。
アプリには 3 つの値が必要です:
- ベース URL:
https:/(OpenAI Chat Completions 互換)。/ api. cheaptokens. dev/ v1 - モデル id:
deepseek-。完全な id を使ってください。価格表の短い名前は受け付けられません。DeepSeek-V4-Flash は 380K のコンテキストウィンドウと回答あたり最大 32,768 出力トークンを持ち、時間帯を問わず単一価格です。ai/ DeepSeek- V4- Flash- 0731 - CheapTokens アカウントの API キー。環境変数に保存します。保存方法が不明な場合は、API キーを安全に保存する方法 をお読みください。
コンソールアプリを作る#
ステップバイステップ
プロジェクトを作成して実行する
コンソールプロジェクトを作成する
dotnet new console -o FirstRequest
cd FirstRequestパッケージを追加する
dotnet add package OpenAIキーを環境変数に入れる
bash または zsh の場合:
export CHEAPTOKENS_API_KEY=your-keyWindows PowerShell の場合:
$env:CHEAPTOKENS_API_KEY = "your-key"コードを貼り付けて実行する
Program.cs の内容を次のセクションのコードに置き換え、dotnet run を実行します。

コードを 1 行ずつ#
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 では「プロキシまたはセルフホストの OpenAI 互換 LLM」向けにこのパターンが示されています。エンドポイントは OpenAIClientOptions に、キーは ApiKeyCredential に入れます(これは System. に存在するため、最初の using が必要です)。先頭のチェックは独自のもので、変数が設定されていない場合に明確なメッセージを出します。
CompleteChat にプレーンな文字列を渡すと、1 つのユーザーメッセージを送信し、回答全体を待ちます。返信テキストは completion. にあります。終了理由は completion. にあります。

表示されるはずのもの#
トークンについての短い説明と、終了理由を含む行が表示されるはずです。正常終了後は Stop です(README では FinishReason と ChatFinishReason. を比較しています)。返信の文言は実行ごとに変わります。
読む価値があるのは 2 行目です。README では FinishReason を ChatFinishReason.(モデルが自力で終了した)と ChatFinishReason.(モデルがツールを呼び出したい)と比較しています。通常のチャットで Stop 以外が返ってきた場合、回答は別の理由で終了しており、よくある原因は長さ制限です。文の途中で止まる返信が表示された場合は、この記事で finish_reason と max_tokens を説明しています。
既存のサービスを切り替える#
サービスがすでに OpenAI 用の ChatClient を作成している場合、変更するのは 2 つだけです: モデル文字列とオプションです。残りの呼び出しはそのまま動作します。
比較する
同じクライアント、変更は 2 行
変更前
ChatClient client = new(
model: "your-current-model",
credential: new ApiKeyCredential(apiKey));変更後
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")
});短いリクエストには 2 つ目の選択肢があります: zai-(390K コンテキスト、最大 8,192 出力トークン)。変更するのは model 文字列だけです。キーで使用できる id の一覧は 1 回のリクエストで取得できます。GET /v1/models でモデルを一覧表示する を参照してください。
1 リクエストのコスト#
サービスが 1 日 1,000 リクエストを処理し、各リクエストが約 300 入力トークン、400 出力トークンだとします。そのようなリクエスト 1 回のコストは DeepSeek-V4-Flash で $0.000045 です。以下の表は、同じ 1,000 リクエストを 3 つのモデルすべてで OpenRouter と並べて示しています。入力と出力を合計すると、DeepSeek-V4-Flash は OpenRouter より安くなります。最新の価格は価格ページにあり、DeepSeek ページにはモデルが提供する内容が記載されています。
| モデル | 入力 $/1M | 出力 $/1M | リクエストあたり | 1,000 リクエスト | OpenRouter、1,000 リクエスト |
|---|---|---|---|---|---|
| GLM-5.3-Flash | $0.02 | $0.04 | $0.000022 | $0.022 | $0.0433 |
| DeepSeek-V4-Flash | $0.015 | $0.10 | $0.000045 | $0.0445 | $0.077 |
| MiniMax-M2.7 | $0.05 | $0.15 | $0.000075 | $0.075 | $0.90 |
リクエストあたり 300 入力トークンと 400 出力トークン。100万トークンあたりの価格は現行のもので、当社の料金体系に合わせて変動します。OpenRouter 列は同じワークロードの参考価格を示しています。
うまくいかない場合#
- 401。 キーが欠落しているか間違っています。変数が設定されているかどうかを出力し(コード内のチェックがこれを行います)、
dotnet runがexport(または$env:)を実行したのと同じターミナルで起動されていることを確認してください。変数はそのセッションにのみ存在します。 - 404。 最も多いのはモデル id です: 完全な
deepseek-の代わりに短い名前を使っている、またはai/ DeepSeek- V4- Flash- 0731 /v1のないエンドポイントを使っている(OpenAIClientOptionsが実際にChatClientに渡されていることも確認してください)。詳細は API 401 または 404: キー、ベース URL、モデル id の誤り にあります。 - error CS0246: 型または名前空間名 'ApiKeyCredential' が見つかりませんでした。
Program.csの先頭にusing System.行がありません。ClientModel;
別の言語での同じ内容: openai-go を使った Go 版。



