← All AI Engineer talks

AI Engineer World's Fair 2024

BotDojo Launch: Enhancing AI Assistants with Evaluations and Synthetic Data

Paul Henry· CEO, BotDojo5:47

Read the talk

Improving a Support Chatbot by Changing What It Can Retrieve

Paul Henry’s BotDojo demo connects node-level traces, batch evaluations and documents generated from support conversations to test whether a chatbot has the information it needs.

From a talk by Paul Henry

Before you start: Familiarity with LLM prompts and vector retrieval will help you follow the chatbot and document-generation flows.

Getting beyond the weekend prototype

Connecting a vector database to an LLM can take a weekend. How do you know the resulting chatbot is ready for customers? Paul Henry, founder of BotDojo and a former CTO, describes that gap from work with teams deploying LLM applications for hundreds of thousands of customers. The connection is easy; making the application dependable is harder.

The demonstration starts with a chatbot template Henry says customers already use. The proposed improvement combines synthetic data with evaluations: identify where the chatbot lacks information, make additional material available to retrieval, and run the questions again to see what changes.

0:150:41
Suggest correction

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

0:15 · section reference included

Following a question through the flow

“How do I create a vector index in BotDojo?” is the first live question. As the chatbot runs, nodes light up in the editor: the flow takes the question, consults chat history, retrieves information from the vector database, and sends the resulting context to an AI model to produce an answer. This makes the retrieval-and-generation sequence visible rather than hiding it behind the chat interface.

Opening a node reveals the prompt sent to the LLM and its output. Henry also describes JSON Schema support when the selected model supports JSON output, mentioning Groq and Claude. That presentation-time description is conditional on model capabilities; it does not establish a particular provider API or strict schema-enforcement guarantee.

Per-node traces expose the exact data at each boundary, including what the retriever returned and what the LLM received. Those are different debugging questions: did retrieval supply useful evidence, and did the model use the supplied evidence well? The answer on screen includes an image and citations. Henry jokes, “We should ship it”—setting up the difference between an attractive answer and evidence that the chatbot works across questions.

BotDojo support chatbot with a response and embedded screenshot on the left, connected workflow nodes on the right, and a green Check Passed indicator.
The support chatbot’s response includes an image, a footnote link, and a passed check beside the executed flow.
1:141:23
Suggest correction

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

1:14 · section reference included

Rerunning questions with a larger retrieval corpus

BotDojo’s Batches feature runs collections of questions through a chatbot or other AI flow and evaluates the outputs. Henry opens an earlier run with five evaluations and attributes its red results to insufficient information in the vector database. The evaluations also check for hallucinations. Five evaluations does not establish how many test questions were in the batch.

To test the additional content, Henry changes the batch setup:

  1. Clone the earlier batch and rename it “with generated data.”
  2. Increase throughput to fit the live demonstration’s time limit.
  3. Remove the index filter that excluded generated content from the earlier run.

The generated documents already exist; there is not enough time to create the full dataset on stage. The substantive retrieval change is to admit previously excluded documents, rather than regenerate the corpus during this rerun.

Create Batch dialog showing evaluation checkboxes, concurrency control, model settings, an empty Index Filter editor, and Create And Run button.
Batch settings with the index filter cleared for the run named “With generated data.”

A small TypeScript example makes that selection difference concrete. Here, generated records are present in the corpus in both cases; only their eligibility for retrieval changes:

typescript

type DocumentRecord = {
  id: string;
  generated: boolean;
};

const corpus: DocumentRecord[] = [
  { id: "existing-document", generated: false },
  { id: "support-derived-document", generated: true },
];

const baselineCandidates = corpus.filter(doc => !doc.generated);
const expandedCandidates = [...corpus];

These illustrative records express the filter operation, not BotDojo’s filter syntax. In the demo, removing the filter lets the flow retrieve generated material alongside existing content.

RunExisting contentGenerated content
Earlier batchEligibleFiltered out
New batchEligibleEligible

Henry notes that model selection can also be changed for comparisons. He does not demonstrate a model change here; the comparison he sets up concerns access to generated content.

2:212:40
Suggest correction

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

2:21 · section reference included

Turning support conversations into documents

While the batch runs, Henry opens the flow used to generate the synthetic data and starts an example run. It accepts multiple inputs, supplied here by pasting JSON from a previous run. The starting material is support tickets: conversations between live support agents and customers. Extracting their question-answer pairs supplies questions to send through the chatbot as test data.

The document-generation process then connects those support interactions to the existing knowledge base:

  1. Retrieve relevant information from the existing index.
  2. Use that information to write a document in the same writing style.
  3. Evaluate inline whether the document contains enough information to answer the question.

The evaluation asks a specific question about the generated document’s usefulness. Producing plausible prose alone is not the completion criterion being checked.

A code node handles logic that would otherwise require a sprawling collection of low-code boxes. Henry describes TypeScript support and Python as coming soon at presentation time. The flow then writes the generated information into the vector index, making it available to the support chatbot when retrieval permits it. This closes the path from support conversations, through document generation and a sufficiency check, back into the corpus being tested.

BotDojo document-generation workflow beside a generated response, with evaluation and vector-index nodes, a human-review warning, and a Completed notification.
The document-generation flow finishes with evaluation and vector-index steps visible.
3:263:37
Suggest correction

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

3:26 · section reference included

Waiting for the comparison

Henry returns to the support chatbot to compare the earlier batch with the run that includes generated content, with roughly twenty seconds remaining. The comparison initially fails to appear, prompting a joke about having rehearsed it fifteen times. As the countdown continues, he adds an appeal for AI engineers to join the company and help fix it.

The comparison finally appears with a second to spare. Henry reports that the final comparison is all green, but supplies no numerical improvement, named final metric or test-question count. His closing description—“measurably improved something”—captures both the successful reveal and its limits. The demonstrated loop is concrete: evaluate a chatbot, admit additional support-derived documents into retrieval, and compare the rerun. The recording ends with that comparison, rather than a production deployment walkthrough.

4:455:01
Suggest correction

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

4:45 · section reference included

Resources

Updates since the talk

  • Current instructions for running a dataset through a Flow and comparing evaluation results after changes.

  • Configure code-based checks or LLM judges, map their inputs, and inspect scoring explanations.

  • Inspect agent requests, node execution and retrieved evidence in the current BotDojo interface.

  • Examples of adding custom logic to visual flows with schema-defined inputs, outputs and execution context.

Read the complete timestamped transcript
  1. 0:00

    [on-hold music] So hello, my name is Paul Henry.

  2. 0:15

    I'm the founder of BotDojo, and as a previous CTO, I was working with teams deploying LLMs applications for hundreds of thousands of customers. And like many of you guys know, it's super easy to hook up a vector database, um, with an LLM over the weekend, but really hard to get it pr-production ready.

  3. 0:33

    And so that's what we do. We are an AI enablement company, and we let companies deploy AI to prod.

  4. 0:41

    Live demo time. All right, so today I'm going to show you a, a demo of our product. We're going to take, uh, synthetic data that we're gonna generate, and we're gonna combine it with e-evaluations to see how we can improve the performance of a chatbot.

  5. 0:56

    Or at least that's what I hope happens. All right. So I'm gonna open up our template of our, uh, a chatbot, and we have customers live that are using this template.

  6. 1:07

    It's kind of battle tested. Um, and so let's test it out.

  7. 1:14

    How do I create a vector index in BotDojo?

  8. 1:23

    Okay. And as you can see, all the little nodes are lighting up as they execute. Um, we're taking the question, we're looking at the chat history, we're going to the ve-vector database to retrieve the information, and then we're answering it with a AI model.

  9. 1:36

    So if I pull this up, you can kind of see in our low-code, uh, editor, this is the prompt that we're sending to the LLM. We're getting the results out here.

  10. 1:45

    And we also support, uh, JA- JSON Schema. So if the model, uh, supports JSON output like, um, Groq, um, Claude and all that stuff, then we just conform to that.

  11. 1:57

    Um, one key thing is you can pull a trace of each node and see exactly what we sent to the LLM, what came from the retriever, the exact, you know, data, which has been super useful for debugging apps.

  12. 2:11

    All right. And cool, we have an image. It's got citations. We should ship it.

  13. 2:17

    That was supposed to be a joke, but all right. Um, [laughs]

  14. 2:21

    so this is where evaluations come in. So I'm going to demonstrate, um, the evaluations that I previously ran. So we have a, a feature in BotDojo, uh, called Batches, which allow you to run a whole bunch of questions through your chatbot or your AI flow and, um, run evaluations to kind of see how things are doing.

  15. 2:40

    So if you can see this, we have a few, uh, five evaluations that we ran. There's a little bit of red. Um, that's because, uh, we don't have enough information from our vector database.

  16. 2:49

    Um, it also checks for things like hallucinations. So let's try to fix that. And so I'm going to clone this batch. I'm gonna rename it with generated data. I'm gonna increase the throughput a little bit because of time.

  17. 3:06

    And, um, I had... I don't have enough time to generate all the data for this demo, so, um, the previous ran was filtering out the generated data, and so I'm gonna remove the filter that we're passing into the, uh, flow so it, it takes in the generated data.

  18. 3:21

    You can also change the model and all that kind of stuff to see how it performs.

  19. 3:26

    All right. So while that guy is running, I'm going to open up another flow. And so this is the actual flow that we, uh, generated that, uh, synthetic data.

  20. 3:37

    And so let me, uh, let me run this one real quick.

  21. 3:43

    And so this particular flow takes in multiple inputs, and so I'm gonna paste in, uh, some JSON from a previous run.

  22. 3:52

    And what this is gonna do is, is kind of a trick that's been working well for customers, is where you take, um, you extract questions and answers from support tickets, so these are live agents talking with customers, and you use this as a test data to send it through your chatbot.

  23. 4:07

    And, um, we take relevant information from the existing index, and we have it write a document. Um, and so it, it uses the same writing style and it, um, you know...

  24. 4:18

    And then we do a inline cite ta- uh, evaluation to where we check to see if the document has enough information to answer the question. And then we also have a code node here where, you know, a lot of times when you're using these low-code editors, there's like situations where you have forty thousand different, um, boxes.

  25. 4:34

    And so when you have to do write code, we support, um, TypeScript and, um, and soon, uh, Python. But you can see that, hey, we're getting the information and we're right into the vector index.

  26. 4:45

    All right. Running out of time. Okay. Let me go back to the support chatbot. Yeah, moment of truth. So I'm gonna compare, um, the, the batch that we ran before with the new stuff in twenty seconds.

  27. 5:01

    Oh, sh- [laughs] You do it, you do it fifteen times, and it doesn't work.

  28. 5:10

    Ten, nine... We're also hiring, so if you're an AI engineer- [laughs] [laughs]

  29. 5:14

    Help, help us fix this. All right, there it goes. Okay. Phew. All right. One second left. It's all green, so it improved the, uh, you know, [laughs] measurably improved something.

  30. 5:23

    So, uh, thank you. Um, BotDojo.com. Check us out. Thanks. [upbeat music]