Grab 如何用 AI Agent 将机械化分析工作从 44% 降到 30%

2026-08-17 38 预计阅读时间: 1 分钟
来源: infoq.com AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:12 分钟

Grab 正在把 AI Agent 引入分析工作流,并将机械化分析工作占比从 2 月的 44% 降至 6 月的 30%。这项变化的关键不只是“让模型写 SQL”,而是把 Agent 自主性、认证数据、上下文管理和人工监督组合成一套可控的自助分析体系。

变化不在于少写几条 SQL

传统分析流程中,大量时间消耗在重复性任务上:确认指标定义、查找数据表、拼接 SQL、生成常规报表,以及回答结构清晰但反复出现的问题。这些工作通常需要分析师介入,却不一定需要复杂的业务判断。

Grab 的实践显示,AI Agent 可以承接越来越多的指标、数据和 SQL 请求,让分析师从机械执行转向问题定义、结果验证和业务解释。这里的核心衡量方式也很重要:目标不是让 Agent 取代分析师,而是降低机械化工作在整个分析工作中的占比。

可以把一次分析请求拆成四层:

  1. 理解问题:识别用户要查询的指标、时间范围、维度和过滤条件。
  2. 选择数据:从认证过的数据集和指标定义中选择可信来源。
  3. 生成与执行:生成 SQL,执行查询,并检查结果是否符合基本约束。
  4. 人工把关:对高风险、异常或影响决策的结果进行复核。

这种拆分让 Agent 的职责边界更清晰。它可以自主完成低风险、结构化的任务,但不应默认拥有无限的数据访问权或业务决策权。

四个支柱决定 Agent 是否可用

1. 适度的自主性

Agent 需要能够连续完成多个步骤,而不是每生成一条 SQL 就等待人工确认。例如,它可以先识别指标,再查找指标对应的数据集,生成 SQL,执行查询,并根据结果补充说明。

但自主性必须与权限绑定。只读查询、固定指标和有限时间范围可以允许更高程度的自动化;涉及用户隐私、财务数据、生产写入或关键经营结论的请求,则应强制进入人工审核流程。

2. 认证数据

如果 Agent 只能访问杂乱的表结构,它会把数据发现问题重新交给分析师。认证数据集、统一指标定义和明确的数据所有者,可以显著减少“同一个指标有三种算法”的情况。

一个可行的数据目录至少应记录:

  • 指标名称和业务定义
  • SQL 或计算逻辑
  • 数据集负责人
  • 更新频率和数据延迟
  • 可用维度与时间范围
  • 已知限制和适用场景

认证数据并不意味着数据永远正确,而是让 Agent 知道应该优先使用什么、遇到冲突时应该向谁提问。

3. 上下文管理

分析请求很少是孤立的。用户可能在第一轮提到“本月订单”,第二轮改成“按城市拆分”,第三轮又要求“排除取消订单”。如果上下文管理不当,Agent 可能遗忘筛选条件,或者把不同口径混在一起。

实用做法是把上下文拆成结构化状态,而不是只依赖完整聊天记录:

{
  "metric": "completed_orders",
  "definition": "已完成且未取消的订单数",
  "time_range": {
    "start": "2025-06-01",
    "end": "2025-06-30"
  },
  "dimensions": ["city"],
  "filters": ["country = 'SG'"],
  "source": "certified.orders_daily",
  "requires_review": false
}

这样做有两个好处:一是后续步骤能直接消费结构化信息;二是人工审核时,可以清楚看到 Agent 采用了什么口径,而不必重新阅读全部对话。

4. 人工监督

人工监督不是每一步都点击确认,而是根据风险分级。低风险任务可以自动执行,高风险任务需要在执行前或发布结果前审批。

例如,可以把以下情况设为必须复核:

  • 查询个人或敏感业务数据
  • 使用未认证的数据集
  • 查询结果与历史基线差异过大
  • 生成对外发布或影响经营决策的结论
  • Agent 无法解释指标来源或筛选条件

这类机制能把分析师的时间集中到真正需要判断的地方,而不是让他们成为每次 SQL 执行的人工按钮。

一个可改造的最小 Agent 工作流

下面的示例不依赖第三方模型或数据库,使用 Python 标准库模拟一个受控的分析 Agent。它展示了可以怎样实践:先从认证指标目录中解析请求,再生成只读 SQL,最后根据风险规则决定是否需要人工审核。接入真实系统时,可以把 parse_request 替换为模型调用,把 execute_query 替换为数据仓库客户端。

将代码保存为 analytics_agent.py 后直接运行:

from dataclasses import dataclass
from typing import Dict, List


@dataclass(frozen=True)
class Metric:
    name: str
    expression: str
    source: str
    certified: bool = True


METRICS: Dict[str, Metric] = {
    "completed_orders": Metric(
        name="completed_orders",
        expression="SUM(completed_orders)",
        source="certified.orders_daily",
    ),
    "gross_booking_value": Metric(
        name="gross_booking_value",
        expression="SUM(gross_booking_value)",
        source="certified.orders_daily",
    ),
}


@dataclass
class Request:
    metric: str
    start_date: str
    end_date: str
    dimension: str = "city"
    country: str = "SG"


def parse_request(text: str) -> Request:
    # 真实系统中,这一步可以由 LLM 输出结构化 JSON 后再做校验。
    return Request(
        metric="completed_orders" if "订单" in text else "gross_booking_value",
        start_date="2025-06-01",
        end_date="2025-06-30",
        dimension="city",
        country="SG",
    )


def build_sql(request: Request) -> str:
    metric = METRICS[request.metric]
    if not metric.certified:
        raise ValueError("指标未通过认证")

    return f"""SELECT {request.dimension}, {metric.expression} AS value
FROM {metric.source}
WHERE order_date >= '{request.start_date}'
  AND order_date < '{request.end_date}'
  AND country = '{request.country}'
  AND order_status = 'completed'
GROUP BY {request.dimension}
ORDER BY value DESC;"""


def needs_review(request: Request, sql: str) -> bool:
    risky_terms = ["DROP", "DELETE", "UPDATE", "INSERT", "personal_id"]
    return any(term in sql.upper() for term in risky_terms)


def main() -> None:
    request = parse_request("查询 2025 年 6 月新加坡各城市的完成订单")
    sql = build_sql(request)
    print("生成的只读 SQL:\n")
    print(sql)
    print("\n是否需要人工审核:", "是" if needs_review(request, sql) else "否")


if __name__ == "__main__":
    main()

运行命令:

python analytics_agent.py

生产环境还需要补充 SQL 解析器、参数化查询、权限校验、查询超时、结果脱敏和审计日志。示例中的字符串拼接只是为了演示流程,不能直接用于包含用户输入的生产查询。

从自助分析到分析师增效

自助分析的价值不只是缩短一次问答的等待时间。随着 Agent 处理更多指标、数据和 SQL 请求,组织可以重新设计分析师的工作分配:

  • Agent 处理口径明确、重复出现的查询
  • 分析师维护指标定义和认证数据集
  • 分析师检查异常结果与边界案例
  • 业务团队通过自然语言获取可追溯的分析结果
  • 复杂问题进入人工主导的探索式分析流程

这里存在一个容易被忽略的反馈回路:Agent 运行时发现的歧义,会暴露数据目录和指标体系中的缺口。每一次失败都不只是模型问题,也可能说明指标命名、数据血缘或业务定义需要改进。

落地时应关注什么

可以用下面的清单评估一个分析 Agent 是否适合扩大范围:

  • 是否有少量明确的认证指标作为起点
  • 是否能展示指标定义、数据来源和筛选条件
  • 是否只允许访问必要的数据集
  • 是否对查询结果做空值、数量级和时间范围检查
  • 是否区分低风险自动执行与高风险人工审核
  • 是否记录提示词、生成 SQL、执行身份和最终结果
  • 是否用机械化工作占比、人工介入率和错误率衡量效果

Grab 将机械化分析工作从 44% 降至 30%,说明这类项目的重点是重新分配分析工作,而不是简单追求“自动化率”这个单一数字。可靠的 Agent 需要自主性,也需要数据治理、上下文约束和明确的人类责任边界。对于其他团队,较稳妥的路径是从认证指标和只读查询开始,逐步扩大任务范围,同时保留可解释、可审计、可撤回的控制点。


相关推荐