Skip to main content

長文コンテキスト (Qwen-Long)

Qwen-Long は、ファイルアップロードと参照メカニズムを通じて最大 1,000 万トークンのドキュメントを処理し、標準モデルのコンテキスト長の制限を克服します。

このドキュメントは、中国本土 (北京) リージョンにのみ適用されます。モデルを使用するには、中国本土 (北京) リージョンの API キーを使用する必要があります。

使用方法

Qwen-Long は、ファイルのアップロードと API 呼び出しの 2 つのステップで使用します。
  1. ファイルのアップロードと解析:
    • API を使用してファイルをアップロードします。サポートされているファイル形式とサイズ制限の詳細については、「サポートされているフォーマット」をご参照ください。
    • アップロードが成功すると、システムはご利用のアカウントに対して一意の file-id を返し、解析を開始します。ファイルのアップロード、ストレージ、解析には料金はかかりません。
  2. API 呼び出しと課金:
    • モデルを呼び出す際、system メッセージで 1 つ以上の file-id を参照します。
    • モデルは file-id に関連付けられたテキスト内容に基づいて推論を実行します。
    • 各 API 呼び出しにおいて、参照されたファイル内容のトークン数がそのリクエストの入力トークンとしてカウントされます。
これにより、各リクエストで大きなファイルを転送する必要がなくなりますが、ファイルのトークンは API 呼び出しごとに課金されることにご注意ください。

クイックスタート

前提条件

ドキュメントのアップロード

この例では、Model_Studio_Phone_Product_Introduction.docx を OpenAI 互換インターフェイス経由で Model Studio の安全なストレージにアップロードし、file-id を取得します。アップロードパラメーターについては、API ドキュメントをご参照ください。
Python
import os
from pathlib import Path
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 設定されていない場合は、ご自身の API キーに置き換えてください。
    # 次の URL は中国 (北京) リージョン用です。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)

file_object = client.files.create(file=Path("Model_Studio_Phone_Product_Introduction.docx"), purpose="file-extract")
print(file_object.id)
コードを実行して、アップロードされたファイルの file-id を取得します。

ファイル ID を使用した情報の受け渡しとチャット

システムメッセージで file-id を渡します。最初のメッセージでロールを定義し、2番目のメッセージに file-id を含め、その後にユーザーの質問を追加します。
ドキュメントが長いほど、解析に時間がかかります。呼び出しを行う前に、解析が完了するまでお待ちください。
Python
import os
from openai import OpenAI, BadRequestError

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 設定されていない場合は、ご自身の API キーに置き換えてください。
    # 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
try:
    # メッセージリストを初期化します。
    completion = client.chat.completions.create(
        model="qwen-long",
        messages=[
            # sys1: ロールの定義。
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            # sys2: ドキュメントの内容 (プレーンテキストまたは file-id)。
            # '{FILE_ID}' を会話で使用する file-id に置き換えてください。
            {'role': 'system', 'content': f'fileid://{FILE_ID}'},
            # リクエストに2番目のシステムメッセージが含まれる場合、ユーザーメッセージの内容は 9,000 トークンに制限されます。
            {'role': 'user', 'content': 'この記事は何について説明していますか?'}
        ],
        # すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。ストリーミング出力を使用しない例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください。
        stream=True,
        stream_options={"include_usage": True}
    )

    full_content = ""
    for chunk in completion:
        if chunk.choices and chunk.choices[0].delta.content:
            # 出力内容を連結します。
            full_content += chunk.choices[0].delta.content
            print(chunk.model_dump())

        # トークン使用量を取得します。
        if chunk.usage:
            print(f"Total tokens: {chunk.usage.total_tokens}")

    print(full_content)

except BadRequestError as e:
    print(f"Error: {e}")
    print("ドキュメントをご参照ください: https://www.alibabacloud.com/help/model-studio/error-code")

複数ドキュメントの受け渡し

1つのシステムメッセージで複数の file-id を渡すか、ドキュメントごとに個別のシステムメッセージを追加します。
  • 複数ドキュメントの受け渡し
  • ドキュメントの追加
Python
import os
from openai import OpenAI, BadRequestError

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 設定されていない場合は、ご自身の API キーに置き換えてください。
    # 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
try:
    # メッセージリストを初期化します。
    completion = client.chat.completions.create(
        model="qwen-long",
        messages=[
            {'role': 'system', 'content': 'You are a helpful assistant.'},
            # '{FILE_ID1}' と '{FILE_ID2}' を会話で使用する file-id に置き換えてください。
            {'role': 'system', 'content': f"fileid://{FILE_ID1},fileid://{FILE_ID2}"},
            {'role': 'user', 'content': 'これらの記事は何について説明していますか?'}
        ],
        # すべての例では、モデルの応答プロセスを示すためにストリーミング出力を使用しています。ストリーミング出力を使用しない例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください。
        stream=True,
        stream_options={"include_usage": True}
    )

    full_content = ""
    for chunk in completion:
        if chunk.choices and chunk.choices[0].delta.content:
            # 出力内容を連結します。
            full_content += chunk.choices[0].delta.content
            print(chunk.model_dump())

    print(full_content)

except BadRequestError as e:
    print(f"Error: {e}")
    print("ドキュメントをご参照ください: https://www.alibabacloud.com/help/model-studio/error-code")

プレーンテキストとしての情報伝達

file-id を使用する代わりに、ドキュメントコンテンツを文字列として直接渡します。ドキュメントコンテンツとの混同を避けるために、最初のメッセージにロール設定を追加します。
ドキュメントコンテンツが 100 万トークンを超える場合は、API サイズ制限のため、代わりにファイル ID を使用してください。
  • 簡単な例
  • 複数のドキュメントを渡す
  • ドキュメントの追加
ドキュメントコンテンツをシステムメッセージに直接入力できます。
Python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.getenv("DASHSCOPE_API_KEY"),  # 環境変数を設定していない場合は、ここで API キーを置き換えます
    # 中国 (北京) リージョンのエンドポイントです。{WorkspaceId} をご利用のワークスペース ID に置き換えてください。URL はリージョンによって異なります。
    base_url="https://{WorkspaceId}.cn-beijing.maas.aliyuncs.com/compatible-mode/v1",
)
# messages リストを初期化します
completion = client.chat.completions.create(
    model="qwen-long",
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'system', 'content': 'Alibaba Cloud Model Studio スマートフォン製品紹介:Alibaba Cloud Model Studio X1 —————— 究極の視覚体験をお楽しみください:6.7 インチ 1440 x 3200 ピクセルの超高精細画面を搭載...'},
        {'role': 'user', 'content': 'この記事は何について書かれていますか?'}
    ],
    # すべてのコード例では、モデルの出力プロセスを明確かつ直感的に示すためにストリーミング出力を使用しています。非ストリーミングの例については、https://www.alibabacloud.com/help/model-studio/text-generation をご参照ください
    stream=True,
    stream_options={"include_usage": True}
)

full_content = ""
for chunk in completion:
    if chunk.choices and chunk.choices[0].delta.content:
        # 出力コンテンツを追加します
        full_content += chunk.choices[0].delta.content
        print(chunk.model_dump())

print(full_content)

モデルの料金

モデル名バージョンコンテキスト長最大入力最大出力入力コスト出力コスト
(トークン)(100 万トークンあたり)
qwen-long
Batch API リアルタイム料金の50%
安定版10,000,00010,000,00032,768$0.072$0.287

よくある質問

  1. Qwen-Long モデルはバッチジョブの送信に対応していますか? はい。Qwen-Long は OpenAI Batch API に対応しており、リアルタイム呼び出しレートの 50% で利用できます。バッチジョブをファイルとして送信すると、ジョブは非同期で実行され、完了またはタイムアウト時に結果が返されます。
  2. OpenAI 互換のファイル API を使用してアップロードされたファイルは、どこに保存されますか? ファイルはご利用の Model Studio バケットに無料でアップロードされます。ファイルのクエリと管理については、OpenAI File API をご参照ください。
  3. モデルが標準フォーマットの JSON 文字列を確実に出力するようにするには、どうすればよいですか? qwen-long およびすべてのスナップショットは 構造化出力 に対応しています。JSON スキーマを指定することで、ご利用の構造に一致する有効な JSON を保証できます。

API リファレンス

Qwen-Long モデルの入力および出力パラメーターについては、「Qwen API の詳細」をご参照ください。

エラーコード

モデルの呼び出しが失敗し、エラーメッセージが返された場合は、エラーコードをご参照ください。

制限事項

  • SDK の依存関係:
    • ファイル操作 (アップロード、削除、クエリ) には、OpenAI 互換 SDK が必要です。
    • モデルの呼び出しは、OpenAI 互換 SDK または Dashscope SDK を使用します。
  • ファイルのアップロード:
    • 対応フォーマット: TXT、DOCX、PDF、XLSX、EPUB、MOBI、MD、CSV、JSON、BMP、PNG、JPG/JPEG、GIF。
    • ファイルサイズ: 画像ファイルの最大サイズは 20 MB です。その他のファイル形式の最大サイズは 150 MB です。
    • アカウントのクォータ: 1 アカウントあたり最大 10,000 ファイルまたは 100 GB です。いずれかの上限に達すると、アップロードは失敗します。ファイルを削除してクォータを解放してください。詳細については、「OpenAI 互換 - ファイル」をご参照ください。
    • ストレージ期間: 現在、保存されているファイルに有効期限はありません。
  • API 入力:
    • 最初の system メッセージでロールを定義します。2 番目のメッセージには、ドキュメントコンテンツまたは fileid://xxx が含まれます。user メッセージにはクエリが含まれます。
    • file-id を使用してファイルを参照する場合、1 つのリクエストで最大 100 ファイルまで参照できます。
    • 2 番目の system メッセージがある場合、user メッセージの制限は 9,000 トークンです。system メッセージが 1 つだけの場合は制限はありません。
    • 合計コンテキスト長は 1,000 万トークンに制限されています。
  • API 出力:
    • 最大出力長は 32,768 トークンです。
  • ファイルの共有:
    • file-id はアカウント固有であり、アカウント間や RAM ユーザーの API キーでは使用できません。
  • 速度制限: モデルの速度制限条件については、「Throttling」をご参照ください。