Skip to main content

アプリケーションの呼び出し

Model Studio アプリケーション(エージェント、ワークフロー、エージェントオーケストレーションなど)を、DashScope SDK または HTTP を使用して業務システムに統合できます。

前提条件

Model Studio アプリケーションの呼び出しには、DashScope SDK または HTTP インターフェイスを使用できます。
呼び出し方法に関係なく、API キーを環境変数として設定する必要があります。DashScope SDK を使用する場合は、DashScope SDK のインストールも必要です。

使用方法

単一ラウンドの会話

DashScope SDK または HTTP メソッドを使用して単一ラウンドの会話を実装するためのサンプルコードです。
  • Python
  • Java
  • HTTP
リクエストのサンプル
import os
import dashscope
from dashscope.v2 import DashScopeError

# 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
client = dashscope.Client(
    # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えることができます。ただし、API キー漏洩のリスクを低減するため、本番環境では API キーをコード内にハードコードしないことを推奨します。
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    workspace="{WorkspaceId}",
    region="ap-southeast-1",
)
try:
    response = client.apps.completions.create(
        app_id='YOUR_APP_ID',  # 実際のアプリケーション ID に置き換えてください
        prompt='Who are you?')
    print(response.text)
except DashScopeError as e:
    print(f'request_id={e.request_id}')
    print(f'code={e.code}')
    print(f'message={e.message}')
    print(f'Refer to: https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code')
応答のサンプル
I am a large language model developed by Alibaba Cloud, named Qwen. I am designed to help users generate various types of text, such as articles, stories, poems, stories, etc., and can be adjusted and optimized according to different scenarios and needs. In addition, I can also answer various questions, provide information and explanations, and assist in learning and research. If you have any needs, please feel free to ask me questions at any time!

マルチラウンド会話

マルチラウンド会話では、LLM が会話履歴を参照できるため、日常的なコミュニケーションシナリオにより近い形になります。
現在、エージェントアプリケーションおよびワークフローアプリケーションのみがマルチラウンド会話をサポートしています。
  • session_id を渡すと、リクエストにクラウドに保存された会話履歴が自動的に含まれます。
    session_id を渡す場合、prompt は必須です。
  • messages 配列を自分で管理することもできます。各ラウンドの会話履歴と新しい命令を messages 配列に追加し、その履歴を messages で渡します。
    messages を渡す場合、prompt は任意です。両方を渡した場合、prompt は補足情報として messages の末尾に追加されます。
session_id と messages の両方を渡した場合、messages が優先的に使用されます。
  • クラウドストレージ(session_id)
  • 自己管理(messages)
  • Python
  • Java
  • HTTP
リクエスト例
import os
import dashscope
from dashscope.v2 import DashScopeError

# 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
client = dashscope.Client(
    # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えてください。ただし、API キーの漏洩リスクを低減するため、本番環境ではコード内に API キーを直接ハードコードしないことを推奨します。
    api_key=os.getenv("DASHSCOPE_API_KEY"),
    workspace="{WorkspaceId}",
    region="ap-southeast-1",
)

def call_with_session():
    try:
        response = client.apps.completions.create(
            app_id='YOUR_APP_ID',  # 実際のアプリケーション ID に置き換えてください
            prompt='Who are you?')

        responseNext = client.apps.completions.create(
                    app_id='YOUR_APP_ID',  # 実際のアプリケーション ID に置き換えてください
                    prompt='What skills do you have?',
                    session_id=response.session_id)  # 前回の応答から取得した session_id

        print('%s\n session_id=%s\n' % (responseNext.text, responseNext.session_id))
        # print('%s\n' % (response.usage))
    except DashScopeError as e:
        print(f'request_id={e.request_id}')
        print(f'code={e.code}')
        print(f'message={e.message}')
        print(f'Refer to: https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code')

if __name__ == '__main__':
    call_with_session()
応答例
I have multiple skills and can assist you with various tasks. Here are some of my main skills:

1. **Information retrieval**: Providing weather, news, historical facts, scientific knowledge, and various other information.
2. **Language processing**: Translating text, correcting grammar errors, generating articles and stories.
3. **Technical problem solving**: Answering programming questions, software usage, technical troubleshooting, etc.
4. **Educational assistance**: Helping with questions in subjects like mathematics, physics, chemistry, etc.
5. **Life advice**: Providing advice on health, diet, travel, shopping, etc.
6. **Entertainment interaction**: Telling jokes, playing word games, engaging in simple chat interactions.
7. **Schedule management**: Reminding important dates, arranging schedules, setting reminders.
8. **Data analysis**: Explaining data charts, providing data analysis suggestions.
9. **Emotional support**: Listening to your feelings, providing comfort and support.

If you have specific needs or questions, you can tell me directly, and I'll do my best to help you!
 session_id=98ceb3ca0c4e4b05a20a00f913050b42

カスタムパラメーターの渡し方

同じエージェントまたはワークフローを異なるビジネスシナリオに適応させるには、プラグインまたはノードに対してカスタムパラメーターを設定し、アプリケーション呼び出し時に biz_params を通じてパラメーターを渡すことができます。パラメーターの設定方法については、「アプリケーションパラメーターパススルー」をご参照ください。サンプルコードは以下のとおりです。
  1. カスタムプラグイン パラメーター: 関連付けられた エージェントアプリケーション または関連付けられた ワークフローアプリケーション の プラグインノード を通じて渡します。 カスタムプラグインに対して、パラメーターおよびユーザーレベルの認証情報を渡すことができます。
    • パラメーター: user_defined_params。
    • ユーザーレベルの認証: user_defined_tokens。user_token は、プラグインに必要な認証情報(例:DASHSCOPE_API_KEY)です。
    次のサンプルは、関連付けられたプラグインの index パラメーターおよびユーザーレベルの認証情報を必要とする エージェントアプリケーション です。
    プラグインツールは、同一ワークスペース内の エージェントアプリケーション のみに関連付けることができます。
    your_plugin_code は、プラグインカードに表示される関連付けられたプラグインツール ID に置き換え、入力パラメーターのキーと値のペアを渡してください。この例では、値が 2 の article_index を使用しています。
    • パラメーターの渡し方
    • ユーザーレベルの認証
    • Python
    • Java
    • HTTP
    リクエストサンプル
    import os
    # DashScope SDK のバージョンは 2.0.1 以降である必要があります。
    import dashscope
    from dashscope.v2 import DashScopeError
    
    # 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
    client = dashscope.Client(
        # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えることもできます。ただし、本番環境では API キーをコード内にハードコードしないことを推奨します。これにより、API キー漏洩のリスクを低減できます。
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        workspace="{WorkspaceId}",
        region="ap-southeast-1",
    )
    biz_params = {
        # エージェントアプリケーション向けのカスタムプラグイン入力パラメーターの渡し方。your_plugin_code はご利用のカスタムプラグイン ID に置き換えてください。
        "user_defined_params": {
            "your_plugin_code": {
                "article_index": 2}}}
    try:
        response = client.apps.completions.create(
            app_id='YOUR_APP_ID',
            prompt='Dormitory convention content',
            biz_params=biz_params)
        print('%s\n' % (response.text))  # テキスト出力のみを処理
        # print('%s\n' % (response.usage))
    except DashScopeError as e:
        print(f'request_id={e.request_id}')
        print(f'code={e.code}')
        print(f'message={e.message}')
        print(f'Refer to: https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code')
    
    応答サンプル
    寄宿舎規則の第 2 条は次のとおりです。
    
    「寄宿舎のメンバーは互いに助け合い、思いやりを持ち、学び合い、共に成長すること。寛容で謙虚であり、互いを尊重し、誠意を持って接すること。」
    
    これは、寄宿舎内でメンバーが前向きな生活・学習環境を築き、相互支援を行うとともに、互いの違いを理解し尊重することが求められることを示しています。規則の他の条項について知りたい場合は、お知らせください!
    
  2. カスタムノードパラメーター: ワークフローアプリケーション の スタートノード、または エージェントオーケストレーションアプリケーション の アプリケーションノード を通じて渡します。 次のサンプルでは、[ワークフローアプリケーション] が [開始ノード] でパラメーター city を定義します。[プロンプト] に変数 city と query を挿入してから、アプリケーションを [公開] します。
    image
    呼び出し時 は、biz_params を通じて city を渡し、prompt を通じて query を渡します。
    • Python
    • Java
    • HTTP
    リクエストサンプル
    import os
    import dashscope
    from dashscope.v2 import DashScopeError
    
    # 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
    client = dashscope.Client(
        # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えることもできます。ただし、本番環境では API キーをコード内にハードコードしないことを推奨します。これにより、API キー漏洩のリスクを低減できます。
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        workspace="{WorkspaceId}",
        region="ap-southeast-1",
    )
    # ワークフローおよびエージェントオーケストレーションアプリケーション向けのカスタムパラメーターの渡し方
    biz_params = {"city": "Hangzhou"}
    try:
        response = client.apps.completions.create(
            app_id='YOUR_APP_ID',  # 実際のアプリケーション ID に置き換えてください
            prompt='Query the administrative divisions of this city',
            biz_params=biz_params  # ビジネスパラメーターを渡します
        )
        print(f'{response.text}')  # テキスト出力のみを処理
    except DashScopeError as e:
        print(f'request_id={e.request_id}')
        print(f'code={e.code}')
        print(f'message={e.message}')
        print(f'Refer to: https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code')
    
    応答サンプル
    杭州市は浙江省の省都であり、行政区分は上城区、拱墅区、西湖区、浜江区、蕭山区、余杭区、臨平区、銭塘区、富陽区、臨安区の 10 区で構成されています。各区にはそれぞれ独自の特徴と開発重点があります。
    
    - 上城区:杭州市の中心部に位置し、市の政治・経済・文化の中心地の一つです。
    - 拱墅区:運河文化で知られ、多くの歴史文化遺産があります。
    - 西湖区:西湖風景区で有名で、観光の重要な目的地です。
    - 浜江区:ハイテク産業のハブで、アリババなどの有名企業がここにあります。
    - 蕭山区:南東部の行政区で、製造業を中心に経済が急速に成長しています。
    - 余杭区:近年インターネット経済分野で急速に発展しており、アリババの本社もここにあります(注:アリババ本社は実際には浜江区にあります)。
    - 臨平区:地域の経済社会の包括的な発展を促進するために新設された区です。
    - 銭塘区:最近の行政調整の結果として設立され、イノベーションと生態保護の統合に焦点を当てています。
    - 富陽区:杭州市の南西に位置し、豊かな自然景観と長い歴史文化で知られています。
    - 臨安区:杭州市の西部に位置し、美しい生態環境と深い文化遺産で有名です。
    
    都市計画は時間とともに変更される可能性があるため、最新の公式情報を参照することを推奨します。
    

ストリーミング出力

ストリーミング出力モードでは、モデルが中間結果を生成し、最終結果はこれらのすべての中間結果を連結して形成されます。モデルの出力を読み取りながら処理できるため、モデルの応答を待つ時間を短縮できます。呼び出し方法に応じて、以下のパラメーターを設定することでストリーミング出力を実現できます。
  • Python SDK: stream を True に設定します。
  • Java SDK: streamCall インターフェイス経由で呼び出します。
  • HTTP: リクエストヘッダーで X-DashScope-SSE を enable に指定します。
デフォルトでは、ストリーミング出力は非増分(non-incremental)であり、各レスポンスにはそれまでに生成されたすべてのコンテンツが含まれます。 増分ストリーミング出力を使用するには、incremental_output(Java の場合は incrementalOutput)パラメーターを true に設定してください。HTTP の場合、incremental_output を true に設定し、parameters オブジェクト内に配置します。
例:
  • エージェントアプリケーションの場合:
    • Python
    • Java
    • HTTP
    リクエスト例
    import os
    import dashscope
    from dashscope.v2 import DashScopeError
    
    # 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
    client = dashscope.Client(
                # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えてください。ただし、本番環境では API キーをコード内にハードコードすると漏洩リスクが高まるため、推奨されません。
                api_key=os.getenv("DASHSCOPE_API_KEY"),
                workspace="{WorkspaceId}",
                region="ap-southeast-1",
    )
    try:
        stream = client.apps.completions.create(
                    app_id='YOUR_APP_ID',
                    prompt='Who are you?',
                    stream=True,  # ストリーミング出力
                    incremental_output=True)  # 増分出力
    
        for partial in stream:
            print(f'{partial.text}\n')  # テキストのみを出力する処理
    except DashScopeError as e:
        print(f'request_id={e.request_id}')
        print(f'code={e.code}')
        print(f'message={e.message}')
        print(f'詳細については、「https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code」をご参照ください。')
    
    レスポンス例
    I am
    
    Alibaba
    
    Cloud
    
    's large-scale language model
    
    , my name is
    
    Qwen.
    
  • ワークフローアプリケーションには、flow_stream_mode の値によって決定される 2 つのストリーミング出力モードがあります。 パラメーター値と使用方法:
    • full_thoughts(デフォルト値):
      • 説明:すべてのノードの中間結果が thoughts フィールドに出力されます。
      • 要件:has_thoughts を True に設定する必要があります。
    • agent_format:
      • 説明:エージェントアプリケーションと同じ出力モードです。
      • 効果:コンソールで特定のノードの 応答 スイッチをオンにすると、そのノードのストリーミング結果が output の text フィールドに含まれます。
      • シナリオ:特定の中間ノードの出力のみに関心があるシナリオに適しています。
      応答 スイッチは、テキスト変換ノード、LLM ノード、および終了ノードでのみ利用可能です(終了ノードではデフォルトでオンになっています)。ストリーミング出力をサポートしないノードは、一度にすべてのコンテンツを出力します。
    例:
    • full_thoughts
    • agent_format
    これは公開済みの ワークフローアプリケーションで、ストリーミング出力が有効になっています。
    image
    • Python
    • Java
    • HTTP
    リクエスト例
    import os
    import dashscope
    from dashscope.v2 import DashScopeError
    
    # 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
    client = dashscope.Client(
        # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えてください。ただし、本番環境では API キーをコード内にハードコードすると漏洩リスクが高まるため、推奨されません。
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        workspace="{WorkspaceId}",
        region="ap-southeast-1",
    )
    biz_params = {
        "city": "Hangzhou"}
    try:
        stream = client.apps.completions.create(
            # 実際のアプリケーション ID に置き換えてください
            app_id='YOUR_APP_ID',
            prompt='Hello',
            biz_params=biz_params,
            # ストリーミング出力を有効化
            stream=True,
            # incremental_output=true で増分出力が有効になり、false で無効になります。指定しない場合のデフォルトは false です
            incremental_output=True,
            # has_thoughts を True に設定する必要があります
            has_thoughts=True)
    
        for response in stream:
            print(f'{response.thoughts}\n')  # thoughts のみを返すように出力を処理します。プロセス情報は thoughts フィールドに返されます
    except DashScopeError as e:
        print(f'request_id={e.request_id}')
        print(f'code={e.code}')
        print(f'message={e.message}')
        print(f'詳細については、「https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code」をご参照ください。')
    
    レスポンス例
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_99FA","nodeResult":"{\\"result\\":\\"\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_99FA"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\"Dongpo\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_99FA"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\" Pork, West Lake Vinegar Fish,\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_99FA"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\" Longjing Shrimp, Hangzhou Pa\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_99FA"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\"stry, Beggar\'s Chicken\\"}","nodeType":"LLM","nodeStatus":"success","nodeId":"LLM_99FA","nodeExecTime":"1027ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_qkYJ","nodeResult":"{\\"result\\":\\"\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_qkYJ"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\"\\"}","nodeType":"LLM","nodeStatus":"success","nodeId":"LLM_99FA","nodeExecTime":"1027ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_2","nodeResult":"{\\"result\\":\\"West Lake,\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_qkYJ"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\"\\"}","nodeType":"LLM","nodeStatus":"success","nodeId":"LLM_99FA","nodeExecTime":"1027ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_2","nodeResult":"{\\"result\\":\\" Lingyin Temple, Xixi\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_qkYJ"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\"\\"}","nodeType":"LLM","nodeStatus":"success","nodeId":"LLM_99FA","nodeExecTime":"1027ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_2","nodeResult":"{\\"result\\":\\" National Wetland Park, Hefang\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_qkYJ"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\"\\"}","nodeType":"LLM","nodeStatus":"success","nodeId":"LLM_99FA","nodeExecTime":"1027ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_2","nodeResult":"{\\"result\\":\\" Street, Hangzhou Botanical Garden\\"}","nodeType":"LLM","nodeStatus":"executing","nodeId":"LLM_qkYJ"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    [ApplicationThought(thought=None, action_type=None, response='{"nodeName":"Start","nodeType":"Start","nodeStatus":"success","nodeId":"Start_bYxoRU","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_1","nodeResult":"{\\"result\\":\\"\\"}","nodeType":"LLM","nodeStatus":"success","nodeId":"LLM_99FA","nodeExecTime":"1027ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"LLM_2","nodeResult":"{\\"result\\":\\"\\"}","nodeType":"LLM","nodeStatus":"success","nodeId":"LLM_qkYJ","nodeExecTime":"1048ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None), ApplicationThought(thought=None, action_type=None, response='{"nodeName":"End","nodeResult":"{\\"result\\":\\"What do you think about our recommendation?\\"}","nodeType":"End","nodeStatus":"success","nodeId":"End_DrQn7F","nodeExecTime":"0ms"}', action_name=None, action=None, action_input_stream=None, action_input=None, observation=None)]
    
    • thoughts の各アイテムはノードの実行詳細です。以下は LLM ノードの結果の例です。
    id:7
    event:result
    :HTTP_STATUS/200
    data:
    {
        "output": {
            "thoughts": [
                {
                    "response": "{\"nodeName\":\"Start\",\"nodeType\":\"Start\",\"nodeStatus\":\"success\",\"nodeId\":\"Start_bYxoRU\",\"nodeExecTime\":\"0ms\"}"
                },
                {
                    "response": "{\"nodeName\":\"LLM_1\",\"nodeResult\":\"{\\\"result\\\":\\\"Songcheng Fish Soup\\\"}\",\"nodeType\":\"LLM\",\"nodeStatus\":\"success\",\"nodeId\":\"LLM_j45e\",\"nodeExecTime\":\"1167ms\"}"
                },
                {
                    "response": "{\"nodeName\":\"LLM_2Km9\",\"nodeResult\":\"{\\\"result\\\":\\\"\\\"}\",\"nodeType\":\"LLM\",\"nodeStatus\":\"executing\",\"nodeId\":\"LLM_2Km9\"}"
                }
            ],
            "session_id": "6035ee0814b64a9fb88346ecaf8b44bf",
            "finish_reason": "null"
        },
        "usage": {
            "models": [
                {
                    "input_tokens": 25,
                    "output_tokens": 21,
                    "model_id": "qwen-max"
                }
            ]
        },
        "request_id": "64825069-b3aa-93a7-bcf1-c66fe57111fd"
    }
    
    LLM ノード(上記の例では LLM_j45e)のストリーミング結果に関心がある場合は、thoughts の各プッシュにおける nodeId LLM_j45e のノードの出力に注目してください。
    • ノードが失敗した場合、タスク全体も失敗します。

ナレッジベースの取得

ナレッジベースは、Model Studio の RAG 機能です。モデルに対して非公開かつ最新の知識を効果的に補完できます。Agent Applications を呼び出す際に取得範囲を指定することで、回答の精度を向上させることができます。

事前準備

Model Studio コンソールで、ご利用のAgent Application に対して Knowledge Base Retrieval Augmentation を有効化し、その後、Publish してください。
RAG Applications の場合は、この前提条件をスキップしてください。

取得範囲の指定

  1. 特定のナレッジベースを取得するには、以下のいずれかの方法を選択します。
    • コンソールで、アプリケーション内の Configure Knowledge Base をクリックし、目的のナレッジベースを選択します。その後、Publish してください。
    • コンソールで目的のナレッジベースを関連付けず、API 呼び出し時に rag_options を通じてナレッジベース ID を渡します。
    • コンソールで目的のナレッジベースを関連付け、さらに API 呼び出し時に rag_options を通じてナレッジベース ID を渡します。
      この場合、呼び出し時に渡されたナレッジベースのみが取得されます。たとえば、Agent Application がナレッジベース A に関連付けられているにもかかわらず、API 呼び出し時にナレッジベース B を指定した場合、ナレッジベース A は取得されず、ナレッジベース B のみが取得されます。
    ナレッジベース ID(pipeline_ids)の取得方法: Knowledge Base ページで確認するか、CreateIndex API が返す Data.Id を使用します。CreateIndex は構造化されていないナレッジベースのみをサポートします。 以下のサンプルでは、構造化されていないナレッジベースとして Bailian Phones Specifications.docx を使用しています。
    • Python
    • Java
    • HTTP
    リクエスト例
    import os
    # DashScope SDK のバージョンは 2.0.1 以降である必要があります。
    import dashscope
    from dashscope.v2 import DashScopeError
    
    # 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
    client = dashscope.Client(
        # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えてください。ただし、本番環境では API キーをコード内にハードコードしないことを推奨します。これにより、API キー漏洩のリスクを低減できます。
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        workspace="{WorkspaceId}",
        region="ap-southeast-1",
    )
    
    try:
        response = client.apps.completions.create(
            app_id='YOUR_APP_ID',  # YOUR_APP_ID をアプリケーション ID に置き換えます
            prompt='Please recommend a mobile phone under 3000 yuan',
            rag_options={
                "pipeline_ids": ["YOUR_PIPELINE_ID1,YOUR_PIPELINE_ID2"],  # 実際のナレッジベース ID に置き換えます。複数の ID はカンマで区切ります
            }
        )
        print('%s\n' % (response.text))  # テキスト出力のみを処理します
        # print('%s\n' % (response.usage))
    except DashScopeError as e:
        print(f'request_id={e.request_id}')
        print(f'code={e.code}')
        print(f'message={e.message}')
        print(f'Refer to: https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code')
    
    応答例
    Based on your budget, I recommend the **Bailian Zephyr Z9**. This phone is priced between 2499-2799 yuan, which fits your budget. It features a lightweight 6.4-inch 1080 x 2340 pixel screen design, paired with 128GB storage and 6GB RAM, suitable for daily use. Additionally, it has a 4000mAh battery and a lens that supports 30× digital zoom, which can meet your photography and battery life needs. If you're looking for a slim, portable phone with comprehensive features, the Bailian Zephyr Z9 would be a good choice.
    
  2. 指定された非構造化ドキュメントを取得するには、rag_options にナレッジベース ID、ドキュメント ID、タグ、またはメタデータ(キーと値のペア)を渡します。
    ドキュメント ID、タグ、およびメタデータは、非構造化ドキュメントに対してのみ有効です。
    • 取得方法:
      • ドキュメント ID(file_ids): Application Data ページで確認するか、ドキュメントをインポートする際に AddFile API が返す ID を使用します。
      • ドキュメントタグ: Application Data ページでタグを確認するか、DescribeFile API から取得します。
      • ドキュメントメタデータ: Knowledge Base ページで View をクリックしてナレッジベースに入り、その後 Metadata Information をクリックします。
    • 複数のドキュメント ID を指定できますが、それらのドキュメントはナレッジインデックスに含まれている必要があります。
    • ドキュメント ID を指定する場合は、そのドキュメントが属するナレッジベース ID も必ず指定する必要があります。
    • 指定されたドキュメントのみが取得されます。たとえば、Agent Application がナレッジベース A に関連付けられているにもかかわらず、API 呼び出し時にナレッジベース B のドキュメントを指定した場合、ナレッジベース A のドキュメントは取得されず、ナレッジベース B のドキュメントのみが取得されます。 以下のサンプルでは、構造化されていないナレッジベースとして Bailian Phones Specifications.docx を使用しています。
      • Python
      • Java
      • HTTP
      リクエスト例
      import os
      # DashScope SDK のバージョンは 2.0.1 以降である必要があります。
      import dashscope
      from dashscope.v2 import DashScopeError
      
      # 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
      client = dashscope.Client(
          # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えることができます。ただし、API キーの漏洩リスクを低減するため、本番環境ではコード内に API キーを直接ハードコードしないことを推奨します。
          api_key=os.getenv("DASHSCOPE_API_KEY"),
          workspace="{WorkspaceId}",
          region="ap-southeast-1",
      )
      
      try:
          response = client.apps.completions.create(
              app_id='YOUR_APP_ID',  # YOUR_APP_ID をアプリケーション ID に置き換えます
              prompt='Please recommend a mobile phone under 3000 yuan',
              rag_options={
                  "pipeline_ids": ["YOUR_PIPELINE_ID1", "YOUR_PIPELINE_ID2"],  # 実際のナレッジベース ID に置き換えます。複数の場合はカンマで区切ります
                  "file_ids": ["YOUR_FILE_ID1", "YOUR_FILE_ID2"],  # 実際の非構造化ドキュメント ID に置き換えます。複数の場合はカンマで区切ります
                  "metadata_filter": {  # ドキュメントメタデータのキーと値のペアです。複数の場合はカンマで区切ります
                      "key1": "value1",
                      "key2": "value2"
                  },
                  "tags": ["tag1", "tag2"]  # ドキュメントタグです。複数の場合はカンマで区切ります
              }
          )
          print('%s\n' % (response.text))
      except DashScopeError as e:
          print(f'request_id={e.request_id}')
          print(f'code={e.code}')
          print(f'message={e.message}')
          print(f'Refer to: https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code')
      
      応答例
      {
          "text": "Within a budget of under 3000 yuan, I recommend you consider the **Bailian Zephyr Z9**. This phone has the following features:
      
      - **Screen**: 6.4-inch 1080 x 2340 pixels, suitable for daily use and entertainment.
      - **Memory and storage**: 6GB RAM + 128GB storage space, which can meet most users' needs for smoothness and storage.
      - **Battery capacity**: 4000mAh, providing all-day usage guarantee.
      - **Camera function**: Equipped with a lens supporting 30× digital zoom, capable of capturing details from greater distances.
      - **Other features**: Lightweight and portable design, easy to carry.
      
      The reference price is between 2499 and 2799 yuan, which perfectly fits your budget requirements and offers good value for money. Hope these suggestions are helpful!",
          "finish_reason": "stop",
          "session_id": "10bdea3d1435406aad8750538b701bee",
          "thoughts": null,
          "doc_references": null
      }
      
  3. 構造化ドキュメントから指定されたデータを取得するには、rag_options にナレッジベース ID および「構造化データのヘッダー + 値」のキーと値のペアを渡します。 構造化データのキーと値のペア(structured_filter)の取得方法: Knowledge Base ページで View をクリックしてナレッジベースに入り、その後 View Index をクリックします。
    • Python
    • Java
    • HTTP
    リクエスト例
    import os
    # DashScope SDK のバージョンは 2.0.1 以降である必要があります。
    import dashscope
    from dashscope.v2 import DashScopeError
    
    # 以下はシンガポールリージョンの設定例です。{WorkspaceId} を実際の workspace ID に置き換えてください。region の値はリージョンによって異なります。
    client = dashscope.Client(
        # 環境変数が設定されていない場合は、次の行を api_key="sk-xxx" に置き換えることができます。ただし、API キーの漏洩リスクを低減するため、本番環境ではコード内に直接 API キーをハードコードしないことを推奨します。
        api_key=os.getenv("DASHSCOPE_API_KEY"),
        workspace="{WorkspaceId}",
        region="ap-southeast-1",
    )
    
    try:
        response = client.apps.completions.create(
            app_id='YOUR_APP_ID',  # YOUR_APP_ID をアプリケーション ID に置き換えます
            prompt='Please recommend a mobile phone under 3000 yuan',
            rag_options={
                "pipeline_ids": ["YOUR_PIPELINE_ID1", "YOUR_PIPELINE_ID2"],  # 実際のナレッジベース ID に置き換えます。複数ある場合はコンマで区切ります
                 "structured_filter": {  # 構造化データのキーと値のペアです。構造化データに対応しており、複数ある場合はコンマで区切ります
                    "key1": "value1",
                    "key2": "value2"
                 }
            }
        )
        print('%s\n' % (response.text))
    except DashScopeError as e:
        print(f'request_id={e.request_id}')
        print(f'code={e.code}')
        print(f'message={e.message}')
        print(f'Refer to: https://www.alibabacloud.com/help/ja/model-studio/developer-reference/error-code')
    
    応答例
    {
        "text": "I recommend the \"Bailian\" phone, which is priced at 2999 yuan, fitting your budget requirement. If you need to know more information, such as performance, appearance, etc., please let me know.",
        "finish_reason": "stop",
        "session_id": "80a3b868b5ce42c8a12f01dccf8651e2",
        "thoughts": null,
        "doc_references": null
    }
    
情報の表示

取得プロセスの表示: 呼び出し時にコードに has_thoughts を追加し、True に設定します。取得プロセスは output の thoughts フィールドに返されます。

回答ソースの表示: Agent Application の Retrieval Configuration で Show Source を有効化し、アプリケーションを公開してください。
image

API リファレンス

パラメーターの完全なリストについては、「DashScope のワークフローおよびレガシ エージェントアプリケーション API リファレンス」をご参照ください。

エラーコード

呼び出しが失敗した場合は、トラブルシューティングのため「エラーメッセージ」をご参照ください。

参照

よくある質問

  1. インポート文内のクラス名およびパッケージ名が正しいことを確認します。
  2. 依存関係を追加します。Maven または Gradle を使用している場合は、pom.xml または build.gradle ファイルに DashScope Java SDK の依存関係が含まれており、かつ最新バージョンであることを確認してください。Maven で DashScope Java SDK の最新バージョン番号を確認できます。
<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dashscope-sdk-java</artifactId>
    <version>最新のバージョンを入力してください(例:2.16.4)</version>
</dependency>
// https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
implementation group: 'com.alibaba', name: 'dashscope-sdk-java', version: '最新のバージョンを入力してください(例:2.16.4)'
  1. SDK をアップグレードします。DashScope Java SDK の古いバージョンには必要な機能やクラスが含まれていない可能性があります。バージョンが古くなっている場合は、pom.xml または build.gradle ファイル内のバージョン番号を変更してアップグレードしてください。
<!-- https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>dashscope-sdk-java</artifactId>
    <version>最新のバージョン番号に置き換えてください</version>
</dependency>
// https://mvnrepository.com/artifact/com.alibaba/dashscope-sdk-java
implementation group: 'com.alibaba', name: 'dashscope-sdk-java', version: '最新のバージョン番号に置き換えてください'
  1. 変更を適用するためにプロジェクトを再読み込みします。
  2. コードサンプルを再度実行します。 問題が解決しない場合は、開発者フォーラムで同様の問題とそのソリューションを確認するか、チケットを送信してください。