Ling 3.0 Flash VLは、Novita AIのOpenAI互換APIを通じてテキスト・画像・動画の入力を受け付けます。ベースURLに https://api.novita.ai/openai を設定し、モデルIDに inclusionai/ling-3.0-flash-vl を使用し、標準のchat completionsメッセージ内に画像URLまたはdata URLを配置します。このガイドでは、セットアップ、画像リクエスト、動画ワークフロー、関数呼び出し、推論制御、本番環境での確認事項に焦点を当てます。
モデルの位置づけ、利用可能性、カタログの文脈については、Ling 3.0 Flash VL on Novita AI:提供開始・機能・価格 を参照してください。テキストのみの統合については、このガイドと Ling 3.0 Flash APIクイックスタート を比較してください。
必要なもの
| 項目 | 値 |
|---|---|
| APIキー | NOVITA_API_KEY に設定したNovita AIのAPIキー |
| OpenAI互換ベースURL | https://api.novita.ai/openai |
| chat completionsエンドポイント | POST https://api.novita.ai/openai/v1/chat/completions |
| モデルID | inclusionai/ling-3.0-flash-vl |
Novita AI LLMガイド には、OpenAI互換クライアントのセットアップが記載されています。vision-languageガイド には、content 配列のフォーマット、image_url エントリ、画像の詳細度、base64 data URLが記載されています。2026年9月9日に確認したモデルページには、テキスト・画像・動画の入力、テキスト出力、関数呼び出し、推論、256Kのコンテキストウィンドウ、32Kの最大出力が記載されています。
キーはソースコードに直接書かず、シェルにエクスポートしてください:
export NOVITA_API_KEY="your_api_key"
Pythonでの画像リクエスト
OpenAI Python SDKでは、ユーザーメッセージの content に配列を使用できます。最初に視覚入力を配置し、その後に指示を別のテキスト項目として追加します。
import os
from openai import OpenAI
client = OpenAI(
base_url="https://api.novita.ai/openai",
api_key=os.environ["NOVITA_API_KEY"],
)
response = client.chat.completions.create(
model="inclusionai/ling-3.0-flash-vl",
messages=[
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://example.com/receipt.jpg",
"detail": "high",
},
},
{
"type": "text",
"text": "Extract the merchant, date, and total. If a field is not legible, say so.",
},
],
}
],
max_tokens=256,
temperature=0.2,
)
print(response.choices[0].message.content)
detail には low、high、auto を指定できます。小さな文字や細かい視覚的詳細には high を使用します。レイテンシが重要な場合は low または auto から始めてください。画像入力はテキストと一緒にトークン化されてカウントされるため、代表的な画像でコストと品質を測定してください。
cURLでの画像リクエスト
同じペイロードはシェルスクリプトからも機能します。--fail-with-body は、ゼロ以外の終了ステータスを返しながらHTTP障害を可視化します。
curl --fail-with-body "https://api.novita.ai/openai/v1/chat/completions" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${NOVITA_API_KEY}" \
-d '{
"model": "inclusionai/ling-3.0-flash-vl",
"messages": [
{
"role": "user",
"content": [
{
"type": "image_url",
"image_url": {
"url": "https://example.com/diagram.png",
"detail": "auto"
}
},
{
"type": "text",
"text": "Describe the main components and their connections."
}
]
}
],
"max_tokens": 512,
"temperature": 0.2
}'
プライベートなローカル画像の場合は、リモートURLの代わりに data:image/jpeg;base64,<base64_image_bytes> のようなdata URLを使用します。MIMEタイプをエンコードされたファイルと一致させ、プライベートな画像を含むリクエストボディをログに記録しないでください。
動画入力の処理
現在の Ling 3.0 Flash VLモデルリスト には、入力モダリティとして動画が含まれています。Novitaの公開ビジョンガイドには、上記の移植可能なOpenAI互換の画像ペイロードが記載されていますが、汎用の video_url メッセージスキーマは定義されていません。本番クライアントで独自に作成しないでください。
移植可能な動画理解ワークフローでは、代表的なフレームを抽出し、複数の image_url 項目として送信し、プロンプトにタイムスタンプを含めます。ビジョンガイドでは1リクエストあたり2枚までを推奨しているため、短いウィンドウでサンプリングするか、複数回に分けて呼び出してください:
ffmpeg -ss 00:00:05 -i input.mp4 -vf "fps=1/5,scale=1280:-2" -frames:v 2 frame-%02d.jpg
得られたフレームは、PythonまたはcURLペイロードで画像項目を繰り返すことで送信できます。お使いのアカウントの現在のAPIリファレンスでネイティブなvideo-content形式が公開されている場合は、そのリファレンスに従い、まず小さなクリップで検証してください。モデルリストは動画対応を確認していますが、転送フォーマットは、統合に使用する最新のAPIドキュメントで確認する必要があります。
視覚コンテキストでの関数呼び出し
関数呼び出しは、モデルが視覚情報をアプリケーションのアクションに変換する必要がある場合に役立ちます。ツールの範囲を絞り、その引数をアプリケーションコードで検証してください。
tools = [
{
"type": "function",
"function": {
"name": "flag_document",
"description": "Send a document for manual verification.",
"parameters": {
"type": "object",
"properties": {
"reason": {"type": "string", "description": "Why review is needed."},
"page_or_frame": {"type": "string", "description": "Page or video timestamp."},
},
"required": ["reason"],
},
},
}
]
response = client.chat.completions.create(
model="inclusionai/ling-3.0-flash-vl",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://example.com/document.jpg"}},
{"type": "text", "text": "Flag this document if key fields are unclear."},
],
}
],
tools=tools,
tool_choice="auto",
max_tokens=256,
temperature=0.1,
)
message = response.choices[0].message
if message.tool_calls:
for call in message.tool_calls:
print(call.function.name, call.function.arguments)
else:
print(message.content)
ツールの引数は、信頼できないモデル出力として扱ってください。JSONを検証し、権限を確認し、モデルの外部で関数を実行します。視覚的な観察だけで、ワークフローに必要なチェックなしに、取り返しのつかないアクションを直接トリガーすべきではありません。
Reasoning(推論)の制御
NovitaのOpenAI互換chat completions APIには enable_thinking と separate_reasoning フィールドが含まれており、Ling 3.0 Flash VLのモデルリストには推論サポートが含まれています。本番用ラッパーに追加する前に、小さなリクエストでこれらのフィールドをテストしてください:
response = client.chat.completions.create(
model="inclusionai/ling-3.0-flash-vl",
messages=[
{
"role": "user",
"content": [
{"type": "image_url", "image_url": {"url": "https://example.com/chart.png"}},
{"type": "text", "text": "Compare the two trends and state which one needs investigation."},
],
}
],
enable_thinking=True,
separate_reasoning=True,
max_tokens=512,
temperature=0.2,
)
print(response.choices[0].message)
推論出力により、レスポンスの解析方法やレイテンシが変わる場合があります。アプリケーションがキャプションやツール呼び出しのみを必要とする場合は、これらのフィールドをオフのままにして、よりシンプルなリクエストと品質を比較してください。
統合チェックリスト
スモークテストの先に進む前に、以下を確認してください。
- 表示名ではなく、正確なモデルIDとエンドポイントを確認する。
- 公開画像URL、次にbase64 data URLをテストし、プライベート画像の処理を別途検証する。
max_tokensを制限し、不要な画像コンテンツを保持せずに使用量とレイテンシをログに記録する。- 小さな文字、グラフ、通常の写真で、画像のdetail設定をテストする。
- 実行前にツール引数を検証し、ツール呼び出しなしのレスポンスも処理する。
- 動画ワークフローでは、フレームサンプリング、タイムスタンプ追跡、ライブAPIリファレンスがサポートするネイティブな動画ペイロードを定義する。
- 本番環境の前にモデルの可用性、価格、制限を再確認する。カタログの値は変更される可能性があります。
FAQ
どのモデルIDを使用すればよいですか?
inclusionai/ling-3.0-flash-vl を使用してください。Ling 3.0 Flash VL は表示名であり、リクエスト値ではありません。
このガイドが使用するエンドポイントはどれですか?
SDKのベースURLには https://api.novita.ai/openai を使用するか、cURLリクエストを https://api.novita.ai/openai/v1/chat/completions に送信してください。
画像を送信するにはどうすればよいですか?
ユーザーメッセージに content 配列を追加し、image_url 項目と text 項目を含めてください。画像URLはアクセス可能な画像を指すか、base64 data URLを使用できます。
モデルは動画を受け付けますか?
2026年9月9日に確認したNovitaのモデルリストでは、動画は入力モダリティとして記載されています。公開ビジョンガイドには、汎用の直接動画メッセージ形式は記載されていないため、ネイティブな動画ペイロードを送信する前に、最新のAPIリファレンスを確認してください。フレームサンプリングによるワークフローが移植可能な代替方法です。
関数呼び出しと推論はサポートされていますか?
現在のNovitaのモデルリストには両方の機能が含まれています。上記の例では tools、enable_thinking、separate_reasoning を示しています。独自のワークロードでレスポンスの形式とレイテンシをテストしてください。
