DSPy Assertions: Computational Constraints for Self-Refining Language Model Pipelines
Arnav Singhvi, Manish Shetty, Shangyin Tan, Christopher Potts, Koushik Sen, Matei Zaharia, Omar Khattab
TL;DR
LMs often produce outputs that violate application constraints; the paper introduces LM Assertions as a programming primitive to enforce computational constraints in LM pipelines. By integrating LM Assertions into DSPy, the authors demonstrate three assertion-driven optimizations—backtracking, example bootstrapping, and counterexample bootstrapping—that enable self-refinement and principled prompt optimization. Across four knowledge-intensive tasks derived from HotPotQA, LM Assertions improve constraint compliance and downstream performance, with substantial gains in both intrinsic and extrinsic metrics. The work provides a practical, extensible framework for building more reliable, self-correcting LM pipelines.
Abstract
Chaining language model (LM) calls as composable modules is fueling a new way of programming, but ensuring LMs adhere to important constraints requires heuristic "prompt engineering". We introduce LM Assertions, a programming construct for expressing computational constraints that LMs should satisfy. We integrate our constructs into the recent DSPy programming model for LMs, and present new strategies that allow DSPy to compile programs with LM Assertions into more reliable and accurate systems. We also propose strategies to use assertions at inference time for automatic self-refinement with LMs. We report on four diverse case studies for text generation and find that LM Assertions improve not only compliance with imposed rules but also downstream task performance, passing constraints up to 164% more often and generating up to 37% more higher-quality responses. Our reference implementation of LM Assertions is integrated into DSPy at https://github.com/stanfordnlp/dspy
