Full Transcript

·YouTLDR

How Lyft Builds Evals That Actually Matter in Production | Interrupt 26

17:05EnglishTranscribed Jul 23, 2026
0:05

>> Hello, everyone.

0:09

Happy Wednesday.

0:10

It's the middle of the week.

0:12

So for those of you who don't know me, my name is Nick.

0:17

I lead the data science and machine learning function for safety and customer care at Lyft.

0:22

And my team has been building AI Assist, which is our customer care AI agent product for

0:29

years. And I'm here to talk to you about how we built an eval system that actually helps

0:37

to scale AI agents in production. So maybe just a quick show of how many of you here

0:43

ship agents without eval. I'm literally guilty of that, so don't be embarrassed. I know it's

0:50

one of those things that we always forget about, but really shouldn't. Hopefully, you

0:57

know, Lyft doesn't need any additional introductions.

1:00

Hopefully everyone in the room knows Lyft,

1:03

but just a couple of statistics about Lyft.

1:06

You know, we have 79 million trips per month,

1:10

and our AI Assist chat today has served about 270,000

1:15

AI interactions per month.

1:18

We've been able to build seven AI agents

1:20

and more in production.

1:22

Our deflection rate is 65%,

1:25

and AI resolution rate is at 35%.

1:28

35% might seem a little bit low,

1:31

but we really hold ourselves to a very high bar.

1:33

We want the agents to solve the customer issue

1:37

fully end to end, and not just block the customer

1:40

from reaching support.

1:42

I'm sure you all have experienced that with support chatbots.

1:47

So I'm going to quickly walk you through AI Assist's journey.

1:51

We started this journey in 2024.

1:55

We used very simple deterministic logic back then.

2:00

So imagine if you say A, the bot is gonna say B back to you,

2:04

but we all know how LLMs have really transformed the space.

2:09

And with eval, we have been able to build

2:12

more than seven AI agents in the past.

2:15

And our resolution rate has really gone up

2:18

from 10% to 35% and climbing.

2:23

Just to give you a sense of what type of AI agents

2:25

we're building at Lyft — for riders,

2:27

we have agents that handle charges disputes.

2:30

Unpleasant experiences.

2:32

If you ever have a Lyft driver that smokes in the car,

2:35

you can report to us.

2:37

On the driver side, you know,

2:39

we have automated damage claim processing,

2:42

compliance status, yada yada — taxes.

2:45

We love doing that.

2:49

I also just want to show a couple of

2:52

really interesting agents that I thought were really cool

2:55

that we built.

2:57

And also shout out to Akshay and Sutanda,

3:00

probably down here, who are on my team

3:02

and built this AI agent.

3:04

We have this agent on the driver side

3:06

that is a multi-modal, complex AI agent

3:09

that when a driver uploads photos of their damage claim,

3:13

we get back to them in about 15 minutes

3:15

with a claim decision.

3:17

On the rider side, we have an agent

3:19

that literally processes 80-plus automation rules

3:22

and refund logic in the back end

3:25

and is able to contextually — based on what the rider

3:28

is telling us and what their situation is —

3:31

explain our refund decision to them

3:33

in a very seamless way.

3:35

And all that is to say:

3:37

we wouldn't have been able to ship so many AI agents,

3:41

or test and make sure that such complex AI agents

3:44

actually perform in production,

3:46

without a great eval system.

3:50

So those of you who ship agents without eval,

3:54

reconsider that decision.

3:58

Cool, so I'm not gonna walk you through

4:01

AI Assist's architecture.

4:02

It's LangChain, LangGraph, LangSmith,

4:06

some MCP and all that,

4:08

but I'm more interested to talk to you about

4:11

how we think about AI Assist eval,

4:13

or how you ship your eval

4:15

for your production system, right?

4:18

A little bit about myself.

4:20

I've been — for my entire career,

4:25

I have been doing data science all the while.

4:28

I've been building machine learning models.

4:31

And my approach to thinking about AI eval for AI agents

4:36

is no different than traditional ML evaluations.

4:40

So for those of you who come from a data science background

4:43

or ML engineering background — you're

4:45

working in the notebook.

4:47

You develop this model.

4:48

You train on a huge dataset.

4:50

You have some kind of ground truth

4:52

for regression or classification tasks.

4:54

And then you run this offline evaluation

4:57

and see what the performance is.

4:58

Should we ship?

4:59

Should we not ship?

5:01

Think about this as a quality gate.

5:03

Can we launch?

5:04

So I really want to emphasize the offline eval piece.

5:09

If that has been the way that we do ML engineering

5:11

for the last couple of years, why should AI engineering

5:14

be any different, right? So really think about that. And the offline eval really serves as

5:24

a quality gate. You don't want to use your users as test data. But maybe if you're a start-

5:31

up with five customers, maybe that's okay. But at the scale of Lyft, we really don't

5:37

want to use our customers as test data.

5:41

And once we got the agent into production,

5:44

we have continuous monitoring.

5:46

We have our online eval, getting all the LangSmith traces,

5:50

human in the loop — all that good stuff that's

5:52

giving us feedback on how to improve the AI agents.

5:57

So I'm going to go into each of these components

5:59

in a little bit more detail.

6:03

Thinking about offline evaluation —

6:05

what does that mean?

6:06

How is that different from a traditional ML engineering

6:10

workflow?

6:11

We love working in notebooks.

6:13

We love just slapping on a CSV file

6:16

and then getting a ground truth.

6:18

But for AI engineering, it's a little bit more setup than that.

6:24

We really took inspiration from Tau Bench, which

6:28

the fantastic team at Sierra AI has published as a public benchmark

6:33

that all the other LLM models and AI labs are using as a benchmark.

6:41

So for this offline evaluation pipeline, we built a lightweight simulator.

6:48

On the right here, we have our LangGraph agent, which is the AI agent that we built

6:53

for AI Assist.

6:55

And then we have an LLM user — we just use one of the out-of-the-box LLM models to role-

7:02

play as a user so that we can generate this end-to-end trajectory of an

7:08

interaction, right? And then we use a very config-driven approach.

7:15

We have a YAML file that specifies what the user intents are, what

7:20

the support scenarios are that we're looking at, and how we mock the state of the world.

7:25

Because in offline, you're not making

7:29

network calls to other MCP servers.

7:32

So in an offline setting, we're mocking those MCP outputs.

7:37

And imagine if an agent calls a tool offline —

7:40

we sort of just mock the MCP output with one of the values

7:44

that's in the config file.

7:47

So we get this long chain of trajectory on the permutations —

7:53

our config is permutations of different combinations

7:57

of different things, right?

7:58

The state of the world, the user intent, user persona.

8:02

And the goal here really is to get a diverse dataset

8:06

that you can use to approximate production data.

8:09

You want your offline eval to be a good proxy

8:12

for how your agent is going to perform

8:14

when you actually turn it on.

8:17

So for the trajectory, we also define evaluators.

8:22

We use LLM-as-judge.

8:25

I think everyone is doing that.

8:27

Code assertion — we run some very simple Python scripts that

8:32

check the end state of the world to see if certain

8:35

conditions are met to define success or failure.

8:40

I'll get into LLM Judge a little bit more.

8:44

I think when we started thinking about LLM Judge,

8:48

and I'm sure everyone here has looked into LangSmith or any

8:52

other observability platform —

8:55

you see different platforms and frameworks come with a pre-built set of LLM

9:00

judges: things like toxicity score, response helpfulness, conversation

9:06

conciseness, and things like that. And we kind of started the same way

9:12

as well. We were defining things like tone appropriateness, response

9:18

helpfulness, naturalness, and all that. And these have been scored on a scale

9:23

of zero to one — a scalar metric.

9:27

So what's the problem with this, right?

9:32

For response helpfulness, for example,

9:35

what does a 0.4 score mean compared to 0.7?

9:40

What does that mean?

9:41

How can you move the needle, right?

9:44

And if you want to move your overall score,

9:48

what product insight is this giving you?

9:52

So we've been very opinionated about what LLM Judge should do.

9:59

And hopefully no one's using a generic helpfulness score for an agent in production.

10:08

The way that we think about LLM Judge is that it should be framed around the task

10:15

that you want your AI agent to perform, right?

10:17

So your AI agent is being instructed to do tasks A, B, and C, and each of those tasks

10:23

has its own success and failure criteria.

10:25

So a very simple example that I pulled from our LangSmith platform is this educational rubric.

10:33

break.

10:33

So one of the tasks that we want our AI agent to do is to educate the user about Lyft policy

10:39

around rider charges or some other type of support scenario.

10:45

So the benefit of doing this is you're defining very clear

10:49

success criteria for your agent.

10:51

And by defining a rubric like this,

10:55

when you see interactions that fail your rubric,

10:58

you can very quickly know what some of the common failure

11:02

modes are, right?

11:03

And that becomes actionable insight.

11:05

That becomes product insight to help your tech team,

11:08

your engineering team, to improve your AI agent.

11:11

Tweak a prompt, tweak a tool, change your control flow logic,

11:15

or whatnot, and then you run the loop again

11:18

and see if it improved.

11:21

So this is just another rubric that I want to quickly show

11:25

as well.

11:28

OK, another thing that we really struggled with

11:31

is: how do we trust this LLM-as-judge, right?

11:35

We define a rubric, we define some prompts,

11:38

but how do we know it's doing the right thing?

11:41

So my own personal take is that, well,

11:44

you just train an LLM judge like a machine learning model.

11:48

You collect some human-labeled ground truth

11:52

from your domain experts about how to score a certain

11:57

interaction based on a rubric.

11:59

And you go through this traditional ML engineering

12:03

loop — change your prompt, change your reasoning —

12:06

see if it aligns with your human agreement score, and then if it does, you have an

12:12

LLM judge that's aligned with human judgment.

12:17

So in our offline simulator, what else can go wrong, right?

12:22

I spoke earlier about how we used an off-the-shelf

12:27

Claude or OpenAI model to role-play as a user.

12:32

But often what we see is — as you can see here —

12:36

the LLMs are being a nice, helpful assistant.

12:39

They explain their issues very nicely to our AI agent. But I'm guilty of this as well.

12:47

I don't typically do this when I reach out to support.

12:50

More often than not, what we see user verbatim in production is like

12:55

one or two words, right?

12:57

People are very impatient.

12:59

People don't sit down and nicely explain their issues.

13:02

So when we did this, our first AI agent was giving us a 90% pass rate.

13:08

Nice.

13:08

We can launch, right?

13:11

But it was a rude awakening for us when we actually launched into production.

13:15

So what can we do to fix this, right?

13:19

This is a pretty active research area as well.

13:23

Microsoft published a paper about this — how you should be training your LLM user using

13:29

real-world verbatim data, right?

13:32

So this is essentially what we are planning to do at Lyft as well.

13:36

We are actively looking into fine-tuning a custom LLM that's aligned with our Lyft

13:42

user verbatim so they speak more like our users.

13:46

Technically making our eval a little bit harder — your benchmark score might go down.

13:51

But you really want this to be a good proxy for production, right?

13:54

Otherwise, what's the point of this?

13:58

The other thing that we are looking to work on with our UX

14:01

team is defining clear user personas, right?

14:05

And this will be used to ground our LLM model

14:08

to behave more like a Lyft user.

14:12

All right.

14:14

I want to quickly talk about how LangSmith really

14:17

helps us manage our eval workflow.

14:22

Tracing, evaluator setup, automation, annotation queue.

14:26

If you're here, you're probably familiar with LangSmith.

14:29

I'll just quickly speak through this

14:31

because I'm running out of time.

14:34

You know, tracing — I think this one has been brought up

14:36

multiple times in previous presentations —

14:38

but with offline simulation and our online runs

14:43

in production, we're using LangSmith to help us

14:46

capture these nice trajectories.

14:48

This becomes really nice training data

14:51

for our models later on, as well as a good interface

14:55

for our operations team who are manually annotating our data.

15:00

Evaluators — this is how we built our LLM

15:05

judge that we use for our offline simulator as well

15:07

as for production monitoring.

15:11

Annotation queue — one of the nice things about LangSmith

15:14

is that we have automations in LangSmith.

15:16

So for traces that fail your LLM judge criteria,

15:21

we can set up an automation that

15:23

sends the failed traces to an annotation queue.

15:27

And here we have our operations team set up

15:29

on this annotation queue to help us manually label these examples,

15:34

and our engineers go in and analyze

15:37

what the systematic failure modes are,

15:40

and that feeds back into how we improve our AI agents.

15:46

All right, so what's next for AI Assist, right?

15:50

We've done a lot of agent engineering —

15:52

managing the context,

15:54

managing the harness, right?

15:56

I think that's the shiniest thing in town nowadays.

15:58

Managing the harness around the model —

16:00

which is basically everything around the model —

16:03

whether that's the RAG pipeline,

16:05

tool definitions, graph, system prompt, and all that.

16:09

And we've been running our offline simulator

16:11

more as a lightweight script offline.

16:16

And now there's a concept of an eval harness

16:18

that we can define, that can help us manage

16:25

our evaluation runs offline more and more effectively.

16:29

And thus far, for all the traces

16:32

that we've been collecting,

16:33

we've been using them to feed into product insights

16:36

that help us improve our agent, improve our harness,

16:39

but we haven't really done much on model training —

16:42

updating the weights of the LLM

16:45

and training a custom LLM for AI Assist.

16:48

So that is one active area that my team is looking into.

16:54

So that's how we close the loop on the eval pipeline.

17:00

All right.

17:01

Thank you, everyone.

17:03

[APPLAUSE]

17:04

[APPLAUSE]

More transcripts

Explore other videos transcribed with YouTLDR.

Get the TLDR of any YouTube video

Transcribe, summarize, and repurpose videos in 125+ languages — free, no signup required.

Try YouTLDR Free