Skip to main content
Mais

Knowledge base SearchFilters

A API Retrieve retorna segmentos de texto de uma base de conhecimento com base na similaridade semântica. Quando a busca semântica retornar muitos resultados irrelevantes, use SearchFilters para aplicar filtragem baseada em metadados aos resultados semânticos. Essa abordagem é eficaz para dados estruturados, como tabelas com campos bem definidos.

Como funciona o SearchFilters

Sem SearchFilters, a API Retrieve retorna todos os segmentos de texto semanticamente similares, o que pode incluir correspondências irrelevantes. O SearchFilters executa primeiro a busca semântica e depois filtra os resultados conforme as condições de campo. Sem SearchFilters:
{
  "indexId": "o73yjlxxxx",
  "query": "Employees in the company named San Zhang"
}
A recuperação semântica retorna segmentos de texto pouco relevantes para "San Zhang".
image
Com SearchFilters:
{
  "indexId": "o73yjlxxxx",
  "query": "Employees in the company named San Zhang",
  "searchFilters": [
    {
      "Name": "San Zhang"
    }
  ]
}
O SearchFilters remove dos resultados semânticos os segmentos de texto que não correspondem a Name: "San Zhang".
image

Sintaxe

SearchFilters é um array de subgrupos. Cada subgrupo é um objeto JSON com um ou mais pares field: value. Os subgrupos são sempre combinados com lógica AND.
{
  "searchFilters": [
    {
      "Name": "San Zhang",
      "Sex": "Male"
    },
    {
      "Position": "Engineer"
    }
  ]
}
Neste exemplo, os resultados devem corresponder a Name = "San Zhang" E Sex = "Male" (no subgrupo 1) E Position = "Engineer" (subgrupo 2).

Tipos de consulta suportados

Referência de operadores

Tipo de consultaOperadorTipos de campo suportadosDescrição
Valor único*(valor direto)*string, numérico (long, double)Corresponde a um único valor exato. Exemplo: {"Name": "San Zhang"}
Múltiplos valores*(array JSON)*array de strings, array numéricoCorresponde a qualquer valor no array (similar ao operador SQL IN). Exemplo: {"Name": "[\"San Zhang\",\"Si Li\"]"}
Igualdadeeqstring, numéricoIgual a. Exemplo: {"Name": {"eq": "San Zhang"}}
Desigualdadeneqstring, numéricoDiferente de. Exemplo: {"Name": {"neq": "San Zhang"}}
IntervalogtnuméricoMaior que. Exemplo: {"Age": {"gt": 20}}
IntervalogtenuméricoMaior ou igual a. Exemplo: {"Age": {"gte": 20}}
IntervaloltnuméricoMenor que. Exemplo: {"Age": {"lt": 30}}
IntervaloltenuméricoMenor ou igual a. Exemplo: {"Age": {"lte": 30}}
FuzzylikestringCorrespondência por padrão curinga. Exemplo: {"Position": {"like": "E%r"}}
Tagtagsarray de stringsFiltra por tags de documento (apenas bases de conhecimento de busca de documentos). Exemplo: {"tags": "[\"tag1\",\"tag2\"]"}
Consultas de igualdade e intervalo são subtipos de consultas de faixa. As consultas de igualdade não diferenciam maiúsculas de minúsculas e aceitam apenas valores únicos por campo.

Caracteres curinga para consultas fuzzy

Caractere

Descrição

Exemplo

%

Corresponde a zero ou mais caracteres

E%r corresponde a Engineer

_

Corresponde exatamente a um caractere

E_gineer corresponde a Engineer

Lógica de consulta de tags

  • Múltiplas tags em um único subgrupo usam lógica OR: arquivos correspondentes a qualquer tag são retornados.
  • Para aplicar lógica AND entre tags, coloque cada tag em um subgrupo separado.

Pré-requisitos

Você precisa de:
Usuários RAM podem gerenciar bases de conhecimento apenas nos workspaces aos quais foram associados. Contas Alibaba Cloud podem gerenciar todos os workspaces.

Configuração de dados de exemplo

Os exemplos utilizam o arquivo EmployeeInformation.xlsx (3 registros). Crie uma base de conhecimento com as seguintes configurações:

Configuração

Valor

Knowledge base type

Data Query

Data source

Upload Data Table

Fields

Name (string), Sex (string), Position (string), Age (double)

Index settings

All fields used for retrieval and model responses

image

Exemplos completos de código

Os exemplos a seguir em Python e Java abrangem todos os tipos de consulta.
Antes de executar o código de exemplo, configure seu AccessKey e AccessKey secret como variáveis de ambiente .
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
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:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/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()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Employees in the company named San Zhang'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Group 1: Name = "San Zhang", Group 2: Sex = "Female"
            retrieve_request.search_filters = [
                {"Name": "San Zhang"},
                {"Sex": "Female"}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def single_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Employees in the company named San Zhang'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Single-value filter: Name = "San Zhang"
            retrieve_request.search_filters = [
                {"Name": "San Zhang"}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def multi_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'All employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Create a list to store multiple values.
            names = ["San Zhang", "Si Li"]
            # Multi-value filter: Name IN ["San Zhang", "Si Li"]
            retrieve_request.search_filters = [{"Name": json.dumps(names)}]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def range_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'All employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Range filter: Age
            age_range = SearchFiltersFullExample.Range(20, 27)
            retrieve_request.search_filters = [
                {"Position": "Engineer"},  # Group 1: Position filter condition
                {"Age": json.dumps(age_range.to_dict())}  # Group 2: Age range filter condition
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def wildcard_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Male employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Fuzzy filter: Position LIKE "E%r" (% = zero or more chars)
            position = SearchFiltersFullExample.QueryObject('E%r')
            retrieve_request.search_filters = [
                {"Name": "San Zhang"},  # Name filter condition. You can replace it with the actual property and value.
                {"Position": json.dumps(position.to_dict())}  # Position (fuzzy query) filter condition. You can replace it with the actual property and value.
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def tag_query() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Provide some candidates'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Tag filter (OR logic within array)
            tags = ["University A", "Student Union President"]
            retrieve_request.search_filters = [
                {"tags": json.dumps(tags)}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

    @staticmethod
    def tag_query2() -> None:
        try:
            client = SearchFiltersFullExample.create_client()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Provide some candidates'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Tag filters (AND logic between groups)
            tag1 = ["University A"]
            tag2 = ["Sports Specialist Student"]
            retrieve_request.search_filters = [
                {"tags": json.dumps(tag1)},
                {"tags": json.dumps(tag2)}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            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:])

Exemplos de tipos de consulta

Cada tipo de consulta inclui sintaxe JSON e exemplos de solicitação e resposta. Substitua estes placeholders pelos seus valores reais:

Placeholder

Descrição

Exemplo

<knowledge-base-id>

ID do índice da base de conhecimento

27ubwxxxxx

<workspace-id>

ID do Workspace

llm-4u5xpd1xdjxxxxxx

Consulta por subgrupo

Cada elemento no array searchFilters é um subgrupo que combina condições de filtro. Todos os subgrupos devem corresponder (lógica AND). Filtrar registros onde Name é "San Zhang" E Sex é "Female":
{
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Sex": "Female"
    }
  ]
}
Nenhum registro atende a ambas as condições, portanto nodes está vazio.
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
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:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/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()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Employees in the company named San Zhang'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Group 1: Name = "San Zhang", Group 2: Sex = "Female"
            retrieve_request.search_filters = [
                {"Name": "San Zhang"},
                {"Sex": "Female"}
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    SubGroupQueryExample.main(sys.argv[1:])
Parâmetros da solicitação
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "Employees in the company named San Zhang",
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Sex": "Female"
    }
  ]
}
Parâmetros da resposta
{
  "code": "Success",
  "data": {
    "nodes": []
  },
  "message": "success",
  "requestId": "5BA30772-xxxx-560C-B1F7-C1DA737A9D80",
  "status": "200",
  "success": true
}

Consulta de valor único

Informe um único valor para um campo a fim de corresponder a registros com esse valor exato. Filtrar registros onde Name é "San Zhang":
{
  "searchFilters": [
    {
      "Name": "San Zhang"
    }
  ]
}
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
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:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/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()
        # Create a retrieve_request object.
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # Required. You can enter the actual prompt.
        retrieve_request.query = 'Employees in the company named San Zhang'
        # Required. Enter the actual knowledge base ID.
        retrieve_request.index_id = 'Enter the actual knowledge base ID'
        # The property for the single-value query is Name and the value is San Zhang. You can replace them with the actual property and value.
        retrieve_request.search_filters = [
            {"Name": "San Zhang"}
        ]
        try:
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    SingleQueryExample.main(sys.argv[1:])
Parâmetros da solicitação
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "Employees in the company named San Zhang",
  "searchFilters": [
    {
      "Name": "San Zhang"
    }
  ]
}
Parâmetros da resposta
{
  "code": "Success",
  "data": {
    "nodes": [
      {
        "metadata": {
          "_rc_v_score": 0.32581159472465515,
          "_q_score": 1,
          "source": "0",
          "_score": 0.4556944966316223,
          "doc_id": "table_xxxx75507aab4bd9a24c18d098b2e8ac_10285263_1",
          "Sex": "Male",
          "_rc_score": 0,
          "Name": "San Zhang",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_200275507aab4bd9a24c18d098b2e8ac_10285263_1",
          "Age": "25",
          "Position": "Engineer"
        },
        "score": 0.4556944966316223,
        "text": "Name:San Zhang Age:25 Position:Engineer Sex:Male"
      }
    ]
  },
  "message": "success",
  "requestId": "2FA4113E-xxxx-59C1-BDB2-5B930D8C9B1C",
  "status": "200",
  "success": true
}

Consulta de múltiplos valores

Informe múltiplos valores para um campo a fim de corresponder a registros que contenham qualquer um dos valores especificados, similar ao operador SQL IN. Serialize o array de valores como uma string JSON. Filtrar registros onde Name é "San Zhang" ou "Si Li":
{
  "searchFilters": [
    {
      "Name": "[\"San Zhang\",\"Si Li\"]"
    }
  ]
}
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
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:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/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()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'All employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Create a list to store multiple values.
            names = ["San Zhang", "Si Li"]
            # Multi-value filter: Name IN ["San Zhang", "Si Li"]
            retrieve_request.search_filters = [{"Name": json.dumps(names)}]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    MultiQueryExample.main(sys.argv[1:])
Parâmetros da solicitação
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "All employees in the company",
  "searchFilters": [
    {
      "Name": "[\"San Zhang\",\"Si Li\"]"
    }
  ]
}
Parâmetros da resposta
{
  "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": "San Zhang",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "Engineer"
        },
        "score": 0.3322954773902893,
        "text": "Name:San Zhang Age:25.0 Position:Engineer 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": "Si Li",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_2",
          "Age": "31.0",
          "Position": "Sales"
        },
        "score": 0.25632044672966003,
        "text": "Name:Si Li Age:31.0 Position:Sales Sex:Female"
      }
    ]
  },
  "message": "success",
  "requestId": "1DFE5E9E-xxxx-5C37-8011-8FA2E2875309",
  "status": "200",
  "success": true
}

Consulta de intervalo

Use consultas de intervalo para encontrar registros onde um campo numérico esteja dentro de um intervalo especificado. Combine consultas de intervalo com outros tipos de consulta colocando-as em subgrupos separados. Filtrar registros onde Position é "Engineer" (valor único) E Age está entre 20 e 25 (intervalo):
{
  "searchFilters": [
    {
      "Position": "Engineer"
    },
    {
      "Age": {
        "gte": 20,
        "lte": 25
      }
    }
  ]
}
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
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:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/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()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'All employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Range filter: Age
            age_range = RangeQueryExample.Range(20, 27)
            retrieve_request.search_filters = [
                {"Position": "Engineer"},  # Group 1: Position filter condition
                {"Age": json.dumps(age_range.to_dict())}  # Group 2: Age range filter condition
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    RangeQueryExample.main(sys.argv[1:])
Parâmetros da solicitação
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "All employees in the company",
  "searchFilters": [
    {
      "Sex": "Male"
    },
    {
      "Age": "{\"gte\":20.0,\"lte\":27.0}"
    }
  ]
}
Parâmetros da resposta
{
  "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": "San Zhang",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "Engineer"
        },
        "score": 0.3322954773902893,
        "text": "Name:San Zhang Age:25.0 Position:Engineer Sex:Male"
      }
    ]
  },
  "message": "success",
  "requestId": "AE0B5ABC-xxxx-54A1-9ED4-91865B859DF6",
  "status": "200",
  "success": true
}

Consulta fuzzy

Use padrões curinga para corresponder parcialmente a campos de string, similar ao operador SQL LIKE. Envolva o padrão em um objeto {"like": "<pattern>"} e serialize-o como uma string JSON. Filtrar registros onde Name é "San Zhang" E Position começa com "E" e termina com "r":
{
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Position": {
        "like": "E%r"
      }
    }
  ]
}
  • Python
  • Java
# The sample code is for reference only. Do not use it in a production environment.
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:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # For production, use STS or other secure credential management. See https://www.alibabacloud.com/help/sdk/developer-reference/v2-manage-access-credentials
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/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()
            # Create a retrieve_request object.
            retrieve_request = bailian_20231229_models.RetrieveRequest()
            # Required. You can enter the actual prompt.
            retrieve_request.query = 'Male employees in the company'
            # Required. Enter the actual knowledge base ID.
            retrieve_request.index_id = 'Enter the actual knowledge base ID'
            # Fuzzy filter: Position LIKE "E%r" (% = zero or more chars)
            position = WildcardQueryExample.QueryObject('E%r')
            retrieve_request.search_filters = [
                {"Name": "San Zhang"},  # Name filter condition. You can replace it with the actual property and value.
                {"Position": json.dumps(position.to_dict())}  # Position (fuzzy query) filter condition. You can replace it with the actual property and value.
            ]
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    WildcardQueryExample.main(sys.argv[1:])
Parâmetros da solicitação
{
  "indexId": "27ubwxxxxx",
  "WorkspaceId":"llm-4u5xpd1xdjxxxxxx",
  "query": "Male employees in the company",
  "searchFilters": [
    {
      "Name": "San Zhang"
    },
    {
      "Position": "{\"like\":\"E%r\"}"
    }
  ]
}
Parâmetros da resposta
{
  "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": "San Zhang",
          "doc_name": "Employee Sheet",
          "_id": "llm-xxxxpd1xdjqp8itj_27ubwxxxxx_table_xxxxad1c331c424780a8023376a73fac_10285263_1",
          "Age": "25.0",
          "Position": "Engineer"
        },
        "score": 0.46098726987838745,
        "text": "Name:San Zhang Age:25.0 Position:Engineer Sex:Male"
      }
    ]
  },
  "message": "success",
  "requestId": "FA759FEC-xxxx-50B7-A64D-BE49A7DF56B8",
  "status": "200",
  "success": true
}

Consulta por tag

Filtre por tags de documento em uma base de conhecimento de busca de documentos . As tags restringem a recuperação a segmentos de texto de arquivos correspondentes a valores específicos de tags. Configuração de exemplo: Uma base de conhecimento de busca de documentos contém três arquivos de currículo com as seguintes tags:

Arquivo

Tags

Currículo de San Zhang

University A, Sports Specialist Student

Currículo de Si Li

University B

Currículo de Wu Wang

University B, Student Union President

image

Exemplo 1: Lógica OR (múltiplas tags em um subgrupo)

Retorna segmentos de texto de arquivos marcados com University A OU Student Union President:
Múltiplas tags dentro de um único subgrupo usam lógica OR. Para aplicar lógica AND, coloque cada tag em um subgrupo separado (veja o Exemplo 2).
{
  "searchFilters": [
    {
      "tags": "[\"University A\",\"Student Union President\"]"
    }
  ]
}
# The sample code is for reference only. Do not use it in a production environment.
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:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # Leaking code that contains an AccessKey pair threatens the security of all resources in your account. The following sample code is for reference only.
        # We recommend that you use a more secure method, such as Security Token Service (STS), to manage access credentials. For more information, see https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-python-access-credentials.
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/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()
        # Create a retrieve_request object.
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # Required. You can enter the actual prompt.
        retrieve_request.query = 'Provide some candidates'
        # Required. Enter the actual knowledge base ID.
        retrieve_request.index_id = 'Enter the actual knowledge base ID'
        # Create a list to store tags. The logical relationship between multiple tags is OR, not AND.
        tags = ["University A", "Student Union President"]
        retrieve_request.search_filters = [
            {"tags": json.dumps(tags)}
        ]
        try:
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    TagQueryExample.main(sys.argv[1:])
// The sample code is for reference only. Do not use it in a production environment.
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 {
    /**
     * description
Parâmetros da solicitação
{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "Provide some candidates",
  "SearchFilters": "[{\"tags\":\"[\\\"University A\\\", \\\"Student Union President\\\"]\"}]"
}
Parâmetros da resposta
{
  "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": 0.8935035934804278,
          "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"
      },
      {
        "Metadata": {
          "file_path": "https://bailian-datahub-data-prod.oss-cn-beijing.aliyuncs.com/10285263/multimodal/docJson/Wang_Wu_Resume_1746760946844.json?Expires=1747020348&OSSAccessKeyId=YOUR_ACCESS_KEY_ID&Signature=YOUR_SIGNATURE",
          "is_displayed_chunk_content": "true",
          "_rc_v_score": 0.1592178845871759,
          "image_url": [],
          "nid": "ba8a14099f43308734538c29271cc7cd|d4a048b6799ce07e08430f018af091a0|fe90f8248ea64f70ea37c0df7afcfc12",
          "_q_score": 1,
          "source": "0",
          "_score": 0.15737050771713257,
          "title": "",
          "doc_id": "file_63563df5df66488cb8e28bfff11e40eb_10285263",
          "content": "Name: Wu Wang Sex: Male Age: 23",
          "_rc_score": 0,
          "workspace_id": "llm-4u5xpd1xdjxxxxxx",
          "hier_title": "",
          "page_number": [
            0
          ],
          "doc_name": "Wu Wang's Resume",
          "pipeline_id": "8mbtdxxxxx",
          "_id": "llm-4u5xpd1xdjxxxxxx_8mbtdxxxxx_file_63563df5df66488cb8e28bfff11e40eb_10285263_0_0"
        },
        "Score": 0.15737050771713257,
        "Text": "Name: Wu Wang Sex: Male Age: 23"
      }
    ]
  },
  "Message": "success",
  "RequestId": "12A5F9C6-xxxx-5593-8955-86D52585EE27",
  "Status": 200,
  "Success": true
}
Isso retorna resultados tanto do Currículo de San Zhang (marcado com University A) quanto do Currículo de Wu Wang (marcado com Student Union President).

Exemplo 2: Lógica AND (tags em subgrupos separados)

Retorna segmentos de texto de arquivos marcados tanto com University A QUANTO com Sports Specialist Student:
{
  "searchFilters": [
    {
      "tags": "[\"University A\"]"
    },
    {
      "tags": "[\"Sports Specialist Student\"]"
    }
  ]
}
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:
        """
        Initializes a client using an AccessKey pair.
        @return: Client
        @throws Exception
        """
        # Leaking code that contains an AccessKey pair threatens the security of all resources in your account. The following sample code is for reference only.
        # We recommend that you use a more secure method, such as Security Token Service (STS), to manage access credentials. For more information, see https://www.alibabacloud.com/help/en/sdk/developer-reference/v2-manage-python-access-credentials.
        config = open_api_models.Config(
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_ID environment variable is set.
            access_key_id=os.environ['ALIBABA_CLOUD_ACCESS_KEY_ID'],
            # Required. Make sure that the ALIBABA_CLOUD_ACCESS_KEY_SECRET environment variable is set.
            access_key_secret=os.environ['ALIBABA_CLOUD_ACCESS_KEY_SECRET']
        )
        # For more information about endpoints, see https://www.alibabacloud.com/help/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()
        # Create a retrieve_request object.
        retrieve_request = bailian_20231229_models.RetrieveRequest()
        # Required. You can enter the actual prompt.
        retrieve_request.query = 'Provide some candidates'
        # Required. Enter the actual knowledge base ID.
        retrieve_request.index_id = 'Enter the actual knowledge base ID'
        # Create two lists to store tags.
        tag1 = ["University A"]
        tag2 = ["Sports Specialist Student"]
        retrieve_request.search_filters = [
            {"tags": json.dumps(tag1)},
            {"tags": json.dumps(tag2)}
        ]
        try:
            # Perform a retrieval. Enter the workspace ID and the retrieve_request object.
            resp = client.retrieve('Enter the actual workspace ID', retrieve_request)
            print(UtilClient.to_jsonstring(resp.body))
        except Exception as error:
            # Handle exceptions appropriately in production
            print(error.message)

if __name__ == '__main__':
    TagQueryExample2.main(sys.argv[1:])
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 {
    /**
     * description
Parâmetros da solicitação
{
  "IndexId": "8mbtdxxxxx",
  "WorkspaceId": "llm-4u5xpd1xdjxxxxxx",
  "Query": "Provide some candidates",
  "SearchFilters": "[{\"tags\":\"[\\\"University A\\\"]\"},{\"tags\":\"[\\\"Sports Specialist Student\\\"]\"}]"
}
Parâmetros da resposta
{
  "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
}
Apenas o Currículo de San Zhang é retornado porque é o único arquivo com ambas as tags.

Referências

RecursoDescrição
Criar e usar uma base de conhecimentoGuia do usuário da base de conhecimento
API RetrieveRecuperar segmentos de texto de uma base de conhecimento
Conceder permissões de API a um usuário RAMConfigurar acesso de usuário RAM para a API Retrieve
Códigos de erroSolucionar falhas em chamadas de API
Knowledge base SearchFilters - Alibaba Cloud Model Studio