JA ▾
API キーを取得

GetAiApiKey本番環境向けAI APIチェックリスト

PythonでLLMをインストールする方法:ローカルまたはAPI

モデルを自分のマシンで実行するか、1つの小さなPythonパッケージをインストールしてHTTP経由でホストされたモデルを呼び出すことができます。このページでは両方をカバーし、その後API経由の手順を順を追って説明します。

更新日:

Pythonスクリプトと光るクラウドモデルのキューブを結ぶケーブルのイラスト。API接続を示す

主要ポイント

  1. ローカルインストールにはモデルの重みと十分なメモリが必要です。API経由ではopenaiパッケージとキーのみが必要です。
  2. base URL を https://api.getaiapikey.com/v1 に設定し、モデルを uncensored に設定してください。
  3. ストリーミング、ツール呼び出し、JSONモードはすべて標準のOpenAIクライアントで動作します。
  4. HTTP 429が発生した場合は短時間リトライし、同時実行数を8以下に保ってください。

LLMインストールの2つの意味

「Pythonでllmをインストールする方法」と聞かれた場合、通常は2つの意味のどちらかを指します。1つ目はローカルでモデルを実行すること:重みをダウンロードし、ライブラリを使って自分のCPUまたはGPUでロードします。2つ目はクライアントライブラリをインストールし、Pythonコードが別の場所で実行されているモデルと通信できるようにすることです。どちらも有効であり、適切な選択はハードウェアと構築したいものによります。

API経由の方がはるかに短いです。pip install openaiを実行し、クライアントをベースURLにポイントしてモデルを呼び出します。重みもGPUドライバもメモリ計画も不要です。このページの残りの部分では、そのルートの手順とコードを提供し、比較のためにローカル版の短いセクションを含んでいます。

ローカルインストールかホストAPIか:選び方

質問ローカルインストールホスト型API
インストールするもの推論ライブラリとモデルの重みopenaiパッケージ
ハードウェアモデルに合わせたメモリと通常GPUHTTPS呼び出しができる任意のマシン
コストハードウェアと電気代トークン単位、前払いクレジットから
オフラインで動作はいいいえ
最初の応答までの時間ダウンロード、セットアップ、チューニング数分

すべてのデータを1台のマシンに保持する必要がある場合、オフラインで作業する必要がある場合、または重み自体を実験したい場合は、ローカルが適しています。llama.cppバインディングやHugging Face transformersなどのライブラリが通常の出発点です。選択するモデルのサイズによって異なるため、ハードウェア要件についてはそれらのドキュメントを確認してください。

すぐに動作する結果が欲しい場合、ラップトップに大きなモデルが収まらない場合、またはアプリが多くのユーザーにサービスを提供する必要がある場合はAPIが適しています。ハードウェアを購入するのではなく、トークン単位で課金されます。このサービスでは、サブスクリプションいいえで1M入力トークンあたり$0.15、1M出力トークンあたり$0.50です。詳細は料金ページをご覧ください。

ステップ1:仮想環境の作成とパッケージのインストール

インストールをクリーンに保つため仮想環境を使用してください。最近のPython 3リリースのいずれかがopenaiパッケージと動作します。

python3 -m venv .venv
source .venv/bin/activate
pip install openai

次にキーが必要です。GoogleまたはメールアドレスとパスワードでAPIキーページに登録してください。新規ユーザーはワンクリックで$0.50の無料トライアルクレジットを取得でき、有効期限は7日でカード不要です。キーをソースファイルではなく環境変数に保存してください:

export API_KEY="paste-your-key-here"

ステップ2:最初の呼び出しを行う

サービスはOpenAI互換なので、標準のOpenAIスクリプトからの変更点はベースURLとモデルIDのみです。モデルIDはuncensoredです。

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.getaiapikey.com/v1",
    api_key=os.environ["API_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a context window is in two sentences."},
    ],
    temperature=0.7,
    max_tokens=200,
)

print(resp.choices[0].message.content)
print(resp.usage.prompt_tokens, resp.usage.completion_tokens)

答えと2つのトークン数が表示されればインストール完了です。キーが機能することとモデルIDを確認するには、GET /v1/modelsを呼び出すこともできます:

for m in client.models.list():
    print(m.id)

Pythonを全く使わずにシェルから同じリクエストを送るには、ヘッダーAuthorization: Bearerをキーに続けてhttps://api.getaiapikey.com/v1/chat/completionsにcurlで1回呼び出すだけです。完全な手順はドキュメントのクイックスタートをご覧ください。

ステップ3:到着したトークンをストリーミングする

長い回答が完了するまで何も表示されないのは遅く感じられます。stream=Trueを設定すると、サーバーはサーバー送信イベントでトークンを送信します。stream_optionsを使用して最終チャンクで使用量のサマリーをリクエストできます。

stream = client.chat.completions.create(
    model="uncensored",
    messages=[{"role": "user", "content": "Write a short scene set in a lighthouse."}],
    stream=True,
    stream_options={"include_usage": True},
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)
    if chunk.usage:
        print("\n", chunk.usage.total_tokens, "tokens")

本番環境では1つの重要な点があります:ストリーミングリクエストはストリームが終了するまで同時実行スロットを保持します。フルキーは8つの同時リクエストを許可するため、アプリが多くの長いストリームを開く場合は、ユーザーが切断したときにストリームを閉じてください。

ステップ4:JSONモードとツール呼び出し

構造化された出力には、response_formatをJSONオブジェクトに設定します。また、プロンプトでモデルにJSONで回答するよう指示してください。この設定は有効なJSON構文を保証しますが、必要なフィールド名までは保証しないためです。

import json

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "Reply only with JSON: {\"title\": string, \"tags\": [string]}"},
        {"role": "user", "content": "Give me a title and tags for a post about slow travel."},
    ],
    response_format={"type": "json_object"},
)
data = json.loads(resp.choices[0].message.content)
print(data["title"], data["tags"])

ツール呼び出しは標準パターンに従います。関数を記述し、モデルがそれを呼び出すよう要求することがあります。自分で実行し、role: "tool"で結果を送り返します。

tools = [{
    "type": "function",
    "function": {
        "name": "get_time",
        "description": "Return the current time for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

messages = [{"role": "user", "content": "What time is it in Lisbon?"}]
first = client.chat.completions.create(
    model="uncensored", messages=messages, tools=tools, tool_choice="auto"
)

msg = first.choices[0].message
if msg.tool_calls:
    call = msg.tool_calls[0]
    messages.append(msg)
    messages.append({
        "role": "tool",
        "tool_call_id": call.id,
        "content": json.dumps({"time": "14:05"}),
    })
    final = client.chat.completions.create(
        model="uncensored", messages=messages, tools=tools
    )
    print(final.choices[0].message.content)

ツール呼び出しを信頼する前に、いくつかのプロンプトでテストしてください。どのモデルでも間違った関数を選択したり、引数を不適切に入力したりする可能性があるため、副作用のある何かを実行する前に独自のコードで引数を検証してください。

ステップ5:制限とエラーの処理

フルキーは8つの同時リクエストと1分あたり300リクエストを許可します。トライアルキーは2と60です。これらの制限を超えるとHTTP 429が発生します。エラーコードrate_limitedは1分あたりのリクエストが多すぎることを意味し、concurrencyは一度に多すぎることを意味します。一時的な過負荷時には、APIはRetry-After: 5ヘッダー付きで429も返します。

OpenAI Pythonクライアントは一部の失敗を自動的にリトライしますが、明示的なラッパーは動作を明確に保ちます:

import time
from openai import RateLimitError

def ask(messages, tries=4):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError:
            time.sleep(5 * (attempt + 1))
    raise RuntimeError("still rate limited after retries")

各応答にはX-Request-Id、X-Balance-USDおよびレート制限ヘッダーが含まれており、これらをログに記録できます。サポートに連絡する場合はリクエストIDを含めてください。失敗または拒否されたリクエストは課金されないため、リトライしても追加料金はかかりません。

サイズ制限も考慮してください。コンテキストウィンドウは100,000トークン(プロンプトと補完を含む)、最大リクエストボディは8 MBです。長いチャット履歴は、これらの数値に達する前に切り捨てまたは要約する必要があります。

呼び出しが失敗した場合

最初の実行の問題のほとんどは、いくつかのミスに起因します。他の何かを疑う前に、これらを順番に確認してください。

  • バージョンパスのないベースURL。値は/v1で終わる必要があります。クライアントは/chat/completionsを追加するため、/v1が欠けているとリクエストが間違ったルートに送られます。
  • キーが間違っているか、設定されていません。 キーはAuthorization: Bearerヘッダーに設定し、クライアントはapi_keyからこれを構築します。環境変数が空の場合、クライアントは起動時にエラーを発生させるか、空のキーを送信します。bool(os.environ.get("API_KEY"))を実行して確認してください。
  • 他のサービスのモデル名。ここで唯一のモデルIDはuncensoredです。他のチュートリアルにあるような名前は一致しません。
  • 残高いいえ。 X-Balance-USDヘッダーを確認してください。7日間のトライアルが終了したか、残高が尽きた場合は、$20以上のチャージが必要です。
  • 古いパッケージ。例がOpenAI(を使用しており、Pythonがその名前をインポートできない場合、それは1.0以前のパッケージです。pip install --upgrade openaiを実行してください。

ヘッダーを含む生の応答を表示するには、クライアントのraw-responseラッパーを使用してください:

raw = client.chat.completions.with_raw_response.create(
    model="uncensored",
    messages=[{"role": "user", "content": "ping"}],
    max_tokens=5,
)
print(raw.headers.get("x-request-id"), raw.headers.get("x-balance-usd"))
completion = raw.parse()
print(completion.choices[0].message.content)

これにより、答えの隣にリクエストIDと残高が表示され、cronジョブや起動スクリプトから実行できる簡単なヘルスチェックになります。

他のツールからの使用

エンドポイントはOpenAI形式に従っているため、他のPythonライブラリも同じ2つの設定で使用できます。カスタムOpenAIベースURLを受け付けるフレームワークはbase_urlとapi_keyのみが必要です。Nodeの場合、公式のopenaiパッケージは同じフィールドを受け取ります:

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.getaiapikey.com/v1",
  apiKey: process.env.API_KEY,
});

const r = await client.chat.completions.create({
  model: "uncensored",
  messages: [{ role: "user", content: "Say hello in five words." }],
});
console.log(r.choices[0].message.content);

これはテキストのみのサービスです:画像や音声の生成、埋め込み、ファインチューニングはありません。プロジェクトでそれらが必要な場合は、その部分に別のツールとこのAPIを組み合わせてください。このモデルは独立したプロバイダによって実行されるオープンウェイトモデルで、合法的な成人利用に対してコンテンツ拒否いいえで回答するように調整されています。未成年者が関与する性的コンテンツは常に禁止されています。

質問と回答

PythonでこのようにLLMを利用するにはGPUが必要ですか?

いいえ。モデルはプロバイダ側で実行されます。エンドポイントを呼び出すには、マシンにPythonとインターネット接続があれば十分です。

どのパッケージをインストールすればよいですか?

pipで公式のopenaiパッケージをインストールします。その後、Base URLをhttps://api.getaiapikey.com/v1に、モデルをuncensoredに設定します。

無料で試す方法はありますか?

新規ユーザーはサインアップ後にワンクリックで$0.50の無料トライアルクレジットを取得できます。有効期限は7日で、カードの登録は不要、1人1回限りです。

1つのリクエストの料金はどのくらいですか?

入力トークン2,000、出力トークン500のリクエストの料金は$0.00055です(1Mトークンあたり$0.15および$0.50)。成功したリクエストに対してのみ課金されます。

ストリーミングと関数呼び出しはサポートされていますか?

はい。SSEによるストリーミング、関数呼び出し、JSON モードはすべて標準的なOpenAIクライアントを通じて動作します。

キーはフォーム 1 つで手に入ります

アカウントを作成し、キーをコピーし、ベースURLを変更します。これでセットアップは完了です。