Skip to content
Announcements2 min read

Potato 2.6:定性数据分析遇上智能体评估

Potato 2.6 发布:用于定性编码的 QDA 模式、LLM-as-judge 校准与对齐工作流、可生成 SFT 与 DPO 训练数据的轨迹编辑、启动速度提升 3 倍,以及重新授权为 GPL-3.0-or-later。

Potato Team

Potato 2.6 发布了。这是一个有两个重心的版本。一方面,它把 Potato 带入了定性数据分析的领域——访谈记录、编码本和备忘录这个一直由专有桌面工具主导的世界。另一方面,它让智能体评估工具集更进一步,开始生成训练数据,而不只是给出分数。在两者之下,它的速度有了实实在在的提升,授权方式也发生了变化。

如果你一直在关注,过去几周的文章已经逐一预告了这些功能。这个版本就是把它们正式交付的版本。

Potato 2.6,在定性数据分析与智能体评估之间一分为二Potato 2.6

先说一句:Potato 现在采用 GPL-3.0

Potato 已重新授权为 GPL-3.0-or-later,取代原先的 PolyForm Shield。这类变化很容易被一笔带过,但不应如此,因为它改变了你被允许用这个项目去做的事情。

在 GPL-3.0-or-later 下,你可以使用、修改和再分发 Potato,包括用于商业用途,只要衍生作品仍保持在 GPL 之下。原先的 PolyForm Shield 许可证带有竞业限制条款,让一些采用者(以及他们的法务团队)有所顾虑。GPL 是这些团队早已熟悉的许可证。如果某个授权问题一直拖住了你的实验室或公司,那么这个问题现在有了一个大家都熟悉的答案。详情请见关于页面

QDA 模式

对定性研究者而言,最重磅的是 QDA 模式:一个开关,就能把 Potato 变成一个协作式的定性编码工作区。

yaml
qda_mode:
  enabled: true            # codebook + memos + cases + search
codebook_invivo_key: i     # mint a code from a text selection

启用它,就组合出了一份动态编码本、in-vivo 编码、分析者备忘录、案例以及全文搜索,默认配置专为单个分析者对整个语料库进行编码而调优。你可以在阅读过程中扩充和重组编码本,用一个按键直接从高亮段落创建一个编码,为任何摘录附加私有或共享的备忘录,按参与者把摘录归入案例,并在整个语料库上运行 FTS5 搜索。它是一个免费、开源、基于 Web 的替代品,可替代 NVivo、ATLAS.ti、MAXQDA 和 Dedoose,并与你其余的标注工作共处于同一个工具中。

我们在把定性编码带入 Potato中介绍了它的设计。完整参考:QDA 模式文档

LLM-as-judge:校准、对齐与分诊

用 LLM 来评判模型输出如今已是常规做法。该在多大程度上信任它,才是 2.6 所要解决的问题,它用三个协同工作的功能来回应。

**Judge Calibration(评判者校准)**用一个或多个 LLM 评判者自动标注你的数据,对每条数据采样 k 次以得到经验置信度,然后进行一轮盲审人工标注(标注者从不看到模型标签),并报告准确率、Cohen's 和 Fleiss' kappa、Krippendorff's alpha 以及预期校准误差。它用你可以拿来辩护的数字回答了“我该不该信任这个评判者?”。我们在你能信任你的 LLM 评判者吗?中作了介绍。

**Judge Alignment(评判者对齐)**针对你的人工金标签来调校单个评判者,在你完善评分细则的过程中追踪 Cohen's kappa,并可在标注时于人工标签旁内联显示一个可选的判定结果。

**The Triage Queue(分诊队列)**依据每条数据的某个信号(智能体的一次错误、生产环境中的一次点踩、一个偏低的分数)对标注队列排序,让审阅者优先看到最可疑的轨迹,而不是按到达顺序逐一处理。

yaml
triage:
  enabled: true
  signal_field: quality_score
  invert_signal: true
assignment_strategy: priority

对齐与分诊组合成了一个主动评估循环,我们在闭合循环中走过了这个流程。参考文档:Judge CalibrationJudge AlignmentTriage Queue

用于 SFT 和 DPO 的轨迹编辑

新的 trajectory_edit 模式让标注者可以重写一条智能体轨迹中的各个步骤,并配有实时的词级 diff,用于修正一个错误的推理步骤、修复一次工具调用,或强化最终答案。随后,trajectory_correction 导出器会把每一对原始/修正后的结果转化为训练数据:在 trajectory_sft.jsonl 中生成监督微调目标,在 trajectory_dpo.jsonl 中生成 DPO 偏好对。未经编辑的轨迹会被跳过,因为在一条未改动的轨迹上训练什么也教不会。

这让 Potato 成为一个训练数据生产工具,而不只是评估工具。完整演练见从评估到训练数据;参考见轨迹编辑文档

eval_trace 显示

快速读懂智能体轨迹本身就是一个难题。新的 eval_trace 显示把单条轨迹拆分成三个同步的窗格(推理、函数调用和最终答案),让评估者一眼就能看到智能体想了什么、做了什么、产出了什么。它是为持续评估而构建的——轨迹通过 webhook、Langfuse 轮询器或一个被监视的目录陆续到达,并需要在落地时被评判。参见 eval_trace 文档

工作流与部署

一批运维相关的功能为这个版本收尾:

  • 异构覆盖。 为不同条目分配不同数量的标注者:大多数条目分配一人,分层抽样出的样本分配三人,并带有自适应的分歧加成与自动的仲裁路由。详见超越完全重叠;参考见异构覆盖文档
  • 回收被弃置的任务。 找回被 Prolific 或被 QC 拦截的工作者留下的条目,支持可配置的保留期与幂等回收。参见任务分配
  • 自定义批次分配。 把预定义的条目批次分配给特定的标注者,专为多轮重复的研究设计而打造。
  • 反向代理 URL 前缀。 在反向代理后以子路径提供 Potato 服务。参见反向代理文档

更快,以及一次模式重命名

有两项变化影响每一个项目。

启动速度大约提升 3 倍。 机器学习相关的依赖栈不再在启动时被急切加载,而是改为在首次使用时才加载。导入时间从约 6.5 秒降到 2 秒,一个 50,000 条目的启动从约 10 秒降到 5.7 秒,常驻内存从约 750MB 降到 365MB。容器重启更快了,水平扩展的内存占用也大约减半。

annotation_type: highlight 现在改为 span 已经内置了迁移机制,现有的 span 配置不受影响。请通过重命名该类型来更新旧配置。“span”是整个 NLP 领域的标准术语,这次重命名让该标注类型与之保持一致。

补课:2.5 与 2.4.5

在 2.4 与 2.6 之间有几个版本发布时没有在这里写过文章。它们的亮点值得点出,尤其是其中的定性编码工作是 QDA 模式的基础:

2.5.0 是定性编码的浪潮。它在 Krippendorff's alpha 之外新增了 Cohen's kappa 和 Fleiss' kappacodebookquotation_report 导出器,以及用于编码共现的管理员分析和一个按属性分列的编码交叉表。这些正是 QDA 模式所依托的可靠性与导出组件。

2.4.5 带来了一个经过验证的细化框架,用于在单人模式下改进标注指南,一个配置验证器 CLI(python -m potato.validate_cli),以及一个针对路径遍历绕过的安全修复(GHSA-q9m2-fhv9-3jcf)。如果你还在较旧的 2.4.x 上,升级即可获得该修复。

完整的历史记录在更新内容页面

获取它

bash
pip install --upgrade potato-annotation

然后让 Potato 指向其中一个内置示例(examples/advanced/qda-mode-example/examples/ai-assisted/judge-calibration/examples/agent-traces/trajectory-correction/),就能看到这些新界面运行起来。这里的每一个版本,最初都源自某位使用者提出的一个问题;如果 2.6 让你产生了一个问题,GitHub 仓库就是提问的地方。