被你的智能体拙劣重造的特征存储
观察一个客服智能体处理一段对话,数一数它计算了多少次“流失风险”(churn risk)。第一次是在它对工单进行分类时。第二次是在它决定是否提供折扣时。第三次是在它起草升级摘要(escalation summary)时。每一次,它都会重新读取原始订单表,重新运行内联聚合,并生成一个数字。这三个数字并不匹配。没人注意到这一点,因为它们从未被放在一起记录过。
这就是特征工程(feature engineering)。智能体在每一轮对话中都在进行特征工程,而且是用自然语言进行的,其表现甚至不如十年前那些会被你在代码审查(code review)中嘲笑的流水线。
机器学习领域已经解决了这个问题。解决方案被称为特征存储(feature store),它所强制执行的纪律——计算一次特征、为其命名、对其进行版本控制、一致地提供服务——正是当你交给智能体一个数据库工具时,它立即抛弃的纪律。你的智能体并没有避免构建特征流水线。它构建了一个,只不过它构建的是整栋楼里最烂的一个。
智能体就是一个特征流水线,而你却没有审计过它
特征(feature)是一个派生事实:账户时长、订阅层级、终身价值、自上次登录以来的天数、流失风险。这些在你的数据库中都不作为可以直接 SELECT 的列存在。它们是对原始行应用逻辑——连接(join)、开窗函数(window function)、阈值、模型评分——后的输出。将行转化为特征是应用机器学习中最古老且枯燥的工作,而特征存储的存在是因为团队总是在不一致地执行这项工作。
一个回答关于客户问题的智能体也在做同样的工作。它必须这样做。当用户询问“这个客户是否应该获得退款”时,模型无法直接从 orders 和 events 表中进行推理;它需要派生事实。因此,在智能体循环的某个地方——在工具调用中、在模型的思维链(chain of thought)中、或者在模型运行时编写的 SQL 字符串中——派生过程发生了。
区别在于,你数据团队的特征流水线经过了审查。有人争论过“活跃”是指 30 天还是 7 天。有人编写了连接。有人将其提交到了版本控制系统。而智能体的特征流水线则完全没有经过这些。它是在推理时由模型编写的,使用的是一种没有类型系统的语言,并且每一轮对话都会被重新编写。
这就是我们需要记住的核心观点:智能体不是在查询特征,它是在没有工厂的情况下现场制造特征。
