文章

CrowdAgent:一些讨论

CrowdAgent:一些讨论

一篇工作 CrowdAgent: Multi-Agent Managed Multi-Source Annotation System 被 EMNLP 2025 System demonstrations 接收了,在这篇博客中,我想简要谈谈论文背后的工作、限制与其他的一些想法

太长不看

CrowdAgent 可以看作是之前 EMNLP’23 发表的 FreeAL 的延申。

  • FreeAL 讨论了在无人类参与下大模型与小模型组成的主动学习 pipeline
  • 利用LLM进行标注是完全可行的
  • 小模型可以协同进行过滤、精炼大模型的标签
  • 完全监督、弱监督的小模型在很多场景下比(未精调)大模型强

在一些讨论中(包括 FreeAL 的 知乎文章),一个问题被提及:完全抛弃真人标注者,真的对吗? 数据标注的最终目标是服务于人类的应用,其“黄金标准”也源于人类的共识。一个完全没有人类监督和校准的闭环系统,很可能会累积并放大自身的系统性偏差。

于是,CrowdAgent 最初的想法很简单——把人类这个最关键的角色请回来。乍一看又回到了传统的主动学习(Active Learning),但不完全是。传统主动学习的核心,是在“小模型”和“人类”这两个角色之间,决定哪个样本应该由昂贵的人类来标注。而现在,我们的牌桌上有了第三位玩家:大模型。

在一个同时拥有大模型、小模型和人类专家这三种标注源的环境下,我们该如何为每一个样本,动态地分配最合适的标注者呢?我们的核心策略是让每个“标注者”都发挥其最大的长处。我们可以用下面这个表格来清晰地定义它们的角色:

标注者成本质量核心职责
大模型 (LLM)负责大规模、低成本的初始“粗加工”和弱标签生成。
小模型 (SLM)负责对大模型的标签进行“精加工”,通过半监督学习低成本地过滤和提纯。
人类专家 (Human)负责“最终质检”,处理机器最棘手的、模糊不清的困难样本。

我们整体的工作流程就变得清晰了:让大模型先上,用最低的成本完成 80% 的工作;然后让小模型跟进,修正其中的错误;最后,对于那些机器反复出错、置信度低的疑难样本,再精准地推送给人类专家进行最终裁决。

在这里,我们必须特别感谢网易伏羲实验室的有灵众包平台 ( https://zb.163.com/ )提供的巨大支持。他们的 AOP (Agent-Oriented Programming) 思想,让我可以像调一个 LLM API 一样调用人类标注者,这在代码实现和便捷性上都是优美的。

然而还有一个问题:当我们的标注源不止三个,而是有多个不同的大模型、多个针对不同任务的小模型、以及来自不同背景的人类标注员时,这个“分配”问题就演变成了一个复杂的“管理”问题。

这时,我们从传统的人力众包公司那里获得了灵感。一个成熟的众包公司是如何运作的?他们会给每个标注员建立能力画像、评估他们的工作质量、根据任务难度设定不同的报酬、并通过多轮校验和标签聚合来确保最终交付质量。

CrowdAgent 的主体思想也因此浮出水面:我们要做的,就是一个虚拟的、自动化的数据标注公司。 在这个公司里,无论是大模型、小模型还是人类,我们都一视同仁,将它们视为能力和成本各不相同的“标注员工”。然后,我们通过一个多智能体(Multi-Agent)系统,来模拟这家公司的核心运作流程——设立“项目经理”、“质检部门”和“财务部门”——让他们协同工作,共同管理好这群特殊的“员工”,最终以最优的性价比,完成高质量的数据标注任务。

workflow还是agent?

参考1参考2

AI或者LLM,已经成为很多应用程序的一部分。但其实,对于如何把AI融入应用程序,现在有两个派别的观点:

  • Workflow派:在需要智能的时候用代码去调用LLM,把LLM看成一种函数。程序主体是手写代码,LLM处于从属位置。
  • Agent派:让LLM自行决定程序逻辑。我们只要写好工具,并把工具的使用方法放在LLM提示词中,让它适时调用即可。程序主体是LLM,手写的代码处于从属位置。

它们的区别更像是谁来掌握方向盘,控制程序的走向。

过去两年,基于Workflow逻辑的开发框架帮助了很多人构建AI程序。既包括用代码搭建workflow的框架,也包括在界面上拖拽创建工作流的Playground类产品。其中最有名的就是LangChain。

当初这篇工作在选择框架时,考虑了几个,包括 LangGraph(相比LangChain更加自由,一个是图,一个是链)、LlamaIndex、Crew AI、AutoGen。其中,

  • Crew AI、AutoGen更加偏向拟人协作,即 Agent;
  • 相比之下,LangGraph和LlamaIndex偏向流程控制,即Workflow。
  • 其实还有其他无需编程的框架,包括 Dify、Coze,适合做一些概念验证(PoC)或者演示性的用途,但是基本不可能作为生产工具来使用

作为一篇论文,要有明确的 pipeline,所以选择了社区支持更多的Workflow型框架LangGraph。不过实际上,LangGraph 也在不断吸收Agent的思想,支持Agent的范式,总的来说,这篇工作大体框架是Workflow,这个 pileline 是事先框死的,在这个 pipeline 下每个 Agent 赋予了有限的自主权。换句话说,是 Agentic Workflow

Agentic Workflow 擅长以下能力,而 CrowdAgent 在进行标注任务中也需要规划,分配标注者(Tool)、并反思之前的标注效果进行优化

  • 制定计划(Make a plan)。Agentic workflow始于规划。LLM 用于通过任务分解将复杂任务分解为更小的子任务,然后确定最佳执行路线。
  • 使用工具执行操作(Execute actions with tools)。Agentic workflow使用一组预定义的工具和相应的权限来完成任务并执行其生成的计划。
  • 反思与迭代(Reflect and iterate)。Agent可以评估每一步的结果,根据需要调整计划,并不断循环,直到结果令人满意为止。

AI程序可以根据自己的需要决定是程序控制多一些,还是让LLM自由发挥多一些。但趋势是明显的,更多的程序开始向Agent的方向迁徙。这并非是技术上赶时髦,或者激进派想尝试LLM智能的极限,而是来自过去两年的教训:很多团队的工程师花费数百小时手动调整的workflow,在下一次大型模型更新后一夜之间变得毫无价值,这对AI工程师来说相当于一次又一次地学习The Bitter Lesson:他们痛苦地发现,自己精心设计的workflow,对于LLM来说只是一种inductive bias而已。

2025年,市场上出现了大量的Agent应用,迄今为止较为成功的两类就是Coding Agent和各大厂商相继推出的Deep Research功能,而更为激进的,以Manus为代表的通用型Agent,表现还不尽如人意。

未来呢?在 Agent 内部也有不同的观点,关于Tool的调用,保守的看法是Tool由程序员来定义实现(有一些就是现成工具的封装),而激进派认为,根本就不该定义什么Tool,只要给Agent一个Python解释器,让它自己写代码去实现,这样更加灵活 - 它可以自定义你从未想过的工具来完成任务。再进一步?软件中所有的代码,都可以由LLM来取代。期待这些想法的实现

最优的调度方式?

既然要调度标注者进行标注,那么一个绕不开的问题就是:怎样调度才是最优的方式?

如果没有大模型,要解决这个问题,思路会非常“传统”。我们会收集大量关于标注过程的数据——比如不同标注者的准确率、成本、耗时等等,然后基于这些数据,要么手动编写一套复杂的启发式规则(Heuristic),要么用统计学方法建模,甚至可能训练一个专门用于决策的深度学习模型。

这个问题在学术上并不新鲜,它本质上是一个经典的运筹学(Operations Research)问题,具体来说,可以归类为动态资源分配异构任务调度。学术界已经研究了几十年,常用方法包括整数规划、多臂老虎机(Multi-armed Bandit)算法等,目标都是在有限的资源和预算下,找到一个数学上可证明的“最优解”。

不过,在大模型时代,我们有了一条更简单,或者说更“取巧”的路——模仿人类。既然标注公司里,项目经理、质检和财务可以通过开会、沟通、看报表这种群体协作的方式,来决定下一个任务包应该分配给哪个标注小组,那么,我们让一群 Agent 来模拟这个过程不就行了?

老实说,这多少有点“推卸责任”的嫌疑。因为这种多智能体协作的方式,并不能在数学上保证“最优”,它更像是在“讲一个好故事”。

这似乎和深度学习推卸责任的方式差不多:

  • 之前,我们实在不想再手动设计上万个函数和规则去区分猫和狗,于是我们干脆放弃思考,用一个庞大的神经网络和海量数据“喂”出一个模型,把区分猫狗这个艰巨的任务“推卸”给了网络自己。
  • 在这里,我们也放弃了去设计一个完美的调度数学模型,而是把这个复杂的决策过程,“推卸”给了几个各司其职的 Agent,让他们通过协作去涌现出一种“足够好”的调度策略。

这又引出了第二个,可能更深刻的问题:数据标注领域,是否存在自己的“Scaling Law”?

我们可以做一个对比。主动学习(Active Learning)研究了几十年,一个核心就是解决人和小模型之间的调度问题。我们在无数的论文中可以看到,随着人类标注数据比例的提升(比如从 1% 到 50%),模型的性能会有一条清晰、平滑的提升曲线。这可以看作是主动学习的“Scaling Law”。同样,大模型自身的性能也遵循着类似的规律,随着模型参数和训练数据量的指数级增长,其能力也呈现出可预测的提升,这是大模型的“Scaling Law”

那么,当数据标注结合了大模型、小模型、人类这三个变量呢?性能曲线会变成什么样?我们是否也能画出一条随着“人类标注量”增加,系统整体性能提升的曲线?在 CrowdAgent 的实验中,我们确实画出了属于我们自己的一条曲线。并且我们发现,由于结合了大模型标注和主动学习优势,我们在低人类参与与高人类参与都有较好的效果。

但我感觉,目前这样的工作还是太少了。这个领域还没有一个公认的、用于“刷榜”的基准数据集和环境。只有当我们能在一个统一的平台上,看到几十篇不同的工作都画出它们自己的“Scaling Law”曲线时,我们才能拨开迷雾,让“什么才是更好的标注范式”这个问题,更加接近真相。

最后,回到“调度”问题本身。除了多智能体决策,其实还有另一条同样“不太负责任”的道路。我们依然不想费脑筋去做统计模型或启发式方法,而是继续让大模型自己去探索。但这一次,我们给它更多的试错机会——使用强化学习(Reinforcement Learning)。我们可以将最终的标注质量和成本作为一个奖励(Reward)信号,让一个调度 Agent 在一次次的模拟标注中,自己去“学习”在什么情况下,把什么样本交给谁,才是最高效的。

怎样才算“多”标注者?

CrowdAgent 的核心创新点之一,是结合了多种标注源——大模型、小模型和人类。但在复盘中,我认为,“多标注源”这个点在当前的实现中有点 weak。

我们对大模型标注者的实现,更多是参考了 CoAnnotating 这篇工作的思路:通过多种不同形式的 prompt,去请求同一个大模型(比如 GPT-4o-mini),从而模拟出多个“视角不同”的标注员。

一个真正理想的“多标注源”设计,应该更接近于业界正在探索的模型路由(Model Routing)系统。从多样性的角度看,调用不同公司、不同架构的大模型(如 OpenAI 的 GPT 系列、阿里的通义千问、Anthropic 的 Claude、字节的豆包等)显然比只变着花样问同一个人要合理得多。当我们的标注者库里接入了多个不同 API 后,调度系统就可以根据任务的难易度和预算,做出更灵活的选择:简单的任务用便宜的模型,关键的任务用最强的模型,从而实现质量和成本的动态平衡。

对于小模型标注者,出于实际工作量的考虑,我只为每个领域(文本、视觉、多模态)各集成了一种代表性的小模型。一个更理想的“多标注源”库,应该为每个类别都接入多个不同架构的小模型。比如,视觉任务可以同时接入 ResNet、Vision Transformer (ViT)、ConvNeXt 等多种模型;多模态任务也可以引入不同的融合架构。在工程实现上,甚至可以利用 Hugging Face Hub 提供的 API 来构建一个统一的抽象层,简化这个过程。但归根结底,要将海量模型适配到统一的接口下,工程量依然是巨大的挑战。

总而言之,目前的“多”,更多是体现在标注者“角色”的多样性上(LLM、SLM、Human)。但我们可以想象,当未来我们真正拥有一个庞大的、即插即用的“标注者模型库”时——里面有数十个大模型和数百个小模型可供选择——CrowdAgent 这套基于群体智能的动态调度思想,才真正有了用武之地,其潜力也将被完全释放。

什么是好的标签聚合方法?

当我们从大模型、小模型、人类这些形形色色的标注源那里,为同一个样本拿到一堆可能相互矛盾的标签后,一个绕不开的步骤就是标签聚合 (Label Aggregation)

  • 输入: 针对一个样本的 n 个标签,以及每个标签来源(标注者)的先验准确率
  • 输出: 最终标签和对应的置信度

理论上,当这个置信度高过一个阈值,就可以认为这个样本的标注工作完成了。因为每个标注者都有自己的历史表现(比如一个完整的混淆矩阵),所以他们投出的“票”,其权重自然也各不相同。

经典方法有两个,我们论文里也提到了:贝叶斯推断 (Bayesian Inference)Dawid-Skene (DS) 算法

但是具体在用的时候,发现了一个不足,即收敛速度比较快。对于 DS 算法,一个核心参数是 EM 算法的迭代次数。在很多实现或者文献中,为了保证收敛,这个值推荐得不低(例如 20 次甚至更多)。在这样的设置下,DS 算法给出的最终概率分布往往是一个选项的概率无限接近 1,其他所有选项都无限接近 0。

这其实是设计哲学上的冲突。DS 算法被设计出来的初衷,是为了用尽可能少的数据,尽快得出一个最可能的结果,主打一个“高效”。但这种“高效”得出的极端概率分布,和我想要的“置信度”概念完全是两码事。试想,如果我们只收集了两个标签,并且它们的来源(比如两个不同的大模型)先验准确率都只有 80%,DS 算法却可能告诉我最终结果的置信度是 99.9%。这显然不符合直觉。

当然,一个“取巧”的办法是把迭代次数设得极低,比如 2 次。但这种为了结果去修改默认参数的做法,总感觉不太严谨。最后选择了贝叶斯推断。从结果上看,它很像一个迭代次数为 1 的 DS 算法,但至少在理论上更站得住脚。

然而,贝叶斯推断依然存在“收敛过快”的问题。举个经典的例子:一个样本,我们依次收集了 [0, 1, 0, 1, 0] 这五个标签,假设它们的先验准确率都是 90%。用贝叶斯推断一步步计算,聚合标签的置信度会在 50% 和 90% 这两个值之间反复横跳。最终,因为标签 0 多出现了一次,聚合结果会是 0,置信度高达 90%。但从人类的视角来看,这个结果合理吗?如此两极分化的投票结果,难道不应该意味着这个样本本身就极具争议,置信度似乎不应该来到90%?

更进一步说,“置信度”和“准确率”这两个概念,虽然正相关,但绝不能划等号。置信度计算严重依赖于输入的“先验准确率”,先验准确率越可靠,置信度与准确率的相关性越好,但是先验准确率需要 ground truth ,或者在公司中需要花钱去考试或者搜集标注员的历史数据,没有免费的午餐

基于上述讨论,一个好的标签聚合方法应该具备如下特质

  1. 高聚合准确率
  2. 符合直觉的置信度
  3. 降低对先验的依赖

我认为贝叶斯推断是勉勉强强可以用,但是对这个领域了解比较少,简单搜索了下没找到更好的,如果有好想法也可以交流下

当这个项目做到后期,适配标签聚合方法的工作量是较大的。我也开始怀疑:标签聚合,真的是我们这个系统里的必要一环吗?还是我没事找事,给自己增加了额外的复杂度? 毕竟,在 CrowdAgent 的宏大叙事里,标签聚合算不上绝对的主线。

让我们看看其他工作是怎么做的:

  • FreeAL 里根本没有这一步,新的标注结果直接覆盖旧的,相当于把历史标签全部扔掉
  • 传统的主动学习 (Active Learning),很多做法也是如此,每一轮都基于当前最新的模型去打标签,同样不保留历史记录。

但“直接覆盖”这种做法,有一个很强的前提假设:我们能确信,标注过程是单调递进的,即后面的标注结果一定比前面的好。 在 CrowdAgent 这种复杂的、多源异构的调度系统里,这个假设不一定永远成立。所以,保留历史信息,做一次聚合,依然有它的价值

不过,总的来说,“直接覆盖”或者说“不聚合”,完全可以作为一个简单但强大的 Baseline。在很多情况下,它的效果可能已经足够好了。而对于更复杂的问题,比如 QA 任务,我们有一堆不同的句子作为答案,又该如何“聚合”呢?这本身就是一个开放的研究问题了。

关于人的价值

首先回顾下实验结论

  • 大模型主导的标注,就像一个知识广博的通才。由于前期有海量预训练知识的注入,它在项目启动初期就能快速达到一个不错的效果。
  • 人类主导的标注(主动学习),则像一个不断学习的专家。随着人类高质量知识的持续输入,它的性能曲线会稳步攀升,并最终在后期超越纯粹由大模型主导的流程。

从这个角度看,人的价值首先体现在“专家”二字上。对于那些有标准答案的问题,人类标注员必须提供比大模型更精准、更可靠的判断,才能体现其价值。反之,如果在评估中发现,人类的准确率还不如机器,那么在这类任务上,人的价值就无从谈起。

但如果问题没有标准答案呢?比如,判断一则评论的情感色彩,或者为一张图片撰写一段有创造力的描述。这时,人的价值就超越了“准确”,而在于提供人类特有的视角——我们的价值观、复杂的情感以及独特的行动方式。这些正是大模型需要持续学习,以变得更“像人”的核心养料。

这种趋势也体现在数据标注行业。一个明显的现象是,标注这个需求本身正变得越来越少,也越来越专业化。过去那种简单的选择题、拉框题的需求正在萎缩,取而代之的,是那些当前大模型还难以胜任的任务:复杂的视频理解、没有标准答案的主观判断,以及需要博士级别专业知识的领域标注。

这对于我们每个人的自我发展,都是一个深刻的隐喻:我们必须找到自己独特的、大模型难以替代的技能,这才是人的核心价值所在。 而大模型的发展方向,也正是努力去学习和复制这些专业技能。这本质上,是人类的专业化与 AI 的通用化之间的一场竞速。

然而,在我们讨论“质量”的同时,另一个维度的比较,让我发现了一个近乎荒诞的现象:在某些场景下,人类的价格,竟然比大模型还低。

举个例子,一个简单的图像分类任务,一个众包标注员的成本可以低至每张 0.1 元。而调用一个大模型,即便是轻量级的 GPT-4o-mini,其 API 成本折算下来也往往在 0.1 元左右。如果再加上 Few-shot 这类能提升效果的 Prompt 技术,成本会超过 0.2 元。

人类,竟然在和机器比拼谁的成本更低。 一个是靠吃饭输出答案,一个是靠用电输出答案。当人类作为一种服务,和 AI 模型被并排摆在同一个橱窗里,供客户按价选择时,这本身就是对“人”的价值的一次残酷重估。它赤裸裸地反映了在 AI 带来的极致效率面前,部分人类认知劳动的商品化趋势。

这场人类与 AI 在成本上的竞速,折射出了整个社会在 AI 时代的焦虑。人们都害怕自己的专长被轻易替代。但这或许也指明了方向:我们必须从“重复性的技能”中解放出来,去追求那些真正体现创造性、同理心和深度思考的价值。这既是数据标注行业的未来,或许也是我们每个人在 AI 时代安身立命的根本。

一些感悟:与自己和解

最后这个小节就和学术没什么关系了,我也是第一次写论文,其中有一些踩坑与教训简单总结下,希望能给正在或即将在科研道路上探索的朋友们一些慰藉和启发。

1. “第一版狗屎”

不用追求完美,先动手把它做出来,哪怕最初的版本在自己看来就是一堆“狗屎”。 无论是系统原型、实验代码,还是论文初稿,都是如此。我们总想在一开始就构思一个天衣无缝的框架,写出一段滴水不漏的文字,但这往往是拖延和焦虑的开始。先把核心功能实现,把主要想法写下,让整个流程能跑通,我们就已经完成了最困难的一步。很多当时看起来粗糙不堪的细节,都可以在后续迭代的过程中被轻松地打磨和修正。

2. 让写论文成为实验的“导航仪”

如果条件允许,可以试着让写作和实验并行。 很多时候,只有当我们开始动笔,试图用清晰的逻辑和语言向上帝视角(审稿人)阐述自己的工作时才真正明白:哪些部分是核心贡献,哪些实验是不可或缺的,哪些细节是需要展开的。我们自己埋头在代码和数据里纠结了半天的问题,在论文的全局叙事下一看,可能根本不足一提。写作能强迫我们跳出细节,从一个更高的维度审视自己的工作,这对于修正实验方向、避免无用功,有着不可替代的指导意义。

3. “小步快跑”应对不确定性

科研充满了不确定性,一个好想法可能在实验中不堪一击。与其花大量时间进行冗长的理论推导或构建复杂的系统,不如先用最简单的方式验证核心假设。这个小模块可行,再做下一个;这个 baseline 能跑赢,再加更强的。这种敏捷的开发和研究模式,能让我们以最低的成本验证想法,并根据及时的反馈灵活调整方向。

4. 带着“学习心态”去挑战 Baseline

尽早确定要和哪些 Baseline 进行比较。 当努力去复现一个强大的 Baseline 时,会深入理解它的优点和局限,这往往能给我们带来启发,让我们发现自己工作的独特价值,甚至可以借鉴其优点来改进自己的方法。把每一次与 Baseline 的“搏斗”,都看作是一次向高手请教的机会。

5. 照顾好那个“革命的本钱”

科研是一场旷日持久的马拉松,需要照顾好自己的身心健康。 从一个想法的萌生,到做实验、写论文,再到投稿和等待审稿结果,整个周期非常漫长,而正向的反馈却很少。当感到沮丧和疲惫的时候,可以去跑跑步、打打球,或者干脆约上朋友去人声鼎沸的地方走一走、凑凑热闹,把那个钻牛角尖的自己从屏幕前暂时解放出来。

本文由作者按照 CC BY 4.0 进行授权