Robert Važan

Tasks for LLMs should be broad and shallow

When talking about limited intelligence of contemporary LLMs, I briefly mentioned that LLMs benefit from broad and shallow tasks. Here I expand on why I think so and what that means in practice, especially in the context of software development.

Just to be clear:

Why broad and shallow?

What about tasks with uneven difficulty?

I am talking about software development, which necessarily involves tasks that have a wide spread of difficulty within the same task. That's not ideal, because LLMs get overwhelmed in the most complex parts of the code and that's where all the bugs are going to be.

To deal with this, I level the task description. I add more detail to the specification where the task has too much depth. Conversely, I let the LLM guess defaults where the task is shallow. During code review, I pay more attention to code that is difficult and only skim over trivial changes.

Difficult tasks in programming cannot be avoided entirely. Sometimes you have to do something manually. In the end, programming always benefits from a larger, smarter model.

Examples

Here are a few examples of broad and shallow programming tasks:

More complicated tasks usually have a specification with 5-20 bullet points, each containing a clear command or constraint. System prompt is structured similarly. Formulating the specification as a list also lets me attach smaller unrelated tasks to the main task without having to issue another LLM request.