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

Alibaba Cloud Model Studio:ナレッジベースの SearchFilters

最終更新日:Aug 26, 2026

`Retrieve` API は、セマンティック類似性に基づいてナレッジベースからテキストセグメントを返します。セマンティック検索で無関係な結果が多すぎる場合は、 SearchFilters を使用して、セマンティック検索結果にメタデータベースのフィルタリングを適用します。これは、明確に定義されたフィールドを持つデータテーブルなどの構造化データに効果的です。

SearchFilters の仕組み

SearchFilters を使用しない場合、Retrieve API は意味的に類似するすべてのテキストセグメントを返しますが、これには無関係な一致が含まれる可能性があります。SearchFilters は、まずセマンティック検索を実行し、次にフィールドの条件によって結果をフィルタリングします。

SearchFilters なしの場合:
{
  "indexId": "o73yjlxxxx",
  "query": "会社内の San Zhang という名前の従業員"
}

セマンティック取得は、「San Zhang」との関連性が高くないテキストセグメントを返します。

image SearchFilters ありの場合:
{
  "indexId": "o73yjlxxxx",
  "query": "San Zhangという名前の従業員",
  "searchFilters": [
    {
      "Name": "San Zhang"
    }
  ]
}

SearchFilters は、セマンティック検索結果から Name: "San Zhang" に一致しないテキストセグメントを削除します。

image

構文

SearchFilters はサブグループの配列です。各サブグループは、1 つ以上の フィールド: 値 のペアを持つ JSON オブジェクトです。サブグループは常に AND ロジックで結合されます。

{
  "searchFilters": [
    {
      "Name": "San Zhang",
      "Sex": "Male"
    },
    {
      "Position": "Engineer"
    }
  ]
}

この例では、結果は Name = "San Zhang" AND Sex = "Male" (サブグループ 1 内) AND Position = "Engineer" (サブグループ 2) に一致する必要があります。

サポートされているクエリタイプ

演算子のリファレンス

クエリタイプ演算子サポートされるフィールドタイプ説明
単一値*(直接値)*文字列、数値 (long、double)単一の完全一致の値に一致します。例: {"Name": "田中一郎"}
複数値*(JSON 配列)*文字列配列、数値配列配列内のいずれかの値に一致します (SQL の IN に類似)。例: {"Name": "[\"田中一郎\",\"鈴木二郎\"]"}
等価eq文字列、数値等しい。例: {"Name": {"eq": "田中一郎"}}
等価neq文字列、数値等しくない。例: {"Name": {"neq": "田中一郎"}}
範囲gt数値より大きい。例: {"Age": {"gt": 20}}
範囲gte数値以上。例: {"Age": {"gte": 20}}
範囲lt数値より小さい。例: {"Age": {"lt": 30}}
範囲lte数値以下。例: {"Age": {"lte": 30}}
あいまいlike文字列ワイルドカードパターンマッチ。例: {"Position": {"like": "E%r"}}
タグtags文字列配列ドキュメントタグによるフィルタリング (ドキュメント検索のナレッジベースのみ)。例: {"tags": "[\"tag1\",\"tag2\"]"}

等価クエリと間隔クエリは、範囲クエリのサブタイプです。等価クエリでは大文字と小文字が区別されず、フィールドごとに単一の値のみを受け入れます。

あいまい検索のワイルドカード文字

文字説明
%0 個以上の文字に一致しますE%rEngineer
_正確に 1 文字に一致しますE_gineerEngineer

タグクエリのロジック

  • 1 つのサブグループに複数のタグがある場合は OR ロジックが使用されます。いずれかのタグに一致するファイルが返されます。
  • タグ間で AND ロジックを使用するには、各タグを別々のサブグループに配置します。

前提条件

以下が必要です:

RAM ユーザーは、参加しているワークスペース内のナレッジベースのみを管理できます。Alibaba Cloud アカウント (root ユーザー) は、すべてのワークスペースを管理できます。

サンプルデータの設定

例では EmployeeInformation.xlsx (3 レコード) を使用します。ナレッジベースを作成し、以下の設定を行います:

設定
ナレッジベースタイプデータクエリ
データソースデータテーブルのアップロード
フィールドName (文字列)、Sex (文字列)、Position (文字列)、Age (double)
[インデックス設定]すべてのフィールドが取得とモデル応答に使用されます
image

完全なコード例

以下の Python と Java の例は、すべてのクエリタイプをカバーしています。

サンプルコードを実行する前に、AccessKey と AccessKey Secret を環境変数として設定してください

Python

SearchFiltersFullExample.py

# このサンプルコードは参照用です。本番環境では使用しないでください。
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class SearchFiltersFullExample:
    class QueryObject:
        def __init__(self, prefix):
            self.like = prefix

        def to_dict(self):
            return {
                "like": self.like
            }

    class Range:
        def __init__(self, gte, lte):
            self.gte = gte
            self.lte = lte

        def to_dict(self):
            return {
                "gte": self.gte,
                "lte": self.lte
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        AccessKey ペアを使用してクライアントを初期化します。
        @return: Client
        @throws Exception
        """
        # 本番環境では、STS または他の安全な認証情報管理方法を使用してください。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
        config = open_api_models.Config(
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def sub_group_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社にいる田中太郎という名前の従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # グループ 1: Name = "田中太郎", グループ 2: Sex = "Female"
            retrieve_request.search_filters = [
                {"Name": "田中太郎"},
                {"Sex": "Female"}
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

    @staticmethod
    def single_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社にいる田中太郎という名前の従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # 単一値フィルター: Name = "田中太郎"
            retrieve_request.search_filters = [
                {"Name": "田中太郎"}
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

    @staticmethod
    def multi_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社の全従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # 複数の値を格納するリストを作成します。
            names = ["田中太郎", "鈴木花子"]
            # 複数値フィルター: Name IN ["田中太郎", "鈴木花子"]
            retrieve_request.search_filters = [{"Name": json.dumps(names)}]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

    @staticmethod
    def range_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社の全従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # 範囲フィルター: Age
            age_range = SearchFiltersFullExample.Range(20, 27)
            retrieve_request.search_filters = [
                {"Position": "エンジニア"},  # グループ 1: Position フィルター条件
                {"Age": json.dumps(age_range.to_dict())}  # グループ 2: Age 範囲フィルター条件
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

    @staticmethod
    def wildcard_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社の男性従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # あいまいフィルター: Position LIKE "E%r" (% = 0 個以上の文字)
            position = SearchFiltersFullExample.QueryObject('E%r')
            retrieve_request.search_filters = [
                {"Name": "田中太郎"},  # Name フィルター条件。実際のプロパティと値に置き換えることができます。
                {"Position": json.dumps(position.to_dict())}  # Position (あいまい検索) フィルター条件。実際のプロパティと値に置き換えることができます。
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

    @staticmethod
    def tag_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '候補者を何人か提示してください'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # タグフィルター (配列内は OR ロジック)
            tags = ["A 大学", "学生会長"]
            retrieve_request.search_filters = [
                {"tags": json.dumps(tags)}
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

    @staticmethod
    def tag_query2() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '候補者を何人か提示してください'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # タグフィルター (グループ間は AND ロジック)
            tag1 = ["A 大学"]
            tag2 = ["スポーツ特待生"]
            retrieve_request.search_filters = [
                {"tags": json.dumps(tag1)},
                {"tags": json.dumps(tag2)}
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

    @staticmethod
    def main(args: List[str]) -> None:
        SearchFiltersFullExample.sub_group_query()
        SearchFiltersFullExample.single_query()
        SearchFiltersFullExample.multi_query()
        SearchFiltersFullExample.range_query()
        SearchFiltersFullExample.wildcard_query()
        SearchFiltersFullExample.tag_query()
        SearchFiltersFullExample.tag_query2()

if __name__ == '__main__':
    SearchFiltersFullExample.main(sys.argv[1:])

Java

SearchFiltersFullExample.java

// このサンプルコードは参照用です。本番環境では使用しないでください。
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SearchFiltersFullExample {
    /**
     * description :
     * <p>AccessKey ペアを使用してクライアントを初期化します。</p>
     *
     * @return Client
     * @throws Exception
     */
    public static com.aliyun.bailian20231229.Client createClient() throws Exception {
        // 本番環境では、STS または他の安全な認証情報管理方法を使用してください。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                // 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                // 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = "bailian.ap-southeast-1.aliyuncs.com";
        return new com.aliyun.bailian20231229.Client(config);
    }

    public static void subgroupQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // RetrieveRequest オブジェクトを作成します。
            RetrieveRequest request = new RetrieveRequest();
            // 必須。実際のプロンプトを入力できます。
            request.setQuery("会社にいる田中太郎という名前の従業員");
            // 必須。実際のナレッジベース ID を入力してください。
            request.setIndexId("実際のナレッジベース ID を入力してください");
            Map<String, String> map1 = new HashMap<>();
            // グループ 1: Name = "田中太郎"
            map1.put("Name", "田中太郎");
            Map<String, String> map2 = new HashMap<>();
            // グループ 2: Sex = "Female"
            map2.put("Sex", "Female");
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 取得を実行します。ワークスペース ID と RetrieveRequest オブジェクトを入力してください。
            RetrieveResponse resp = client.retrieve("実際のワークスペース ID を入力してください", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 本番環境では例外を適切に処理してください
            System.out.println(e.getMessage());
        }
    }

    public static void singleQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // RetrieveRequest オブジェクトを作成します。
            RetrieveRequest request = new RetrieveRequest();
            // 必須。実際のプロンプトを入力できます。
            request.setQuery("会社にいる田中太郎という名前の従業員");
            // 必須。実際のナレッジベース ID を入力してください。
            request.setIndexId("実際のナレッジベース ID を入力してください");
            Map<String, String> map = new HashMap<>();
            // 単一値フィルター: Name = "田中太郎"
            map.put("Name", "田中太郎");
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 取得を実行します。ワークスペース ID と RetrieveRequest オブジェクトを入力してください。
            RetrieveResponse resp = client.retrieve("実際のワークスペース ID を入力してください", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 本番環境では例外を適切に処理してください
            System.out.println(e.getMessage());
        }
    }

    public static void multiQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // RetrieveRequest オブジェクトを作成します。
            RetrieveRequest request = new RetrieveRequest();
            // 必須。実際のプロンプトを入力できます。
            request.setQuery("会社の全従業員");
            // 必須。実際のナレッジベース ID を入力してください。
            request.setIndexId("実際のナレッジベース ID を入力してください");
            // 複数の値を格納する JsonArray を作成します。
            JsonArray array = new JsonArray();
            array.add("田中太郎");
            array.add("鈴木花子");
            Map<String, String> map = new HashMap<>();
            // 複数値フィルター: Name IN ["田中太郎", "鈴木花子"]
            map.put("Name", array.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 取得を実行します。ワークスペース ID と RetrieveRequest オブジェクトを入力してください。
            RetrieveResponse resp = client.retrieve("実際のワークスペース ID を入力してください", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 本番環境では例外を適切に処理してください
            System.out.println(e.getMessage());
        }
    }

    public static void rangeQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // RetrieveRequest オブジェクトを作成します。
            RetrieveRequest request = new RetrieveRequest();
            // 必須。実際のプロンプトを入力できます。
            request.setQuery("会社の全従業員");
            // 必須。実際のナレッジベース ID を入力してください。
            request.setIndexId("実際のナレッジベース ID を入力してください");
            Map<String, String> map1 = new HashMap<>();
            // グループ 1: Position = "エンジニア"
            map1.put("Position", "エンジニア");
            // グループ 2: Age 範囲フィルター
            Map<String, String> map2 = new HashMap<>();
            Range range = new Range(20, 27);
            map2.put("Age", new Gson().toJson(range));
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 取得を実行します。ワークスペース ID と RetrieveRequest オブジェクトを入力してください。
            RetrieveResponse resp = client.retrieve("実際のワークスペース ID を入力してください", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 本番環境では例外を適切に処理してください
            System.out.println(e.getMessage());
        }
    }

    public static void wildcardQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // RetrieveRequest オブジェクトを作成します。
            RetrieveRequest request = new RetrieveRequest();
            // 必須。実際のプロンプトを入力できます。
            request.setQuery("会社の男性従業員");
            // 必須。実際のナレッジベース ID を入力してください。
            request.setIndexId("実際のナレッジベース ID を入力してください");
            // グループ 1: Name = "田中太郎"
            Map<String, String> map1 = new HashMap<>();
            map1.put("Name", "田中太郎");
            // グループ 2: Position LIKE "E%r" (% = 0 個以上の文字)
            Map<String, String> map2 = new HashMap<>();
            QueryObject queryObject = new QueryObject("E%r");
            map2.put("Position", new Gson().toJson(queryObject));
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 取得を実行します。ワークスペース ID と RetrieveRequest オブジェクトを入力してください。
            RetrieveResponse resp = client.retrieve("実際のワークスペース ID を入力してください", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 本番環境では例外を適切に処理してください
            System.out.println(e.getMessage());
        }
    }

    public static void tagQuery() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // RetrieveRequest オブジェクトを作成します。
            RetrieveRequest request = new RetrieveRequest();
            // 必須。実際のプロンプトを入力できます。
            request.setQuery("候補者を何人か提示してください");
            // 必須。実際のナレッジベース ID を入力してください。
            request.setIndexId("実際のナレッジベース ID を入力してください");
            // タグフィルター (配列内は OR ロジック)
            JsonArray array = new JsonArray();
            array.add("A 大学");
            array.add("学生会長");
            Map<String, String> map = new HashMap<>();
            map.put("tags", array.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map);
            request.setSearchFilters(searchFilters);
            // 取得を実行します。ワークスペース ID と RetrieveRequest オブジェクトを入力してください。
            RetrieveResponse resp = client.retrieve("実際のワークスペース ID を入力してください", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 本番環境では例外を適切に処理してください
            System.out.println(e.getMessage());
        }
    }

    public static void tagQuery2() {
        try {
            com.aliyun.bailian20231229.Client client = createClient();
            // RetrieveRequest オブジェクトを作成します。
            RetrieveRequest request = new RetrieveRequest();
            // 必須。実際のプロンプトを入力できます。
            request.setQuery("候補者を何人か提示してください");
            // 必須。実際のナレッジベース ID を入力してください。
            request.setIndexId("実際のナレッジベース ID を入力してください");
            // タグフィルター (グループ間は AND ロジック)
            JsonArray tag1 = new JsonArray();
            tag1.add("A 大学");
            JsonArray tag2 = new JsonArray();
            tag2.add("スポーツ特待生");
            Map<String, String> map1 = new HashMap<>();
            map1.put("tags", tag1.toString());
            Map<String, String> map2 = new HashMap<>();
            map2.put("tags", tag2.toString());
            List<Map<String, String>> searchFilters = new ArrayList<>();
            searchFilters.add(map1);
            searchFilters.add(map2);
            request.setSearchFilters(searchFilters);
            // 取得を実行します。ワークスペース ID と RetrieveRequest オブジェクトを入力してください。
            RetrieveResponse resp = client.retrieve("実際のワークスペース ID を入力してください", request);
            System.out.println(new Gson().toJson(resp.getBody()));
        } catch (Exception e) {
            // 本番環境では例外を適切に処理してください
            System.out.println(e.getMessage());
        }
    }

    public static void main(String[] args) {
        subgroupQuery();
        singleQuery();
        multiQuery();
        rangeQuery();
        wildcardQuery();
        tagQuery();
        tagQuery2();
    }

    static class Range {
        double gte;
        double lte;

        public Range(double gte, double lte) {
            this.gte = gte;
            this.lte = lte;
        }
    }

    static class QueryObject {
        String like;

        public QueryObject(String prefix) {
            this.like = prefix;
        }

        public String getLike() {
            return like;
        }

        public void setLike(String like) {
            this.like = like;
        }
    }
}

クエリタイプの例

各クエリタイプには、JSON 構文とリクエスト/レスポンスのサンプルが含まれています。

これらのプレースホルダーを実際の値に置き換えてください:

プレースホルダー説明
<knowledge-base-id>ナレッジベースのインデックス ID27ubwxxxxx
<workspace-id>ワークスペース IDllm-4u5xpd1xdjxxxxxx

サブグループクエリ

searchFilters 配列の各要素は、フィルター条件を組み合わせたサブグループです。すべてのサブグループが一致する必要があります (AND ロジック)。

Name が "San Zhang" で、かつ Sex が "Female" のレコードをフィルタリング:
{
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Sex": "Female"
    }
  ]
}

両方の条件に一致するレコードはないため、nodes は空になります。

Python

SubGroupQueryExample.py

# このサンプルコードは参照用です。本番環境では使用しないでください。
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class SubGroupQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        AccessKey ペアを使用してクライアントを初期化します。
        @return: Client
        @throws Exception
        """
        # 本番環境では、STS または他の安全な認証情報管理方法を使用してください。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
        config = open_api_models.Config(
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = SubGroupQueryExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社にいる田中太郎という名前の従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # グループ 1: Name = "田中太郎", グループ 2: Sex = "Female"
            retrieve_request.search_filters = [
                {"Name": "田中太郎"},
                {"Sex": "Female"}
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

if __name__ == '__main__':
    SubGroupQueryExample.main(sys.argv[1:])

Java

SubGroupQueryExample.java

// このサンプルコードは参考用です。本番環境では使用しないでください。
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SubGroupQueryExample {
    /**
     * 説明

リクエストのサンプル

リクエストパラメーター

{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "San Zhang という名前の従業員",
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Sex": "Female"
    }
  ]
}

レスポンスのサンプル

応答パラメーター

{
  "code": "Success",
  "data": {
    "nodes": []
  },
  "message": "success",
  "requestId": "5BA30772-xxxx-560C-B1F7-C1DA737A9D80",
  "status": "200",
  "success": true
}

単一値クエリ

フィールドに単一の値を渡して、その正確な値を持つレコードに一致させます。

Name が "San Zhang" のレコードをフィルター:
{
  "searchFilters": [
    {
      "Name": "San Zhang"
    }
  ]
}

Python

SingleQueryExample.py

# このサンプルコードは参照用です。本番環境では使用しないでください。
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class SingleQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        AccessKey ペアを使用してクライアントを初期化します。
        @return: Client
        @throws Exception
        """
        # 本番環境では、STS または他の安全な認証情報管理方法を使用してください。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
        config = open_api_models.Config(
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = SingleQueryExample.create_client()
        # retrieve_request オブジェクトを作成します。
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # 必須。実際のプロンプトを入力できます。
        retrieve_request.query = '会社にいる田中太郎という名前の従業員'
        # 必須。実際のナレッジベース ID を入力してください。
        retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
        # 単一値クエリのプロパティは Name で、値は田中太郎です。実際のプロパティと値に置き換えることができます。
        retrieve_request.search_filters = [
            {"Name": "田中太郎"}
        ]
        try:
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

if __name__ == '__main__':
    SingleQueryExample.main(sys.argv[1:])

Java

SingleQueryExample.java

// このサンプルコードは参考用のため、本番環境では使用しないでください。
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SingleQueryExample {
    /**
     * 説明

リクエストのサンプル

リクエストパラメーター

{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "会社にいる田中太郎という名前の従業員",
  "searchFilters": [
    {
      "Name": "田中太郎"
    }
  ]
}

レスポンスのサンプル

応答パラメーター

{
  "code": "成功",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Sex": "男性",
          "_rc_score": 0,
          "Name": "San Zhang",
          "doc_name": "従業員シート",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "エンジニア"
        },
        "score": 0.3322954773902893,
        "text": "名前:San Zhang 年齢:25.0 役職:エンジニア 性別:男性"
      }
    ]
  },
  "message": "成功",
  "requestId": "AE0B5ABC-xxxx-54A1-9ED4-91865B859DF6",
  "status": "200",
  "success": true
}

複数値クエリ

フィールドに複数の値を渡して、指定された値のいずれかを含むレコードに一致させます。これは SQL の IN 演算子に似ています。値の配列を JSON 文字列としてシリアル化します。

Name が "San Zhang" または "Si Li" であるレコードをフィルター:
{
  "searchFilters": [
    {
      "Name": "[\"San Zhang\",\"Si Li\"]"
    }
  ]
}

Python

MultiQueryExample.py

# このサンプルコードは参照用です。本番環境では使用しないでください。
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class MultiQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        AccessKey ペアを使用してクライアントを初期化します。
        @return: Client
        @throws Exception
        """
        # 本番環境では、STS または他の安全な認証情報管理方法を使用してください。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
        config = open_api_models.Config(
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = MultiQueryExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社の全従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # 複数の値を格納するリストを作成します。
            names = ["田中太郎", "鈴木花子"]
            # 複数値フィルター: Name IN ["田中太郎", "鈴木花子"]
            retrieve_request.search_filters = [{"Name": json.dumps(names)}]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

if __name__ == '__main__':
    MultiQueryExample.main(sys.argv[1:])

Java

MultiQueryExample.java

// このサンプルコードは参考用です。本番環境では使用しないでください。
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class MultiQueryExample {
    /**
     * 説明

リクエストのサンプル

リクエストパラメーター

{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "社内の全従業員",
  "searchFilters": [
    {
      "Name": "[\"San Zhang\",\"Si Li\"]"
    }
  ]
}

レスポンスのサンプル

応答パラメーター

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Sex": "Male",
          "_rc_score": 0,
          "Name": "田中太郎",
          "doc_name": "従業員シート",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "エンジニア"
        },
        "score": 0.3322954773902893,
        "text": "Name:田中太郎 Age:25.0 Position:エンジニア Sex:Male"
      },
      {
        "metadata": {
          "_rc_v_score": 0.2531493306159973,
          "_q_score": 0.8392540654998252,
          "source": "0",
          "_score": 0.25632044672966003,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_2",
          "Sex": "Female",
          "_rc_score": 0,
          "Name": "鈴木花子",
          "doc_name": "従業員シート",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_2",
          "Age": "31.0",
          "Position": "営業"
        },
        "score": 0.25632044672966003,
        "text": "Name:鈴木花子 Age:31.0 Position:営業 Sex:Female"
      }
    ]
  },
  "message": "success",
  "requestId": "1DFE5E9E-xxxx-5C37-8011-8FA2E2875309",
  "status": "200",
  "success": true
}

範囲クエリ

範囲クエリを使用して、数値フィールドが指定された間隔内にあるレコードを検索します。範囲クエリを他のクエリタイプと組み合わせるには、それらを別々のサブグループに配置します。

Position が "エンジニア" (単一値) AND Age が 20 から 25 の間 (範囲) のレコードをフィルタリングします:
{
  "searchFilters": [
    {
      "Position": "エンジニア"
    },
    {
      "Age": {
        "gte": 20,
        "lte": 25
      }
    }
  ]
}

Python

RangeQueryExample.py

# このサンプルコードは参照用です。本番環境では使用しないでください。
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class RangeQueryExample:
    class Range:
        def __init__(self, gte, lte):
            self.gte = gte
            self.lte = lte

        def to_dict(self):
            return {
                "gte": self.gte,
                "lte": self.lte
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        AccessKey ペアを使用してクライアントを初期化します。
        @return: Client
        @throws Exception
        """
        # 本番環境では、STS または他の安全な認証情報管理方法を使用してください。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
        config = open_api_models.Config(
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = RangeQueryExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社の全従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # 範囲フィルター: Age
            age_range = RangeQueryExample.Range(20, 27)
            retrieve_request.search_filters = [
                {"Position": "エンジニア"},  # グループ 1: Position フィルター条件
                {"Age": json.dumps(age_range.to_dict())}  # グループ 2: Age 範囲フィルター条件
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

if __name__ == '__main__':
    RangeQueryExample.main(sys.argv[1:])

Java

RangeQueryExample.java

// このサンプルコードは参考用です。本番環境では使用しないでください。
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RangeQueryExample {
    /**
     * 説明

リクエストのサンプル

リクエストパラメーター

{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "会社の全従業員",
  "searchFilters": [
    {
      "Sex": "Male"
    },
    {
      "Age": "{\"gte\":20.0,\"lte\":27.0}"
    }
  ]
}

レスポンスのサンプル

応答パラメーター

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.3016361088048254,
          "_q_score": 1,
          "source": "0",
          "_score": 0.3322954773902893,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Sex": "Male",
          "_rc_score": 0,
          "Name": "田中太郎",
          "doc_name": "従業員シート",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "エンジニア"
        },
        "score": 0.3322954773902893,
        "text": "Name:田中太郎 Age:25.0 Position:エンジニア Sex:Male"
      }
    ]
  },
  "message": "success",
  "requestId": "AE0B5ABC-xxxx-54A1-9ED4-91865B859DF6",
  "status": "200",
  "success": true
}

あいまい検索

ワイルドカードパターンを使用して文字列フィールドを部分的に一致させます。これは SQL の LIKE 演算子に似ています。パターンを {"like": "<pattern>"} オブジェクトでラップし、JSON 文字列としてシリアル化します。

Name が "田中太郎" AND Position が "E" で始まり "r" で終わるレコードをフィルタリングします:
{
  "searchFilters": [
    {
      "Name": "田中太郎"
    },
    {
      "Position": {
        "like": "E%r"
      }
    }
  ]
}

Python

WildcardQueryExample.py

# このサンプルコードは参照用です。本番環境では使用しないでください。
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class WildcardQueryExample:
    class QueryObject:
        def __init__(self, prefix):
            self.like = prefix

        def to_dict(self):
            return {
                "like": self.like
            }

    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        AccessKey ペアを使用してクライアントを初期化します。
        @return: Client
        @throws Exception
        """
        # 本番環境では、STS または他の安全な認証情報管理方法を使用してください。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-access-credentials をご参照ください。
        config = open_api_models.Config(
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        try:
            client = WildcardQueryExample.create_client()
            # retrieve_request オブジェクトを作成します。
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # 必須。実際のプロンプトを入力できます。
            retrieve_request.query = '会社の男性従業員'
            # 必須。実際のナレッジベース ID を入力してください。
            retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
            # あいまいフィルター: Position LIKE "E%r" (% = 0 個以上の文字)
            position = WildcardQueryExample.QueryObject('E%r')
            retrieve_request.search_filters = [
                {"Name": "田中太郎"},  # Name フィルター条件。実際のプロパティと値に置き換えることができます。
                {"Position": json.dumps(position.to_dict())}  # Position (あいまい検索) フィルター条件。実際のプロパティと値に置き換えることができます。
            ]
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

if __name__ == '__main__':
    WildcardQueryExample.main(sys.argv[1:])

Java

WildcardQueryExample.java

// サンプルコードは参考用です。本番環境では使用しないでください。
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class WildcardQueryExample {
    /**
     * description

リクエストのサンプル

リクエストパラメーター

{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "会社の男性従業員",
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Position": "{\"like\":\"E%r\"}"
    }
  ]
}

レスポンスのサンプル

応答パラメーター

{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.41137335930387275,
          "_q_score": 1,
          "source": "0",
          "_score": 0.46098726987838745,
          "doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Sex": "Male",
          "_rc_score": 0,
          "Name": "田中太郎",
          "doc_name": "従業員シート",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "エンジニア"
        },
        "score": 0.46098726987838745,
        "text": "Name:田中太郎 Age:25.0 Position:エンジニア Sex:Male"
      }
    ]
  },
  "message": "success",
  "requestId": "FA759FEC-xxxx-50B7-A64D-BE49A7DF56B8",
  "status": "200",
  "success": true
}

タグクエリ

ドキュメント検索のナレッジベースでは、ドキュメント タグで絞り込むことができます。タグは、取得対象を、特定のタグ値に一致するファイルのテキストセグメントに絞り込みます。

サンプル設定: ドキュメント検索ナレッジベースには、以下のタグを持つ 3 つの履歴書ファイルが含まれています:

ファイルタグ
San Zhang の履歴書A 大学スポーツ特待生
Si Li のレジュメB 大学
Wu Wang の履歴書B 大学学生会長

例 1: OR ロジック (1 つのサブグループに複数のタグ)

A 大学 OR 学生会長のタグが付いたファイルからテキストセグメントを返します:

単一のサブグループ内の複数のタグは OR ロジックを使用します。AND ロジックを適用するには、各タグを別々のサブグループに配置します (例 2 を参照)。

{
  "searchFilters": [
    {
      "tags": "[\"A 大学\",\"学生会長\"]"
    }
  ]
}

Python -- TagQueryExample.py

# このサンプルコードは参照用です。本番環境では使用しないでください。
import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class TagQueryExample:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        AccessKey ペアを使用してクライアントを初期化します。
        @return: Client
        @throws Exception
        """
        # AccessKey ペアを含むコードが漏洩すると、アカウント内のすべてのリソースのセキュリティが脅かされます。以下のサンプルコードは参照用です。
        # セキュリティトークンサービス (STS) など、より安全な方法でアクセス認証情報を管理することを推奨します。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-python-access-credentials をご参照ください。
        config = open_api_models.Config(
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = TagQueryExample.create_client()
        # retrieve_request オブジェクトを作成します。
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # 必須。実際のプロンプトを入力できます。
        retrieve_request.query = '候補者を何人か提示してください'
        # 必須。実際のナレッジベース ID を入力してください。
        retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
        # タグを格納するリストを作成します。複数のタグ間の論理関係は AND ではなく OR です。
        tags = ["A 大学", "学生会長"]
        retrieve_request.search_filters = [
            {"tags": json.dumps(tags)}
        ]
        try:
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

if __name__ == '__main__':
    TagQueryExample.main(sys.argv[1:])

Java -- TagQueryExample.java

// このサンプルコードは参考用です。本番環境では使用しないでください。
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TagQueryExample {
    /**
     * 説明

リクエストのサンプル

リクエストパラメーター

{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "候補者をいくつか提示してください",
  "SearchFilters": "[{\"tags\":\"[\\\"大学A\\\"]\"},{\"tags\":\"[\\\"スポーツ特待生\\\"]\"}]"
}

レスポンスのサンプル

応答パラメーター

{
  "Code": "Success",
  "Data": {
    "Nodes": [
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Zhang_San_Resume_1746760910599.json?Expires=1747020348&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1422617520249937,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|b99e98835c3c6d8f6496df5a43de0ba5|aa3ed8fc4aae8bbb78872994b01e0fda",
          "_q_score": 1,
          "source": "0",
          "_score": 0.1736905574798584,
          "title": "",
          "doc_id": "file_e787926158704f95aad6bc967619f176_10285263",
          "content": "Name: San Zhang Sex: Male Age: 23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "San Zhang's Resume",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_e787926158704f95aad6bc967619f176_10285263_0_0"
        },
        "Score": 0.1736905574798584,
        "Text": "Name: San Zhang Sex: Male Age: 23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "1ED6CECE-xxxx-5B21-91DB-410E0219412A",
  "Status": 200,
  "Success": true
}

これにより、San Zhang の履歴書 (タグ: University A) と Wu Wang の履歴書 (タグ: Student Union President) の両方から結果が返されます。

例 2: AND ロジック (タグを別々のサブグループに配置)

A 大学 AND スポーツ特待生の両方のタグが付いたファイルからテキストセグメントを返します:

{
  "searchFilters": [
    {
      "tags": "[\"A 大学\"]"
    },
    {
      "tags": "[\"スポーツ特待生\"]"
    }
  ]
}

Python -- TagQueryExample2.py

import json
import os
import sys
from typing import List

from alibabacloud_bailian20231229 import models as bailian_20231229_models
from alibabacloud_bailian20231229.client import Client as bailian20231229Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util.client import Client as UtilClient

class TagQueryExample2:
    def __init__(self):
        pass

    @staticmethod
    def create_client() -> bailian20231229Client:
        """
        AccessKey ペアを使用してクライアントを初期化します。
        @return: Client
        @throws Exception
        """
        # AccessKey ペアを含むコードが漏洩すると、アカウント内のすべてのリソースのセキュリティが脅かされます。以下のサンプルコードは参照用です。
        # セキュリティトークンサービス (STS) など、より安全な方法でアクセス認証情報を管理することを推奨します。詳細については、https://www.alibabacloud.com/help/ja/sdk/developer-reference/v2-manage-python-access-credentials をご参照ください。
        config = open_api_models.Config(
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_ID 環境変数が設定されていることを確認してください。
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # 必須。ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # エンドポイントの詳細については、https://www.alibabacloud.com/help/ja/model-studio/api-bailian-2023-12-29-endpoint をご参照ください。
        config.endpoint = f'bailian.ap-southeast-1.aliyuncs.com'
        return bailian20231229Client(config)

    @staticmethod
    def main(
            args: List[str],
    ) -> None:
        client = TagQueryExample.create_client()
        # retrieve_request オブジェクトを作成します。
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # 必須。実際のプロンプトを入力できます。
        retrieve_request.query = '候補者を何人か提示してください'
        # 必須。実際のナレッジベース ID を入力してください。
        retrieve_request.index_id = '実際のナレッジベース ID を入力してください'
        # タグを格納する 2 つのリストを作成します。
        tag1 = ["A 大学"]
        tag2 = ["スポーツ特待生"]
        retrieve_request.search_filters = [
            {"tags": json.dumps(tag1)},
            {"tags": json.dumps(tag2)}
        ]
        try:
            # 取得を実行します。ワークスペース ID と retrieve_request オブジェクトを入力してください。
            resp = client.retrieve('実際のワークスペース ID を入力してください', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # 本番環境では例外を適切に処理してください
            print(error.message)

if __name__ == '__main__':
    TagQueryExample2.main(sys.argv[1:])

Java -- TagQueryExample2.java

import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import com.google.gson.Gson;
import com.google.gson.JsonArray;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class TagQueryExample2 {
    /**
     * 説明

リクエストのサンプル

リクエストパラメーター

{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "候補者を何人か提示してください",
  "SearchFilters": "[{\"tags\":\"[\\\"A 大学\\\"]\"},{\"tags\":\"[\\\"スポーツ特待生\\\"]\"}]"
}

レスポンスのサンプル

応答パラメーター

{
  "Code": "Success",
  "Data": {
    "Nodes": [
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Zhang_San_Resume_1746760910599.json?Expires=1747020348&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1422617520249937,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|b99e98835c3c6d8f6496df5a43de0ba5|aa3ed8fc4aae8bbb78872994b01e0fda",
          "_q_score": 1,
          "source": "0",
          "_score": 0.1736905574798584,
          "title": "",
          "doc_id": "file_e787926158704f95aad6bc967619f176_10285263",
          "content": "Name: 田中太郎 Sex: Male Age: 23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "田中太郎の履歴書",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_e787926158704f95aad6bc967619f176_10285263_0_0"
        },
        "Score": 0.1736905574798584,
        "Text": "Name: 田中太郎 Sex: Male Age: 23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "1ED6CECE-xxxx-5B21-91DB-410E0219412A",
  "Status": 200,
  "Success": true
}

両方のタグを持つファイルは田中太郎の履歴書だけなので、そのファイルのみが返されます。

参考資料

リソース説明
ナレッジベースの作成と使用ナレッジベースのユーザーガイド
Retrieve APIナレッジベースからテキストセグメントを取得
RAM ユーザーへの API 権限の付与Retrieve API のための RAM ユーザーアクセスの設定
エラーコードAPI 呼び出しの失敗に関するトラブルシューティング