查询和过滤记录¶
本指南概述了如何在 Argilla 中查询和过滤数据集。
您可以通过**查询**或**过滤**在数据集中搜索记录。查询侧重于文本字段的内容,而过滤器用于根据条件过滤记录。您可以独立使用它们,也可以组合多个过滤器来创建复杂的搜索查询。您还可以将数据集中的记录导出为单个字典或字典列表。
主要类
查看 查询 - Python 参考 以详细了解
Query
类的属性、参数和方法。
查看 过滤器 - Python 参考 以详细了解
Filter
类的属性、参数和方法。
查看 相似 - Python 参考 以详细了解
Similar
类的属性、参数和方法。
使用搜索词查询¶
要使用词语搜索记录,您可以使用带有查询字符串的 Dataset.records
属性。搜索词用于搜索文本字段中包含这些词语的记录。您可以搜索单个词语或多个词语,在后一种情况下,所有词语都应出现在要检索的记录中。
高级查询¶
如果您需要更复杂的搜索,可以使用 Elasticsearch 的简单查询字符串语法。以下是不同可用运算符的摘要
运算符 | 描述 | 示例 |
---|---|---|
+ 或 space |
**AND**:搜索两个 term | argilla + distilabel 或 argilla distilabel 返回包含 term “argilla” 和 “distilabel” 的记录 |
| |
**OR**:搜索任一 term | argilla | distilabel 返回包含 term “argilla” 或 “distilabel” 的记录 |
- |
**否定**:排除 term | argilla -distilabel 返回包含 term “argilla” 且不包含 term “distilabel” 的记录 |
* |
**前缀**:搜索前缀 | arg* 返回以 “arg-” 开头的任何单词的记录 |
" |
**短语**:搜索短语 | "argilla and distilabel" 返回包含短语 “argilla and distilabel” 的记录 |
( 和 ) |
**优先级**:分组 term | (argilla | distilabel) rules 返回包含 “argilla” 或 “distilabel” 以及 “rules” 的记录 |
~N |
**编辑距离**:搜索具有编辑距离的 term 或短语 | argilla~1 返回包含 term “argilla” 且编辑距离为 1 的记录,例如 “argila” |
提示
要按字面意思使用这些字符之一,请使用前导反斜杠 \
对其进行转义,例如 "1 \+ 2"
将匹配找到短语 “1 + 2” 的记录。
按条件过滤¶
您可以使用 Filter
类来定义条件,并将它们传递给 Dataset.records
属性以根据条件获取记录。条件包括 “==”、“>=”、“<=” 或 “in”。条件可以与点表示法结合使用,以根据元数据、建议或响应来过滤记录。您可以使用单个条件或多个条件来过滤记录。
运算符 | 描述 |
---|---|
== |
field 值等于 value |
>= |
field 值大于或等于 value |
<= |
field 值小于或等于 value |
in |
field 值包含在值列表中 |
import argilla as rg
client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")
dataset = client.datasets(name="my_dataset", workspace="my_workspace")
filter_label = rg.Filter(("label", "==", "positive"))
filtered_records = dataset.records(query=rg.Query(filter=filter_label)).to_list(
flatten=True
)
import argilla as rg
client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")
dataset = client.datasets(name="my_dataset", workspace="my_workspace")
filters = rg.Filter(
[
("label.suggestion", "==", "positive"),
("metadata.count", ">=", 10),
("metadata.count", "<=", 20),
("label", "in", ["positive", "negative"])
]
)
filtered_records = dataset.records(
query=rg.Query(filter=filters), with_suggestions=True
).to_list(flatten=True)
可用字段¶
您可以根据以下字段过滤记录
字段 | 描述 | 示例 |
---|---|---|
id |
记录 id | ("id", "in", ["1","2","3"]) |
_server_id |
内部记录 id。此值必须是有效的 UUID | ("_server_id", "==", "ba69a996-85c2-4af0-a473-23138929641b") |
inserted_at |
记录插入的日期和时间。您可以传递 datetime 或字符串 | ("inserted_at" ">=", "2024-10-10") |
updated_at |
记录更新的日期和时间。 | ("updated_at" ">=", "2024-10-10") |
status |
记录状态,可以是 pending 或 completed 。 |
("status", "==", "completed") |
response.status |
响应状态,可以是 draft 、submitted 或 discarded 。 |
("response.status", "==", "submitted") |
metadata.<name> |
按元数据属性过滤 | ("metadata.split", "==", "train") |
<question>.suggestion |
按问题建议值过滤 | ("label.sugggestion", "==", "positive") |
<question>.score |
按建议分数过滤 | ("label.score", "<=", "0.9") |
<question>.agent |
按建议代理过滤 | ("label.agent", "<=", "ChatGPT4.0") |
<question>.response |
按问题响应过滤 | ("label.response", "==", "negative") |
按状态过滤¶
您可以根据记录或响应状态过滤记录。记录状态可以是 pending
或 completed
,响应状态可以是 draft
、submitted
或 discarded
。
import argilla as rg
client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")
dataset = client.datasets(name="my_dataset", workspace="my_workspace")
status_filter = rg.Query(
filter=rg.Filter(
[
("status", "==", "completed"),
("response.status", "==", "discarded")
]
)
)
filtered_records = dataset.records(status_filter).to_list(flatten=True)
相似性搜索¶
您可以搜索与给定向量相似的记录。您可以使用 Similar
类来定义向量,并将其作为查询参数的一部分传递给 Dataset.records
。
import argilla as rg
client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")
dataset = client.datasets(name="my_dataset", workspace="my_workspace")
similar_filter = rg.Query(
similar=rg.Similar(
name="vector", value=[0.1, 0.2, 0.3],
)
)
filtered_records = dataset.records(similar_filter).to_list(flatten=True)
注意
Similar
搜索需要向量字段定义作为数据集设置的一部分。如果数据集没有向量字段,搜索将返回错误。请访问 向量 部分,了解有关如何定义向量字段的更多详细信息。
查询和过滤数据集¶
如前所述,您可以使用带有搜索词的查询以及过滤器或各种过滤器来创建复杂的搜索查询。
import argilla as rg
client = rg.Argilla(api_url="<api_url>", api_key="<api_key>")
dataset = client.datasets(name="my_dataset", workspace="my_workspace")
query_filter = rg.Query(
query="my_term",
filter=rg.Filter(
[
("label.suggestion", "==", "positive"),
("metadata.count", ">=", 10),
]
)
)
queried_filtered_records = dataset.records(
query=query_filter,
with_metadata=True,
with_suggestions=True
).to_list(flatten=True)