语义代理
使用语义代理增强PandasAI库,以获得更准确和可解释的结果。
语义代理简介
SemanticAgent
(目前处于测试阶段)通过在其结果中添加语义层,扩展了PandasAI库的功能。与标准的Agent
不同,SemanticAgent
生成一个JSON查询,然后可以用于生成Python或SQL代码。这种方法确保了更准确和可解释的输出。
实例化语义代理
创建SemanticAgent
的实例类似于创建Agent
的实例。
语义代理如何工作
语义代理主要在两个步骤中操作:
- 模式生成
- JSON 查询生成
模式生成
第一步是模式生成,它将数据结构化为语义代理可以用来生成JSON查询的模式。默认情况下,此模式会自动创建,但如果需要,您也可以提供自定义模式。
自动模式生成
默认情况下,SemanticAgent
会考虑传递给它的所有数据框,并生成适当的模式。
自定义模式
要提供自定义模式,请在实例化SemanticAgent
时传递schema
参数。
JSON 查询生成
第二步涉及基于模式生成JSON查询。然后使用此查询生成执行所需的Python或SQL代码。
示例 JSON 查询
这是一个由SemanticAgent
生成的JSON查询示例:
此查询由语义代理解释并转换为可执行的Python或SQL代码。
深入探讨模式和查询
理解模式结构
SemanticAgent
中的模式是数据的全面表示,包括表、列、度量、维度以及表之间的关系。以下是其组成部分的详细说明:
指标
度量是分析中使用的定量指标,如总和、平均值、计数等。
- name: 指标的标识符。
- type: 聚合的类型(例如,
count
,avg
,sum
,max
,min
)。 - sql: SQL 中用于计算度量的列或表达式。
示例:
维度
维度是用于切片和切块数据的分类变量。
- name: 维度的标识符。
- type: 数据类型(例如,字符串,日期)。
- sql: SQL中用于引用维度的列或表达式。
示例:
连接
连接定义了表之间的关系,指定了在查询中它们应该如何连接。
- name: 相关表的名称。
- join_type: 连接类型(例如,
left
,right
,inner
)。 - sql: 执行连接的SQL表达式。
示例:
理解查询结构
JSON查询是请求的结构化表示,指定了要检索的数据以及如何处理它。以下是其字段的详细说明:
类型
查询的类型决定了结果的格式,例如单个数字、表格或图表。
- type: 可以是“number”、“pie”、“bar”、“line”。
示例:
维度
用于分组数据的列。在SQL GROUP BY
子句中,这些将是列出的列。
- dimensions: 一个维度标识符的数组。
示例:
指标
用于计算数据的列,通常涉及聚合函数如求和、平均值、计数等。
- measures: 一个包含度量标识符的数组。
示例:
时间维度
用于按时间分组数据的列,通常涉及日期函数。每个timeDimensions
条目指定一个时间段及其粒度。dateRange
字段允许各种格式,包括特定日期如["2022-01-01", "2023-03-31"]
,相对时间段如“上周”、“上个月”、“本月”、“本周”、“今天”、“今年”和“去年”。
示例:
过滤器
用于过滤数据的条件,相当于SQL WHERE
子句。每个过滤器指定一个成员、一个操作符和一组值。允许的操作符包括:“equals”(等于)、“notEquals”(不等于)、“contains”(包含)、“notContains”(不包含)、“startsWith”(以...开始)、“endsWith”(以...结束)、“gt”(大于)、“gte”(大于或等于)、“lt”(小于)、“lte”(小于或等于)、“set”(设置)、“notSet”(未设置)、“inDateRange”(在日期范围内)、“notInDateRange”(不在日期范围内)、“beforeDate”(在日期之前)和“afterDate”(在日期之后)。
- filters: 一个过滤条件的数组。
示例:
订单
用于排序数据的列,相当于SQL ORDER BY
子句。order
数组中的每个条目指定一个标识符和排序方向。排序方向可以是“asc”表示升序,或“desc”表示降序。
- order: 一个排序规范的数组。
示例:
组合组件
当这些组件结合在一起时,它们形成了一个完整的查询,语义代理可以解释并执行。以下是一个结合所有元素的示例:
此查询转换为如下SQL语句: