← All AI Engineer talks

AI Engineer Summit 2025

Ensure AI Agents Work: Evaluation Frameworks for Scaling Success

Read the talk

Evaluate Agents Where Their Decisions Happen

A production agent needs checks for routing, tool arguments, skill execution, and the path to completion; voice adds audio quality and conversation behavior to that list.

From a talk by Aparna Dhinakaran

Before you start: Familiarity with LLM calls and APIs is helpful; the article introduces agent routing, skills, memory, and traces.

What does it mean for a voice travel agent to work?

How do you know an agent works once customers depend on it? Building an agent establishes that it can perform a task; evaluating it in production reveals how it behaves with real requests. That distinction matters both to the engineers troubleshooting the application and to the leaders responsible for putting it into service.

Arize cofounder Aparna introduces voice assistants as an expansion of this problem beyond text chat. In discussing call centers and voice APIs, she cites over one billion calls worldwide, without specifying a measurement period or defining which calls use AI. The concrete example is Priceline Penny, which she describes as allowing hands-free booking of an entire vacation. Priceline’s October 2024 announcement established voice-driven hotel search and recommendations, while describing broader travel services as future expansion; complete voice-only vacation booking is the speaker’s description here. A spoken interaction adds another requirement: evaluate the agent’s decisions and the voice experience through which the customer encounters them. Other modalities likewise need their own checks.

Slide titled “The new Travel Agent” with a Priceline chat screenshot and three callouts describing voice-driven interaction, conversational replies, and real-time responses.
A travel assistant example highlights voice interaction, spoken replies, and real-time responses.
0:441:00
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

0:44 · section reference included

Separate routing, execution, and memory

Before defining evaluations, separate the agent into three responsibilities: a router decides what happens next, skills contain the logic that performs the work, and memory preserves state. These responsibilities recur across LangGraph, CrewAI, LlamaIndex Workflows, and applications built without an agent framework. The implementation may differ, but recognizing the responsibilities gives each evaluation a specific target.

Consider an e-commerce assistant. Its router receives the customer’s request and chooses which skill should handle it.

Customer requestIntended skill
Make a returnCustomer service
Find available discountsDiscounts and deals
Recommend leggingsProduct search

A routing decision commits the application to a particular execution path. For the leggings request, the product-search skill then does the work. The illustrated skill connects product search, conversion from unstructured to structured data, a Search API, and product comparison. A skill can therefore contain a mixture of LLM calls, ordinary API calls, and application code.

Components of an Agent slide highlighting skills and execution, with connected product-search, unstructured-to-structured, Search API, and Compare Products blocks and a legend for LLM calls, API calls, and application code.
An agent skill combines product search, data transformation, a search API, and product comparison.

Memory becomes necessary as the interaction continues. A customer should not have to repeat everything they said on the previous turn. The application needs to retain prior requests and conversational state so that later decisions remain connected to the ongoing task. This is a distinct responsibility from choosing a skill or executing its logic.

2:513:01
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

2:51 · section reference included

Follow a latency question through the trace

A trace exposes the internal execution that engineers inspect when building and troubleshooting an agent. In the open-source tracing demonstration, the user asks, “What trends do you see in my trace latency?” The task is to investigate what is making the application slow. Opening the trace reveals the routing decisions behind that request, including multiple calls to the router within the same task.

The demonstrated sequence is:

  1. The router selects a tool that runs a SQL query to collect the application’s traces.
  2. Execution returns to the router after retrieval.
  3. The router selects a data-analyzer skill and passes the retrieved traces and application data to it for analysis.

Memory retains what happens during execution. The router is therefore more than an initial intent classifier: it can decide repeatedly what the agent needs to do next, using the state accumulated by earlier steps. The trace makes those transitions visible.

5:435:52
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

5:43 · section reference included

Check the selected skill and its arguments

Every step in that execution is a possible failure location. At the router, the first question is whether the agent selected the right skill. Sending a request for leggings to customer service or to a discounts skill is a routing error, even if that downstream skill operates correctly. Start by identifying the application’s actual control flow: where does it choose among skills, and what should each choice accomplish? Those decision points need their own evaluations.

Correct skill selection is only half of a correct routing decision. The router must also pass the user’s constraints into the selected skill. A product search may be the right action, yet still fail the request if its arguments omit the requested material or use the wrong price range. Evaluate these separately:

  • Skill selection: Did the router choose the operation appropriate to the request?
  • Argument correctness: Did it supply the values needed to carry out that request, including the customer’s constraints?

Separating these checks distinguishes choosing the wrong work from asking the right skill to do the wrong thing.

7:427:57
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

7:42 · section reference included

Evaluate the work inside a skill

A skill is itself a chain of operations, so its evaluation cannot always be reduced to one result. In the retrieval-augmented generation, or RAG, example, the chain embeds the input query, performs a vector-database lookup, and calls an LLM with the retrieved context. Two separate questions follow: were the retrieved chunks relevant, and was the generated answer correct?

Slide defining a skill as a chain of logic blocks, with three RAG blocks labeled Embed input query, Vector DB lookup, and LLM call with retrieved context.
A RAG skill contains separate embedding, retrieval, and generation steps.
Evaluation targetQuestion
Retrieved chunksIs the retrieved context relevant to the request?
Generated answerIs the answer correct?

A skill can have multiple LLM-as-a-judge evaluations, code-based checks, or both. Attach each check to the component whose behavior it assesses. Keeping retrieval relevance distinct from answer correctness makes the skill’s internal stages visible in the evaluation results, just as the trace makes them visible during execution.

9:309:42
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

9:30 · section reference included

Measure whether execution converges

The next evaluation target is the path the agent takes to finish. Aparna calls this convergence: the agent should reliably reach completion through a succinct sequence of steps. Her illustration is a skill run hundreds of times that consistently completes in roughly five or six steps; this is a desired pattern, not a measured benchmark. The steps still need to perform the necessary work: interpret the request, supply the right parameters, execute the relevant components, and generate the correct answer.

Execution length can change with the underlying model. Aparna reports seeing substantially different step counts for the same skill implemented with OpenAI versus Anthropic, but gives no model names or measured distributions. The useful comparison is therefore the behavior of a particular skill under repeated execution, rather than a general ranking of providers. Count the steps, examine how much the count varies, and check whether the task actually completes correctly. A short path is useful only when it reaches the intended result. Convergence combines that concern for reliable completion with the desire to avoid unnecessarily long execution, making it one of the harder evaluation problems in the talk.

10:0910:20
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

10:09 · section reference included

Evaluate the audio the user experiences

The film Her provides a fictional bridge to the complexity of voice applications: Aparna recalls Samantha revealing that she is conversing with thousands of other people simultaneously. For a real voice agent, however, the evaluation problem begins with a more immediate distinction. The transcript is only one representation of the interaction; the user hears audio chunks, and those chunks need evaluation too.

In the voice assistant APIs Aparna describes, generated transcripts can arrive after the audio has already been sent. That is her account of the systems discussed in the recording, not a universal ordering guarantee for current APIs. It explains why inspecting the text alone cannot cover the spoken experience. The additional evaluation targets include:

  • Sentiment and intent: What is the user expressing, and what do they want to accomplish?
  • Speech-to-text accuracy: Does the transcription correctly capture the speech?
  • Speech quality: Is the audio itself satisfactory?
  • Tone consistency: Does the assistant maintain an appropriate, consistent tone throughout the conversation?

These checks apply at different scopes: some concern individual audio chunks, while others require the conversation as a whole. They supplement evaluations of conversation flow and the underlying agent’s routing and skills. A voice interface adds evaluation work to the application; it does not remove the need to inspect its internal decisions.

11:2411:36
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

11:24 · section reference included

Use distributed evaluations to locate failures

The final demonstration applies these ideas to Arize’s own deployed copilot. Embedded throughout the product, it helps users debug, summarize, inspect information, and search using natural language. Aparna opens its production traces and describes running evaluations at every step. For the search example, a top-level evaluation checks whether the overall response is correct. Intermediate checks examine the routing choice and the arguments passed into it. The visible trace contains a planner, embedding steps, SearchRouter, and SearchFunction calls; the Evaluations tab shows SearchQACorrectness marked incorrect.

Arize trace interface showing a planner, embedding steps, SearchRouter and SearchFunction calls, alongside an Evaluations tab with SearchQACorrectness labeled incorrect.
A copilot trace shows nested search steps and a SearchQACorrectness evaluation marked incorrect.

The remaining question is whether execution completed the task or skill correctly. Together, the checks cover different levels of the same request:

ScopeEvaluation question
Overall responseWas the search response correct?
Routing decisionWas the right route selected?
ArgumentsWere the correct arguments supplied?
Skill executionDid the task complete correctly?

Evaluations throughout the trace make failures diagnosable. An incorrect overall response establishes that something went wrong. Checks at the decision and execution points help determine whether the problem occurred in routing, within a skill, or elsewhere along the flow. That is the practical reason to evaluate an agent at multiple levels: the results should help engineers locate the behavior they need to fix.

13:1413:25
Suggest correction

This note stays in this page until you copy or download it. Nothing is submitted; reloading clears the draft.

13:14 · section reference included

Resources

From the talk

Read the complete timestamped transcript
  1. 0:00

    [on-hold music] Well, thank you so much for being here.

  2. 0:18

    I'm gonna start off by saying apologize my voice a little bit. It's a little hoarse today, but you guys are gonna hang in there with me. Today, we're gonna talk about a really important topic, which is, um...

  3. 0:30

    Slideshow mode. Awesome. We're gonna talk about a really important topic, which is about evaluating AI agents and assistants. This will load. Just to set a little context before we, we jump in,

  4. 0:44

    a lot of you have probably heard today about different agents that are being built, how to build it, what are the cool tools out there to go build agents, and today we're gonna actually talk about when you put those agents into production, it's important to actually know how they're doing and evaluate them.

  5. 1:00

    It's super important to making sure that they actually work in the real world. We're probably gonna get a little technical in this talk, maybe a little bit more than some of the other talks.

  6. 1:08

    But hang in there, I think this is important, even at the leadership level, to understand how to make sure what you're putting out actually works in the real world.

  7. 1:17

    Um, so a little bit about me. My name's Aparna. I'm one of the founders of Arize. Uh, fun update on us, actually. Today, we announced our Series C raise. [cheering] [applauding]

  8. 1:27

    So [laughs] um, have a lot of folks who are using us to evaluate agents. So with that, let's jump in. Okay. Well, everyone here has probably talked to you about text-based agents.

  9. 1:41

    So you have this chatbot, whatever, it's making an action, and it's, it's figuring out all these things to do. The cool next frontier is actually voice. AI is already taking over call centers.

  10. 1:54

    There are over one billion calls made in call centers all around the world with voice assistant a-- with, with voice APIs and the voi- the real-time voice API, if any of you guys have played around with it.

  11. 2:05

    We're actually already seeing these types of, um, agents start to take over and revolutionize call centers. This is actually a real production application of a travel agent. This is the Priceline Penny bot.

  12. 2:18

    You can go in and actually hands-free, no text, book an entire vacation using Priceline Penny today. So we're not just talking about text-based agents anymore. We're talking about multimodal agents, and it's important to address these because the way that you evaluate these types of agents, it's not just evaluate an agent, but also if it's on voice, there's

  13. 2:40

    specific types of evaluations you're gonna need to do. If it's multimodal, there's additional types of evaluations you need to consider. So we're gonna break all that down and hang in there with me for a fun one today.

  14. 2:51

    So before I jump in and talk about how to evaluate an agent, let's talk about what are the components of an agent. You probably have heard different versions of this today, but I'll tell you the language we're gonna use.

  15. 3:01

    One, um, there's something typically called a router, uh, which is essentially what's deciding what the next step an agent will take. There's skills, which is the actual logical chains that do the work, and then there's something that stores the memory.

  16. 3:17

    This is important because i-i-- there might be different architectures of how you're seeing people build these agents out there. Doesn't matter if you're using LangGraph or CrewAI or LlamaIndex Workflows.

  17. 3:30

    There's all sorts of agent frameworks. They all have slightly different ways of building an agent. You might not even use a framework. But what you're gonna see is these common patterns of, okay, that's a router, that's a skill, and that's a memory.

  18. 3:43

    And these different components are gonna have different ways of how you actually evaluate it. So let's first talk about the first one. What the heck's a router? So you can think about a router almost like the boss.

  19. 3:53

    It's kinda deciding, hey, well, y- it's very common to have e-commerce agents in... You probably are all talking to e-commerce agents today to purchase things. Amazon has one. All these e-commerce companies have one.

  20. 4:06

    When you type in a question, like, "I wanna make a return. Give me an idea of what to go buy. Are there any discounts on this?" That user query funnels into something called a router, and that router's goal is deter-- is really to determine, do I call this skill about hitting up a customer service agent?

  21. 4:24

    Do I call this skill, um, to suggest all the discounts we have or suggest products? The router is really kind of the boss deciding who do I tap on to go actually execute the, the ask that the user made.

  22. 4:38

    And the router might not always get it right, but you want it to get it right because then it goes down the pathway of a specific skill within an agent.

  23. 4:48

    So in this case, it will call a skill. Um, so if I asked, "Hey, uh, tell me the best, um," I don't know, "leggings to go buy." So it'll go in, it'll do a product search, and then this is actually the entire skill flow of execution that the agent needs to go through to execute, you know, whatever

  24. 5:08

    the user asked for. Some of these might be LLM calls. Some of these might just be API calls. It just really depends on how people actually implement them. And then lastly, this is an important piece, is there's always something storing the memory because these are usually not just single-turn conversations.

  25. 5:25

    They're multi-turn conversations, multi-turn interactions, and so you don't wanna be talking to an agent that forgets what you previously said. So there's really memory which is storing what it previously asked for and keeping all this in some sort of, um, i-i-- in some, some sort of semblance of state.

  26. 5:43

    So with that, we're gonna get a little fun here. I'm gonna show you, um, an actual example of what this could all look like, a router, skills, and memory.

  27. 5:52

    So this is an open source project, um, that actually looks at the inner workings of an agent. These are called traces for folks who may not be familiar. If you're a-

  28. 6:04

    You know, in leadership or your, your-- this is really what your engineers are looking at when they're actually building and troubleshooting your agent. They're actually understanding what the heck went on under the scenes.

  29. 6:15

    So this is actually an example of a code-based agent. Somebody asked a question like, "What trends do you see in my trace latency?" AKA, what's making my application slow?

  30. 6:27

    This is the router call that we were talking about earlier, where it actually decides, well, how do I then go ask-- you know, how do I then go tackle that question?

  31. 6:37

    So first, you can see here there's multiple router calls. There's not just one router call. This is pretty common as your application grows. You can have multiple times where it comes back and has to decide, what do I need to go do?

  32. 6:50

    So the first time it calls the router, what it does is it actually-- so the router then makes a tool call, um, which is essentially the skill that you need.

  33. 7:01

    The first time, it actually makes a tool call to then go run a SQL query, go collect all of my traces of my application, and go, go run a SQL query.

  34. 7:11

    Then it goes back up to the router, and then it calls the second skill, which is actually the data analyzer skill, which takes all of the traces and the application data, and then it passes it to something that actually analyzes that data.

  35. 7:26

    So in this case, you can actually see there was a router, there was tool calls. We actually have memory that's actually storing everything that's happening under the scenes. And so really just shows all three of the different components that I actually just walked through.

  36. 7:42

    So now that we have an example of a, of an agent with a router and skills and memory, let's talk about how to actually evaluate these agents. Every single step that I just walked through here actually is an area where the agent can go wrong.

  37. 7:57

    For routers, typically, what teams end up caring about is, did it call the right skill? Because if it didn't call the right skill, you know, user asks for, "I asked for leggings, but then it sent me over to customer service," or, "It sent me over to, um, you know, s- uh, something about discounts and deals."

  38. 8:16

    So you actually wanna make sure that the router within an agent is correctly doing the right skill and calling the right skill. So that's the first piece that you'll want to make sure that your teams are evaluating.

  39. 8:31

    So if your teams are building agents, you wanna ask, "Well, hey, what's the ultimate control flow? What's the control flow? And are-- do we have something like a router, and are we evaluating it to make sure that it's correctly calling the right skill between A, B, C?

  40. 8:46

    And is it calling the right skill with the right parameters?" So not just, um, it calling product search, but actually making sure that whatever way you've designed that skill, you're actually passing in the correct things like, um, you know, I want this type of material, I want this type of whatever cost range.

  41. 9:05

    You're actually passing in all the right parameters into what the user actually is, is asking for. Can I get a raise of hands? Have any of you guys heard of-- D-do any of you guys evaluate your agents today, actually?

  42. 9:19

    Is that something you know your teams are doing? Okay, awesome. Are any of you guys evaluating this router level internally? Okay. Awesome. Wow. This is a great group. Okay. [laughs]

  43. 9:30

    This is impressive. Um, okay, let's next go to the next one, which is actually evaluating a skill. This is actually the part where it gets really interesting and tricky because there's many different components in a skill.

  44. 9:42

    There might be-- In this case, I have a RAG type of skill, so I wanna look at things like evaluating the actual relevance of the chunks that were pulled.

  45. 9:52

    I wanna look at the actual correctness of the answer that was generated. But the skill itself can have many different LLM-as-a-judge evals, or it can also have code-based evals that you might wanna run to actually evaluate the skills, the skills of the agent.

  46. 10:09

    And then lastly, this is kind of a really important one that we're seeing teams probably have the most trouble evaluating, which is actually the path that the agent took.

  47. 10:20

    Because, well, ideally, you want it to converge. You call the same skill hundreds of times, and it always takes about five steps or six steps to actually query what the user asked for, put in the right parameters, call XYZ components of the skill, and then ultimately, um, take the right-- you know, generate the right answer.

  48. 10:43

    But sometimes this can be a little longer. We've seen some times where the same skill, uh, it-- I don't know if you all have done this experiment, but you can put the same skill and build it with OpenAI, and you can also build it with Anthropic, and sometimes they have wildly different number of steps that the path

  49. 11:00

    actually takes. And so the goal here is how do you be succinct, and how do you also make sure there's reliability in the number of steps that your agent takes to actually consistently complete a task?

  50. 11:12

    So we call this convergence, um, but probably one of the hardest to actually evaluate. Is anyone evaluating convergence today, or at least counting the number of steps? Awesome. Okay.

  51. 11:24

    You're awesome, dude. [laughs] Cool. Well, with that, I'm gonna go maybe two more minutes, and then I'll hop into one more demo here. So if any of you guys watched the movie Her, this is from Her. [laughs]

  52. 11:36

    Um, uh, this is where, you, you know, the, the main character asks, like, "Who else are you talking to?" And, you know, the-- Samantha says something like, "Eight thousand other people are in a conversation with me right now."

  53. 11:50

    And so the future of voice applications is that these are probably some of the most complex type of applications that have ever been deployed, ever been built. It's gonna require one more additional pieces to actually evaluate voice applications.

  54. 12:05

    And the interesting part about these is that it's not just the text that needs to be evaluated or the transcript But it's also the audio chunk that needs to be evaluated.

  55. 12:17

    Um, in a lot of these voice assistant APIs, you have the generated transcript that happens actually after the audio chunk is really sent. And so that's a whole nother dimension around is the user-- how-- what's the user's sentiment?

  56. 12:32

    Is the speech-to-text transcription actually okay? Is the tone consistent throughout the entire conversation? And so you actually need to evaluate not just the audio piece and the flow of the conversation and everything else you're doing for all your other ag-- you know, other parts of your agent, but also make sure that the audio chunks are getting their

  57. 12:52

    own evals defined on, um, you know, intent or speech quality or speech-to-text accuracy. Um, so this is important for, for voice. So with that, um, I'm gonna actually show you guys how we evaluate our own agent so that you can get a little bit of a example of, of what some agent in the wild actually does.

  58. 13:14

    Um, this is our own agent, so let me actually show you what it looks like. Um, you can actually go on our product today, and there's a little copilot.

  59. 13:25

    And our copilot does something similar to what other copilots do, where as people are spending time [clears throat] in our product, we actually help them do things like, "Hey, help me debug this," "Help me summarize this," "Help me look at this."

  60. 13:38

    Um, "Can I search with natural language?" There's kind of this copilot integrated throughout our entire product. But we're an evals company, so what do we do? We actually dogfood our own tool, and we decide to...

  61. 13:51

    What you're looking at here is actually the traces of our entire copilot actually in the wild. And every single step of this copilot, we actually run evaluations of. So in this case, we have an eval at the very top actually evaluating something around was the overall response that was generated, this was actually a search question.

  62. 14:15

    Is the overall search question actually correct or incorrect? And then we also have one around once it actually called the search router, did it pick the right router? And then did it pass in the correct arguments into the router?

  63. 14:31

    And then finally, ultimately, did it complete the task or the skill correctly in the execution of this, this entire skill? And so evals aren't just at one layer of your entire trace.

  64. 14:45

    If you take anything away from this conversation, the goal here is really how do you make sure that you have evals throughout your application so that when something goes wrong, I can debug if it actually happened at the router level, if it happened at the skill level, or if it happened somewhere else along the flow.

  65. 15:02

    Um, and I think that's it from me. Any questions? [audience applauding] [upbeat music]