Benchmarking Real Work

Thanks to Megan Kinniment for helpful comments and discussion.

TL;DR: Benchmarks like HCAST undersample fuzzy (hard to evaluate) tasks, meaning they might overestimate capability on long-horizon work. To sample fuzzy tasks we need to increase judge capacity: we can either try to build automated judges that match human judgment, or reduce the human effort per grade. To do this, we propose generating fuzzy tasks as a byproduct of real SWE work — snapshot the repo and a proto-spec before starting, and after finishing, use an AI transform to produce an executable spec and LLM-judge conditions. Because the engineer just did the work, verifying the judges or grading the agent directly is much cheaper than grading the task from scratch. I think this would be a good way to collect tasks, as well as a useful personal epistemic tool.

This is a two-part series on capability evaluation. Part 1 is about acquiring fuzzy tasks, and part 2 is about analyzing them.

Motivation: sampling bias in HCAST

There are several well-described limitations of time horizons. But the strongest reason that I don’t update that much on trends in time horizons (and time horizon-like tasks) is because I think all existing evaluations undersample fuzziness in their tasks. [1]

Call a task fuzzy to the degree that it's hard to evaluate. It can be fuzzy because it's not clear what the goal is or because, even if you know the goal, it's hard to check whether it was achieved or not. I think that long-horizon human software work is more composed of these kinds of tasks. So the set of long-horizon tasks that get benchmarked is going to systematically undersample fuzziness, since fuzzy tasks are hard to grade and don't make it into benchmarks in the first place.

Models also tend to be much better at doing tasks where there's a hill-climbable signal — i.e., tasks where the model can assess whether it's completed the task adequately by itself (this is a common lore claim, but its supported by impressive model results on verified tasks like math and MirrorCode). This condition is slightly stronger than the condition that makes a task nice to benchmark, but many benchmark tasks are hill-climbable. As a result, the benchmark distribution has a sampling bias that pushes towards overestimating model capability. The obvious mechanism for this model skill is that hill climbable tasks make for good RL environments.

Supporting anecdata: models seem to do worse on tasks that are manually graded.

Making fuzzy tasks sampling viable by increasing judge capacity

We'd obviously like to sample these fuzzy tasks. The problem is grading them.

One gold standard for grading fuzzy tasks is human qualitative grading. For instance you could ask maintainers to determine whether or not they would merge an AI-generated PR, or which of two PRs is better.

But often it is difficult to invest the time and effort required to have a human-grade task, particularly if you want the task to be repeatable. One guideline to aim at is that we want total grading cost over a task's lifetime to stay on the order of its baselining cost — which, at ~5% per grade, gives ~20 .[2] This can be easier than it seems, as the tasks that require the most human effort to grade are ones that are marginal pass/fails: clear failures are easier to deal with.

So the technical problem is: ideally, build automated judges that match human judgement on these tasks; failing that, reduce the human grading effort required to grade the tasks. Both of these can be seen as increasing the capability of our grading system, so that we can get some signal from fuzzy tasks.

Proposal: sampling from real work

One way to get fuzzy tasks at scale is to have engineers and researchers generate them as a byproduct of their normal work.

Concretely, here is a pipeline for doing so, which we've been experimenting with recently:

  1. Snapshot the initial state of the repo (or whatever you're working on) and write down your broad intent. This is what we call a proto-spec, as opposed to the spec of a task, which is done in much more detail.
  2. Work on the task for a while, eventually finishing up. At that point, snapshot the solution, run an AI transform to (a) turn the proto-spec into a more maximal version of the spec that can be reasonably executed by some agent, and (b) produce judging conditions that another LLM can evaluate (this is somewhat difficult, and requires human attention). You can also use human labor (perhaps of the task doer) here to look at the conditions and verify that they are sensible.
  3. Run an agent on this task.
  4. Grade
    1. Either using the LLM-as-judge conditions outlined above
    2. Or with the additional judging labor of the doer of the task

Advantages

Since these real work tasks were collected from real human work where the human has just completed that work, it should therefore be possible for the human to say whether the work done by the agent was of equal quality in most meaningful ways. For instance, the grading human could grade on the bar of whether or not the work done was literally substitutable for their own work, in which case I expect people would be able to make a judgement in less than 5% of the time required to “make” the task (i.e do the work and adjust the automated judges).

In the best case, the automated judges are capable of entirely autonomously judging the task, in which case the task is rerunnable with no variable human judging cost.

Overall, I think this scheme provides a good source of fuzzy tasks, and also allows people to get better personal calibration on what models are capable of.

Discussion

How inconvenient is this?

I think this is likely not that much of an inconvenience, for two reasons. First, it tells you what the current frontier can one shot for you in real work. Second, the tasks allow you to optimize your own agent workflow.

Can we test fuzzy skills by just testing longer tasks?

Of course, there remains the concern that many tasks (such as writing strategy docs or doing exploratory research) are not very amenable to automated rubric design or easy human evaluation. This means that we will still likely not be able to sample the fuzziest task.

One potential solution to this problem is incorporating the fuzziness as part of a larger task. That is, even if we can’t sample the fuzziest of tasks, we can still measure the ability to effectively perform fuzzy work by measuring performance on larger tasks. For example, if you task an agent to satisfy some ambitious research goal, it will be forced to do a lot of prioritization, resource management, etc, even if the goal is relatively clear. I think benchmarking real work will also provide a good source of these tasks.[3] 

  1. ^

    This is definitely not a novel critique of benchmarks.

  2. ^

     These rough targets are courtesy of Thomas Kwa.

  3. ^

    Of course, this means that normal long-horizon benchmarking still has hope of testing fuzzy skills as well. However, I think qualitatively this sort of scheme will allow us to evaluate fuzzy skills more easily than making long tasks. In the worst case these sorts of evals are very expensive.



Discuss

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top