如果您在请求 Retrieve 接口时返回的结果包含较多干扰信息,可以参考本文示例,在请求时传入SearchFilters设置个性化的检索条件,对语义检索结果进行过滤,以排除与查询Query无关的信息(该方法尤其适合结构化数据)。
指知识库的Retrieve接口。
效果示例
请求Retrieve接口时未传入SearchFilters | 请求Retrieve接口时传入SearchFilters |
请求Retrieve接口时未传入SearchFilters | 请求Retrieve接口时传入SearchFilters |
Retrieve请求体:
| Retrieve请求体:
|
Retrieve请求返回: 传统语义检索返回了一些与查询Query(张三)不太相关的文本切片。 | Retrieve接口返回: 通过设置检索条件(SearchFilters),过滤语义检索结果中与查询Query(张三)无关的文本切片。 |
语法说明
SearchFilters可以包含一个或多个子分组(例如下方示例包含了两个子分组)。每个子分组由一组或多组Key-Value键值对检索字段:字段值
组成,对通过用户提示词找到的文本切片进行进一步过滤。子分组之间默认采用 AND 语义,且不可更改。关于如何使用子分组,请参见子分组查询示例。
{
"searchFilters": [
{
"姓名": "张三",
"性别": "男"
},
{
"岗位": "技术员"
}
]
}
子分组内的检索字段支持单值查询、多值查询、范围查询和模糊查询。
单值查询:字段类型只支持数值(long或double)、字符串(string)。关于如何使用单值查询,请参见单值查询示例。
多值查询:只支持由全是数值(long或double)或全是字符串(string)组成的数组。关于如何使用多值查询,请参见多值查询示例。
范围查询:支持等值查询和区间查询。关于如何使用范围查询,请参见范围查询示例。
等值查询:支持
eq
(等于)、neq
(不等于) 属性,字段类型支持数值(long或double)和字符串(string)。一个字段不可配置多个值(不区分大小写)。区间查询:支持
gt
(大于)、gte
(大于等于)、lt
(小于)、lte
(小于等于) 属性,字段类型只支持数值(long, double)。
模糊查询:字段类型只支持字符串(string)。支持
like
属性。关于如何使用模糊查询,请参见模糊查询示例。
前提条件
在您开始使用 SearchFilters 之前,请确保已经:
注册了阿里云账号并开通了百炼服务。
安装了百炼SDK并配置好了环境。
子账号(主账号无需操作)请先获取百炼的数据权限(需要
AliyunBailianDataFullAccess
),详见为RAM用户授予数据权限。如果您尚不清楚主账号、子账号等概念,请先阅读权限管理。已获取业务空间ID。
子账号需先加入某个业务空间,才能操作该业务空间下的知识库(如何查看您所有的业务空间);主账号可操作所有业务空间下的知识库。
准备好了包含员工信息的文档员工信息表.xlsx(包含三条记录),用于创建一个包含员工信息的知识库(下文示例中会用到)。有关创建新知识库的说明,请参见知识库。该知识库使用以下设置:
在导入数据时,请选择结构化数据(数据表)。
数据表包含四个字段:姓名、性别、岗位(均为string类型)和年龄(double类型)。
在创建知识库时,数据类型请选择结构化数据,数据来源请选择数据管理(手动导入的数据表)。所有字段均参与检索与模型回复。
完整代码示例
您可以展开下方折叠面板查看本文的Python和Java完整示例代码(其他语言需要您参照示例代码自行编写)。
调用示例代码前您需要获取并配置AccessKey和AccessKey Secret到环境变量。
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:
"""
使用AK&SK初始化账号Client
@return: Client
@throws Exception
"""
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
# 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
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']
)
# Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = f'bailian.cn-beijing.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查询属性为姓名,值为张三。分组2查询属性为性别,值为女。您可以替换为实际需要查询的属性和值。
retrieve_request.search_filters = [
{"姓名": "张三"},
{"性别": "女"}
]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
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'
# 单值查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
retrieve_request.search_filters = [
{"姓名": "张三"}
]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp.body))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
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 = ["张三", "李四"]
# 多值查询属性为姓名,对应上方names列表。值为上方指定的多值“张三”和“李四”。您可以替换为实际需要查询的属性和值。
retrieve_request.search_filters = [{"姓名": json.dumps(names)}]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp.body))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
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_range = SearchFiltersFullExample.Range(20, 27)
retrieve_request.search_filters = [
{"岗位": "技术员"}, # 分组1: 岗位筛选条件
{"年龄": json.dumps(age_range.to_dict())} # 分组2: 年龄范围筛选条件
]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp.body))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
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 = SearchFiltersFullExample.QueryObject('技%员')
retrieve_request.search_filters = [
{"姓名": "张三"}, # 姓名筛选条件。您可以替换为实际要查询的属性和值。
{"岗位": json.dumps(position.to_dict())} # 岗位(模糊查询)筛选条件。您可以替换为实际要查询的属性和值。
]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp.body))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
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()
if __name__ == '__main__':
SearchFiltersFullExample.main(sys.argv[1:])
SearchFiltersFullExample.java
package org.example.retrieve;
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 {
/**
* <b>description</b> :
* <p>使用AK&SK初始化账号Client</p>
*
* @return Client
* @throws Exception
*/
public static com.aliyun.bailian20231229.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
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"));
// Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = "bailian.cn-beijing.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查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
map1.put("姓名", "张三");
Map<String, String> map2 = new HashMap<>();
// 分组2查询属性为性别,值为女。您可以替换为实际需要查询的属性和值。
map2.put("性别", "女");
List<Map<String, String>> searchFilters = new ArrayList<>();
searchFilters.add(map1);
searchFilters.add(map2);
request.setSearchFilters(searchFilters);
// 进行检索,传入业务空间ID和RetrieveRequest。
RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
} 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<>();
// 单值查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
map.put("姓名", "张三");
List<Map<String, String>> searchFilters = new ArrayList<>();
searchFilters.add(map);
request.setSearchFilters(searchFilters);
// 进行检索,传入业务空间ID和RetrieveRequest。
RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
} 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<>();
// 多值查询属性为姓名,值为上方指定的多值“张三”和“李四”。您可以替换为实际需要查询的属性和值。
map.put("姓名", 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查询属性为性别,值为男。您可以替换为实际需要查询的属性和值。
map1.put("性别", "男");
// 分组2查询属性为年龄,值为范围。您可以替换为实际需要查询的属性和值。
Map<String, String> map2 = new HashMap<>();
Range range = new Range(20, 27);
map2.put("年龄", 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);
} 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查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
Map<String, String> map1 = new HashMap<>();
map1.put("姓名", "张三");
// 分组2查询属性为岗位,值为技%员,此处%代表匹配任意字符(包括零个字符)。您可以替换为实际需要查询的属性和值。
Map<String, String> map2 = new HashMap<>();
QueryObject queryObject = new QueryObject("技%员");
map2.put("岗位", 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);
} catch (Exception e) {
// 知识库检索失败处理。
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
System.out.println(e.getMessage());
}
}
public static void main(String[] args) {
subgroupQuery();
singleQuery();
multiQuery();
rangeQuery();
wildcardQuery();
}
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;
}
}
}
快速开始
以下部分将为您介绍如何使用SearchFilters进行查询。
子分组查询示例
子分组用于过滤知识库的召回结果,仅返回满足特定条件的文本切片。您可以将多个子分组(条件)添加到SearchFilters中。子分组之间默认采用 AND 语义,且不可更改。
例如查询上方员工信息知识库中姓名
为张三且性别
为女的所有记录(知识库中不存在这样的记录)。
{
"searchFilters": [
{
"姓名": "张三"
},
{
"性别": "女"
}
]
}
您可以展开下方折叠面板查看子分组的Python和Java示例代码。
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:
"""
使用AK&SK初始化账号Client
@return: Client
@throws Exception
"""
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
# 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
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']
)
# Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = f'bailian.cn-beijing.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查询属性为姓名,值为张三。分组2查询属性为性别,值为女。您可以替换为实际需要查询的属性和值。
retrieve_request.search_filters = [
{"姓名": "张三"},
{"性别": "女"}
]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
if __name__ == '__main__':
SubGroupQueryExample.main(sys.argv[1:])
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "bmy6e6xxxx",
"query": "公司中叫张三的员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"姓名": "张三"
},
{
"性别": "女"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": []
},
"message": "success",
"requestId": "5BA30772-xxxx-560C-B1F7-C1DA737A9D80",
"status": "200",
"success": true
}
SubGroupQueryExample.java
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SubGroupQueryExample {
/**
* <b>description</b> :
* <p>使用AK&SK初始化账号Client</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.bailian20231229.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
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"));
// Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = "bailian.cn-beijing.aliyuncs.com";
return new com.aliyun.bailian20231229.Client(config);
}
public static void main(String[] args) {
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查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
map1.put("姓名","张三");
Map<String, String> map2 = new HashMap<>();
// 分组2查询属性为性别,值为女。您可以替换为实际需要查询的属性和值。
map2.put("性别","女");
List<Map<String, String>> searchFilters = new ArrayList<>();
searchFilters.add(map1);
searchFilters.add(map2);
request.setSearchFilters(searchFilters);
// 进行检索,传入业务空间ID和RetrieveRequest。
RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
} catch (Exception e) {
// 知识库检索失败处理。
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
System.out.println(e.getMessage());
}
}
}
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "bmy6e6xxxx",
"query": "公司中叫张三的员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"姓名": "张三"
},
{
"性别": "女"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": []
},
"message": "success",
"requestId": "5BA30772-xxxx-560C-B1F7-C1DA737A9D80",
"status": "200",
"success": true
}
单值查询示例
在单值查询时,需要为检索字段传入唯一的值。例如查询员工信息知识库中姓名
为张三的所有记录:
{
"searchFilters": [
{
"姓名": "张三"
}
]
}
您可以展开下方折叠面板查看单值查询的Python和Java示例代码。
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:
"""
使用AK&SK初始化账号Client
@return: Client
@throws Exception
"""
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
# 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
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']
)
# Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = f'bailian.cn-beijing.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'
# 单值查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
retrieve_request.search_filters = [
{"姓名": "张三"}
]
try:
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp.body))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
if __name__ == '__main__':
SingleQueryExample.main(sys.argv[1:])
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "bmy6e6xxxx",
"query": "公司中叫张三的员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"姓名": "张三"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": [
{
"metadata": {
"_rc_v_score": 0.32581159472465515,
"_q_score": 1,
"source": "0",
"_score": 0.4556944966316223,
"doc_id": "table_xxxx75507aab4bd9a24c18d098b2e8ac_10285263_1",
"性别": "男",
"_rc_score": 0,
"姓名": "张三",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_bmy6e65niw_table_200275507aab4bd9a24c18d098b2e8ac_10285263_1",
"年龄": "25",
"岗位": "技术员"
},
"score": 0.4556944966316223,
"text": "姓名:张三 年龄:25 岗位:技术员 性别:男"
}
]
},
"message": "success",
"requestId": "2FA4113E-xxxx-59C1-BDB2-5B930D8C9B1C",
"status": "200",
"success": true
}
SingleQueryExample.java
import com.aliyun.bailian20231229.models.RetrieveRequest;
import com.aliyun.bailian20231229.models.RetrieveResponse;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class SingleQueryExample {
/**
* <b>description</b> :
* <p>使用AK&SK初始化账号Client</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.bailian20231229.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
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"));
// Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = "bailian.cn-beijing.aliyuncs.com";
return new com.aliyun.bailian20231229.Client(config);
}
public static void main(String[] args) {
try {
com.aliyun.bailian20231229.Client client = createClient();
// 创建RetrieveRequest对象。
RetrieveRequest request = new RetrieveRequest();
// 必填,您可以传入用户实际输入的提示词。
request.setQuery("公司中叫张三的员工");
// 必填,请传入实际的知识库ID。
request.setIndexId("请传入实际的知识库ID");
Map<String, String> map = new HashMap<>();
// 单值查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
map.put("姓名","张三");
List<Map<String, String>> searchFilters = new ArrayList<>();
searchFilters.add(map);
request.setSearchFilters(searchFilters);
// 进行检索,传入业务空间ID和RetrieveRequest。
RetrieveResponse resp = client.retrieve("请传入实际的业务空间ID", request);
} catch (Exception e) {
// 知识库检索失败处理。
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
System.out.println(e.getMessage());
}
}
}
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "bmy6e6xxxx",
"query": "公司中叫张三的员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"姓名": "张三"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": [
{
"metadata": {
"_rc_v_score": 0.32581159472465515,
"_q_score": 1,
"source": "0",
"_score": 0.4556944966316223,
"doc_id": "table_xxxx75507aab4bd9a24c18d098b2e8ac_10285263_1",
"性别": "男",
"_rc_score": 0,
"姓名": "张三",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_bmy6e65niw_table_200275507aab4bd9a24c18d098b2e8ac_10285263_1",
"年龄": "25",
"岗位": "技术员"
},
"score": 0.4556944966316223,
"text": "姓名:张三 年龄:25 岗位:技术员 性别:男"
}
]
},
"message": "success",
"requestId": "2FA4113E-xxxx-59C1-BDB2-5B930D8C9B1C",
"status": "200",
"success": true
}
多值查询示例
多值查询允许您为检索字段传入多个值,效果类似于SQL中的IN操作符。例如查询员工信息知识库中姓名
为张三或李四的所有记录:
{
"searchFilters": [
{
"姓名": "["张三","李四"]"
}
]
}
您可以展开下方折叠面板查看多值查询的Python和Java示例代码。
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:
"""
使用AK&SK初始化账号Client
@return: Client
@throws Exception
"""
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
# 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
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']
)
# Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = f'bailian.cn-beijing.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 = ["张三", "李四"]
# 多值查询属性为姓名,对应上方names列表。值为上方指定的多值“张三”和“李四”。您可以替换为实际需要查询的属性和值。
retrieve_request.search_filters = [{"姓名": json.dumps(names)}]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp.body))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
if __name__ == '__main__':
MultiQueryExample.main(sys.argv[1:])
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "27ubwxxxxx",
"query": "公司中所有员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"姓名": "[\"张三\",\"李四\"]"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": [
{
"metadata": {
"_rc_v_score": 0.3016361088048254,
"_q_score": 1,
"source": "0",
"_score": 0.3322954773902893,
"doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
"性别": "男",
"_rc_score": 0,
"姓名": "张三",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
"年龄": "25.0",
"岗位": "技术员"
},
"score": 0.3322954773902893,
"text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
},
{
"metadata": {
"_rc_v_score": 0.2531493306159973,
"_q_score": 0.8392540654998252,
"source": "0",
"_score": 0.25632044672966003,
"doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_2",
"性别": "女",
"_rc_score": 0,
"姓名": "李四",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_2",
"年龄": "31.0",
"岗位": "销售"
},
"score": 0.25632044672966003,
"text": "姓名:李四 年龄:31.0 岗位:销售 性别:女"
}
]
},
"message": "success",
"requestId": "1DFE5E9E-xxxx-5C37-8011-8FA2E2875309",
"status": "200",
"success": true
}
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 {
/**
* <b>description</b> :
* <p>使用AK&SK初始化账号Client</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.bailian20231229.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
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"));
// Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = "bailian.cn-beijing.aliyuncs.com";
return new com.aliyun.bailian20231229.Client(config);
}
public static void main(String[] args) {
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<>();
// 多值查询属性为姓名,值为上方指定的多值“张三”和“李四”。您可以替换为实际需要查询的属性和值。
map.put("姓名", 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());
}
}
}
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "27ubwxxxxx",
"query": "公司中所有员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"姓名": "[\"张三\",\"李四\"]"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": [
{
"metadata": {
"_rc_v_score": 0.3016361088048254,
"_q_score": 1,
"source": "0",
"_score": 0.3322954773902893,
"doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
"性别": "男",
"_rc_score": 0,
"姓名": "张三",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
"年龄": "25.0",
"岗位": "技术员"
},
"score": 0.3322954773902893,
"text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
},
{
"metadata": {
"_rc_v_score": 0.2531493306159973,
"_q_score": 0.8392540654998252,
"source": "0",
"_score": 0.25632044672966003,
"doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_2",
"性别": "女",
"_rc_score": 0,
"姓名": "李四",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_2",
"年龄": "31.0",
"岗位": "销售"
},
"score": 0.25632044672966003,
"text": "姓名:李四 年龄:31.0 岗位:销售 性别:女"
}
]
},
"message": "success",
"requestId": "1DFE5E9E-xxxx-5C37-8011-8FA2E2875309",
"status": "200",
"success": true
}
范围查询示例
通过范围查询,您可以找出检索字段(例如年龄)值在指定范围内满足条件的所有记录。
例如查询员工信息知识库中岗位
为技术员(单值查询),且年龄
在20至25岁之间(范围查询)的所有记录:
{
"searchFilters": [
{
"岗位": "技术员"
},
{
"年龄": {
"gte": 20,
"lte": 25
}
}
]
}
您可以展开下方折叠面板查看范围查询的Python和Java示例代码。
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:
"""
使用AK&SK初始化账号Client
@return: Client
@throws Exception
"""
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
# 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
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']
)
# Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = f'bailian.cn-beijing.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_range = RangeQueryExample.Range(20, 27)
retrieve_request.search_filters = [
{"岗位": "技术员"}, # 分组1: 岗位筛选条件
{"年龄": json.dumps(age_range.to_dict())} # 分组2: 年龄范围筛选条件
]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp.body))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
if __name__ == '__main__':
RangeQueryExample.main(sys.argv[1:])
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "27ubwxxxxx",
"query": "公司中所有员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"性别": "男"
},
{
"年龄": "{\"gte\":20.0,\"lte\":27.0}"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": [
{
"metadata": {
"_rc_v_score": 0.3016361088048254,
"_q_score": 1,
"source": "0",
"_score": 0.3322954773902893,
"doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
"性别": "男",
"_rc_score": 0,
"姓名": "张三",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
"年龄": "25.0",
"岗位": "技术员"
},
"score": 0.3322954773902893,
"text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
}
]
},
"message": "success",
"requestId": "AE0B5ABC-xxxx-54A1-9ED4-91865B859DF6",
"status": "200",
"success": true
}
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 {
/**
* <b>description</b> :
* <p>使用AK&SK初始化账号Client</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.bailian20231229.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
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"));
// Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = "bailian.cn-beijing.aliyuncs.com";
return new com.aliyun.bailian20231229.Client(config);
}
public static void main(String[] args) {
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查询属性为性别,值为男。您可以替换为实际需要查询的属性和值。
map1.put("性别", "男");
// 分组2查询属性为年龄,值为范围。您可以替换为实际需要查询的属性和值。
Map<String, String> map2 = new HashMap<>();
Range range = new Range(20, 27);
map2.put("年龄", 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());
}
}
static class Range {
double gte;
double lte;
public Range(double gte, double lte) {
this.gte = gte;
this.lte = lte;
}
}
}
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "27ubwxxxxx",
"query": "公司中所有员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"性别": "男"
},
{
"年龄": "{\"gte\":20.0,\"lte\":27.0}"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": [
{
"metadata": {
"_rc_v_score": 0.3016361088048254,
"_q_score": 1,
"source": "0",
"_score": 0.3322954773902893,
"doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
"性别": "男",
"_rc_score": 0,
"姓名": "张三",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
"年龄": "25.0",
"岗位": "技术员"
},
"score": 0.3322954773902893,
"text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
}
]
},
"message": "success",
"requestId": "AE0B5ABC-xxxx-54A1-9ED4-91865B859DF6",
"status": "200",
"success": true
}
模糊查询示例
模糊查询允许您使用指定通配符查找包含特定字符序列的记录,效果类似于SQL中的LIKE操作符。
SearchFilters模糊查询支持以下通配符(和SQL语法一致):
通配符 | 描述 |
通配符 | 描述 |
% | 替代 0 个或多个字符。 |
_ | 替代一个字符。 |
例如查询员工信息知识库中姓名
为张三,岗位包含技和员两个字(可能是技术员,也可能是技术人员等)的所有记录:
{
"searchFilters": [
{
"姓名": "张三"
},
{
"岗位": {
"like": "技%员"
}
}
]
}
您可以展开下方折叠面板查看模糊查询的Python和Java示例代码。
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:
"""
使用AK&SK初始化账号Client
@return: Client
@throws Exception
"""
# 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
# 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378659.html。
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']
)
# Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = f'bailian.cn-beijing.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 = WildcardQueryExample.QueryObject('技%员')
retrieve_request.search_filters = [
{"姓名": "张三"}, # 姓名筛选条件。您可以替换为实际要查询的属性和值。
{"岗位": json.dumps(position.to_dict())} # 岗位(模糊查询)筛选条件。您可以替换为实际要查询的属性和值。
]
# 进行检索,传入业务空间ID和retrieve_request对象。
resp = client.retrieve('请传入实际的业务空间ID', retrieve_request)
print(UtilClient.to_jsonstring(resp.body))
except Exception as error:
# 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
# 错误 message
print(error.message)
if __name__ == '__main__':
WildcardQueryExample.main(sys.argv[1:])
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "27ubwxxxxx",
"query": "公司中的男性员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"姓名": "张三"
},
{
"岗位": "{\"like\":\"技%员\"}"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": [
{
"metadata": {
"_rc_v_score": 0.41137335930387275,
"_q_score": 1,
"source": "0",
"_score": 0.46098726987838745,
"doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
"性别": "男",
"_rc_score": 0,
"姓名": "张三",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
"年龄": "25.0",
"岗位": "技术员"
},
"score": 0.46098726987838745,
"text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
}
]
},
"message": "success",
"requestId": "FA759FEC-xxxx-50B7-A64D-BE49A7DF56B8",
"status": "200",
"success": true
}
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 {
/**
* <b>description</b> :
* <p>使用AK&SK初始化账号Client</p>
*
* @return Client
* @throws Exception
*/
public static com.aliyun.bailian20231229.Client createClient() throws Exception {
// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。
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"));
// Endpoint 请参考 https://api.aliyun.com/product/bailian
config.endpoint = "bailian.cn-beijing.aliyuncs.com";
return new com.aliyun.bailian20231229.Client(config);
}
public static void main(String[] args_) {
try {
com.aliyun.bailian20231229.Client client = createClient();
// 创建RetrieveRequest对象。
RetrieveRequest request = new RetrieveRequest();
// 必填,您可以传入用户实际输入的提示词。
request.setQuery("公司中的男性员工");
// 必填,请传入实际的知识库ID。
request.setIndexId("请传入实际的知识库ID");
// 分组1查询属性为姓名,值为张三。您可以替换为实际需要查询的属性和值。
Map<String, String> map1 = new HashMap<>();
map1.put("姓名", "张三");
// 分组2查询属性为岗位,值为技%员,此处%代表匹配任意字符(包括零个字符)。您可以替换为实际需要查询的属性和值。
Map<String, String> map2 = new HashMap<>();
QueryObject queryObject = new QueryObject("技%员");
map2.put("岗位", 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);
} catch (Exception e) {
// 知识库检索失败处理。
// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。
System.out.println(e.getMessage());
}
}
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;
}
}
}
请求示例
{
"denseSimilarityTopK": null,
"enableReranking": null,
"enableRewrite": null,
"images": null,
"indexId": "27ubwxxxxx",
"query": "公司中的男性员工",
"rerank": null,
"rerankMinScore": null,
"rerankTopN": null,
"rewrite": null,
"saveRetrieverHistory": null,
"searchFilters": [
{
"姓名": "张三"
},
{
"岗位": "{\"like\":\"技%员\"}"
}
],
"sparseSimilarityTopK": null
}
响应示例
{
"code": "Success",
"data": {
"nodes": [
{
"metadata": {
"_rc_v_score": 0.41137335930387275,
"_q_score": 1,
"source": "0",
"_score": 0.46098726987838745,
"doc_id": "table_xxxxad1c331c424780a8023376a73fac_10285263_1",
"性别": "男",
"_rc_score": 0,
"姓名": "张三",
"doc_name": "员工表",
"_id": "llm-xxxxpd1xdjqp8itj_27ubwxdg6d_table_a601ad1c331c424780a8023376a73fac_10285263_1",
"年龄": "25.0",
"岗位": "技术员"
},
"score": 0.46098726987838745,
"text": "姓名:张三 年龄:25.0 岗位:技术员 性别:男"
}
]
},
"message": "success",
"requestId": "FA759FEC-xxxx-50B7-A64D-BE49A7DF56B8",
"status": "200",
"success": true
}
相关文档
知识库用户指南 | 请参见知识库。 |
检索知识库 | 您可以调用Retrieve接口检索知识库并返回文本切片。 |
子账号调用 | RAM用户(子账号)请先获取百炼的数据权限再调用Retrieve接口,请参见为RAM用户授予数据权限。 |
错误码
如果模型调用失败并返回报错信息,请参见错误信息进行解决。
- 本页导读 (1)
- 效果示例
- 语法说明
- 前提条件
- 完整代码示例
- 快速开始
- 子分组查询示例
- 单值查询示例
- 多值查询示例
- 范围查询示例
- 模糊查询示例
- 相关文档
- 错误码