CometAPI の POST /v1/chat/completions を使用して複数メッセージの会話を送信し、ストリーミング、temperature、max_tokens を制御しながら LLM の応答を取得します。
from openai import OpenAI
client = OpenAI(
base_url="https://api.cometapi.com/v1",
api_key="<COMETAPI_KEY>",
)
completion = client.chat.completions.create(
model="gpt-5.4",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"},
],
)
print(completion.choices[0].message){
"id": "chatcmpl-DNA27oKtBUL8TmbGpBM3B3zhWgYfZ",
"object": "chat.completion",
"created": 1774412483,
"model": "gpt-4.1-nano-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Four",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 29,
"completion_tokens": 2,
"total_tokens": 31,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_490a4ad033"
}model パラメータを変更するだけでモデルを切り替えられます。
base_url を https://api.cometapi.com/v1 に変更するだけで CometAPI と連携できます。reasoning_effort は推論モデル(o-series、GPT-5.1+)にのみ適用され、一部のモデルは logprobs や n > 1 をサポートしないことがあります。o1-pro)では、代わりに responses エンドポイントを使用してください。| Role | Description |
|---|---|
system | アシスタントの動作と個性を設定します。会話の先頭に配置されます。 |
developer | 新しいモデル(o1+)では system の代わりに使います。ユーザー入力に関係なく、モデルが従うべき指示を提供します。 |
user | エンドユーザーからのメッセージです。 |
assistant | 以前のモデル応答で、会話履歴を維持するために使用されます。 |
tool | ツール/関数呼び出しの結果です。元のツール呼び出しに一致する tool_call_id を含める必要があります。 |
system よりも developer を推奨します。どちらも動作しますが、developer のほうが指示追従性が強くなります。content に配列形式を使用します。
{
"role": "user",
"content": [
{"type": "text", "text": "Describe this image"},
{
"type": "image_url",
"image_url": {
"url": "https://example.com/image.png",
"detail": "high"
}
}
]
}
detail パラメータは画像解析の深さを制御します。
low — 高速で、使用するトークン(Token)が少ない(固定コスト)high — 詳細な解析を行い、より多くのトークン(Token)を消費auto — モデルが自動で決定(デフォルト)stream を true に設定すると、レスポンスは Server-Sent Events (SSE) として配信されます。各イベントには、増分コンテンツを含む chat.completion.chunk オブジェクトが含まれます。
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"role":"assistant"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"Hello"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{"content":"!"},"finish_reason":null}]}
data: {"id":"chatcmpl-xxx","object":"chat.completion.chunk","choices":[{"index":0,"delta":{},"finish_reason":"stop"}]}
data: [DONE]
stream_options.include_usage を true に設定します。usage データは [DONE] の直前の最後のチャンクに表示されます。response_format を使用して、特定のスキーマに一致する有効な JSON を返すようモデルに強制できます。
{
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "result",
"strict": true,
"schema": {
"type": "object",
"properties": {
"answer": {"type": "string"},
"confidence": {"type": "number"}
},
"required": ["answer", "confidence"],
"additionalProperties": false
}
}
}
}
json_schema)では、出力がスキーマに正確に一致することが保証されます。JSON Object モード(json_object)では、有効な JSON であることのみが保証され、構造は強制されません。{
"tools": [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather for a city",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string", "description": "City name"}
},
"required": ["location"]
}
}
}
],
"tool_choice": "auto"
}
finish_reason: "tool_calls" が設定され、message.tool_calls 配列に関数名と引数が含まれます。その後、関数を実行し、対応する tool_call_id を持つ tool メッセージとして結果を返します。
| Field | Description |
|---|---|
id | 一意の completion 識別子(例: chatcmpl-abc123)。 |
object | 常に chat.completion。 |
model | レスポンスを生成したモデル(バージョンサフィックスを含む場合があります)。 |
choices | completion 候補の配列(通常は 1、n > 1 の場合を除く)。 |
choices[].message | role、content、および必要に応じて tool_calls を含む assistant のレスポンスメッセージ。 |
choices[].finish_reason | モデルが停止した理由: stop、length、tool_calls、または content_filter。 |
usage | トークン消費の内訳: prompt_tokens、completion_tokens、total_tokens、および詳細なサブカウント。 |
system_fingerprint | デバッグ時の再現性のためのバックエンド設定フィンガープリント。 |
プロバイダー間のパラメータサポート
| Parameter | OpenAI GPT | Claude (via compat) | Gemini (via compat) |
|---|---|---|---|
temperature | 0–2 | 0–1 | 0–2 |
top_p | 0–1 | 0–1 | 0–1 |
n | 1–128 | 1 のみ | 1–8 |
stop | 最大 4 | 最大 4 | 最大 5 |
tools | ✅ | ✅ | ✅ |
response_format | ✅ | ✅ (json_schema) | ✅ |
logprobs | ✅ | ❌ | ❌ |
reasoning_effort | o-series, GPT-5.1+ | ❌ | ❌ (Gemini native では thinking を使用) |
max_tokens と max_completion_tokens
max_tokens — 従来のパラメータです。ほとんどのモデルで動作しますが、新しい OpenAI モデルでは非推奨です。max_completion_tokens — GPT-4.1、GPT-5 シリーズ、o-series モデルで推奨されるパラメータです。出力トークンと推論トークンの両方を含むため、推論モデルでは必須です。system と developer role
system — 従来の指示ロールです。すべてのモデルで動作します。developer — o1 モデルで導入されました。新しいモデルでは、より強力な指示追従を提供します。古いモデルでは system の動作にフォールバックします。developer を使用してください。429 Too Many Requests が発生した場合は、指数バックオフを実装してください。
import time
import random
from openai import OpenAI, RateLimitError
client = OpenAI(
base_url="https://api.cometapi.com/v1",
api_key="<COMETAPI_KEY>",
)
def chat_with_retry(messages, max_retries=3):
for i in range(max_retries):
try:
return client.chat.completions.create(
model="gpt-5.4",
messages=messages,
)
except RateLimitError:
if i < max_retries - 1:
wait_time = (2 ** i) + random.random()
time.sleep(wait_time)
else:
raise
messages 配列に含めてください。
messages = [
{"role": "developer", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is Python?"},
{"role": "assistant", "content": "Python is a high-level programming language..."},
{"role": "user", "content": "What are its main advantages?"},
]
finish_reason は何を意味しますか?| Value | Meaning |
|---|---|
stop | 自然に完了した、または stop シーケンスに到達しました。 |
length | max_tokens または max_completion_tokens の上限に達しました。 |
tool_calls | モデルが 1 つ以上のツール/関数呼び出しを実行しました。 |
content_filter | コンテンツポリシーにより出力がフィルタリングされました。 |
max_completion_tokens を使って出力長を制限します。gpt-5.4-mini または gpt-5.4-nano)。usage フィールドでトークン使用量を監視します。Bearer token authentication. Use your CometAPI key.
Model ID to use for this request. See the Models page for current options.
"gpt-4.1"
A list of messages forming the conversation. Each message has a role (system, user, assistant, or developer) and content (text string or multimodal content array).
Show child attributes
If true, partial response tokens are delivered incrementally via server-sent events (SSE). The stream ends with a data: [DONE] message.
Sampling temperature between 0 and 2. Higher values (e.g., 0.8) produce more random output; lower values (e.g., 0.2) make output more focused and deterministic. Recommended to adjust this or top_p, but not both.
0 <= x <= 2Nucleus sampling parameter. The model considers only the tokens whose cumulative probability reaches top_p. For example, 0.1 means only the top 10% probability tokens are considered. Recommended to adjust this or temperature, but not both.
0 <= x <= 1Number of completion choices to generate for each input message. Defaults to 1.
Up to 4 sequences where the API will stop generating further tokens. Can be a string or an array of strings.
Maximum number of tokens to generate in the completion. The total of input + output tokens is capped by the model's context length.
Number between -2.0 and 2.0. Positive values penalize tokens based on whether they have already appeared, encouraging the model to explore new topics.
-2 <= x <= 2Number between -2.0 and 2.0. Positive values penalize tokens proportionally to how often they have appeared, reducing verbatim repetition.
-2 <= x <= 2A JSON object mapping token IDs to bias values from -100 to 100. The bias is added to the model's logits before sampling. Values between -1 and 1 subtly adjust likelihood; -100 or 100 effectively ban or force selection of a token.
A unique identifier for your end-user. Helps with abuse detection and monitoring.
An upper bound for the number of tokens to generate, including visible output tokens and reasoning tokens. Use this instead of max_tokens for GPT-4.1+, GPT-5 series, and o-series models.
Specifies the output format. Use {"type": "json_object"} for JSON mode, or {"type": "json_schema", "json_schema": {...}} for strict structured output.
Show child attributes
A list of tools the model may call. Currently supports function type tools.
Show child attributes
Controls how the model selects tools. auto (default): model decides. none: no tools. required: must call a tool.
Whether to return log probabilities of the output tokens.
Number of most likely tokens to return at each position (0-20). Requires logprobs to be true.
0 <= x <= 20Controls the reasoning effort for o-series and GPT-5.1+ models.
low, medium, high Options for streaming. Only valid when stream is true.
Show child attributes
Specifies the processing tier.
auto, default, flex, priority Successful chat completion response.
Unique completion identifier.
"chatcmpl-abc123"
chat.completion "chat.completion"
Unix timestamp of creation.
1774412483
The model used (may include version suffix).
"gpt-5.4-2025-07-16"
Array of completion choices.
Show child attributes
Show child attributes
"default"
"fp_490a4ad033"
from openai import OpenAI
client = OpenAI(
base_url="https://api.cometapi.com/v1",
api_key="<COMETAPI_KEY>",
)
completion = client.chat.completions.create(
model="gpt-5.4",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Hello!"},
],
)
print(completion.choices[0].message){
"id": "chatcmpl-DNA27oKtBUL8TmbGpBM3B3zhWgYfZ",
"object": "chat.completion",
"created": 1774412483,
"model": "gpt-4.1-nano-2025-04-14",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "Four",
"refusal": null,
"annotations": []
},
"logprobs": null,
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 29,
"completion_tokens": 2,
"total_tokens": 31,
"prompt_tokens_details": {
"cached_tokens": 0,
"audio_tokens": 0
},
"completion_tokens_details": {
"reasoning_tokens": 0,
"audio_tokens": 0,
"accepted_prediction_tokens": 0,
"rejected_prediction_tokens": 0
}
},
"service_tier": "default",
"system_fingerprint": "fp_490a4ad033"
}