xAIのGrokモデルを自社アプリケーションに統合する作業は、標準的なREST仕様およびOpenAI SDKとの完全な互換性により、極めてシンプルかつ迅速に行えます。Grok APIは https://api.x.ai/v1 をベースURLとして稼働しており、標準的なBearerトークンによる認証を設定するだけで、フラグシップ推論モデル(grok-4.7)や高速コーディングモデル(grok-build-0.1)を呼び出し、複数ターンの関数呼び出し(Function Calling / Tool Calling)を通じて社内データベースや外部APIと柔軟に連携させることが可能です。
本記事では、APIキーの発行と環境設定、ワークロードに応じたモデルエンドポイントの選定、そして本番環境で堅牢に動作する関数呼び出しの実装手順を解説します。
1. APIキーの設定と認証
Grok APIへのアクセス管理は、xAI Console(https://console.x.ai)を通じて一元的に行われます。
ステップ1: APIキーの発行
- xAI Console にアクセスし、アカウント登録またはログインを行います。
- Billing(請求)セクションでクレジットを購入し、API利用可能な残高を確保します。
- API Keys 管理ページ(
https://console.x.ai/team/default/api-keys)を開き、Create API Key をクリックします。 - 生成されたキーを速やかにコピーして安全な場所に保管します(モーダルを閉じると再表示されません)。
ステップ2: 環境変数の設定
APIキーはソースコードにハードコードせず、XAI_API_KEY という名前の環境変数として設定します。
export XAI_API_KEY="xai-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Node.jsやPythonプロジェクトでは、プロジェクトルートの .env ファイルに記述します。
XAI_API_KEY=xai-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ステップ3: クライアントSDKの初期化
xAIはOpenAIのスキーマと互換性があるため、公式の xai-sdk、広く普及している openai ライブラリ、またはVercel AI SDKから直接接続できます。
Python(OpenAI公式ライブラリを使用):
import os
from openai import OpenAI
client = OpenAI(
api_key=os.getenv("XAI_API_KEY"),
base_url="https://api.x.ai/v1",
)
Python(xAIネイティブSDKを使用):
import os
from xai_sdk import Client
client = Client(api_key=os.getenv("XAI_API_KEY"))
Node.js / TypeScript(openai パッケージを使用):
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.XAI_API_KEY,
baseURL: "https://api.x.ai/v1",
});
2. モデルエンドポイントとアーキテクチャの選定
xAIは2種類の主要なHTTP推論エンドポイントと、レイテンシやコンテキスト長に応じたモデル群を提供しています。
エンドポイントプロトコル: /v1/responses と /v1/chat/completions
https://api.x.ai/v1/responses(推奨される最新エンドポイント): 自律型エージェント(Agentic)ワークフロー向けに設計されており、構造化入力配列、previous_response_idを用いた状態維持、サーバー側検索ツールとの連動をネイティブサポートします。https://api.x.ai/v1/chat/completions(OpenAI互換エンドポイント): 既存のOpenAI Chat Completionsと完全な互換性があり、baseURLとapiKeyを切り替えるだけで既存コードをそのまま流用できます。
テキスト・推論モデル一覧と選択基準
| モデル名 / エイリアス | コンテキスト長 | 最適なユースケース | 料金(100万トークンあたり) |
|---|---|---|---|
grok-4.7 (grok-4.7-latest) | 500,000 tokens | 最上位の推論モデル。複雑なエージェント設計、深いコード解析、複数ツールのオーケストレーションに最適化。推論深度(low, medium, high, xhigh)の調整が可能。 | 入力 $2.00 / 出力 $6.00(キャッシュ入力 $0.50) |
grok-build-0.1 (grok-code-fast-1) | 256,000 tokens | コード生成・補完に特化した高速モデル。インラインコード補全、リファクタリング、テストコード自動生成向け。 | 入力 $1.00 / 出力 $2.00(キャッシュ入力 $0.20) |
grok-4.3 (grok-4.3-latest) | 1,000,000 tokens | 100万トークンの超長大コンテキストを低コストで処理。大規模リポジトリの解析や長編ドキュメントの横断検索向け。 | 入力 $1.25 / 出力 $2.50(キャッシュ入力 $0.20) |
grok-4.20-multi-agent-0309 | 1,000,000 tokens | 複数エージェント協調システムや分散タスク向けに調整されたアーキテクチャ。 | 入力 $1.25 / 出力 $2.50(キャッシュ入力 $0.20) |
補足: テキスト以外に、リアルタイム双方向音声向けのエンドポイント grok-voice-think-fast-2.0(Voice API)や、画像・動画生成向けの grok-imagine-image-2.0(Imagine API)も用意されています。
3. 関数呼び出し(Function Calling / Tool Calling)の実装
関数呼び出しにより、Grokは単にテキストを生成するだけでなく、外部APIの呼び出しやデータベースクエリを実行するための構造化された引数を自律的に組み立てることができます。
処理のライフサイクル
- ツール定義: リクエスト内でJSON Schema形式のツール一覧(
name,description,parameters)を渡します。 - モデルによる判断: Grokがユーザーの入力を解析し、外部データの取得が必要かどうかを判断します。
- 呼び出し要求の返却: モデルが関数名と引数JSONを含む
tool_callsを返し、出力を一時停止します。 - ローカル実行: アプリケーション側で引数を展開し、実際の業務ロジックを実行します。
- 結果の送信と最終回答: 関数の戻り値をGrokに送り返し、モデルがそれを踏まえて最終的な回答を生成します。
完全な実装例(Python + OpenAIクライアント)
以下は、responses エンドポイントを用いてユーザーアカウント情報を照会するツールを定義し、Grokからの要求を受け取って実行結果を返すコード例です。
import os
import json
from openai import OpenAI
# 1. クライアントの初期化
client = OpenAI(
api_key=os.getenv("XAI_API_KEY"),
base_url="https://api.x.ai/v1",
)
# 2. JSON Schemaに準拠したツールの定義
tools = [
{
"type": "function",
"name": "fetch_user_account",
"description": "アカウントIDに基づいて、ユーザープロファイル、契約プラン、現在のステータスを取得します。",
"parameters": {
"type": "object",
"properties": {
"account_id": {
"type": "string",
"description": "ユーザーアカウント識別子(例: 'usr_10294')"
},
"include_usage_stats": {
"type": "boolean",
"description": "当請求サイクルのトークン使用量データを含めるかどうか",
"default": False
}
},
"required": ["account_id"]
}
}
]
# ローカル関数のモック実装
def execute_fetch_user_account(account_id: str, include_usage_stats: bool = False):
return {
"account_id": account_id,
"name": "Alex Mercer",
"tier": "Enterprise",
"status": "Active",
"usage_tokens": 1420500 if include_usage_stats else None
}
# 3. ツール定義を含めた問い合わせの送信
user_query = "アカウント usr_10294 の情報を照会し、有効な Enterprise プランに加入しているか確認してください。"
response = client.responses.create(
model="grok-4.7",
input=[{"role": "user", "content": user_query}],
tools=tools,
)
# 4. モデルからのツール呼び出しリクエストを処理
for item in response.output:
if item.type == "function_call":
func_name = item.name
func_args = json.loads(item.arguments)
call_id = item.call_id
print(f"モデルからツール呼び出しが要求されました: {func_name}, 引数: {func_args}")
if func_name == "fetch_user_account":
tool_result = execute_fetch_user_account(**func_args)
# 5. 実行結果をモデルに送り返し、推論を継続
followup = client.responses.create(
model="grok-4.7",
input=[{
"type": "function_call_output",
"call_id": call_id,
"output": json.dumps(tool_result)
}],
tools=tools,
previous_response_id=response.id,
)
# モデルによる最終回答を表示
for followup_item in followup.output:
if followup_item.type == "message":
print("\n最終回答:\n", followup_item.content[0].text)
4. 本番運用のための重要仕様と応用機能
Grokでツール呼び出しシステムを構築する際は、以下の技術要件に留意する必要があります。
- ルートスキーマの型制約: ツールの
parameters定義では、ルート型が厳格に"type": "object"(または各要素がobjectであるoneOf/anyOf)である必要があります。プリミティブ値や配列をルートに直接設定すると、HTTP 400エラーで拒否されます。 - 並列関数呼び出し(Parallel Function Calling): Grokはデフォルトで並列呼び出しに対応しており、複数データ源の同時照会が必要な場合、1回のレスポンスで複数のツール呼び出しを発行できます。順次実行したい場合は
parallel_tool_calls: falseを指定します。 - ツール選択の制御(
tool_choice):"auto"(デフォルト): モデルがテキスト回答かツール呼び出しを自動判定。"required": 少なくとも1つのツール呼び出しを強制。"none": ツール呼び出しを無効化。{"type": "function", "function": {"name": "fetch_user_account"}}: 特定の関数実行を強制。
- 組み込みツールと独自ツールの統合: Grokはハイブリッド実行に対応しています。開発者が定義したクライアント側の関数と、xAIが提供するサーバー側ツール(
{"type": "web_search"}Web検索や{"type": "x_search"}X検索)を同一リクエストで混在させることが可能です。サーバー側ツールはxAIインフラ上で自動完結し、独自関数のみがクライアントに返却されて実行されます。 - 単一チャンクでのストリーミング: ストリーミング(Streaming)モード時、Grokは関数呼び出しメタデータを分割せず、単一のチャンクでまとめて返却するため、クライアント側でのJSON断片の再結合処理が不要です。