← All AI Engineer talks

AI Engineer World's Fair 2025

How to look at your data; what to look for, how to measure

Read the talk

Measure retrieval, then turn conversations into product decisions

Fast retrieval tests show which changes help your application, while structured conversation analysis reveals where better tools, filters, and workflows will matter.

From a talk by Jeff Huber and Jason Liu

Before you start: Basic familiarity with embeddings and retrieval-augmented generation is assumed; the code example uses Python.

Which documents should retrieval return?

Which chunking strategy should you use? Is your embedding model the best choice for your data? These are application questions: answering them requires a way to measure what changes when you change the system. Jeff Huber starts with retrieval inputs; Jason Liu then turns to conversations and agent outputs. Together, those two views connect engineering experiments to the problems users actually encounter. Measurement makes improvement systematic.

To assess retrieval, you could guess, use an LLM judge, or consult a public benchmark such as MTEB. Each offers a different kind of evidence. A public embedding score does not directly tell you whether your application retrieves the documents it needs. Huber’s example of an expensive judge-based evaluation costs $600 and takes three hours; it is an illustration, not a benchmark with a specified workload. His proposed starting point is a fast eval that checks retrieval directly.

Slide asks how to evaluate and improve retrieval, with three red-outlined options and a green-outlined “Fast Evals makes it easy!” statement.
How do you assess and improve retrieval? Guessing, LLM-as-judge, public benchmarks, and Fast Evals.

A golden dataset contains queries paired with documents that should be returned. The evaluation asks a concrete question: when this query goes in, does the expected document come out?

  1. Associate each evaluation query with its relevant document IDs.
  2. Run the query through the retrieval system.
  3. Inspect the first k results—perhaps five, ten, or twenty, depending on the application.
  4. Check which expected documents appear in those results.

A small Python function expresses the per-query recall check:

python

def recall_at_k(
    expected_ids: set[str],
    ranked_ids: list[str],
    k: int = 10,
) -> float:
    if not expected_ids:
        raise ValueError("A query needs at least one relevant document.")
    if k <= 0:
        raise ValueError("k must be positive.")

    retrieved_ids = set(ranked_ids[:k])
    return len(expected_ids & retrieved_ids) / len(expected_ids)

With one expected document, the result is either zero or one. With several, it measures the fraction of relevant documents recovered at the chosen depth.

The short feedback loop matters as much as the metric. Huber describes fast retrieval checks as running quickly for pennies, without specifying a workload. Waiting hours between experiments drains the time and attention available for trying alternatives. A cheap check makes it practical to test a change, inspect failures, and try again.

0:430:56
Suggest correction

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

0:43 · section reference included

Generate questions that resemble real queries

You may already have documents, chunks, and a retrieval system without having user queries. An LLM can help create the missing questions, but simply asking it to write a question about each document is insufficient. The generator needs guidance about how users ask questions, especially how specific those questions should be.

The pergola example makes the problem visible. The query asks, “What is a pergola used for in a garden?” The answer passage begins by naming a pergola in a garden. That close correspondence makes a tidy benchmark pair, but it can also make retrieval easier than it will be in practice. A question written with the answer directly in view may contain precisely the vocabulary and detail needed to find that answer. Chroma’s Generative Benchmarking research investigates how to produce queries that better represent real usage.

Synthetic queries must reflect user specificity, not just document content. Huber describes aligning the specificity of generated queries with real queries. Otherwise, an evaluation can reward the system for answering artificially convenient questions and leave you with an inflated impression of retrieval quality.

Slide titled “Aligning Synthetic Queries to ‘Real Queries’” shows a pergola question beside its definition, with three partially cropped histograms below.
A “Non-realistic query” pairs a pergola question with a closely matching definition.
3:063:13
Suggest correction

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

3:06 · section reference included

Test an embedding change on your application

When a new embedding model attracts attention, a golden dataset gives you a better question than whether its public ranking is impressive: does it retrieve more of the expected documents for the queries you care about? An improvement still has to justify the cost of switching. You must re-embed the corpus, and the new service may cost more, respond more slowly, or have a less reliable API. Retrieval success supplies a concrete quality measure to weigh against those operational constraints.

For the Weights & Biases chatbot, Huber compares four embedding models using Recall@10. The ground-truth queries came from interactions logged in Weave; the other queries were generated synthetically. A useful synthetic evaluation should produce reasonably similar scores and preserve the ordering of models, so that it supports the same engineering decision.

The Generative Benchmarking report supplies these exact results. Its ground truth uses weighted, manually labeled production queries from 2023, and the evaluation excludes queries without relevant documents.

Embedding modelGround-truth Recall@10Generated-query Recall@10
text-embedding-3-small0.4390.530
text-embedding-3-large0.5520.602
jina-embeddings-v30.5110.532
voyage-3-large0.6700.679

The real and generated evaluations preserve the same model ordering for Recall@10. The application’s original model, text-embedding-3-small, finishes last. Huber contrasts what he describes as Jina’s strong English MTEB standing with its weaker result on this application; voyage-3-large leads this comparison.

Editor’s note: This agreement is specific to Recall@10. The report’s NDCG@10 results reverse the order of text-embedding-3-small and jina-embeddings-v3 between ground-truth and generated queries. Synthetic evaluation agreement should therefore be checked for the metric used to make the decision.

Huber points to the full report, a companion video, and open-source notebooks for applying the method to other datasets. The useful result is a repeatable comparison on your own data, with enough detail to inspect why one configuration succeeds where another fails.

4:294:44
Suggest correction

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

4:29 · section reference included

Read the feedback already inside conversations

Retrieval tells you what information enters the system. Conversations and agent executions show what happens next: what users attempt, which tools they need, and where interactions go wrong. Liu recommends starting with careful manual inspection when the collection is still manageable—even a few hundred conversations can merit individual attention. Sending everything to o3 should not be an automatic substitute for understanding the interactions yourself.

As usage grows to thousands of queries or tens of thousands of conversations, manual review becomes harder. Volume is only part of the problem. Long interactions contain tool calls, chains, and reasoning steps that are difficult to scan, and interpreting them may require expertise the reviewer does not have. The analysis needs a way to reduce detail without losing the signals that matter.

Those signals often exist without a separate feedback widget. A user asks for another attempt, corrects the assistant, or says, “This is not really what I meant.” Frustration and retry patterns are evidence about the interaction. Extracting them from the conversation can reveal failures that a thumbs-up or thumbs-down control never captured.

7:107:20
Suggest correction

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

7:10 · section reference included

Give an aggregate score some context

An evaluation score of 0.5 or a factuality score of 0.6 does not, by itself, identify what to change; Liu uses both as illustrative numbers. His marketing analogy shows what is missing. In the hypothetical campaign, 80% of users are under 35 and 20% are older, with stronger performance in the younger cohort. The audience split makes the aggregate result actionable.

Now there are two concrete directions:

  • Expand the successful segment: Invest further in reaching the younger audience.
  • Investigate the weaker segment: Find out why the campaign performs poorly with older users and change the approach for them.

Even channel choices—such as podcasts or a Super Bowl advertisement—become easier to reason about once the intended audience is clear. The same principle applies to AI applications: a segment connects a performance problem to a population and a possible intervention.

9:129:20
Suggest correction

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

9:12 · section reference included

Extract records you can analyze

The bridge from conversation text to segmentation is structured extraction. Instead of asking for an unconstrained interpretation of an entire conversation collection, define the information each record should contain:

  • Summary: What happened in the interaction.
  • Tools: Which tools the system used.
  • Errors: What failed or appeared incorrect.
  • Interaction details: Events needed to understand the conversation.
  • User response: Signals of satisfaction and frustration.

This creates a portfolio of metadata. You can embed the extracted information, find clusters, identify segments, and begin testing hypotheses about them.

“Extract Structure from Chaos” slide lists conversation attributes alongside an Anthropic Clio reference, above a partially cropped code example.
Extract conversation summaries, tool use, error patterns, frustration levels, and customer satisfaction.

An LLM helps produce those structured records; the next step is conventional product analysis. Work such as Anthropic’s Clio provides a reference point for finding patterns in real AI usage. Liu illustrates the investment opportunity with a roughly 40× comparison between coding in Claude usage and GDP value creation. The practical connection is that understanding what people use a product for helps identify where to invest.

Editor’s note: The published Clio account does not establish that GDP comparison; the ratio remains Liu’s illustration, not a verified Clio result.

10:0810:17
Suggest correction

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

10:08 · section reference included

Use Kura to build a hierarchy of needs

Kura organizes this workflow around conversation summaries, clusters, and hierarchies of clusters. Those groups let you compare evaluation metrics across different kinds of requests. A global factuality score might conceal poor results for queries requiring time filters and strong results for contract searches. Separating those cases identifies where the system works and where further investigation belongs.

The pipeline has three stages: summarization, clustering, and aggregation. Liu demonstrates it with an explicitly synthetic dataset of conversations generated with Gemini.

  1. Summarize each conversation. Extract topics, frustrations, errors, and other useful attributes into a consistent record.
  2. Find cohesive groups. The demonstration produces groups such as data visualization requests, SEO content requests, and authentication errors.
  3. Aggregate groups into a hierarchy. Broader themes, such as technical support, make it possible to inspect related needs together while retaining more specific categories underneath.

The resulting cluster summaries expose practical questions. Does the agent have tools for database debugging? Can it diagnose authentication problems? Can it create the visualizations people request? At a broad level, the collection may reveal SEO content or data analysis; at a finer level, it may distinguish blog posts and marketing tasks. Moving between those levels helps generate hypotheses about tools, prompts, and even how to market the product.

11:1911:30
Suggest correction

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

11:19 · section reference included

Build the capability a segment is missing

Segmentation becomes useful when it leads to a specific investment. In Liu’s hypothetical example, 80% of conversations concern SEO optimization. That concentration would justify investigating SEO integrations, stronger workflows, or prompt changes for that use case. The objective is to give the agent the tools, metadata filters, and data sources needed for the work users bring to it.

Sometimes the missing capability is ordinary infrastructure. Queries that depend on time may perform poorly because the system has no time filter. Changing the model does not add that filter. Liu also describes a contract-search case where extracting signature information during OCR made it possible to filter signed contracts at scale. In both examples, analyzing the requests points to a specific missing input or operation that engineering can supply.

13:0813:22
Suggest correction

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

13:08 · section reference included

Prioritize using both usage and performance

Defining evaluations is only the beginning. Comparing KPIs across clusters adds the information needed to decide what to build, fix, or leave alone. Two dimensions are especially useful: how much of the population uses a capability, and how well the system performs for that category.

UsageEvaluation performanceProduct response
HighLowPrioritize fixing a capability that many users need.
HighHighRecognize that the capability is serving its users.
LowHighImprove discovery or education, including suggested questions that demonstrate the capability.
LowLowConsider declining the request or directing the user elsewhere.

The low-usage cases are consequential. A strong capability may be hidden by the interface, while a weak capability with little demand may not deserve a large engineering investment. Conversation share and evaluation performance together make those choices more explicit.

14:1014:22
Suggest correction

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

14:10 · section reference included

Monitor categories and test clearer hypotheses

Once useful categories emerge, they can become operational parts of the application. Build classifiers to recognize intents, routers to direct requests, and tools for the needs you have identified. Monitoring can then group results by query type and track performance within each category over time. A change inside a recognizable use case is more informative than an isolated aggregate number.

The categories also expose changes in demand. Liu describes newly onboarded customers using applications differently from historical customers. Looking at those differences can reveal that the next investment should serve a new pattern of usage. Research into actual interactions becomes an input to the product roadmap.

Clearer hypotheses and faster experiments reinforce each other. Segmentation narrows a question to a particular population or failure mode. Fast evaluations let you test more proposed changes, and monitoring shows what happens as the product continues to be used. Progress depends on both the quality of the hypotheses and the ability to test them repeatedly.

For retrieval applications, Liu puts evidence quality first: evaluate on application data and establish that the needed documents are being retrieved before spending heavily on changes to the LLM. His rationale is that an improved model does not itself repair missing retrieval evidence. Before users arrive, synthetic queries can help establish an evaluation set; once real usage exists, inspect it and use it to improve that understanding.

15:1815:30
Suggest correction

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

15:18 · section reference included

Justify an investment by the users it could help

Conversation counts, tool misuse, errors, and frustration let you connect a failure pattern to the population experiencing it. Comparing KPIs across similar conversations turns a broad request for more tools into a claim about where those tools could matter.

Liu’s closing hypothetical has 40% of conversations involving data visualization, while the code engine handles that work well only about 10% of the time. A proposal to build two plotting tools now has a defined audience, a specific weakness, and a change to evaluate. The experiment can ask whether the tools improve performance for that segment. Starting with a small amount of structure is enough to begin making these choices about what to fix, build, or ignore.

The closing resources point to Chroma research and three Jupyter notebooks that load Weights & Biases data, perform cluster analysis, and use the results to inform product decisions. These return to application data after the earlier synthetic Gemini demonstration.

Editor’s note: The first notebook in the related Kura tutorial series represents individual query/document pairs as single-message conversations. Its inputs should not be mistaken for complete multi-turn chatbot histories.

Two-column Resources slide lists Jeff and Jason’s handles and links for Fast Evals, Chroma, GitHub notebooks, and Improving RAG, with partially cropped QR codes below.
Resources for Fast Evals, Chroma, notebooks, and Improving RAG.
17:0417:15
Suggest correction

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

17:04 · section reference included

Q&A: price the work an agent completes

Asked for a provocative take in the closing Q&A, Liu shifts to the business model: more agent businesses should price services according to work done rather than tokens consumed. The exchange ends with success and value as the basis for charging customers.

18:4918:58
Suggest correction

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

18:49 · section reference included

Resources

From the talk

Read the complete timestamped transcript
  1. 0:00

    [upbeat music] All right.

  2. 0:15

    Welcome, everybody. Um, I'm Jeff Huber, the co-founder and CEO of Chroma, and I'm joined by Jason. We're gonna do a two-parter here. We're really gonna pack in the content.

  3. 0:23

    It's the last session of the day, and so we thought we'd give you a lot. Um, everything in this presentation today is open source and code available, so we're also not selling you any tools.

  4. 0:34

    Um, and so there'll be QR codes and stuff throughout to grab the code. So let's talk about how to look at your data. Um, all of you are AI practitioners.

  5. 0:43

    Um, you're all building stuff, and, uh, this probably-- these questions probably resonate quite deeply with you. Uh, what chunking strategy should I use? Is my embedding model the best betting- embedding model for my data, um, and more.

  6. 0:56

    And our contention is that you can really only manage what you measure. Again, I think Peter Drucker is the original who coined that, so I can't take too much credit, um, but it certainly is still true today.

  7. 1:06

    So we have a very simple hypothesis here, which is you should look at your data. Um, the goal is to say, look at your data, I think at least fifteen times this presentation, so that's two.

  8. 1:15

    Um, and great measurement ultimately is what makes systematic improvement easy, and it really can be easy. It doesn't have to be super complicated. So I'm gonna talk about part one, how to look at your inputs, and then Jason's gonna talk about part two, how to look at your outputs.

  9. 1:30

    So let's get into it. All right. Looking at your inputs, how do you know whether or not your retrieval system is good? And how do you know how to make it better?

  10. 1:40

    Um, there are a few options. Um, there is guess and cross your fingers. That's certainly one option. Um, another option is to use LLM as a judge. You're using, you know, some of these frameworks where you're checking factuality and other metrics like this, and they cost six hundred dollars and take three hours to run.

  11. 1:57

    If that is your preference, you certainly can do that. Um, you can use public benchmarks. So you can look at things like MTEB to figure out, oh, which embedding model is the best on English.

  12. 2:06

    Uh, that's another option. Um, but our contention is you should use fast evals, and I will tell you exactly what fast evals are. All right, so what is a fast eval?

  13. 2:16

    Um, a fast eval is simply a set of query and document pairs. So the first step is, if this query is put in, this document should come out. Uh, a set of those is called a golden dataset.

  14. 2:30

    And then the way that you measure your system is you put all the queries in, and then you see, do those documents come out? Um, and obviously, you can retrieve five or retrieve ten or retrieve twenty.

  15. 2:41

    It kind of depends on your application. Um, it's very fast and very inexpensive to run, and this is very important because it enables you to run a lot of experiments quickly and cheaply.

  16. 2:50

    Um, you know, I'm sure all of you know that, like, experimentation time and your energy to do experimentation goes down significantly when you have to click go and then come back six hours later.

  17. 3:01

    Um, all of these metrics should run extremely quickly for pennies.

  18. 3:06

    So maybe you don't have yet-- You have your documents, you have your chunks, you know, you have your stuff in your retrieval system, uh, but you don't have queries yet.

  19. 3:13

    That's okay. Um, we found that you can actually use an LLM to write questions, and write good questions. Um, you know, I think just doing naive, like, "Hey, LLM, write me a question for this document," not a great strategy.

  20. 3:27

    However, we found that you can actually teach LLMs how to write queries.

  21. 3:32

    Um, these slides are getting a little bit cropped. I'm not sure why, but we'll make the most of it. Um, to give you an example, so this is actually a, um, example from one of the MTEB da-- uh, kind of the golden datasets around, uh, embedding models or the benchmark datasets.

  22. 3:46

    Um, this also points to the fact that, like many of these benchmark datasets are overly clean, right? What is a pergola used for in a garden? And then the beginning of that sentence is a pergola in a garden, dot, dot, dot, dot, dot.

  23. 3:57

    Um, real world data is never this clean. Um, so what we did in this report, um, the link is in a few slides, um, we did a huge deep dive into how can we actually align queries that are representative of real world queries.

  24. 4:11

    It's too easy to trick yourself into thinking that your system's working really well with synthetic queries that are overly specific to your data. Um, and so what these graphs show is that we're actually able to semantically align the specificity of queries synthetically generated to real queries that users might ask of your system.

  25. 4:29

    So what this enables is, you know, if a new, cool, sexy embedding model comes out, and it's doing really well in the MTEB score, and everybody on Twitter is talking about it, instead of just, you know, going into your code and changing it and guessing and checking and hoping that it's gonna work, um, you now can empirically

  26. 4:44

    say whether it's good, better or not for your data. Um, and you know, the kind of example here is quite contrived and simple, um, you know, but you can actually look at the actual success rate.

  27. 4:53

    Okay, great. These are the queries that I care about. Do I get back more documents than I did before? If so, maybe you should consider changing. Now, of course, you need to re-embed your data.

  28. 5:02

    That service could be more expensive. It could be slower. The API for that service could be flaky. There's a lot of considerations, obviously, when making very good engineering decisions.

  29. 5:10

    Um, but clearly the North Star of, like, success rate of how many documents did I give my queries, super fast and super useful, and makes your improvement of your system much more systematic and deterministic.

  30. 5:22

    All right. So we actually, uh, worked with Weights & Biases, um, looking at their chatbot, um, to kind of ground a lot of this work. So what you see here is for the Weights & Biases chatbot, um, you can see four different embedding models, and you can see the recall at ten across those four different embedding models.

  31. 5:40

    And then I'll point out that, uh, blue is ground truth, so these are actual queries that were logged, um, in Weave and then sent over. And then there's generated.

  32. 5:48

    These are the ones that are synthetically generated. And what we want to see is a few things. We want to see that those are pretty close, and we want to see that they are always the same kind of in order of accuracy, right?

  33. 5:57

    We don't want to see any, like, big flips between, um, ground truth and generated. And, uh, we're really happy to see that we found, uh, that answer. Now, there are a few fun findings here, which is-- And of course, they're gonna get cropped out, but that's okay.

  34. 6:11

    Um, number one, uh, the original embedding model used for this application was actually text-embedding-3-small. Um, this actually performed the worst out of all the embedding models that we evaluated just for, in this case, um, and so probably wasn't the best choice.

  35. 6:25

    Um, the second one was that actually, if you look at MTEB, jina-embeddings-v3 does very well in English. It's like, you know, way better than anything else. But for this application, uh, it d- didn't actually perform that well.

  36. 6:36

    Uh, it was actually the voyage-3-large model which performed the best, and that was empirically determined by actually running this fast eval and looking at your data. That's number three.

  37. 6:47

    All right, so if you'd like access to the full report, um, you can scan this QR code. It's at research.szystro.com. There's also an adjoining video, which is kind of screenshotted here, which goes into much more detail.

  38. 6:56

    There are full notebooks with all the code. It's all open source. You can run it on your own data and, um, hopefully this is helpful for you all thinking about how, again, you can systematically and deterministically improve your retrieval systems.

  39. 7:08

    And with that, I'll hand it over to Jason.

  40. 7:10

    Thank you. So, you know, if you're working with some kind of system, there's always going to be the inputs that we look at. And so we talked about maybe thinking about things like retrieval, how does the embeddings work?

  41. 7:20

    But ultimately, we also have to look at the outputs, right? And the outputs of many systems might be the outputs of a conversation that has happened, a, you know, ex- an agent execution that has happened.

  42. 7:29

    And the idea is that if we can look at these outputs, maybe we can do some kind of analysis that figures out, you know, what kind of product should we build?

  43. 7:36

    What kind of, uh, portfolio of tools should we develop for our agents, and so forth. And so the idea is, you know, if you have a bunch of queries that users are putting in, or even, even a couple of hundred of conversations, it's pretty good to just look at everything manually, right?

  44. 7:50

    Think very carefully about each interaction, and then only use these models, uh, when they make sense. And then oftentimes when I say this, they can say, "You know what?

  45. 7:58

    Why don't we just put everything in o3?" And then here, generally only use the language models if you think you're not smarter than the language model.

  46. 8:06

    Then when you have a lot of users and a, a, a actual good product, you might get thousands of queries or tens of thousands of conversations, and now you run into an issue where there's too much volume to manually review.

  47. 8:17

    There's too much detail in the conversations, and you're not really gonna be the expert that can actually figure out what is useful and what is good. And ultimately, with these long conversations with tool calls and chains and reasoning steps, these outputs are now really hard to scan and really hard to understand.

  48. 8:32

    But there's still a lot of value in these conversations, right? If you've used a chatbot, whether it's in Cursor or any kind of like Claude code system, oftentimes you do say things like, "Try again.

  49. 8:42

    This is not really what I meant." You know, "Be less lazy next time." It turns out a lot of the feedback you give is in those conversations, right? We could build things like feedback widgets or thumbs up or thumbs down, but a lot of the information exists in those conversations, and the frustration and the retry patterns that

  50. 8:58

    exist can be extracted from those conversations. And the idea is that the data really already exists in this conversation. If we think of a simple example outside-- in a different industry, you know, we, we can imagine the analogy of marketing, right?

  51. 9:12

    Maybe we run our evals and the number is .5. Um, I don't really know what that means. Factuality is .6. I don't know if that's good or bad. Is .5 the average?

  52. 9:20

    Who knows? But imagine we r- run a marketing campaign and our, you know, ad metric or our KPI is .5. There's not much we can do. But if we realize that eighty percent of our users are under [REDACTED:age] and twenty percent are over, and we realize that the younger audience performs well and the older audience performs poorly,

  53. 9:38

    what we've done is we've just drawn a line in the sand on who our users are. And now we can make a decision. Do we want to double down on marketing to a younger audience, or do we want to figure out why we aren't, uh, successfully marketing to, to the older population, right?

  54. 9:52

    Do I find more pod- podcasts to market to? You know, should I run a Super Bowl ad? Now, just by drawing a line in the sand and deciding which segment to target, we can now make decisions on what to improve.

  55. 10:02

    Whereas just making the ads better is a sort of very generic set sentiment that people can have.

  56. 10:08

    And so one of the best ways of doing that is effectively just d- extracting some kind of data out of these conversations in some structured way and just doing very traditional data analysis.

  57. 10:17

    And so here we have a kind of object that says, "I want to extract a summary of what has happened," maybe some tool that it's used, maybe the errors that we've noticed, the conversations that ha- that happened, maybe some metric for, for satisfaction, maybe some metric for frustration.

  58. 10:30

    The idea is that we can build this portfolio of metadata that we can extract, and then what we can do is we can embed this, find clusters, identify segments, and then start testing our hypotheses.

  59. 10:42

    And so what we, what we might wanna do is sort of build this extraction, put it into an LLM, get this data back out, and just start doing very traditional data analysis.

  60. 10:50

    No different than any kind of, uh, product engineer or any kind of data scientist. And this tends to work quite well. You know, if you look at some of the things that Anthropic Clio did, they basically found that, you know, uh, code use was forty x more represented by Claude, Claude users than by, you know, uh, GDP

  61. 11:07

    value creation. They go, "Okay, maybe code is like a good avenue." And, and, and obviously that's not the really case, but the idea is that by understanding how your users develop a product, you can now figure out where to invest your time.

  62. 11:19

    And so this is why we built a library called Kura that allows us to summarize conversations, cluster them, build hierarchies of these clusters, and ultimately allow us to compare our evals across different KPIs.

  63. 11:30

    Again, so now, you know, if we have factuality is .6, that's really hard. But if it turns out that factuality is really low for queries that require time filters, right?

  64. 11:39

    Or factuality is really high when queries revolve on, you know, contract search, now we know something's happening in one area, something's happening in another, and then we can make a decision on what to do and how to invest our time.

  65. 11:50

    And the pipeline is pretty simple. We have models to do summarization, models to do clustering, and models that do this aggregation step.

  66. 11:59

    And so what you might wanna do is just load in some conversations, and here we've made some, a fake dataset, maybe conversations, fake conversations from Gemini. And the idea is that first, we can extract some kind of summary model where there's topics that we discuss, frustrations, errors, et cetera.

  67. 12:16

    We can then cluster them to find cohesive groups, and here we can find maybe, you know, some of the conversations are around data visualization, SEO content requests, and authentication errors.

  68. 12:26

    And now we get some idea of how people are using the software. And then as we grouped them together, we realized, okay, really there are some themes around technical support.

  69. 12:33

    Does the agent have tools that can do this well? Do we have tools to debug these database issues? Do we have tools to debug authentication? Do we have tools to do data visualization?

  70. 12:42

    Um, that's something that's gonna be very useful. And at the end of this pipeline, we're sort of presented with these l-- printouts of clusters, right? We know what the tools are-- how the chatbot is being used at a higher level, you know, SEO content, data analysis, and a lower level.

  71. 12:57

    You know, maybe it's blog posts and marketing. And just by looking at this, we might have some hypothesis as to what kind of tool we should build, how sh- we should, you know, develop, you know, even our marketing, or how we can think about changing our prompts.

  72. 13:08

    We can do a ton of these kinds of things. And this is because the ultimate goal is to understand what to do next, right? You do the segmentation to figure out what kind of new hypotheses that you can have, and then you can make these targeted investments within these certain segments.

  73. 13:22

    If it turns out that, you know, eighty percent of the conversations that I'm having with the chatbot is around SEO optimization, maybe I should have some integrations that do that.

  74. 13:30

    Maybe I should reevaluate the prompts or have other workflows to make that use case more powerful for them. And again, the goal really is to just make a portfolio of tools, of metadata filters, of data sources that allows the agent to do its job.

  75. 13:44

    And oftentimes, the solution isn't really making the AI better. It's really just providing the right infrastructure, right? A lot of times, if you find that a lot of careers use time filters and you just didn't add a time filter, that can probably improve your evals by quite a bit, right?

  76. 13:58

    We have situations where we wanted to figure out if contracts were signed, and if we just extracted one more step in the OCR process, now we can do these large scale filters and figure out, you know, what data exists.

  77. 14:10

    And generally, the practice of improving applications is pretty straightforward, right? We all know to define evals, but not everyone that I work with has really been thinking about something like finding clusters and comparing KPIs across clusters.

  78. 14:22

    But once you do, then you can start making decisions on what to build, what to fix, and what to ignore. Maybe you have a two set of q- uh, quadrants, right?

  79. 14:30

    Maybe we have low usage and high usage, and you have high-performing evals and low-performing evals, right? If a large portion of your population are using tools that you are bad at, that is clearly the thing you have to fix.

  80. 14:43

    But if a large proportion of people are using tools that you're good at, that's totally fine. If a small proportion of people use something that-- do something that you're good at, maybe there's some product changes you didn't make.

  81. 14:54

    Maybe it's about educating the user. Maybe it's adding some, you know, pre-filler or automated questions to show them that we can do these kind of capabilities. And if there are things that nobody does, but when we do them, they're bad, maybe that's a one-line change in the prompt that says, "Sorry, I can't help you.

  82. 15:07

    Go talk to your manager," right? These are now decisions that we can make just by looking at, you know, what proportion of our conversations are of a certain category and whether or not we can do well in that category.

  83. 15:18

    And as you understand this, then you can go out, you can build these classifiers to identify these specific intents. Maybe you build routers, maybe you build more tools, and then you can start doing things like monitoring and having the ability to do these group buys, right?

  84. 15:30

    So now you have different categories of query types over time, and you can just see what the performance looks like, right? Where point five doesn't really mean anything, but whether or not a metric changes over time across a certain category can determine a lot about how y- your product is being used.

  85. 15:44

    By doing this, we've figured out that, you know, some customers, when we onboard them, they, they use our applications very differently than our historical customers, and we can now then make other investments in how to improve these systems.

  86. 15:53

    And ultimately, the goal is to create a data-driven way of defining the product ro- roadmap. Oftentimes, it is research that leads to better products now rather than products justifying some research that we don't know is possible.

  87. 16:07

    And again, the real marker of progress is your ability to have a high-quality hypothesis and your ability to test a lot of these hypotheses. And if you segment, you can make clearer hypotheses.

  88. 16:19

    If you use faster evals, you can run more experiments. And by having this continuous feedback through monitoring, this is how you actually build a product, right? This is-- Regardless of being an AI product, this is just how you build a product.

  89. 16:32

    And so if you look at the takeaways, really when you think about measuring the inputs, we really wanna think about not using public benchmarks, building evals on your data, and focusing first on retrieval, because that is the only thing a LLM improvement won't fix, right?

  90. 16:47

    If the retrieval is bad, the LLM will still get better over time, but you need to earn the right to sort of twi- tinker with the LLM by having good retrieval.

  91. 16:56

    And then lastly, if you don't have any customers or any users, you can start thinking about synthetic data as a way of augmenting that. And once you have users, look at your data as well.

  92. 17:04

    Look at the outputs, right? Extract structure from these conversations. Understand, you know, how many conversations are happening, how often are tools being misused, what are the errors, and how are people frustrated.

  93. 17:15

    And by doing that, you can do this population-level data analysis, find these similar clusters, and have some kind of impact-weighted understanding of what the tools are, right? It's one thing to say, you know, "Maybe we should build more tools for data visualization."

  94. 17:29

    It's another thing to say, "Hey, boss, forty percent of our conversations are around data visualization, and the, you know, the code engine or the code execution can't really do that well.

  95. 17:38

    Maybe we should build two more tools for plotting and then see if that's worth it." And you can justify that because we know there's a forty percent of the population is using data visualization, and we do that, you know, maybe only ten percent of the time, right?

  96. 17:49

    This is impact weighted. And ultimately, as you compare these KPIs across these clusters, you can just make better decisions across your entire product development process. So again, start small, look for structure, understand that structure, and start comparing your KPIs.

  97. 18:05

    And once you can do that, you can make decisions on what to fix, what to build, and what to ignore.

  98. 18:11

    If you wanna find more resources, feel free to check out these QR codes. Uh, the first one is to Chroma Cloud to understand a little bit more about their research, and the second one is actually a set of notebooks that we've built out that go through this process.

  99. 18:22

    So we load the weights and biases conversations, we do this cluster analysis, and we show you how we can use that to make better product decisions. So there's three Jupyter notebooks in that repo.

  100. 18:31

    Check them out on your own time, and, uh, thank you for listening. [audience applauding] We do have time for--

  101. 18:38

    We do have time for, like, one quick question and of course as well, outside as well. Perfect. So. Thank you. If anybody wants to grab the mic there and over there.

  102. 18:49

    So Jason. Yep. Uh, you're famous for spicy takes. What's the spicy take today?

  103. 18:58

    It's not KPI, by the way. That's not the spicy take. I think, I think more agent businesses should try to price and, like, s- price their services on the work done than the tokens used.

  104. 19:09

    Yeah. Price on success. Price on value. Very unrelated to this talk, but- Mm-hmm. [outro music]