2
8 Comments

How I stopped an LLM from inventing product details it couldn't see

Ask an LLM to write a listing from a product photo and it'll write a good one. That's the problem, it fills gaps. A used lens photo comes back described as "free of scratches and fungus." Fungus is inside the glass. You can't see it from any angle.

What I tried:

Telling it to be accurate. Barely helped. The model treats accuracy as a tone, not a constraint.

Regenerating bad output. Worked sometimes. That's the issue, sometimes. And you still need something to detect the output was bad, which is the hard part.

What actually worked: constrain generation to what's visually verifiable, then strip banned phrases after the fact. Not regenerate, delete. Deletion is deterministic, costs nothing, always works.

Fixing the output beat fixing the model's behavior. I wasted a lot of time trying to prompt my way to accuracy.

Built it into a tool if anyone wants to look: https://kelvix-c3p.pages.dev

Has anyone gotten prompting alone to work for this, or does everyone end up building a sanitization layer?

on August 15, 2026
  1. 1

    The lens example makes the failure mode very easy to understand. Curious how many of these unsupported details you typically see in an unfiltered output.

    1. 1

      Are you working on something in this space too, or dealing with it from the seller side?

      1. 1

        That pattern is interesting — especially the fact that stronger category priors seem to make the model more confident about filling gaps. I’m not building in this space directly, but I work around these kinds of product questions. Happy to continue the conversation if you’re interested.

        1. 1

          Happy to keep going. What's your angle on it — are you on the model side, or dealing with the downstream consequences when the output is wrong?

          The reason I ask is that those two views produce completely different priorities. From the model side the interesting question is how to constrain generation. From the downstream side it's more about detection and cleanup, because you're inheriting output you didn't control and can't regenerate.

          I ended up mostly on the second side, which is why deletion beat regeneration for me. But I'd be curious whether that holds if you actually own the generation step.

          1. 1

            That’s a pretty clear pattern. I’d be interested in continuing the conversation around the downstream side of it. If you’re open to it, what’s the best email to reach you at?

            1. 1

              Sure! kelvixlabs@gmail.com works — happy to keep the conversation going there.

              1. 1

                Thanks! I’ve just sent it over.

                Looking forward to hearing your thoughts whenever you have a chance.

    2. 1

      Depends a lot on the category, but for used gear like that lens it was usually two or three unsupported claims per listing, and almost always the same types.

      Condition claims about parts you can't see from outside were the most common by far. Anything internal, anything about how it functions, anything about history like servicing or storage. Specs came second, mostly measurements and sizes that a model can guess plausibly because it knows what that product category usually has.

      The pattern I noticed is that it isn't random. The model fills the gaps a real listing would normally have filled. So the more standard the product category, the more confidently it invents, because it has a strong prior about what should be there.

      Handmade or one-off items were actually safer in a weird way. Fewer conventions to pattern-match against.