Simply match curly brackets
Making LLMs output JSON is a common problem, and making them
only output the JSON is a surprisingly large part of it. While
some commercial LLMs were trained on the task, others will say "Here's
the output in JSON format:" regardless of your prompt, sabotaging your
efforts to JSON.parse
the output.
The most complicated solution is structured outputs. You could also just
use a {
prefill to get most of the structured outputs
effect. But a simpler solution is something like
const jsonText = text.slice(text.indexOf("{"), text.lastIndexOf("}") + 1);
This has the benefit of letting the LLM think before responding, since
it matches an object anywhere. Of course, you can adapt this to
work with array responses by using [
and
]
instead of curly brackets, and you can rewrite this to
port it to a different language.
That's the post. Sorry if you expected something longer.