`Retrieve` API は、セマンティック類似性に基づいてナレッジベースからテキストセグメントを返します。セマンティック検索で無関係な結果が多すぎる場合は、 SearchFilters を使用して、セマンティック検索結果にメタデータベースのフィルタリングを適用します。これは、明確に定義されたフィールドを持つデータテーブルなどの構造化データに効果的です。
SearchFilters の仕組み
SearchFilters を使用しない場合、Retrieve API は意味的に類似するすべてのテキストセグメントを返しますが、これには無関係な一致が含まれる可能性があります。SearchFilters は、まずセマンティック検索を実行し、次にフィールドの条件によって結果をフィルタリングします。
{
"indexId": "o73yjlxxxx",
"query": "会社内の San Zhang という名前の従業員"
}
セマンティック取得は、「San Zhang」との関連性が高くないテキストセグメントを返します。
SearchFilters ありの場合:
{
"indexId": "o73yjlxxxx",
"query": "San Zhangという名前の従業員",
"searchFilters": [
{
"Name": "San Zhang"
}
]
}
SearchFilters は、セマンティック検索結果から Name: "San Zhang" に一致しないテキストセグメントを削除します。
構文
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%r は Engineer |
_ | 正確に 1 文字に一致します | E_gineer は Engineer |
タグクエリのロジック
- 1 つのサブグループに複数のタグがある場合は OR ロジックが使用されます。いずれかのタグに一致するファイルが返されます。
- タグ間で AND ロジックを使用するには、各タグを別々のサブグループに配置します。
前提条件
以下が必要です:
- (RAM ユーザーのみ)
AliyunBailianDataFullAccessポリシーとワークスペースのメンバーシップ。Alibaba Cloud アカウント (root ユーザー) には不要です。 - ワークスペース ID
- Model Studio SDK がインストールおよび設定済み
- AccessKey と AccessKey Secret が環境変数として設定されていること
RAM ユーザーは、参加しているワークスペース内のナレッジベースのみを管理できます。Alibaba Cloud アカウント (root ユーザー) は、すべてのワークスペースを管理できます。
サンプルデータの設定
例では EmployeeInformation.xlsx (3 レコード) を使用します。ナレッジベースを作成し、以下の設定を行います:
| 設定 | 値 |
|---|---|
| ナレッジベースタイプ | データクエリ |
| データソース | データテーブルのアップロード |
| フィールド | Name (文字列)、Sex (文字列)、Position (文字列)、Age (double) |
| [インデックス設定] | すべてのフィールドが取得とモデル応答に使用されます |
完全なコード例
以下の 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> | ナレッジベースのインデックス ID | 27ubwxxxxx |
<workspace-id> | ワークスペース ID | llm-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 呼び出しの失敗に関するトラブルシューティング |