🚧 Designers never finish their own portfolio. This one ships rough on purpose and gets better in public. If something looks half-done, it probably is, and I'm on it.🚧 Designers never finish their own portfolio. This one ships rough on purpose and gets better in public. If something looks half-done, it probably is, and I'm on it.🚧 Designers never finish their own portfolio. This one ships rough on purpose and gets better in public. If something looks half-done, it probably is, and I'm on it.🚧 Designers never finish their own portfolio. This one ships rough on purpose and gets better in public. If something looks half-done, it probably is, and I'm on it.🚧 Designers never finish their own portfolio. This one ships rough on purpose and gets better in public. If something looks half-done, it probably is, and I'm on it.🚧 Designers never finish their own portfolio. This one ships rough on purpose and gets better in public. If something looks half-done, it probably is, and I'm on it.
Open menu
Switch to Darkhello@product.inc

Model output as structure, not prose

Tags: extraction, facets, navigation

A model emits prose, so products render prose. But prose is terminal β€” it is read once and finished. Structure is generative: it sorts, filters, groups, cross-references, and composes with everything else already on the screen.

The leverage is wildly different

One paragraph answers one person's question once. The same model call, spent extracting a property across the whole set, produces something every user navigates by β€” including the ones who would never have thought to ask.

That asymmetry is the argument. It is not that prose is bad; it is that prose is the default, the default is chosen by what the model happens to emit, and nobody is comparing it against the alternative.

So the question to put to any generated output: is there something this model could return that becomes navigation rather than reading?

Run it at ingest, not at query time

This is the part that decides whether you get navigation or just a faster answer.

Extraction performed per question can only ever serve that question. Extraction performed once per item, as things arrive, accumulates into a property of the whole collection β€” and a property of the collection is a thing the interface can be built on.

It is also the cheaper arrangement, which is pleasant: one pass per item forever, rather than one pass per item per question.

Structure is held to a higher bar than prose

The catch, and it is a real one.

A paragraph that is twenty percent off is mediocre. A reader discounts it, notices the hedging, moves on. A tag that is twenty percent wrong poisons every filter built on it β€” and poisons it invisibly, because a filter returning the wrong set looks exactly like a filter returning the right one. The user concludes there are no green specimens, not that the tagging is unreliable.

Structure gets operated on as though it were true. Prose gets read as a claim. That difference means extraction needs an accuracy bar prose never does, which is also why evaluation loops belong here specifically: a fixed set of items with known-correct facets is the cheapest eval in this whole family, and the only way to know whether the navigation you built is standing on anything.

Two corollaries:

Where prose is the answer

Rendering diagram…

Do not force structure onto something whose value is the reasoning. A summary shredded into fields loses the thing that made it a summary. The test is whether the connective tissue is carrying the meaning β€” if it is, leave it as prose and spend the structure budget elsewhere.

Grounded in

EarthWonders and RockStore auto-tag the dominant colour of a specimen from its listing photographs.

Colour is the example worth thinking about because nobody would type it. A collector does not search for green β€” they would not think of it as a search, and the vocabulary does not come naturally. But shown a strip of colours, they click one immediately, and it turns out to be one of the most natural ways to browse minerals there is.

That is the shape of the opportunity. The model call did not answer a question anyone had asked. It produced a way through the catalogue that did not previously exist, available to every visitor, from photographs the sellers were uploading anyway.

A note on the neighbouring pattern

This sits next to the retrieval structure is not the interface, and read quickly the two look opposed: one says ship structure, the other says hide it.

The line between them is whose vocabulary it is in. A facet the user would recognise is an interface. An artifact only the system recognises is machinery. Colour is a property of the specimen; an embedding distance is a property of the index. Extract the first into the interface and keep the second underneath it.

Anti-patterns

The smallest version worth building

Pick one property that holds across everything in the collection and that a user would recognise. Extract it at ingest for every item. Put it in the interface as a filter or a browse axis.

Then test it on twenty items you know the answer for, before anyone navigates by it.