企业任务能否真实,第一步看数据库世界是否站得住。
EntBench-Agent 的第一层是企业数据库世界。
这部分看起来像是准备数据,但我觉得它其实是整个系统的地基。后面所有任务、工具调用、评测、错误分析,都要落到这个数据库世界里。
如果数据库世界很假,后面生成的任务就会变成空中楼阁。
1. 先定义企业有哪些业务域
PDF 里把企业数据库拆成几个典型业务域:
组织 / 用户
HR
文档
权限
会议
项目
日程
每个业务域下面都有一组表。
组织域里有:
Department
User
Employee
文档域里有:
Document
DocumentVersion
DocumentPermission
DocumentShare
DocumentDownload
PermissionRequest
会议域里有:
MeetingRoom
RoomBooking
Meeting
MeetingAttendee
MeetingMinutes
项目域里有:
Project
ProjectMember
Task
日程域里有:
Schedule
Event
Todo
Reminder
这套表设计的重点在于,它覆盖了企业 Agent 最常见的工作流。
文档会被创建、分享、下载、申请权限。
会议会有会议室、参会人、纪要、分享。
项目会有成员、任务、进度、相关文档。
日程会有事件、待办和提醒。
这些东西组合起来,才会出现真正的企业任务。
2. 数据生成要有业务关系
最朴素的数据生成方式是随机造记录。
比如随机造 100 个用户,随机造 500 个文档,随机给一些人分配权限。
但这种做法很容易生成一堆彼此关系很弱的数据。后面要抽任务时,就会发现图里很多边连接很弱。
所以 EntBench-Agent 采用的是业务场景包。
每个场景包对应一类真实企业工作流,比如:
document_collab_pack
meeting_coordination_pack
project_delivery_pack
cross_domain_pack
HR 场景包
这些 pack 的作用是按照业务逻辑生成跨表记录。
以 document_collab_pack 为例,它会先选择一个 uploader 创建文档,然后自动生成:
Document
DocumentVersion
DocumentPermission
DocumentShare
DocumentDownload
PermissionRequest
也就是说,一篇文档从出生开始就带着业务链:
用户上传文档
↓
文档产生版本
↓
文档被分享
↓
接收人获得权限
↓
有人下载文档
↓
有人发起权限申请
这样生成出来的数据天然就适合后面构造任务。
比如我们可以很自然地问:
找到某个用户收到的文档分享。
审批某个文档权限申请。
查看某个文档的版本变化。
确认某个用户是否下载过文档。
这些任务都能落回真实数据。
3. 跨业务域关系很关键
单个业务域内部的任务比较容易。
比如查询文档、更新任务状态、创建提醒,这些都相对直接。
真正有企业味道的任务通常跨域。
比如:
项目任务快到期了,需要开会协调。
会议纪要需要分享给项目成员。
某个项目文档需要给新成员授权。
员工入职任务需要创建日程提醒。
请假审批影响后续会议安排。
PDF 里提到的 cross_domain_pack 就是为这种任务准备的。它会把项目、文档权限请求、会议、待办、提醒连接起来。
我觉得这一步很重要。
如果企业数据库里每个业务域都像孤岛,后面生成的任务就会很单薄。真正的企业 Agent 需要处理的是“一个事情牵出另一件事”的链条。
比如一个权限审批任务,后面可能牵出项目任务和会议纪要。一个会议协调任务,后面可能牵出文档分享和日程提醒。
4. 数据质量校验
数据生成完还要校验。
这里主要看几类问题:
外键关系是否存在
时间顺序是否合理
项目和会议人数分布是否正常
可查询样本是否足够
可操作样本是否足够
这一步很像给数据库做体检。
比如会议结束时间早于开始时间,这种数据会污染任务。
比如一个项目里没有成员,项目任务就很难合理分配。
比如文档分享记录存在,但接收人的权限缺失,后面任务就会出现断链。
所以这个阶段除了“造数据”,更像是在造一个可运行的企业模拟环境。
5. 这一层对后面有什么影响
后面所有模块都依赖这一层。
seed 采样要从企业关系图里抽实体和关系。
LLM 生成任务时要引用真实 entity id。
compiler 要根据 seed 构造数据库初始补丁。
evaluator 要检查数据库最终状态。
失败分析也要根据真实表字段判断错误。
所以企业数据库世界一旦质量差,后面每一层都会跟着抖。
这也是我觉得这个项目第一层最值得写的原因。它把 benchmark 的起点从“写题目”提前到了“造一个能跑业务的公司”。