すべてのプロダクト
Search
ドキュメントセンター

Alibaba Cloud Model Studio:アシスタント API のクイックスタート

最終更新日:Apr 24, 2025

アシスタント API は、開発者に会話メッセージとツールの管理のためのツールスイートを提供します。このトピックでは、ペイントアシスタントをゼロから作成する手順を通して、アシスタント API の基本的なコーディング手法について説明します。

一般的なプロセス

アシスタントを開発するための一般的なプロセスは次のとおりです。

  1. アシスタントを作成する: アシスタントを作成する際には、モデルを選択し、命令を入力し、コードインタープリター関数呼び出しなどのツールを追加します。

  2. スレッドを作成する: ユーザーが会話を開始したときに会話の連続性を維持するために、セッションスレッドを開始します。

  3. スレッドにメッセージを送信する: セッションスレッドにユーザーメッセージを 1 つずつ追加します。

  4. 実行を開始する: セッションスレッドでアシスタントを実行します。メッセージを解釈し、適切なツールまたはサービスを使用し、応答を生成し、ユーザーに応答を配信します。

シナリオ例

テキスト生成モデルだけでは画像を生成できません。代わりに、テキストを画像に変換するには、テキストから画像へのモデルが必要です。アシスタント API で構築されたアシスタントは、ユーザーが提供したプロンプトを自動的に改善しテキストから画像へのツールを使用して高品質の画像を作成できます。

手順

次のセクションは、非ストリーミング出力モードの Python の包括的なガイドです。Python と Java のストリーミング出力と非ストリーミング出力の両方の完全なサンプルコードは、このトピックの最後に示されています。詳細については、「完全なサンプルコード」をご参照ください。

image

ステップ 1: 開発環境を準備する

  • プラグインを申請する: まず、画像生成ツールを申請する必要があります。プラグイン に移動し、画像生成 を見つけて、申請 をクリックします。

  • Python インタープリター: アシスタント API には Python インタープリター バージョン 3.8 以降が必要です。Python のバージョンを確認する、または特定のバージョンをインストールするには、Download Python にアクセスしてください。

  • DashScope SDK: アシスタント API には、DashScope SDK バージョン 1.17.0 以降が必要です。サンプルコマンドを実行してバージョンを確認するか、DashScope SDK をインストールします。

  • API キー: アシスタント API には、Model Studio の API キーが必要です。 ここから API キーを取得します。また、漏洩を防ぐために、API キーを環境変数として設定することをお勧めします。

# Python インタープリターのバージョンを確認します
python --version 
# DashScope SDK を確認します
pip list | grep dashscope 
# DashScope SDK バージョン 1.17.0 をインストールします
pip install dashscope==1.17.0

ステップ 2: アシスタントを作成する

DashScope SDK をインポートした後、assistant クラスの create メソッドを使用してアシスタントを作成します。次の主要なパラメーターを指定します。

  • model: アシスタントに使用されるモデルの名前。

  • name: アシスタントの名前。

  • description: アシスタントの機能の説明。

  • instructions: 自然言語でアシスタントの役割とタスクを定義する命令。

  • tools: アシスタント用に構成されたツール。

テキストから画像へのツールは高度な言語理解能力を必要とするため、アシスタントの意味理解とテキスト生成能力を強化するために、テキスト推論モデルとして Qwen-Max が選択されています。

アシスタントの名前、機能の説明、命令などの詳細は、サンプルコードに表示されます。

アシスタントがテキストの説明に基づいて画像を自動的に生成できるように、公式プラグインの 画像生成 が構成されています。

import dashscope
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# Qwen-Max を使用してペイントアシスタントを作成します
painting_assistant = dashscope.Assistants.create(
    model='qwen-max',  # 理解力を高めるために Qwen-Max を使用します。モデルリスト: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    name='Art Maestro',  # アシスタントの名前
    description='絵画と芸術の知識のための AI アシスタント',
    instructions='''絵画技法、美術史、創造的なガイダンスに関する情報を提供します。''',
    tools=[
        {
            'type': 'text_to_image',  # 説明に基づいて画像を生成するツール
            'description': 'このツールを使用して、絵画スタイル、技法、または芸術概念の視覚的な例を作成します。'
        }
    ]
)

# 確認のためにアシスタント ID を出力します
print(f"Art Maestro が作成されました。ID: {painting_assistant.id}")

ステップ 3: スレッドを作成する

アシスタント API では、スレッドは連続した会話コンテキストを表します。

アシスタントはスレッドを使用して会話コンテキストを理解し、より一貫性のある関連性の高い応答を提供します。

以下をお勧めします。

  • 新しいユーザーまたは会話トピックごとに新しいスレッドを作成します。

  • コンテキストを維持するために同じスレッドを使用します。

  • コンテキストの混乱を防ぐために、会話トピックが大幅に変更された場合は、新しいスレッドを作成することを検討します。

ペイントアシスタントのシナリオでは、スレッドは次のプロセス全体を追跡します。

  • ユーザーの最初のリクエスト

  • アシスタントからの提案

  • ユーザーフィードバック

  • 最終的な絵画結果

これにより、プロセスの一貫性と追跡可能性が確保されます。

from http import HTTPStatus
import dashscope
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# 空のスレッドを作成します
thread = dashscope.Threads.create()

# スレッドが作成されたかどうかを確認します
if thread.status_code == HTTPStatus.OK:
    print(f"スレッドが作成されました。ID: {thread.id}")
    print("アシスタントとの対話を開始できます")
else:
    print(f"スレッドの作成に失敗しました。状態コード: {thread.status_code}")
    print(f"エラーコード: {thread.code}")
    print(f"エラーメッセージ: {thread.message}")

# 注: この空のスレッドを使用して、ラグドールキャットやその他の絵画の主題に関する今後のメッセージを含め、ディスカッションのコンテキストを維持できます。

ステップ 4: スレッドにメッセージを追加する

ユーザーからの入力メッセージは、message オブジェクトを介して渡されます。アシスタント API は、単一のスレッドに複数のメッセージを送信することをサポートしています。メッセージを作成する際には、次のパラメーターを指定します。

  • thread_id: スレッド ID。

  • content: メッセージの内容。

スレッドが受信できるトークンの数に制限はありません。ただし、モデルに渡されるトークンは、モデルの最大入力長に制限されています。詳細については、「商用 Qwen モデル」をご参照ください。

ペイントアシスタントのシナリオでは、message クラスを作成し、スレッドに「ラグドールキャットの絵を描いてください。」を送信します。

説明

Messages.create() メソッドは、メッセージをスレッドに自動的に追加し、実行後にバックグラウンド処理をトリガーして、メッセージの作成と送信の両方の操作を同時に行います。これは API のデフォルトの動作です。

from http import HTTPStatus
import dashscope
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# アシスタントに何をすべきかを伝えるメッセージを作成します
message = dashscope.Messages.create(thread.id, content='ラグドールキャットの絵を描いてください。')

# メッセージが作成されたかどうかを確認します
if message.status_code == HTTPStatus.OK:
    print('メッセージが作成されました。ID: %s' % message.id)
else:
    print('メッセージの作成に失敗しました。状態コード: %s、エラーコード: %s、エラーメッセージ: %s' % (message.status_code, message.code, message.message))

ステップ 5: 実行を作成して実行する

メッセージが特定のスレッドに割り当てられた後、実行を開始してアシスタントをアクティブにします。アシスタントは、指定されたモデルとプラグインをインテリジェントに使用して、コンテキストに基づいて質問に答えます。次に、アシスタントは応答をスレッドのメッセージシーケンスに挿入します。

次の手順を実行します。

  1. 実行オブジェクトを初期化してペイントアシスタントをアクティブにし、スレッド ID (thread.id) とアシスタント ID (assistant.id) を渡します。

  2. Run.wait メソッドを使用して、実行が完了するまで待機します。

  3. Messages.list メソッドを使用して、アシスタントから描画された画像を取得します。

説明

複数のユーザーがモデルを同時に使用すると、処理時間が長くなる可能性があるため、処理を続行する前に状態が「完了」になるまで待機することをお勧めします。

from http import HTTPStatus
import json
import dashscope
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

# メッセージを実行するために新しい実行を作成します
run = dashscope.Runs.create(thread.id, assistant_id=assistant.id)
if run.status_code != HTTPStatus.OK:
    print('アシスタントの作成に失敗しました。状態コード: %s、エラーコード: %s、エラーメッセージ: %s' % (run.status_code, run.code, run.message))
else:
    print('アシスタントが作成されました。ID: %s' % run.id)

# 実行が完了するか、操作が必要になるまで待機します
run = dashscope.Runs.wait(run.id, thread_id=thread.id)
if run.status_code != HTTPStatus.OK:
    print('実行状態の取得に失敗しました。状態コード: %s、エラーコード: %s、エラーメッセージ: %s' % (run.status_code, run.code, run.message))
else:
    print(run)

# スレッドメッセージを取得して実行出力を取得します
msgs = dashscope.Messages.list(thread.id)
if msgs.status_code != HTTPStatus.OK:
    print('メッセージの取得に失敗しました。状態コード: %s、エラーコード: %s、エラーメッセージ: %s' % (msgs.status_code, msgs.code, msgs.message))
else:
    print(json.dumps(msgs, default=lambda o: o.__dict__, sort_keys=True, indent=4))

完全なサンプルコード

非ストリーミング出力

import dashscope
from http import HTTPStatus
import json
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def check_status(component, operation):
    if component.status_code == HTTPStatus.OK:
        print(f"{operation} 成功しました。")
        return True
    else:
        print(f"{operation} 失敗しました。状態コード: {component.status_code}、エラーコード: {component.code}、エラーメッセージ: {component.message}")
        return False


# 1. ペイントアシスタントを作成します
painting_assistant = dashscope.Assistants.create(
    # モデルリスト: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
    model='qwen-max',
    name='Art Maestro',
    description='絵画と芸術の知識のための AI アシスタント',
    instructions='''絵画技法、美術史、創造的なガイダンスに関する情報を提供します。
    画像生成ツールを使用します。''',
    tools=[
        {'type': 'text_to_image', 'description': '視覚的な例を作成するため'}
    ]
)

if not check_status(painting_assistant, "アシスタントの作成"):
    exit()

# 2. 新しいスレッドを作成します
thread = dashscope.Threads.create()

if not check_status(thread, "スレッドの作成"):
    exit()

# 3. スレッドにメッセージを送信します
message = dashscope.Messages.create(thread.id, content='ラグドールキャットの絵を描いてください。')

if not check_status(message, "メッセージの作成"):
    exit()

# 4. スレッドでアシスタントを実行します
run = dashscope.Runs.create(thread.id, assistant_id=painting_assistant.id)

if not check_status(run, "実行の作成"):
    exit()

# 5. 実行が完了するまで待機します
print("アシスタントがリクエストを処理するのを待機しています...")
run = dashscope.Runs.wait(run.id, thread_id=thread.id)

if check_status(run, "実行の完了"):
    print(f"実行が完了しました。状態: {run.status}")
else:
    print("実行が完了しませんでした。")
    exit()

# 6. アシスタントの応答を取得して表示します
messages = dashscope.Messages.list(thread.id)

if check_status(messages, "メッセージの取得"):
    if messages.data:
        # 最後のメッセージ (アシスタントの応答) の内容を表示します
        last_message = messages.data[0]
        print("\nアシスタントの応答:")
        print(json.dumps(last_message, ensure_ascii=False, default=lambda o: o.__dict__, sort_keys=True, indent=4))
    else:
        print("スレッドにメッセージが見つかりませんでし。")
else:
    print("アシスタントの応答の取得に失敗しました。")

# 注: このコードは、ペイントアシスタントを作成し、ラグドールキャットを描くことについての会話を開始し、アシスタントの応答を表示します。
package com.example;
import java.util.Arrays;
import com.alibaba.dashscope.protocol.Protocol;

import com.alibaba.dashscope.assistants.Assistant;
import com.alibaba.dashscope.assistants.AssistantParam;
import com.alibaba.dashscope.assistants.Assistants;
import com.alibaba.dashscope.common.GeneralListParam;
import com.alibaba.dashscope.common.ListResult;
import com.alibaba.dashscope.exception.ApiException;
import com.alibaba.dashscope.exception.InputRequiredException;
import com.alibaba.dashscope.exception.InvalidateParameter;
import com.alibaba.dashscope.exception.NoApiKeyException;
import com.alibaba.dashscope.threads.AssistantThread;
import com.alibaba.dashscope.threads.ThreadParam;
import com.alibaba.dashscope.threads.Threads;
import com.alibaba.dashscope.threads.messages.Messages;
import com.alibaba.dashscope.threads.messages.TextMessageParam;
import com.alibaba.dashscope.threads.messages.ThreadMessage;
import com.alibaba.dashscope.threads.runs.Run;
import com.alibaba.dashscope.threads.runs.RunParam;
import com.alibaba.dashscope.threads.runs.Runs;
import com.alibaba.dashscope.tools.T2Image.Text2Image;
import com.alibaba.dashscope.tools.search.ToolQuarkSearch;
import com.alibaba.dashscope.utils.Constants;

public class PaintingAssistant {
    static {
        Constants.baseHttpApiUrl="https://dashscope-intl.aliyuncs.com/api/v1";
    }
    private static boolean checkStatus(Object response, String operation) {
        if (response != null) {
            System.out.println(operation + " 成功しました。");
            return true;
        } else {
            System.out.println(operation + " 失敗しました。");
            return false;
        }
    }

    public static void main(String[] args) {
        try {
            // 1. ペイントアシスタントを作成します
            Assistants assistants = new Assistants();
            AssistantParam assistantParam = AssistantParam.builder()
                    // モデルリスト: https://www.alibabacloud.com/help/en/model-studio/getting-started/models
                    .model("qwen-max")
                    .name("Art Maestro")
                    .description("絵画と芸術の知識のための AI アシスタント")
                    .instructions("絵画技法、美術史、創造的なガイダンスに関する情報を提供します。調査と画像生成にツールを使用します。")
                    .tools(Arrays.asList(ToolQuarkSearch.builder().build(),Text2Image.builder().build()))
                    .build();

            Assistant paintingAssistant = assistants.create(assistantParam);
            if (!checkStatus(paintingAssistant, "アシスタントの作成")) {
                System.exit(1);
            }

            // 2. 新しいスレッドを作成します
            Threads threads = new Threads();
            AssistantThread thread = threads.create(ThreadParam.builder().build());
            if (!checkStatus(thread, "スレッドの作成")) {
                System.exit(1);
            }

            // 3. スレッドにメッセージを送信します
            Messages messages = new Messages();
            ThreadMessage message = messages.create(thread.getId(),
                    TextMessageParam.builder()
                            .role("user")
                            .content("ラグドールキャットの絵を描いてください。")
                            .build());
            if (!checkStatus(message, "メッセージの作成")) {
                System.exit(1);
            }

            // 4. スレッドでアシスタントを実行します
            Runs runs = new Runs();
            RunParam runParam = RunParam.builder().assistantId(paintingAssistant.getId()).build();
            Run run = runs.create(thread.getId(), runParam);
            if (!checkStatus(run, "実行の作成")) {
                System.exit(1);
            }

            // 5. 実行が完了するまで待機します
            System.out.println("アシスタントがリクエストを処理するのを待機しています...");
            while (true) {
                if (run.getStatus().equals(Run.Status.COMPLETED) ||
                        run.getStatus().equals(Run.Status.FAILED) ||
                        run.getStatus().equals(Run.Status.CANCELLED) ||
                        run.getStatus().equals(Run.Status.REQUIRES_ACTION) ||
                        run.getStatus().equals(Run.Status.EXPIRED)) {
                    break;
                }
                Thread.sleep(1000);
                run = runs.retrieve(thread.getId(), run.getId());
            }

            if (checkStatus(run, "実行の完了")) {
                System.out.println("実行が完了しました。状態: " + run.getStatus());
            } else {
                System.out.println("実行が完了しませんでした。");
                System.exit(1);
            }

            // 6. アシスタントの応答を取得して表示します
            ListResult<ThreadMessage> messagesList = messages.list(thread.getId(), GeneralListParam.builder().build());
            if (checkStatus(messagesList, "メッセージの取得")) {
                if (!messagesList.getData().isEmpty()) {
                    // 最後のメッセージ (アシスタントの応答) を表示します
                    ThreadMessage lastMessage = messagesList.getData().get(0);
                    System.out.println("\nアシスタントの応答:");
                    System.out.println(lastMessage.getContent());
                } else {
                    System.out.println("スレッドにメッセージが見つかりませんでした。");
                }
            } else {
                System.out.println("アシスタントの応答の取得に失敗しました。");
            }

        } catch (ApiException | NoApiKeyException | InputRequiredException | InvalidateParameter | InterruptedException e) {
            e.printStackTrace();
        }
    }
}

ストリーミング出力

現在、Java SDK はストリーミング出力モードでの画像生成ツールをサポートしていません。

import dashscope
from http import HTTPStatus
import json
import sys
dashscope.base_http_api_url = 'https://dashscope-intl.aliyuncs.com/api/v1'

def check_status(response, operation):
    if response.status_code == HTTPStatus.OK:
        print(f"{operation} 成功しました。")
        return True
    else:
        print(f"{operation} 失敗しました。状態コード: {response.status_code}、エラーコード: {response.code}、エラーメッセージ: {response.message}")
        sys.exit(response.status_code)

# 1. ペイントアシスタントを作成します
def create_painting_assistant():
    return dashscope.Assistants.create(
        model='qwen-max',
        name='Art Maestro',
        description='絵画と芸術の知識のための AI アシスタント',
        instructions='''絵画技法、美術史、創造的なガイダンスに関する情報を提供します。
        調査と画像生成にツールを使用します。''',
        tools=[
            {'type': 'text_to_image', 'description': '視覚的な例を作成するため'}
        ]
    )

if __name__ == '__main__':
    # ペイントアシスタントを作成します
    painting_assistant = create_painting_assistant()
    print(painting_assistant)
    check_status(painting_assistant, "アシスタントの作成")

    # 初期メッセージを含む新しいスレッドを作成します
    thread = dashscope.Threads.create(
        messages=[{
            'role': 'user',
            'content': 'ラグドールキャットの絵を描いてください。'
        }]
    )
    print(thread)
    check_status(thread, "スレッドの作成")

    # ストリーミング実行を作成します
    run_iterator = dashscope.Runs.create(
        thread.id,
        assistant_id=painting_assistant.id,
        stream=True
    )

    # イベントとメッセージを反復処理します
    print("リクエストを処理しています...")
    for event, msg in run_iterator:
        print(event)
        print(msg)

    # アシスタントの応答を取得して表示します
    messages = dashscope.Messages.list(thread.id)
    check_status(messages, "メッセージの取得")

    print("\nアシスタントの応答:")
    print(json.dumps(messages, ensure_ascii=False, default=lambda o: o.__dict__, sort_keys=True, indent=4))

# 注: このスクリプトは、ストリーミングペイントアシスタントを作成し、ラグドールキャットを描くことについての会話を開始し、アシスタントの応答をリアルタイムで表示します。

次のステップ

パラメーターの詳細については、「アシスタント API」をご参照ください。