{"id":111218,"date":"2026-07-19T18:07:13","date_gmt":"2026-07-19T18:07:13","guid":{"rendered":"https:\/\/www.europesays.com\/ai\/111218\/"},"modified":"2026-07-19T18:07:13","modified_gmt":"2026-07-19T18:07:13","slug":"nick-ung-lyft-most-ai-agent-evaluations-produce-noise-heres-how-to-build-ones-that-actually-ship-code-biggo-finance","status":"publish","type":"post","link":"https:\/\/www.europesays.com\/ai\/111218\/","title":{"rendered":"Nick Ung, Lyft: Most AI Agent Evaluations Produce Noise \u2014 Here&#8217;s How to Build Ones That Actually Ship Code \u2014 BigGo Finance"},"content":{"rendered":"<p>Nick Ung has a blunt diagnosis for the state of AI agent evaluation across the industry. &#8220;If your LM-as-a-judge is just floating out there and no one is really using that score as a meaningful gate,&#8221; he said, speaking on the AI Engineer podcast alongside product manager Ashe, &#8220;then that LM-as-a-judge is not available.&#8221; The two Lyft data science veterans have spent two years building the evaluation infrastructure behind the company&#8217;s customer support AI, a multi-agent system built on LangGraph. What they learned along the way amounts to a systematic critique of how most organizations test their AI agents \u2014 and a concrete blueprint for doing it right.<\/p>\n<p>The problem, as Ung and Ashe describe it, is not that companies skip evaluation entirely. It is that the evaluations they run do not drive decisions. Scores float in dashboards without triggering rollbacks. Metrics like &#8220;response helpfulness&#8221; produce numbers that nobody knows how to act on. And teams skip the foundational work of looking at raw production data before writing evaluation criteria. The pair&#8217;s core insight is deceptively simple: an evaluation system must be built from the ground up as a launch gate, not a post-hoc report card.<\/p>\n<p>The Three Ways Agent Evaluations Fail<\/p>\n<p>Ung distilled the failure modes into a clear taxonomy. First and most damaging: the absence of a launch gate. If a score exists but no process uses it to block or approve a release, the evaluation is decorative. Engineering teams ship changes, the score fluctuates, and nobody connects the two. Second: generic, noisy judges. Lyft&#8217;s own early attempts leaned on pre-built metrics from the open-source DeepEval library \u2014 response helpfulness, conversation naturalness, and similar dimensions. &#8220;Those metrics were not actionable,&#8221; Ung said. &#8220;If response helpfulness is 0.5, then what do we do with it?&#8221; The judge became noise that eroded trust across the organization. Third: no regression detection mechanism. Without a clear system to catch degradations in production and assign ownership, even well-designed evaluations decay in relevance.<\/p>\n<p>The dependency chain Ung laid out is unforgiving: &#8220;If you don&#8217;t look at the data, you won&#8217;t be able to create meaningful criteria or labels. And if you don&#8217;t have labels, you won&#8217;t be able to evaluate your judges. And if you are not evaluating your judges, you don&#8217;t know if your agentic pipeline is working as expected.&#8221; Every link in that chain is load-bearing, and Ung argued that most teams break it at the first step \u2014 skipping raw data analysis in favor of importing someone else&#8217;s evaluation template.<\/p>\n<p>Why Your Test Users Are Too Polite<\/p>\n<p>Even when teams build custom evaluations, the simulations themselves often lie. Lyft&#8217;s offline simulator was inspired by the Taobench paper from Sierra AI, which proposes a three-component architecture: a user language model that roleplays a customer, an agent language model that handles the interaction, and a judge that scores the full conversation trajectory. But Lyft&#8217;s first implementation produced results that were, as Ashe put it, &#8220;too good to be true.&#8221;<\/p>\n<p>The initial user simulator used a frontier model \u2014 GPT-4 class \u2014 prompted to behave as a Lyft customer. The bot it produced was unfailingly polite and verbose, patiently explaining issues in complete paragraphs. Real Lyft users, by contrast, send messages like: &#8220;I reported a lost item yesterday. Still no update. This is ridiculous. I need a human now.&#8221; The gap between simulated and real user behavior inflated the agent&#8217;s offline pass rate to roughly 90%, a number that bore no relationship to production performance.<\/p>\n<p>The fix was to fine-tune the user language model on actual production verbatims. After training on real customer messages \u2014 terse, impatient, frequently angry \u2014 the simulated users began producing realistic dialogue, and the pass rate dropped to an honest level. &#8220;If you have an eval that&#8217;s too easy, that doesn&#8217;t give you any real production insights into how your AI agent is actually going to perform,&#8221; Ashe noted.<\/p>\n<p>To capture behavioral diversity, the team also built user personas inspired by Microsoft&#8217;s UserAlien research:<\/p>\n<p>PersonaBehaviorBypasserImmediately tries to escalate; refuses to interact with AIRefund seekerDemands financial compensation; tests escalation boundariesAI skepticRepeatedly questions the bot&#8217;s ability; insists on human verification<\/p>\n<p>These personas ensure the simulator covers the long tail of real user behavior rather than defaulting to a single, unrealistically cooperative archetype. Lyft also deploys deterministic, code-based assertions alongside language model judges \u2014 verifying, for example, that a refund was actually granted by checking the agent&#8217;s tool calls against expected values. These function like unit tests for agent behavior: fast, unambiguous, and impossible for a language model to fudge.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.europesays.com\/ai\/wp-content\/uploads\/2026\/07\/9964d2cf12e70e8e_1784472302_inline_2.jpg\" alt=\"\"\/><\/p>\n<p>Binary Judges Beat Generic Scores<\/p>\n<p>The most consequential decision Lyft made was abandoning graded, multi-dimensional scores in favor of task-specific binary outcomes. Ashe and Ung argued that the only way to make a language-model judge consistently useful is to define pass\/fail rubrics in close partnership with domain experts. An &#8220;education rubric,&#8221; for instance, measures whether the agent escalated too soon or attempted to educate the user too many times. The judge outputs a single bit: pass or fail.<\/p>\n<p>This reframing transforms the evaluation problem into a familiar one: classifier validation. The process Lyft follows mirrors traditional machine learning workflows. Domain experts label roughly 100 examples with ground-truth pass\/fail judgments. The data is split into few-shot examples for the judge&#8217;s prompt, a development set, and a held-out test set. The team iterates the judge&#8217;s prompt against the dev set, measuring precision and recall at each step, then validates against the test set. &#8220;We can use these pre-built eval metrics as a baseline, but we shouldn&#8217;t use them as our core eval metrics because we want eval metrics to be actionable and tied to the business outcome,&#8221; Ashe said.<\/p>\n<p>There is a deeper point embedded in this methodology. Ashe stressed that evaluation criteria cannot be defined upfront and frozen. &#8220;We cannot define the criteria beforehand and then evaluate agents against them,&#8221; she said. The notion of quality evolves as more examples are graded and new failure modes emerge. Criteria must be co-developed alongside the model, refined continuously through observation rather than locked in at project kickoff. This principle cuts against the instinct to write a rubric once and automate everything downstream.<\/p>\n<p>Every Score Needs an Interval<\/p>\n<p>One of the most preventable errors Ashe identified in evaluation reporting is the bare point estimate. A four-point gain on only 50 samples \u2014 say, from 84% to 88% \u2014 tells leadership nothing without a confidence interval. The improvement could be real or entirely random. &#8220;We can reserve the expensive rigor for the moments when the number actually gates something,&#8221; Ashe said, &#8220;but every score needs an interval.&#8221; The team advocates for proper sampling and paired experimental designs to detect true improvements, reserving the deepest statistical work for launch-gating decisions while maintaining baseline rigor across the board.<\/p>\n<p>This discipline connects directly to the actionability principle. Ashe described a ruthless filtering process: &#8220;We only keep the metrics that change a decision. We remove all the noise.&#8221; If a metric fluctuates without ever triggering a different course of action \u2014 a rollback, a prompt change, a retraining cycle \u2014 it has no place in the dashboard. The goal is not comprehensive measurement; it is decision-quality signal.<\/p>\n<p>The Error Analysis Loop Never Stops<\/p>\n<p>Ashe was unequivocal on this point: &#8220;The error analysis loop is something which runs continuously. It&#8217;s not a one-off audit.&#8221; The loop follows a disciplined cadence \u2014 weekly or bi-weekly \u2014 starting with deep dives into raw production traces, pinpointing specific failure modes, and forming fresh premises about what needs to improve. Those premises feed back into three distinct improvement levers:<\/p>\n<p>LeverScopeExampleModel learningPost-training, updating model weightsFine-tuning a model for a specific customer-support taskContext learningImproving what the agent seesUpdating knowledge bases, memory storesHarness learningUpgrading system prompt, tool schemas, control flowChanging routing logic, retry policies<\/p>\n<p>The distinction between these levers matters because teams often collapse them into a single bucket \u2014 &#8220;make the model better&#8221; \u2014 when the fix might actually live in the context the agent receives or the control logic governing its behavior. Lyft&#8217;s error analysis loop is designed to route failure modes to the correct lever, not default to model retraining as the universal remedy.<\/p>\n<p>Underpinning the entire loop is a practical infrastructure requirement: annotation queues. Domain experts need a clean interface \u2014 the team mentioned LangSmith and Langfuse as examples \u2014 where they can label traces and those labels flow directly into the evaluation pipeline. Without this, the loop breaks. Experts cannot efficiently review data, labels stop arriving, judges degrade, and the whole system loses calibration.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.europesays.com\/ai\/wp-content\/uploads\/2026\/07\/9964d2cf12e70e8e_1784472388_inline_5.jpg\" alt=\"\"\/><\/p>\n<p>From Scattered Scripts to a Config-Driven Harness<\/p>\n<p>When Lyft first built its offline simulator, the codebase was, in Ashe&#8217;s description, &#8220;scattered as scripts across different notebooks.&#8221; The team is now building a systematic eval harness with several design principles. Configuration lives in YAML files that analysts and data scientists can edit without touching engineering code. The harness is built around primitives \u2014 task, dataset, persona, language model adapter, evaluator \u2014 that compose into test suites. It supports parallelism capable of handling &#8220;thousands if not tens of thousands of examples&#8221; in reasonable time. And it integrates at multiple gates: local development, pre-commit hooks, CI\/CD pipelines, and a dedicated regression test suite.<\/p>\n<p>Looking ahead, Lyft is exploring two frontiers. The first is post-training: with thousands of real user signals now collected, the team is investigating fine-tuned models for specific customer-support tasks and framing reward modeling to enable reinforcement learning. The second is cross-agent standardization \u2014 unifying evaluation for all sub-agents in the multi-agent system so that a regression in any component is immediately traceable and attributable.<\/p>\n<p>The cost question looms over this entire architecture. Fine-tuning a user language model, running thousands of multi-turn simulations, and maintaining annotation queues staffed by domain experts is expensive. Lyft&#8217;s bet is that the alternative \u2014 deploying agents without trustworthy evaluation \u2014 costs more in the long run, in degraded customer experience and engineering fire drills. For teams building user-facing AI agents, Ung and Ashe&#8217;s framework sets a new bar: if your evaluation does not gate a launch, surface a specific failure mode, and feed directly into an improvement loop, you are not really evaluating at all. You are generating numbers that nobody will ever use to make a decision.<\/p>\n","protected":false},"excerpt":{"rendered":"Nick Ung has a blunt diagnosis for the state of AI agent evaluation across the industry. &#8220;If your&hellip;\n","protected":false},"author":2,"featured_media":111219,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[405,53707,7537,57184,57186,9396,57189,57185,57188,20588,57190,57183,51680,57187],"class_list":["post-111218","post","type-post","status-publish","format-standard","has-post-thumbnail","category-agentic-ai","tag-ai-agents","tag-ai-engineer-podcast","tag-artificial-intelligence-agents","tag-ashe","tag-deepeval","tag-gpt-4","tag-langfuse","tag-langgraph","tag-langsmith","tag-lyft","tag-microsoft-useralien","tag-nick-ung","tag-sierra-ai","tag-taobench"],"_links":{"self":[{"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/posts\/111218","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/comments?post=111218"}],"version-history":[{"count":0,"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/posts\/111218\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/media\/111219"}],"wp:attachment":[{"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/media?parent=111218"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/categories?post=111218"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.europesays.com\/ai\/wp-json\/wp\/v2\/tags?post=111218"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}