为数据科学 Agent 设计 Harness 数据集版本锁定

关键词:数据科学Agent、Harness、数据集版本锁定、ML实验可复现性、因果推断、Agent协作机制、版本管理DSL

摘要:在数据科学Agent自动化研发流程(AutoDS)快速普及的今天,数据集版本漂移(Dataset Drift)、版本冲突并发Agent协作数据溯源缺失已成为阻碍实验可复现性与决策可靠性的三大核心痛点。本文通过类比「智能餐厅后厨备菜系统」的场景,深入浅出地引出Harness数据集版本锁定的核心概念,逐步构建一套从需求分析到架构设计再到代码实现的完整解决方案。我们将重点介绍面向Agent协作的版本锁定DSL(Domain-Specific Language)因果性数据快照机制细粒度并发冲突解决策略,并通过Python+MLflow+自定义Harness SDK的项目实战,展示如何在AutoML全流程中落地这套系统。最后,我们还将探讨Harness在大模型微调、联邦学习等未来场景下的发展趋势与挑战。


背景介绍

问题背景

数据科学Agent到底是什么?我们先讲个「智能餐厅」的小故事

想象一下,你开了一家叫「数据大厨餐厅」的智能餐厅——这里没有人类厨师、没有备菜员,全是由AI机器人(也就是我们说的数据科学Agent)组成的:

  • 探索备菜员Agent:每天去食材市场(公开数据集仓库、公司数据湖)找新鲜的「食材」(原始数据),还要根据顾客的历史评价(业务反馈)调整采购清单(特征工程需求);
  • 实验大厨Agent:把备菜员找的食材洗干净切好(数据清洗、特征提取),然后按照不同的「菜谱」(机器学习模型)炒菜(训练模型),最后还要尝一口咸淡(模型评估);
  • 协作调度员Agent:像餐厅经理一样,安排多个备菜员、多个大厨同时工作,比如让备菜员A找今天的蔬菜数据,备菜员B找昨天的肉类数据,大厨C用A+B的数据做宫保鸡丁,大厨D用A+B+C昨天的剩菜(历史实验数据)做新口味的菜;
  • 交付上菜员Agent:把大厨做的最好吃的菜(最优模型)端给顾客(业务系统),还要每天观察顾客的剩菜情况(模型推理效果),如果剩菜多了(模型准确率下降),就赶紧告诉备菜员和大厨换食材、换菜谱。
那智能餐厅现在遇到了什么大麻烦?

这家餐厅刚开业的时候生意不错,但没过多久就出了三个大问题:

  1. 剩菜突然变多,但没人知道为什么:昨天大厨C用A+B的数据做的宫保鸡丁,顾客好评率95%;今天同样用A+B的数据做,好评率只有60%!检查备菜员A和B的采购清单,发现写的都是「今天的新鲜蔬菜」「今天的新鲜肉类」——但昨天的「新鲜」和今天的「新鲜」根本不一样!蔬菜市场今天降价了,备菜员A买的都是次等品;肉类市场换了供应商,备菜员B买的肉脂肪含量超标。这就是数据科学中的数据集版本漂移:同样名称的数据集,今天的内容和昨天的不一样!
  2. 备菜员抢同一个食材,菜做坏了:今天餐厅搞促销,要同时做宫保鸡丁、鱼香肉丝、糖醋里脊——这三个菜都需要备菜员A今天买的新鲜胡萝卜!但备菜员A刚把胡萝卜放在切菜台(数据仓库临时存储区),备菜员C觉得这批胡萝卜不够甜,就偷偷切了一半换了昨天剩下的;备菜员D又觉得这批胡萝卜太粗,又偷偷切了另一半换了今天早上买的小胡萝卜!最后大厨C、D、E拿到的胡萝卜全不是备菜员A最初买的,三个菜全做砸了!这就是数据科学中的版本冲突并发:多个Agent同时修改同一个数据集的同一版本,导致实验数据混乱!
  3. 顾客问鱼香肉丝为什么这么咸,没人能说清楚盐的来源:今天大厨E做的鱼香肉丝特别咸,顾客投诉了!查备菜员的清单,发现备菜员E用了备菜员B昨天买的酱油、备菜员F今天买的盐、还有厨房去年剩下的豆瓣酱——但没人知道去年剩下的豆瓣酱是不是过期了(数据质量问题)、备菜员F今天买的盐是不是加了双倍盐(数据标注错误)、备菜员B昨天买的酱油是不是换了牌子(数据集版本错误)!这就是数据科学中的Agent协作数据溯源缺失:多个Agent协作生成的最终实验数据,没法追溯到每一步的数据来源、修改者、修改时间、修改原因!
那有没有什么办法能解决这些问题?

人类餐厅其实早就有解决这些问题的办法了:

  1. 剩菜突然变多的问题:每天采购食材的时候,给每一批食材都拍一张照片、写一张详细的「食材标签」——包括采购时间、采购地点、供应商、食材的种类、重量、新鲜度(比如用PH试纸测蔬菜的酸碱度、用脂肪检测仪测肉类的脂肪含量)、甚至当天的天气(因为天气会影响蔬菜的甜度)!然后把「食材标签」和「食材实物」一起放在一个带锁的冰柜分区里——大厨要拿食材,必须先看「食材标签」,确认是自己想要的那一批,才能拿钥匙打开分区!这就是数据科学中的数据集版本锁定:给每一个数据集的每一个版本都生成一个唯一的「版本标识」(Version ID)和详细的「元数据」(Metadata),然后把「版本标识」「元数据」和「数据集快照」(Dataset Snapshot)一起存储在一个不可修改的版本库里——Agent要使用数据集,必须先指定「版本标识」,确认是自己想要的那一个版本,才能从版本库中读取!
  2. 备菜员抢同一个食材的问题:带锁的冰柜分区每次只能一个人打开——如果备菜员A正在放食材,备菜员C、D就必须在外面排队;如果备菜员A已经把食材放好了,分区就会自动上锁——任何人都不能再修改里面的食材!如果备菜员C想要修改食材,必须先从分区里拿出「食材实物」,在另一个「临时操作区」修改,修改完成后,生成一张新的「食材标签」和一个新的「带锁的冰柜分区」,把修改后的「食材实物」放进去!这就是数据科学中的细粒度并发冲突解决策略:版本库中的每一个版本都是不可修改的(Immutable)——如果Agent想要修改数据集,必须先创建一个新的版本;同时,版本库支持**乐观锁(Optimistic Locking)悲观锁(Pessimistic Locking)**机制——防止多个Agent同时创建同一个版本的新版本!
  3. 顾客问鱼香肉丝为什么这么咸的问题:每一个「临时操作区」都有一个摄像头,全程记录备菜员的操作过程——包括什么时候拿的食材、从哪个「带锁的冰柜分区」拿的、拿了多少、怎么修改的、修改完成后生成的新的「带锁的冰柜分区」的编号是多少!然后把这些操作记录和「新的食材标签」「新的食材实物」一起存储在一个溯源日志库里!最后,大厨做鱼香肉丝的时候,还要把自己用的每一个「带锁的冰柜分区」的编号都写在「菜谱标签」里——顾客问鱼香肉丝为什么这么咸,只要查「菜谱标签」里的分区编号,再查「溯源日志库」里的操作记录,就能找到原因了!这就是数据科学中的因果性数据快照机制:每一个版本的数据集都有一个完整的因果链路(Causal Chain)——记录了从原始数据到最终实验数据的每一步修改操作、修改者、修改时间、修改原因、输入版本、输出版本!
那数据科学领域现在有没有现成的工具能解决这些问题?

数据科学领域现在有一些现成的版本管理工具,比如:

  1. Git LFS(Large File Storage):专门用来管理大文件的Git扩展——可以用来存储数据集的快照,但它的元数据功能不够强大,没法记录数据集的质量信息、特征信息、业务反馈信息;而且它的溯源功能也不够完善,没法记录多个Agent协作生成的因果链路;另外,它的并发冲突解决策略也很简单,主要是靠人工合并,不适合自动化的Agent协作流程!
  2. DVC(Data Version Control):专门用来管理数据和模型的版本管理工具——可以和Git无缝集成,元数据功能比Git LFS强大一些,可以记录数据集的依赖关系;但它的溯源功能还是不够完善,没法记录因果链路;而且它的并发冲突解决策略也主要是靠乐观锁,但乐观锁的冲突检测不够细粒度,容易出现假阳性;另外,它的Agent协作功能也不够友好,没有专门为Agent设计的SDK和API!
  3. MLflow:专门用来管理机器学习实验生命周期的工具——可以记录实验的参数、指标、模型、数据集,但它的数据集版本管理功能很弱,主要是靠存储数据集的URI(Uniform Resource Identifier),没法保证数据集的不可修改性;而且它的溯源功能也不够完善,没法记录多个Agent协作生成的因果链路!
  4. Delta Lake、Iceberg、Hudi:专门用来管理数据湖的格式——可以保证数据的ACID(Atomicity、Consistency、Isolation、Durability)特性,支持细粒度的并发冲突解决策略,但它们的数据集版本锁定功能不够灵活,没有专门为Agent设计的版本锁定DSL;而且它们的溯源功能也不够完善,主要是靠记录数据的变化日志,没法记录因果链路!
那为什么我们还要设计Harness数据集版本锁定?

因为现有的工具都不是专门为数据科学Agent自动化研发流程(AutoDS)设计的——它们要么元数据功能不够强大,要么溯源功能不够完善,要么并发冲突解决策略不够细粒度,要么Agent协作功能不够友好!而Harness数据集版本锁定就是要解决这些问题——它是一套专门为AutoDS设计的、端到端的数据集版本管理系统,具有以下核心特点:

  1. 面向Agent协作的版本锁定DSL:Agent可以用简单的DSL语言来指定数据集的版本锁定规则——比如「只使用今天上午10点之前采购的、脂肪含量低于20%的、来自供应商X的肉类数据」,或者「只使用最近3次好评率超过90%的实验中使用的蔬菜数据」;
  2. 因果性数据快照机制:每一个版本的数据集都有一个完整的因果链路——记录了从原始数据到最终实验数据的每一步修改操作、修改者、修改时间、修改原因、输入版本、输出版本,还可以用因果图来可视化这个链路;
  3. 细粒度并发冲突解决策略:支持悲观锁、乐观锁、混合锁三种并发冲突解决策略——Agent可以根据自己的需求选择合适的策略;另外,还支持特征级的版本锁定——Agent可以只锁定数据集的某几个特征,而不是整个数据集;
  4. 与现有工具的无缝集成:可以和Git、DVC、MLflow、Delta Lake、Iceberg、Hudi等现有工具无缝集成——Agent不需要改变自己的工作流程,就能使用Harness的功能;
  5. 专门为Agent设计的SDK和API:提供了Python、Java、Golang等多种语言的SDK,以及RESTful API和GraphQL API——Agent可以很方便地调用Harness的功能。

目的和范围

本文的目的是:

  1. 深入浅出地引出Harness数据集版本锁定的核心概念;
  2. 逐步构建一套从需求分析到架构设计再到代码实现的完整解决方案;
  3. 通过项目实战,展示如何在AutoML全流程中落地这套系统;
  4. 探讨Harness在大模型微调、联邦学习等未来场景下的发展趋势与挑战。

本文的范围是:

  1. 主要针对结构化数据和半结构化数据的版本锁定——不包括非结构化数据(比如图像、视频、音频)的版本锁定,但我们会在未来发展趋势部分提到非结构化数据的版本锁定;
  2. 主要针对单Agent和多Agent协作的AutoML全流程——不包括手动的数据科学实验流程,但手动流程也可以使用Harness的功能;
  3. 主要针对本地部署和私有云部署的场景——不包括公有云部署的场景,但我们会在未来发展趋势部分提到公有云部署的场景。

预期读者

本文的预期读者是:

  1. 数据科学家:想要提高自己的实验可复现性和决策可靠性;
  2. 机器学习工程师:想要构建自动化的机器学习研发流程;
  3. AI架构师:想要设计面向数据科学Agent的系统架构;
  4. 数据工程师:想要管理数据湖和数据仓库的版本;
  5. 大模型开发者:想要在大模型微调过程中锁定训练数据的版本。

文档结构概述

本文的结构如下:

  1. 背景介绍:通过「智能餐厅后厨备菜系统」的场景,引出数据科学Agent现在遇到的三大核心痛点,以及Harness数据集版本锁定的核心特点;
  2. 核心概念与联系:用通俗易懂的语言解释Harness数据集版本锁定的核心概念,比如「数据集版本标识」「元数据」「因果性数据快照」「版本锁定DSL」「细粒度并发冲突解决策略」,并分析它们之间的关系;
  3. 核心算法原理与具体操作步骤:讲解因果性数据快照生成算法、版本锁定DSL解析算法、细粒度并发冲突解决算法的原理,并给出具体的操作步骤;
  4. 数学模型和公式:用数学公式描述数据集版本标识的生成方法、元数据的相似度计算方法、因果链路的构建方法;
  5. 项目实战:代码实际案例和详细解释说明:通过Python+MLflow+自定义Harness SDK的项目实战,展示如何在AutoML全流程中落地这套系统;
  6. 实际应用场景:介绍Harness数据集版本锁定在电商推荐系统、金融风控系统、医疗诊断系统中的实际应用;
  7. 工具和资源推荐:推荐一些与Harness数据集版本锁定相关的工具和资源;
  8. 未来发展趋势与挑战:探讨Harness在大模型微调、联邦学习、非结构化数据版本锁定、公有云部署等未来场景下的发展趋势与挑战;
  9. 总结:学到了什么?:总结本文的主要内容,再次用通俗易懂的语言强调核心概念和它们之间的关系;
  10. 思考题:动动小脑筋:提出一些思考题,鼓励读者进一步思考和应用所学知识;
  11. 附录:常见问题与解答:解答一些读者可能会遇到的常见问题;
  12. 扩展阅读 & 参考资料:推荐一些与Harness数据集版本锁定相关的扩展阅读和参考资料。

术语表

核心术语定义
  1. 数据科学Agent(Data Science Agent):一种能够自主完成数据采集、数据清洗、特征工程、模型训练、模型评估、模型部署等数据科学全流程任务的AI机器人;
  2. AutoDS(Automated Data Science):自动化数据科学研发流程——利用数据科学Agent自动化完成数据科学全流程任务;
  3. 数据集版本漂移(Dataset Drift):同样名称的数据集,不同时间的内容不一样——包括数据分布漂移(Data Distribution Drift)、概念漂移(Concept Drift)、特征漂移(Feature Drift);
  4. Harness数据集版本锁定(Harness Dataset Version Locking):一套专门为AutoDS设计的、端到端的数据集版本管理系统——通过锁定数据集的版本,提高实验可复现性和决策可靠性;
  5. 数据集版本标识(Dataset Version ID):一个唯一的字符串——用来标识数据集的每一个版本;
  6. 元数据(Metadata):描述数据集的信息——包括数据集的基本信息(名称、大小、格式、创建时间、创建者)、质量信息(完整性、准确性、一致性、时效性)、特征信息(特征名称、特征类型、特征统计量)、业务反馈信息(模型准确率、召回率、F1值);
  7. 因果性数据快照(Causal Dataset Snapshot):数据集的某一个版本的完整副本——同时包含数据集的内容和完整的因果链路;
  8. 因果链路(Causal Chain):从原始数据到最终实验数据的每一步修改操作的记录——包括修改操作、修改者、修改时间、修改原因、输入版本、输出版本;
  9. 版本锁定DSL(Domain-Specific Language):一种专门为数据科学Agent设计的简单的语言——用来指定数据集的版本锁定规则;
  10. 细粒度并发冲突解决策略(Fine-Grained Concurrent Conflict Resolution Strategy):一种防止多个Agent同时修改同一个数据集的同一版本的策略——支持悲观锁、乐观锁、混合锁三种策略,还支持特征级的版本锁定。
相关概念解释
  1. Git:一种分布式版本控制系统——专门用来管理代码的版本;
  2. Git LFS:一种专门用来管理大文件的Git扩展;
  3. DVC:一种专门用来管理数据和模型的版本管理工具——可以和Git无缝集成;
  4. MLflow:一种专门用来管理机器学习实验生命周期的工具;
  5. Delta Lake:一种专门用来管理数据湖的格式——可以保证数据的ACID特性;
  6. Iceberg:另一种专门用来管理数据湖的格式——可以保证数据的ACID特性;
  7. Hudi:另一种专门用来管理数据湖的格式——可以保证数据的ACID特性;
  8. ACID特性:数据库事务的四个基本特性——原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability);
  9. 悲观锁(Pessimistic Locking):一种并发冲突解决策略——在修改数据之前,先把数据锁住,防止其他Agent修改;
  10. 乐观锁(Optimistic Locking):另一种并发冲突解决策略——在修改数据之前,不锁住数据,而是在提交修改的时候,检查数据是否被其他Agent修改过;
  11. 混合锁(Hybrid Locking):一种结合了悲观锁和乐观锁的并发冲突解决策略——在修改数据的前半部分用悲观锁,后半部分用乐观锁,或者反过来;
  12. 特征级的版本锁定(Feature-Level Version Locking):一种细粒度的版本锁定策略——Agent可以只锁定数据集的某几个特征,而不是整个数据集。
缩略词列表
缩略词 全称 中文含义
Agent Data Science Agent 数据科学Agent
AutoDS Automated Data Science 自动化数据科学研发流程
DSL Domain-Specific Language 领域特定语言
ACID Atomicity Consistency Isolation Durability 原子性、一致性、隔离性、持久性
Git LFS Git Large File Storage Git大文件存储
DVC Data Version Control 数据版本控制
MLflow Machine Learning Flow 机器学习实验生命周期管理工具
URI Uniform Resource Identifier 统一资源标识符
RESTful API Representational State Transfer Application Programming Interface 表现层状态转换应用程序编程接口
GraphQL API Graph Query Language Application Programming Interface 图查询语言应用程序编程接口
PH Potential of Hydrogen 酸碱度
F1 F1 Score F1值

核心概念与联系

故事引入

我们继续讲「数据大厨餐厅」的故事——这次,餐厅经理找来了一位世界级的「智能餐厅系统架构师」(也就是我们),要求我们设计一套新的「智能备菜与版本管理系统」,解决之前遇到的三大核心痛点。

经过几天的调研和思考,我们设计了一套新的系统——就叫它**「Harness智能备菜系统」**吧!这套系统主要由以下几个部分组成:

  1. 带锁的智能冰柜(Harness Version Repository):用来存储食材的实物(数据集快照)和详细的食材标签(元数据)——每个分区都有一个唯一的编号(数据集版本标识),而且分区一旦上锁,任何人都不能再修改里面的食材;
  2. 智能溯源摄像头(Harness Provenance Tracker):全程记录备菜员的操作过程——包括什么时候拿的食材、从哪个分区拿的、拿了多少、怎么修改的、修改完成后生成的新的分区的编号是多少;
  3. 智能备菜规则生成器(Harness DSL Parser):备菜员和大厨可以用简单的自然语言(或者专门的规则语言)来指定备菜规则——比如「只使用今天上午10点之前采购的、脂肪含量低于20%的、来自供应商X的肉类数据」,智能备菜规则生成器会把这些自然语言转换成系统能识别的指令;
  4. 智能并发调度器(Harness Concurrency Scheduler):像交通警察一样,安排多个备菜员和大厨同时工作——防止多个备菜员抢同一个食材,导致食材混乱;
  5. 智能溯源查询器(Harness Provenance Queryer):顾客问鱼香肉丝为什么这么咸,只要输入菜谱标签里的分区编号,智能溯源查询器就会用因果图来可视化整个溯源过程——让顾客一眼就能看到盐的来源!

核心概念解释(像给小学生讲故事一样)

核心概念一:什么是数据集版本标识?

我们继续用「数据大厨餐厅」的场景来解释——数据集版本标识就像带锁的智能冰柜分区的唯一编号

想象一下,带锁的智能冰柜有10000个分区——每个分区都有一个唯一的编号,比如「20240520-100000-AM-SUPPLIER-X-MEAT-FAT-18」!这个编号是什么意思呢?

  • 「20240520」:分区创建的日期(2024年5月20日);
  • 「100000」:分区创建的时间(上午10点整);
  • 「AM」:上午(Morning);
  • 「SUPPLIER-X」:食材的供应商(供应商X);
  • 「MEAT」:食材的种类(肉类);
  • 「FAT-18」:食材的脂肪含量(18%)。

这样的话,大厨要拿食材,只要看一眼编号,就能知道是不是自己想要的那一批了!而且,这个编号是唯一的、不可修改的——就像每个人的身份证号一样!

那数据科学中的数据集版本标识是怎么生成的呢?我们会在后面的「核心算法原理与具体操作步骤」和「数学模型和公式」部分详细讲解——简单来说,就是用**哈希算法(Hash Algorithm)**把数据集的内容、元数据、因果链路的前半部分(或者全部)哈希成一个唯一的字符串,比如「SHA256:abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890」!

核心概念二:什么是元数据?

元数据就像带锁的智能冰柜分区里的详细食材标签

想象一下,每个带锁的智能冰柜分区里都有一张详细的食材标签——这张标签上写了什么呢?

  1. 基本信息:食材的名称(比如「新鲜五花肉」)、重量(比如「10公斤」)、格式(比如「冷冻」)、创建时间(比如「2024年5月20日上午10点整」)、创建者(比如「备菜员A」);
  2. 质量信息:食材的完整性(比如「没有缺失的肉块」)、准确性(比如「确实是五花肉,不是后腿肉」)、一致性(比如「所有肉块的脂肪含量都在17%-19%之间」)、时效性(比如「保质期到2024年5月27日」);
  3. 特征信息:食材的特征(比如「脂肪含量18%」「蛋白质含量22%」「水分含量60%」「每块肉的重量是100克左右」);
  4. 业务反馈信息:如果之前有大厨用过这批食材做过菜,标签上还会写顾客的好评率(比如「好评率96%」)、顾客的评价(比如「肉很香,很嫩」)。

这样的话,大厨要拿食材,只要先看一眼食材标签,就能确认是不是自己想要的那一批了!而且,这个食材标签也是唯一的、不可修改的——就像每个产品的说明书一样!

那数据科学中的元数据是怎么生成的呢?我们会在后面的「核心算法原理与具体操作步骤」和「数学模型和公式」部分详细讲解——简单来说,就是用自动化的元数据提取工具从数据集的内容中提取基本信息、质量信息、特征信息,然后用业务反馈收集工具从业务系统中收集业务反馈信息!

核心概念三:什么是因果性数据快照?

因果性数据快照就像带锁的智能冰柜分区里的食材实物和完整的溯源记录的组合

想象一下,每个带锁的智能冰柜分区里都有两样东西:

  1. 食材实物:比如10公斤新鲜五花肉;
  2. 完整的溯源记录:比如「这10公斤新鲜五花肉是备菜员A在2024年5月20日上午9点30分从供应商X的菜市场采购的,采购的时候拍了10张照片(照片的编号是「P20240520-093000-001」到「P20240520-093000-010」),用脂肪检测仪测了脂肪含量(平均18%),然后在2024年5月20日上午10点整放进了这个分区」。

这样的话,如果顾客问鱼香肉丝为什么这么咸,只要查菜谱标签里的分区编号,再查分区里的完整溯源记录,就能找到原因了!而且,这个因果性数据快照也是唯一的、不可修改的——就像每个犯罪现场的完整照片和物证的组合一样!

那数据科学中的因果性数据快照是怎么生成的呢?我们会在后面的「核心算法原理与具体操作步骤」和「数学模型和公式」部分详细讲解——简单来说,就是用快照生成工具把数据集的内容生成一个不可修改的副本,然后用溯源跟踪工具把从原始数据到最终实验数据的每一步修改操作记录下来,最后把这两样东西组合在一起,生成一个因果性数据快照!

核心概念四:什么是版本锁定DSL?

版本锁定DSL就像智能备菜规则生成器能识别的简单的规则语言

想象一下,备菜员和大厨可以用简单的自然语言(或者专门的规则语言)来指定备菜规则——比如:

  • 备菜员A说:「今天上午10点之前,我要从供应商X的菜市场采购10公斤脂肪含量在17%-19%之间的新鲜五花肉」;
  • 大厨C说:「我要用来做宫保鸡丁的食材,必须是最近3次好评率超过90%的实验中使用的食材」;
  • 协作调度员Agent说:「今天搞促销,要同时做宫保鸡丁、鱼香肉丝、糖醋里脊——这三个菜都需要用今天上午10点之前采购的新鲜胡萝卜,但宫保鸡丁用的胡萝卜必须是粗的,鱼香肉丝用的胡萝卜必须是细的,糖醋里脊用的胡萝卜必须是中等粗细的」。

智能备菜规则生成器会把这些自然语言转换成系统能识别的指令——比如用JSON格式或者YAML格式表示的指令!

那数据科学中的版本锁定DSL是什么样子的呢?我们会在后面的「核心算法原理与具体操作步骤」和「项目实战」部分详细讲解——简单来说,就是一种专门为数据科学Agent设计的简单的声明式语言——Agent不需要告诉系统「怎么做」,只需要告诉系统「要什么」!

核心概念五:什么是细粒度并发冲突解决策略?

细粒度并发冲突解决策略就像智能并发调度器的交通规则

想象一下,智能并发调度器像交通警察一样,安排多个备菜员和大厨同时工作——它有以下几个交通规则:

  1. 红灯停(悲观锁):如果备菜员A正在把食材放进分区,智能并发调度器就会给其他备菜员和大厨亮红灯——其他备菜员和大厨必须在外面排队,等备菜员A把食材放好、分区上锁之后,才能进去;
  2. 绿灯行,但要注意看路(乐观锁):如果备菜员A正在把食材放进分区,智能并发调度器就会给其他备菜员和大厨亮绿灯——但其他备菜员和大厨在提交自己的食材的时候,必须检查一下备菜员A是不是已经把食材放好了——如果备菜员A已经把食材放好了,其他备菜员和大厨就必须重新拿食材、重新修改、重新提交;
  3. 黄灯等一等(混合锁):如果备菜员A正在把食材放进分区的前半部分(比如称重),智能并发调度器就会给其他备菜员和大厨亮红灯——其他备菜员和大厨必须在外面排队;如果备菜员A正在把食材放进分区的后半部分(比如贴标签),智能并发调度器就会给其他备菜员和大厨亮绿灯——但其他备菜员和大厨在提交自己的食材的时候,必须检查一下备菜员A是不是已经把食材放好了;
  4. 只锁一部分道路(特征级的版本锁定):如果今天搞促销,要同时做宫保鸡丁、鱼香肉丝、糖醋里脊——这三个菜都需要用今天上午10点之前采购的新鲜胡萝卜,但宫保鸡丁用的胡萝卜的「粗细」特征是粗的,鱼香肉丝用的是细的,糖醋里脊用的是中等粗细的——智能并发调度器就会只锁胡萝卜的「采购时间」「供应商」「新鲜度」特征,而不锁「粗细」特征——这样的话,备菜员A可以先把今天上午10点之前采购的、来自供应商X的、新鲜的胡萝卜放进一个临时操作区,然后备菜员C可以把临时操作区里的胡萝卜切成粗的,生成一个新的分区;备菜员D可以把临时操作区里的胡萝卜切成细的,生成一个新的分区;备菜员E可以把临时操作区里的胡萝卜切成中等粗细的,生成一个新的分区——三个备菜员可以同时工作,不会出现冲突!

这样的话,多个备菜员和大厨可以同时工作,不会出现食材混乱的情况!而且,智能并发调度器会根据备菜员和大厨的需求,自动选择合适的交通规则!

那数据科学中的细粒度并发冲突解决策略是怎么实现的呢?我们会在后面的「核心算法原理与具体操作步骤」和「项目实战」部分详细讲解——简单来说,就是用数据库的锁机制(比如MySQL的行锁、表锁,或者Redis的分布式锁)来实现悲观锁,用版本号或者时间戳来实现乐观锁,用特征级的哈希来实现特征级的版本锁定!

核心概念之间的关系(用小学生能理解的比喻)

我们继续用「数据大厨餐厅」的场景来解释核心概念之间的关系——这些核心概念就像一个足球队的队员,它们一起合作,解决之前遇到的三大核心痛点!

核心概念 足球队队员的角色 主要职责
数据集版本标识 守门员的球衣号码 唯一标识每一个数据集的版本
元数据 足球队的战术板 描述每一个数据集的版本的详细信息
因果性数据快照 足球队的比赛录像和球员名单的组合 存储每一个数据集的版本的内容和完整的因果链路
版本锁定DSL 足球队的教练的战术指令 指定数据科学Agent要使用的数据集的版本
细粒度并发冲突解决策略 足球队的裁判 防止多个数据科学Agent同时修改同一个数据集的同一版本

接下来,我们用三个具体的例子来解释这些核心概念之间的合作关系:

例子一:解决数据集版本漂移的问题

昨天大厨C用「20240519-100000-AM-SUPPLIER-X-MEAT-FAT-18」这个分区的食材做的宫保鸡丁,顾客好评率95%;今天他用同样名称的「新鲜五花肉」做,好评率只有60%!

那用Harness智能备菜系统怎么解决这个问题呢?

  1. 大厨C用版本锁定DSL指定要使用的食材:他说:「我要用来做宫保鸡丁的食材,必须是昨天上午10点之前采购的、脂肪含量在17%-19%之间的、来自供应商X的、好评率超过90%的新鲜五花肉」;
  2. 智能备菜规则生成器把自然语言转换成系统能识别的指令:它把大厨C的话转换成了一个JSON格式的指令;
  3. 智能备菜规则生成器用指令去查询元数据:它遍历带锁的智能冰柜里的所有分区的元数据,找到符合条件的分区——就是「20240519-100000-AM-SUPPLIER-X-MEAT-FAT-18」;
  4. 智能备菜规则生成器把分区的编号告诉大厨C
  5. 大厨C用分区的编号去拿食材:他打开带锁的智能冰柜的分区,拿出食材实物——就是昨天的那10公斤新鲜五花肉;
  6. 大厨C用同样的食材做宫保鸡丁:顾客好评率还是95%!

这样的话,就解决了数据集版本漂移的问题!

例子二:解决版本冲突并发的问题

今天餐厅搞促销,要同时做宫保鸡丁、鱼香肉丝、糖醋里脊——这三个菜都需要备菜员A今天买的新鲜胡萝卜!但备菜员A刚把胡萝卜放在切菜台,备菜员C、D、E就想同时修改!

那用Harness智能备菜系统怎么解决这个问题呢?

  1. 协作调度员Agent用版本锁定DSL指定要锁定的特征:它说:「今天搞促销,要同时做宫保鸡丁、鱼香肉丝、糖醋里脊——这三个菜都需要用今天上午10点之前采购的、来自供应商X的、新鲜的胡萝卜,但宫保鸡丁用的胡萝卜的『粗细』特征是粗的,鱼香肉丝用的是细的,糖醋里脊用的是中等粗细的——所以只锁胡萝卜的『采购时间』『供应商』『新鲜度』特征,不锁『粗细』特征」;
  2. 智能备菜规则生成器把自然语言转换成系统能识别的指令
  3. 智能并发调度器用指令去设置特征级的锁:它只给胡萝卜的「采购时间」「供应商」「新鲜度」特征设置了悲观锁;
  4. 备菜员A先把今天上午10点之前采购的、来自供应商X的、新鲜的胡萝卜放进一个临时操作区:智能并发调度器确认备菜员A没有修改被锁的特征,就让他放进去了;
  5. 备菜员C、D、E同时从临时操作区里拿胡萝卜:智能并发调度器确认他们没有修改被锁的特征,就让他们拿了;
  6. 备菜员C把临时操作区里的胡萝卜切成粗的,生成一个新的分区:智能并发调度器确认他没有修改被锁的特征,就让他提交了;
  7. 备菜员D把临时操作区里的胡萝卜切成细的,生成一个新的分区:同样提交成功;
  8. 备菜员E把临时操作区里的胡萝卜切成中等粗细的,生成一个新的分区:同样提交成功;
  9. 大厨C、D、E分别用三个新的分区的食材做菜:三个菜都做成功了!

这样的话,就解决了版本冲突并发的问题!

例子三:解决Agent协作数据溯源缺失的问题

今天大厨E做的鱼香肉丝特别咸,顾客投诉了!

那用Harness智能备菜系统怎么解决这个问题呢?

  1. 顾客用智能溯源查询器输入菜谱标签里的分区编号:比如「20240520-120000-PM-CHEF-E-FISH-FRAgrant-PORK-SHREDS」;
  2. 智能溯源查询器用分区编号去查询因果性数据快照:它找到了这个分区的因果性数据快照——包括食材实物(鱼香肉丝)和完整的因果链路;
  3. 智能溯源查询器用因果图来可视化整个溯源过程:因果图是这样的:
    • 第一层:「20240520-120000-PM-CHEF-E-FISH-FRAgrant-PORK-SHREDS」(鱼香肉丝);
    • 第二层:「20240520-113000-AM-CHEF-E-CUT-FISH-FRAgrant-PORK-SHREDS-INGREDIENTS」(鱼香肉丝的配料:五花肉丝、胡萝卜丝、木耳丝、豆瓣酱、酱油、盐、糖、醋);
    • 第三层:每个配料的因果链路——比如「20240520-103000-AM-PREP-E-SALT」(盐)的因果链路是:「20240520-100000-AM-PREP-F-PURCHASE-SALT-FROM-SUPPLIER-Y」(备菜员F在2024年5月20日上午10点整从供应商Y的菜市场采购的盐);
  4. 智能溯源查询器检查每个配料的元数据:它发现「20240520-103000-AM-PREP-E-SALT」这个分区的元数据里的「氯化钠含量」是40%——而正常的盐的氯化钠含量是99%!
  5. 智能溯源查询器检查「20240520-100000-AM-PREP-F-PURCHASE-SALT-FROM-SUPPLIER-Y」这个分区的因果链路:它发现备菜员F在采购的时候,没有看供应商的资质证明——供应商Y其实是卖工业盐的!
  6. 智能溯源查询器把原因告诉顾客和餐厅经理:顾客和餐厅经理都明白了!

这样的话,就解决了Agent协作数据溯源缺失的问题!

核心概念原理和架构的文本示意图(专业定义)

接下来,我们用专业的语言来描述Harness数据集版本锁定的核心概念原理和架构——文本示意图如下:

Harness数据集版本锁定系统架构
┌─────────────────────────────────────────────────────────────────────────────┐
│                                 数据科学Agent层                                │
│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐  │
│  │ 探索备菜员Agent│  │ 实验大厨Agent │  │ 协作调度员Agent│  │ 交付上菜员Agent│  │
│  └──────────────┘  └──────────────┘  └──────────────┘  └──────────────┘  │
└─────────────────────────────────────────────────────────────────────────────┘
                                    ↕ RESTful/GraphQL API
┌─────────────────────────────────────────────────────────────────────────────┐
│                               Harness核心服务层                               │
│  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐        │
│  │ 版本锁定DSL解析器│  │ 因果性快照生成器  │  │ 元数据提取与管理  │        │
│  └──────────────────┘  └──────────────────┘  └──────────────────┘        │
│  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐        │
│  │ 细粒度并发调度器  │  │ 溯源跟踪与查询器  │  │ 版本标识生成器    │        │
│  └──────────────────┘  └──────────────────┘  └──────────────────┘        │
└─────────────────────────────────────────────────────────────────────────────┘
                                    ↕ 存储接口
┌─────────────────────────────────────────────────────────────────────────────┐
│                               Harness存储层                                   │
│  ┌──────────────────┐  ┌──────────────────┐  ┌──────────────────┐        │
│  │ 版本库(快照存储)│  │ 元数据库(元数据)│  │ 溯源库(因果链路)│        │
│  └──────────────────┘  └──────────────────┘  └──────────────────┘        │
└─────────────────────────────────────────────────────────────────────────────┘
                                    ↕ 集成接口
┌─────────────────────────────────────────────────────────────────────────────┐
│                               第三方工具集成层                               │
│  ┌──────┐  ┌──────┐  ┌───────┐  ┌──────────┐  ┌─────────┐  ┌──────┐  │
│  │ Git  │  │DVC   │  │MLflow │  │Delta Lake│  │Iceberg  │  │Hudi  │  │
│  └──────┘  └──────┘  └───────┘  └──────────┘  └─────────┘  └──────┘  │
└─────────────────────────────────────────────────────────────────────────────┘

Mermaid 流程图(Mermaid 流程节点中不要有括号、逗号等特殊字符)

接下来,我们用Mermaid流程图来描述Harness数据集版本锁定的核心流程——包括数据集版本创建流程数据集版本锁定流程数据集版本溯源流程三个核心流程:

Mermaid 流程图一:数据集版本创建流程

数据科学Agent提交数据集创建请求

版本锁定DSL解析器解析请求

元数据提取与管理模块提取数据集的元数据

版本标识生成器生成唯一的版本标识

细粒度并发调度器检查是否有并发冲突

是否有并发冲突

根据并发冲突解决策略处理冲突

因果性快照生成器生成因果性数据快照

溯源跟踪与查询器记录因果链路

版本库元数据库溯源库分别存储快照元数据因果链路

向数据科学Agent返回版本标识和元数据

Mermaid 流程图二:数据集版本锁定流程

数据科学Agent提交数据集锁定请求

版本锁定DSL解析器解析锁定规则

元数据提取与管理模块遍历版本库中的所有元数据

计算每个元数据与锁定规则的相似度

是否有符合条件的版本

向数据科学Agent返回错误信息

选择相似度最高的版本

细粒度并发调度器检查版本是否被锁定

版本是否被锁定

根据并发冲突解决策略处理冲突

溯源跟踪与查询器记录版本锁定操作

向数据科学Agent返回版本标识和因果性数据快照的访问权限

Mermaid 流程图三:数据集版本溯源流程
渲染错误: Mermaid 渲染失败: Parse error on line 3: ... A[数据科学Agent提交数据集 ----------------------^ Expecting 'SQE', 'DOUBLECIRCLEEND', 'PE', '-)', 'STADIUMEND', 'SUBROUTINEEND', 'PIPE', 'CYLINDEREND', 'DIAMOND_STOP', 'TAGEND', 'TRAPEND', 'INVTRAPEND', 'UNICODE_TEXT', 'TEXT', 'TAGSTART', got '1'
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐