本文へ移動
すべてのドキュメント

コード

LiteLLM

openai/ プレフィックスと api_base を使って、LiteLLMからnokeepに接続します。プロキシでもPython SDKでも動きます。

2026年10月29日 確認

プロキシ

config.yaml
model_list:
  - model_name: deepseek-v4.1-flash-uncensored
    litellm_params:
      model: openai/deepseek-v4.1-flash-uncensored
      api_base: https://nokeep.ai/v1
      api_key: os.environ/NOKEEP_API_KEY
    model_info:
      input_cost_per_token: 0.00000045
      cache_read_input_token_cost: 0.000000011
      output_cost_per_token: 0.00000175
  - model_name: glm-5.3-flash-uncensored
    litellm_params:
      model: openai/glm-5.3-flash-uncensored
      api_base: https://nokeep.ai/v1
      api_key: os.environ/NOKEEP_API_KEY
    model_info:
      input_cost_per_token: 0.0000002
      cache_read_input_token_cost: 0.00000004
      output_cost_per_token: 0.00000065
Shell
pip install 'litellm[proxy]'
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
litellm --config config.yaml

アプリは model_name を指定してプロキシ(デフォルトは http://0.0.0.0:4000)を呼び出し、プロキシがnokeepを呼び出します。model_info にはnokeepの料金が1トークンごとに入るので、LiteLLMの支出の追跡が請求額と一致します。これがないと、LiteLLMはnokeepのモデルの料金を知らず、呼び出しにいくらかかったかを数えられません。

Python SDK

Shell
pip install litellm
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
Python
import os
import litellm

reply = litellm.completion(
    model="openai/deepseek-v4.1-flash-uncensored",
    api_base="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    messages=[{"role": "user", "content": "Name three good names for a tavern."}],
)
print(reply.choices[0].message.content)
print(reply.usage)

nokeepのネイティブプロバイダーはLiteLLMに提案済みです。リリースされるまでは、api_base と組み合わせた openai/ プレフィックスが接続方法です。リクエストはそのまま送られます。

ストリーミング

Python
import os
import litellm

stream = litellm.completion(
    model="openai/deepseek-v4.1-flash-uncensored",
    api_base="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    messages=[{"role": "user", "content": "Tell me a story in three lines."}],
    stream=True,
    stream_options={"include_usage": True},
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
    if getattr(chunk, "usage", None):
        print("\n", chunk.usage)

ツール、思考、サンプラー

Python
import os
import litellm

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get the weather in a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

reply = litellm.completion(
    model="openai/deepseek-v4.1-flash-uncensored",
    api_base="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    messages=[{"role": "user", "content": "What's the weather in Lisbon?"}],
    tools=tools,
    reasoning_effort="high",
    max_tokens=4000,
    extra_body={"min_p": 0.05},  # fields LiteLLM has no argument for
)
print(reply.choices[0].message.tool_calls)

openai/ プレフィックスを使うと、reasoning_effort と tools はそのまま渡されます。プロキシでは、litellm_params の下でモデルごとの固定フィールドを設定できます(例:reasoning_effort: high)。呼び出し側がそれぞれ指定することもできます。ツール呼び出しと思考も参照してください。

注意点

  • `reasoning_effort` はモデル自身の値しか受け付けません。 deepseek-v4.1-flash-uncensored は none、low、high、max を受け付け、glm-5.3-flash-uncensored は low、high を受け付けます。他のアプリの minimal、medium、xhigh は、モデルで最も近いレベルで動きます(medium は high、xhigh はそのモデルにあれば max として扱われます)。それ以外の値は 400 invalid_reasoning_effort になります。思考を参照してください。
  • GLMはツールを自分で選びます。 glm-5.3-flash-uncensored は tool_choice の auto と none だけを受け付けます。ツールを強制する(required や関数名の指定)と 400 unsupported_tool_choice になります。ツールを必ず呼ばせたい場合はDeepSeekを使ってください。
  • モデルが受け付けないフィールドは、拒否されず無視されます。 呼び出しは成功し、x-nokeep-ignored レスポンスヘッダーに無視されたものが記載されます。GLMが受け付けるのは tools、tool_choice、reasoning_effort だけなので、temperature と response_format は無視されます。各モデルが受け付けるフィールドを参照してください。
  • コンテンツパーツはテキストと画像だけです。 image_url パーツは deepseek-v4.1-flash-uncensored で動きます。GLMはテキストしか読めません。音声やファイルのパーツ(PDFなど)は 400 unsupported_input になります。
  • `n` は1でなければなりません。 複数の返信が必要な場合は、複数回呼び出してください。

drop_params: true を指定すると、LiteLLMは呼び出し前に、プロバイダーが受け付けないと判断したフィールドを削除します。nokeepは、モデルが受け付けないものを既に削除して x-nokeep-ignored に記載するので、この設定は必要ありません。

よくある質問

nokeepのキーはconfig.yamlに書きますか?

いいえ。api_key: os.environ/NOKEEP_API_KEY と書けば、LiteLLMは起動時に環境変数からキーを読み込みます。

nokeepの呼び出しにコストが表示されないのはなぜですか?

LiteLLMはnokeepの料金を知らないためです。上のconfigにある model_info ブロックを追加してください。そこの料金は請求と同じ表から取られています。請求では、各呼び出しが1クレジット単位で切り上げられます。