WEBVTT

00:00.200 --> 00:01.520
Welcome to this tutorial.

00:01.680 --> 00:07.560
Today I'm going to show you how to build an AI voice agent that can answer questions using information

00:07.560 --> 00:08.600
from documents.

00:09.080 --> 00:15.440
So basically you'll be building a RAC agent, but as a voice agent, so you can use it for things like

00:15.480 --> 00:22.800
customer support or even low ticket sales as a widget on your website that visitors can interact with.

00:23.560 --> 00:29.960
We will be using 11 labs and a relatively new conversational AI feature to create our voice agent,

00:30.160 --> 00:32.240
and this is our setup.

00:32.720 --> 00:35.840
So we'll be using Bitcoin as a vector database.

00:36.040 --> 00:39.960
And of course an attempt to integrate everything as a use case.

00:39.960 --> 00:46.240
We are going to build this a voice agent for customer support for a solar panel installer company.

00:46.760 --> 00:53.720
So just to show you how this works with a real world example, I basically scrape information from this

00:53.720 --> 01:00.380
website, save it into two files in Google Drive, and then vectorize it to pinecone using All right.

01:00.420 --> 01:03.780
I'm going to do a quick demo and talk to a voice agent.

01:03.820 --> 01:05.740
We'll be building together in this lesson.

01:06.020 --> 01:12.100
So I'm going to ask is a question based on information from the company's website, which I scraped

01:12.100 --> 01:18.860
and stored in a Google doc inside a Google Drive folder, and then vectorize to create a knowledge base

01:18.860 --> 01:20.060
for our voice agent.

01:20.660 --> 01:22.980
First, I'm going to hit this workflow.

01:23.260 --> 01:24.340
You can see the flow.

01:29.260 --> 01:31.140
Hey, I'm Rob, your solar energy guide.

01:31.140 --> 01:32.420
How can I assist you today?

01:33.540 --> 01:37.420
What are the benefits of adding solar battery storage to my solar panel system?

01:38.260 --> 01:41.180
Let me check our information about battery storage benefits.

01:48.420 --> 01:53.940
Based on our data, battery storage lets you save money by storing excess daytime energy for nighttime

01:53.940 --> 01:56.540
use, reducing your dependence on the grid.

01:56.580 --> 02:01.480
You'll have backup power during outages, which is really handy for keeping your home running smoothly.

02:01.600 --> 02:06.720
Plus, you'll be helping the environment by using more renewable energy and reducing your carbon footprint.

02:09.840 --> 02:10.480
Perfect.

02:10.920 --> 02:13.960
So now I'm going to show you how to do it step by step.

02:14.520 --> 02:15.640
So let's get started.

02:15.960 --> 02:22.240
First, let's actually prepare the content we want to use as a knowledge base for our RAC agent.

02:22.280 --> 02:26.920
So go to your Google Drive account and create a new folder.

02:29.240 --> 02:31.960
I'm going to name mine demo.

02:33.280 --> 02:34.080
Confirm.

02:35.920 --> 02:39.920
Then go in and create a new file.

02:42.920 --> 02:45.080
I'm going to create a Google doc.

02:47.560 --> 02:51.160
Let's name it Solar panels.

02:54.760 --> 02:55.480
Installer.

02:58.980 --> 02:59.620
Confirm.

02:59.940 --> 03:02.060
Then go to the website you want to scrape.

03:04.660 --> 03:07.780
I'm going to grab information from this website.

03:07.780 --> 03:11.220
Just right click open in edit mode.

03:13.020 --> 03:16.460
And now you can see all the information available on this website.

03:16.500 --> 03:22.580
Now copy the information you want to add to the knowledge base for your rack agent such as services,

03:23.300 --> 03:28.860
opening hours, and so on and paste it to the document you have created in Google Drive.

03:29.100 --> 03:34.820
All right, now I've got all the necessary data I want to fit into my customer support agent.

03:35.460 --> 03:41.260
Actually, I'm going to create a second document with general information about this company to show

03:41.260 --> 03:44.020
you how to use group of items.

03:44.300 --> 03:45.460
Note in a ten.

03:45.980 --> 03:47.660
So let's create a new document.

03:49.660 --> 03:50.740
Let's call it.

03:54.160 --> 03:57.760
General Mason.

04:00.040 --> 04:04.160
And let's paste the general information about this company from their website.

04:04.440 --> 04:04.840
Alright.

04:04.880 --> 04:05.560
Perfect.

04:08.400 --> 04:15.240
Now we've got two files to documents in the demo folder for this project.

04:15.280 --> 04:17.160
General information and solar panels.

04:17.160 --> 04:17.920
Installer.

04:18.360 --> 04:21.200
Actually, let's rename it to services.

04:21.200 --> 04:21.680
Because.

04:22.040 --> 04:27.240
Because most of the information is about services, they offer services.

04:29.640 --> 04:29.920
Alright.

04:29.920 --> 04:30.520
Perfect.

04:32.120 --> 04:39.520
Now let's jump into an A-10 and build this part of the workflow to vectorize these files, this document

04:40.120 --> 04:41.840
into the database.

04:43.400 --> 04:47.440
So then our rack agent will be able to retrieve this information from the vector store.

04:49.440 --> 04:50.960
All right so let's start building.

04:51.040 --> 04:52.440
So let's create a workflow.

04:54.300 --> 04:56.540
Now let's add the first step.

04:58.140 --> 05:00.340
So so on chat message.

05:06.700 --> 05:12.540
Now let's add Google Drive note to search the folder we create in our Google Drive account.

05:15.780 --> 05:16.900
To search for Google Drive.

05:21.900 --> 05:24.820
And what we want to do we want to search files and folders.

05:26.380 --> 05:27.860
So choose this one as the action.

05:31.820 --> 05:33.820
Now connect your Google Drive account.

05:36.780 --> 05:38.020
Mine is already connected.

05:40.340 --> 05:44.540
As a result of file slash folder operation search.

05:45.620 --> 05:46.220
Search method.

05:46.220 --> 05:49.380
We want to search file folder name.

05:50.300 --> 05:50.460
No.

05:50.460 --> 05:51.380
Advanced search.

05:51.560 --> 05:53.600
Now the search query is empty.

05:55.520 --> 05:58.080
Let's limit to 20.

05:59.920 --> 06:05.360
This basically means that this is the max number of results to return as filter.

06:05.640 --> 06:09.920
Let that folder and let's select folder from list.

06:11.920 --> 06:13.040
This is the easiest way.

06:13.560 --> 06:17.480
Then let's search for the folder you just created in Grid Drive.

06:17.720 --> 06:22.840
I called my demo, but as you can see I have to refresh my credentials.

06:23.520 --> 06:24.440
So let's do it now.

06:29.160 --> 06:30.160
Let's say Google.

06:30.560 --> 06:32.840
I'm going to choose my Gmail account.

06:32.880 --> 06:39.040
I'm going to select all the permissions to give cloud access to all the files in my Google Drive.

06:39.240 --> 06:39.480
All right.

06:39.480 --> 06:40.640
Connection successful.

06:43.560 --> 06:45.600
Now let's go back to our node.

06:49.200 --> 06:51.100
Let's search for them all.

06:55.340 --> 06:58.260
And as you can see, the folder we have created is pop up.

06:59.180 --> 07:00.260
So let's choose this one.

07:02.100 --> 07:03.340
And that's it for this note.

07:04.820 --> 07:05.660
Let's move on.

07:05.780 --> 07:07.860
Actually I should use a different trigger.

07:08.060 --> 07:13.220
So instead of when Chatmessage received node I should use when you click on the workflow.

07:13.460 --> 07:14.580
So let's remove this one.

07:16.020 --> 07:19.740
Let's add new trigger and trigger manually.

07:20.060 --> 07:23.500
So it runs the flow on clicking a button in N810.

07:23.660 --> 07:29.740
So every time when I click on Test Workflow, it will vectorize the data to our vector store.

07:30.580 --> 07:32.340
So let's choose trigger manually.

07:34.780 --> 07:36.740
And let's connect it to our Google Drive node.

07:39.420 --> 07:39.980
Perfect.

07:40.300 --> 07:43.100
Now let's pull in the information from our two files.

07:43.100 --> 07:45.540
So let's give it a test.

07:45.580 --> 07:46.540
So test step.

07:48.880 --> 07:51.440
And now, as you can see, not executed successfully.

07:52.240 --> 07:56.400
And you have two items as an output with different IDs and names.

07:56.560 --> 08:02.640
So solar panels, installer services and general information as we just created a Google Drive.

08:04.800 --> 08:05.240
All right.

08:05.240 --> 08:05.720
Awesome.

08:05.880 --> 08:08.480
So now let's actually download these files.

08:09.480 --> 08:10.760
So then we can vectorize it.

08:10.760 --> 08:12.160
So our vector database.

08:12.760 --> 08:16.720
So the next node is going to be we drive.

08:18.640 --> 08:19.800
So again Google Drive.

08:20.120 --> 08:23.240
But this time we are going to download file.

08:24.120 --> 08:24.920
So click on it.

08:26.040 --> 08:27.400
And now we have ID.

08:28.240 --> 08:31.520
So our Google Drive account is already connected as resource.

08:31.520 --> 08:32.920
We want to leave it as file.

08:33.960 --> 08:38.400
We want to download the file for different use cases.

08:38.400 --> 08:41.800
You can switch to delete copy move and so on.

08:43.200 --> 08:48.460
But for this scenario you want to download the file and you want to button file fill it.

08:48.500 --> 08:50.860
We want to change it instead of from list.

08:50.860 --> 08:53.540
We want to download the file by ID.

08:54.420 --> 09:01.820
So now we can simply drag and drop this ID we just got from the previous node and drop it right here.

09:03.540 --> 09:04.500
Alright perfect.

09:04.820 --> 09:06.580
So now this is dynamic variable.

09:06.580 --> 09:11.540
So every new document which will be added to our Google Drive will be easily accessible by ID.

09:11.740 --> 09:16.780
And this node will be able to download every new document from Google Drive for us.

09:16.780 --> 09:17.820
So now let's move on.

09:19.580 --> 09:19.860
Alright.

09:19.860 --> 09:20.580
Perfect.

09:21.980 --> 09:25.300
Now the next step is to loop over each file we downloaded.

09:25.580 --> 09:28.580
So this is important because we are not just working with one file.

09:28.980 --> 09:33.780
We might have several documents, so we need to process them one by one.

09:33.980 --> 09:37.740
Embed the content and send it to pinecone individually.

09:38.220 --> 09:40.940
So let's add a loop over items node.

09:41.860 --> 09:45.100
So click on this plus button for loop.

09:46.920 --> 09:47.760
and click on it.

09:48.760 --> 09:51.000
You don't need to change the batch size here.

09:51.720 --> 09:52.600
Just close it.

09:53.800 --> 09:54.120
Alright.

09:54.120 --> 09:54.680
Perfect.

09:55.040 --> 10:00.920
So yeah, there is no simple way to add these files at once to our vector database.

10:01.080 --> 10:03.200
That's why we need to loop over each item.

10:03.520 --> 10:05.200
So let's remove this replace me node.

10:08.520 --> 10:10.000
And also delete this connection.

10:10.240 --> 10:16.280
Now the next step is to load these files into Pinecone Vector store.

10:16.720 --> 10:18.880
So let's add pinecone vector store node.

10:19.280 --> 10:21.960
So click on this plus next to the loop.

10:24.160 --> 10:25.360
And search for pinecone.

10:28.120 --> 10:28.960
Select this one.

10:30.440 --> 10:33.440
And what we want to do we want to add documents to Vector store.

10:35.920 --> 10:36.320
Alright.

10:36.320 --> 10:36.880
Perfect.

10:37.080 --> 10:42.880
Now I'll show you how to create an account with pinecone and explained how the pinecone vector database

10:42.880 --> 10:47.260
and vector store work in one of the previous tutorials when we're building a RAC agent.

10:47.260 --> 10:50.940
But in this tutorial I'm going to remind you how to create new credentials.

10:50.940 --> 10:55.340
So connect to your Bitcoin account to N810 and also how to create vector store.

10:55.380 --> 10:57.340
So let's create a credential.

10:58.660 --> 11:00.180
Now as you can see we need API key.

11:00.220 --> 11:02.140
So let's go to the Bitcoin website.

11:02.140 --> 11:04.540
If you already have an account please login.

11:04.780 --> 11:06.020
Otherwise sign up.

11:06.020 --> 11:09.340
Then in the left sidebar click on API keys.

11:12.260 --> 11:15.420
Create API key and give it a name.

11:18.220 --> 11:19.660
Let's say solar panels.

11:22.180 --> 11:22.740
Demo.

11:24.940 --> 11:25.780
Create key.

11:28.180 --> 11:31.500
Then copy it close.

11:32.260 --> 11:41.500
Go back to LinkedIn and paste it here hit save and now your credentials should be successfully created.

11:43.040 --> 11:44.040
So let's close it.

11:46.440 --> 11:46.800
All right.

11:46.800 --> 11:47.360
Perfect.

11:48.000 --> 11:53.560
All right, so once you connect it to your Bitcoin account to N810, in this step we are setting the

11:53.560 --> 11:59.920
operation to insert documents because we want to load all our embedded data into pinecone.

11:59.920 --> 12:01.920
So that's why you can see here pinecone Index.

12:02.440 --> 12:05.640
We are uploading this into a specific index inside pinecone.

12:05.920 --> 12:12.320
So now let's go back to pinecone and create an index so you can find all the indexes under database.

12:12.720 --> 12:14.120
So just click on indexes.

12:14.120 --> 12:16.600
And here you can create a new index.

12:16.960 --> 12:18.120
So create index.

12:19.440 --> 12:20.280
Let's scroll down.

12:22.760 --> 12:25.920
Now you want to use text embedding three small model.

12:26.160 --> 12:29.480
It's one of the most cost effective models offered by OpenAI.

12:29.640 --> 12:34.880
And later we'll be using the same model as embedding model in our workflow.

12:34.920 --> 12:35.960
So let's choose this one.

12:39.840 --> 12:40.700
Let's scroll down.

12:43.060 --> 12:45.860
You can leave cloud provider as an AWS.

12:47.820 --> 12:49.540
You can change the region if you want to.

12:52.740 --> 12:53.140
All right.

12:53.140 --> 12:53.620
Great.

12:56.860 --> 12:57.900
Now let's give it a name.

12:58.980 --> 13:00.260
I'm going to name mine.

13:02.020 --> 13:02.420
Um.

13:02.900 --> 13:03.820
Solar panels.

13:06.860 --> 13:07.380
Demo.

13:08.060 --> 13:08.500
Create.

13:08.500 --> 13:09.060
Index.

13:14.820 --> 13:15.260
All right.

13:15.300 --> 13:17.340
Now as you can see, our index is active.

13:17.540 --> 13:20.580
Now there is also this option called namespaces.

13:20.580 --> 13:24.300
So think of it like a sub folder inside your index.

13:24.420 --> 13:27.620
So it helps you keep different sets of documents separate.

13:27.620 --> 13:29.060
So let's click on it.

13:29.260 --> 13:36.980
And now when I go back to our workflow and and try to retrieve index from the list.

13:38.580 --> 13:43.920
As you can see, the solar panels, uh, demo index pop up such as this one.

13:45.360 --> 13:47.920
And also I want to add a namespace.

13:49.360 --> 13:50.720
So Python namespace.

13:51.360 --> 13:56.080
So basically this partition the records in an index into namespaces.

13:56.080 --> 14:00.120
So queries and other operations are then limited to one namespace.

14:00.360 --> 14:03.520
So different requests can search different subsets of your index.

14:04.120 --> 14:11.640
So let's name it solar panels docs.

14:13.400 --> 14:14.000
Perfect.

14:14.400 --> 14:21.360
Now before we test the step to vectorize our files into the Python vector store, we need to add an

14:21.400 --> 14:22.200
embedding model.

14:22.840 --> 14:23.960
So let's go back here.

14:26.080 --> 14:27.480
Now let's add embedding model.

14:28.960 --> 14:31.120
We want to use embeddings from OpenAI.

14:34.560 --> 14:36.680
Make sure the OpenAI account is connected.

14:36.680 --> 14:36.860
It.

14:37.260 --> 14:41.220
And as I mentioned earlier, we need to use the same embedding model.

14:41.700 --> 14:43.500
So text embedding is model.

14:44.140 --> 14:48.100
There is also text embedding and text bedding 002.

14:48.140 --> 14:49.540
But we want to stick with this one.

14:50.780 --> 14:51.500
Close it.

14:52.820 --> 14:53.660
Alright great.

14:55.180 --> 14:56.340
Now it's document loader.

14:56.340 --> 14:59.100
We want to use default data loader.

14:59.100 --> 15:01.540
So load data from previous step in the workflow.

15:04.300 --> 15:07.420
Now one thing you need to pay attention to is we.

15:07.420 --> 15:13.380
We don't want to load data in JSON format because we want to download the files from Google Drive and

15:13.380 --> 15:17.980
then load it into Python vector store in binary format.

15:18.420 --> 15:21.100
So to process binary data from previous step in the workflow.

15:21.500 --> 15:22.620
So switch to binary.

15:23.340 --> 15:29.420
Now in mode we want to load our input data and we want to automatically detect by Mime type.

15:29.780 --> 15:31.740
And that's all we need to change in this node.

15:32.620 --> 15:33.660
So that's good to go.

15:35.380 --> 15:38.200
Now the last step, we want to add the text splitter.

15:39.320 --> 15:44.600
And we are going to use recursive character text splitter, which splits text into chunks by characters

15:44.600 --> 15:45.320
recursively.

15:45.320 --> 15:47.800
And it's more recommended for most use cases, as you can see.

15:49.440 --> 15:54.240
And we are going to leave chunk size to 1000 and don't change the chunk overlap.

15:55.440 --> 15:56.400
Alright, perfect.

15:58.320 --> 16:00.160
Now you can actually save the workflow.

16:03.160 --> 16:09.080
And now when I hit Test workflow, the two files I've created in my Google Drive should be downloaded

16:09.080 --> 16:11.160
and then vectorized to my pickle vector store.

16:11.200 --> 16:12.360
So let's see it in action.

16:20.200 --> 16:21.000
Alright, perfect.

16:21.000 --> 16:22.480
So workflow executed successfully.

16:22.480 --> 16:24.720
Now let's go back to my pickle vector store.

16:25.320 --> 16:29.200
And now as you can see the new namespace has been created solar panels docks.

16:29.200 --> 16:30.480
And I have nine records.

16:30.520 --> 16:31.840
Now when I go to browser.

16:34.700 --> 16:36.940
I can see all my records right here.

16:40.140 --> 16:42.500
So basically these two files.

16:43.260 --> 16:49.660
So solar panels, installer services and general information have been vectorized into nine separate

16:50.060 --> 16:50.780
records.

16:51.140 --> 16:51.500
Alright.

16:51.500 --> 16:51.660
Great.

16:51.700 --> 16:53.740
Now let's go back to our workflow.

16:55.340 --> 16:55.700
All right.

16:55.740 --> 16:56.180
Great.

16:56.220 --> 16:58.780
You almost finished this part of the workflow for now.

16:58.980 --> 17:01.540
It's going to vectorize just one document.

17:01.540 --> 17:03.620
So we need to put it into the loop.

17:04.460 --> 17:10.300
So let's grab this plus and connect it to the loop node.

17:10.300 --> 17:15.420
So this way the vectorizing process will be repeated for every document in our Google Drive folder.

17:16.380 --> 17:16.700
Alright.

17:16.740 --> 17:17.380
Perfect.

17:17.700 --> 17:18.620
Let's hit save.

17:19.100 --> 17:24.220
Now imagine you've got hundreds of documents, or maybe you are working on a new project.

17:24.220 --> 17:25.300
Maybe for a client.

17:25.700 --> 17:32.800
They've got tons of documents like PDFs, technical manuals, service brochures, installation guides.

17:33.240 --> 17:40.120
So now you know how to set it up, and you can easily add new documents to your Google folder and just

17:40.120 --> 17:47.040
click on Test Workflow, and all the files will be automatically vectorized for you into the vector

17:47.040 --> 17:47.440
store.

17:48.160 --> 17:49.520
So it saves you a lot of time.

17:50.520 --> 17:55.760
And to be honest, from here building the voice agent on top of that is actually the easy part.

17:56.880 --> 17:57.720
So let's move on.

17:57.960 --> 17:58.720
All right.

17:58.760 --> 18:00.720
Now we are switching over to 11 labs.

18:01.160 --> 18:07.280
If you don't have an account yet, you can use the link we provide in the course setups lesson.

18:07.760 --> 18:09.440
You might get some special offers.

18:09.840 --> 18:10.960
So just simply sign up.

18:11.480 --> 18:18.000
Once you are in head over to the conversational AI in the products section.

18:20.120 --> 18:21.560
Then go to agents.

18:25.040 --> 18:28.400
And here we are going to create our voice agent.

18:29.040 --> 18:30.440
So click on New agent.

18:33.140 --> 18:38.900
Now you can use pre-built template if you wish to, but I'm going to show you how to build this from

18:38.900 --> 18:39.340
scratch.

18:39.540 --> 18:41.940
So we are going to use a blank template.

18:41.940 --> 18:45.460
So click on that create agent.

18:46.900 --> 18:48.580
Actually you have to provide a name.

18:49.780 --> 18:55.260
So let's call it solar panels advisor.

18:57.500 --> 18:58.500
Create agent.

19:01.020 --> 19:01.380
All right.

19:01.380 --> 19:03.260
Here we have to configure our agent.

19:03.980 --> 19:06.700
So first of all here you can change the language.

19:07.780 --> 19:08.860
Now let's scroll down.

19:10.540 --> 19:15.580
The first message the agent will say if empty agent will wait for the user to start the conversation.

19:16.100 --> 19:21.820
So the first message I wanted to say something like, hey, I'm Rob.

19:21.860 --> 19:23.180
You saw an edge guide.

19:23.180 --> 19:24.420
How can I assist you today?

19:27.700 --> 19:28.740
Now this is very important.

19:28.740 --> 19:30.880
We need to add a system prompt.

19:31.240 --> 19:36.240
So this is used to determine the persona of the agent and the context of the conversation.

19:37.240 --> 19:41.040
And here you can go to learn more and read the documentation.

19:44.000 --> 19:45.200
So let's actually have a look.

19:45.840 --> 19:52.400
So by reading this article you can learn about best practices of prompting and learn how to engineer

19:52.440 --> 19:55.000
a lifelike, engaging conversational agents.

19:55.760 --> 19:56.760
We have an overview.

19:59.680 --> 20:00.920
We have some framework.

20:06.560 --> 20:07.720
I think is worth reading.

20:11.720 --> 20:13.920
But I have prepared the prompt for this setup.

20:13.920 --> 20:16.840
So I'm going back to my agent.

20:18.880 --> 20:22.120
Right now I'm going to paste the prompt.

20:22.120 --> 20:27.940
So I want it to act as a customer support assistant for solar panels.

20:28.260 --> 20:32.900
And if you charge the installations, provide clear and accurate information about energy.

20:32.900 --> 20:34.940
Concerns about energy concerns.

20:34.980 --> 20:40.420
Services including options pricing and installation, use the solar installers.

20:40.620 --> 20:45.820
So this is the tool we are going to create later on this configuration page.

20:46.380 --> 20:51.940
So this is basically the way how N810 communicates with 11 laps via webhook.

20:53.180 --> 20:58.340
So use the N810 solar installers to query the database for details on solar panels, battery storage

20:59.500 --> 21:01.540
chargers, and installation procedures.

21:01.580 --> 21:05.100
Respond with concise, friendly answer based on the retrieved data.

21:05.140 --> 21:11.540
Maintain a friendly and approachable tone using natural filters like to keep the conversation engaging.

21:11.820 --> 21:13.700
Avoid repeating the user's question.

21:13.860 --> 21:17.380
Provide a clear and direct response with the necessary information.

21:17.700 --> 21:19.180
Max for sentences.

21:19.660 --> 21:20.620
Alright, perfect.

21:20.660 --> 21:23.340
Of course, feel free to change this system prompt.

21:23.500 --> 21:26.020
You can use it as a framework, as a template.

21:26.320 --> 21:31.880
you can always expand it and modify it to suit your needs and use case.

21:33.760 --> 21:34.120
All right.

21:34.120 --> 21:34.400
Great.

21:34.440 --> 21:35.400
Now let's move on.

21:35.600 --> 21:37.120
Here you can change the LM.

21:39.120 --> 21:42.240
So by default we have Gemini 2.0 flash.

21:42.840 --> 21:50.840
But you can switch to for example Gemini two Gemini 1.5 flash which is a little bit more cost effective,

21:51.040 --> 21:52.400
or to GPT four mini.

21:52.680 --> 21:59.200
Now I tested this setup multiple times with different large language models, and I strongly recommend

21:59.200 --> 22:00.200
you to use.

22:04.360 --> 22:06.920
Cloud 3.5 v2.

22:09.400 --> 22:13.720
Sometimes when I, for example, was using the default model.

22:13.720 --> 22:15.880
So Gemini 2.0 flash.

22:16.520 --> 22:20.680
Even though I had everything set up correctly, the webhook connection didn't work.

22:20.680 --> 22:24.860
I couldn't get any data from 11 labs into my editing workflow.

22:25.620 --> 22:28.060
So I strongly recommend you to use this model.

22:29.260 --> 22:37.020
Of course, you can test other models as well if you wish to, but I really like this model from anthropic.

22:37.060 --> 22:43.660
And as you can see, currently the LM cost is covered by 11 labs and in the future this cost will be

22:43.660 --> 22:45.100
passed on to us.

22:47.660 --> 22:49.500
Now here you can control the temperature.

22:49.500 --> 22:56.660
So this is the parameter that controls the creativity or randomness of the responses generated by the

22:56.660 --> 22:57.180
LM.

22:57.940 --> 22:59.500
I'm going to leave it as it is.

23:00.940 --> 23:04.780
Here you can configure the maximum number of tokens that the LM can predict.

23:05.660 --> 23:06.860
Let's leave it as it is.

23:07.860 --> 23:11.020
Here you can provide the LM with a knowledge base.

23:11.020 --> 23:12.740
So you can simply add document.

23:14.820 --> 23:18.500
First you need to go to the knowledge base section.

23:22.660 --> 23:26.320
And here you can add URL, you can add files, you can create a text.

23:27.440 --> 23:33.800
And then when you go back to and then you can give access to the knowledge base to your agent.

23:42.240 --> 23:42.880
Right here.

23:43.080 --> 23:47.280
So you can add document and the knowledge base will pop up.

23:50.200 --> 23:56.840
So if you are not using any ten and Python 11 laps also lets you upload documents directly into the

23:57.080 --> 23:58.880
agents knowledge base like this.

23:59.640 --> 24:04.160
Um, it's kind of similar to what we are doing with N810 and PyCon.

24:04.440 --> 24:10.000
The big difference is that with our approach, we have more control, so you can connect it to live

24:10.000 --> 24:14.120
data and add custom logic with multiple data sources.

24:14.720 --> 24:19.480
And and we can track or store conversations if you want.

24:20.120 --> 24:27.100
But yeah, if you just need something quick and simple, you can simply upload the document right here.

24:27.620 --> 24:32.060
So this agent will be able to retrieve information from the documents.

24:33.820 --> 24:34.140
All right.

24:34.180 --> 24:34.580
Great.

24:36.780 --> 24:42.220
Now, if you want your agent to sound more creative or conversational, you can move the temperature

24:42.220 --> 24:44.140
slider to the right.

24:44.260 --> 24:49.140
That tells the AI to take a more risk with how it phrases things.

24:49.140 --> 24:49.700
So it might.

24:49.740 --> 24:54.220
So it might use more casual language or vary how it answers similar questions.

24:54.740 --> 25:00.660
But if you are building something like a support agent or a sales assistant, but you want it to be

25:00.660 --> 25:07.660
consistent and clear, it's better to keep the temperature lower so it sticks more closely to the facts

25:07.660 --> 25:10.580
and gives a less randomness in the responses.

25:10.620 --> 25:12.940
So I want it to be a little bit more creative.

25:12.940 --> 25:17.340
So I'm going to increase the temperature right here like that.

25:18.900 --> 25:20.120
All right let's hit save.

25:21.680 --> 25:21.880
Here.

25:21.880 --> 25:26.760
You can also enable a rack to increase the agents maximum knowledge by size.

25:26.760 --> 25:33.080
So as you can see, the agent will have access to relevant pieces of knowledge base during answer generation.

25:33.080 --> 25:35.760
But we are going to build our agent in ten.

25:35.800 --> 25:40.360
Now, this is the part where we connect our agent to the backend.

25:40.680 --> 25:42.200
So to the workflow.

25:42.200 --> 25:43.800
So right here you have elapsed.

25:43.800 --> 25:46.200
This is where we want to add a custom tool.

25:46.240 --> 25:51.680
So this tool will handle the actual communication between the agent and our vector database.

25:51.720 --> 25:54.440
So do you remember earlier in our system prompt.

25:57.840 --> 26:00.800
We mentioned use the Na ten solar installers.

26:01.120 --> 26:07.280
Actually you can add here to make it clear to query the database for details and solar panels.

26:08.120 --> 26:10.240
So in other words to fetch the information.

26:11.000 --> 26:12.520
So this is where.

26:15.040 --> 26:18.500
We actually define what that tool is and how it works?

26:18.980 --> 26:22.020
So to do that I'm going to add tool.

26:24.460 --> 26:28.820
And click Custom tool because we want to add our webhook URL from N810.

26:29.380 --> 26:30.580
So click on the custom tool.

26:32.060 --> 26:32.740
Perfect.

26:33.380 --> 26:35.420
Now the tool type you want to use webhook.

26:36.060 --> 26:41.380
The webhook allows the agent to extract specific information from the call and send it to your server.

26:41.820 --> 26:43.700
Now what's happening behind the scenes?

26:43.700 --> 26:49.620
When someone talks to the agent, the lamp decides it needs extra information.

26:49.620 --> 26:55.940
It will send a request to a URL that's going to be a webhook will generate an n810.

26:56.100 --> 26:58.580
So it's basically just an API call under the hood.

26:58.620 --> 27:05.420
So once N810 gets that request, which includes the user's question, it runs a workflow, looks through

27:05.420 --> 27:11.860
the pinecone vector database, grabs the most relevant answer, and then sends that response back to

27:11.900 --> 27:12.780
the relevant labs.

27:12.820 --> 27:18.440
Then the 11 labs turns that response into speech And the agent speaks it to the user.

27:18.440 --> 27:19.480
So that's the full loop.

27:19.720 --> 27:24.000
Voice 2010 data from pinecone, back to speech and so on.

27:24.040 --> 27:29.800
So yeah, whenever a user says something to the voice agent, even labs, we try to respond.

27:29.960 --> 27:36.640
But if it sees the prompt, tells it to call an external tool like an 810 solar panel tool, it will

27:36.640 --> 27:43.080
send that question as a Post request to a specific URL, and that URL will be webhook from n810.

27:43.120 --> 27:44.960
So now I'm going to show you how to configure it.

27:45.000 --> 27:46.440
Again we want to use webhook.

27:46.480 --> 27:49.440
Now we need to describe to the LLM how and when to use the tool.

27:49.440 --> 27:54.480
So let's name it the same way we are using it in our system prompt 2010.

27:56.120 --> 27:56.920
You forgot.

27:59.240 --> 28:00.280
Solar installers.

28:01.960 --> 28:02.640
All right.

28:05.600 --> 28:13.200
A tool custom tool webhook name and description.

28:13.200 --> 28:14.160
Enter the description.

28:14.160 --> 28:16.380
Let's say use this tool.

28:16.380 --> 28:20.660
When the user asks something about solar panels or installation that you are not sure about.

28:20.980 --> 28:24.260
Send the questions and wait for a reply before responding.

28:24.300 --> 28:24.620
All right.

28:24.660 --> 28:25.020
Great.

28:25.060 --> 28:29.380
Now, the most important part you have to switch the method from get to post.

28:30.220 --> 28:34.980
So you are switching the method from get to post because you want to send the data.

28:35.540 --> 28:43.220
So the user's question to our webhook and post request lets us include a request body, which is how

28:43.220 --> 28:47.300
the agent sends the actual question over for processing.

28:47.500 --> 28:52.620
So now we need to create URL in our workflow and paste it right here.

28:53.180 --> 28:54.380
So let's go to 2010.

28:54.860 --> 28:58.340
And now let's actually start building the second part of the workflow.

29:04.180 --> 29:05.460
So let's search for webhook.

29:09.980 --> 29:12.620
So we want to start the workflow whenever it is called.

29:15.160 --> 29:16.720
Now let's use the test URL.

29:16.920 --> 29:19.880
But for production you want to switch over to production URL.

29:20.280 --> 29:22.280
Now you want to change the method to post.

29:25.040 --> 29:30.480
So we are setting this to post because in the end we are receiving data from the voice agent.

29:30.480 --> 29:36.040
So from 11 labs like the user's question and the post method, that's the webhook.

29:36.080 --> 29:40.040
Accept and handle that information in the request body.

29:41.720 --> 29:42.520
Alright, great.

29:42.560 --> 29:43.440
Now the path is fine.

29:43.440 --> 29:44.800
You don't need to change it.

29:44.840 --> 29:50.720
You can leave authentication as none but here but here in the response.

29:50.760 --> 29:57.880
So when and how to respond to the webhook instead of immediately you want to change it to using response

29:57.880 --> 29:59.000
to webhook node.

30:00.200 --> 30:01.920
So it will be defined in that node.

30:04.320 --> 30:05.200
Alright great.

30:05.680 --> 30:06.720
Now you can close it.

30:11.440 --> 30:13.540
Now make sure you grab the URL.

30:15.340 --> 30:16.420
So test URL.

30:18.740 --> 30:19.700
Here I'll copy it.

30:21.700 --> 30:23.500
Go to your service agent.

30:27.220 --> 30:28.300
And paste it right here.

30:30.780 --> 30:31.780
Then hit that tool.

30:32.220 --> 30:33.260
Now scroll down.

30:36.580 --> 30:38.100
You don't need to define headers.

30:39.380 --> 30:42.620
The only thing we need to do here is to add body parameters.

30:44.460 --> 30:45.780
And this is the next step.

30:45.780 --> 30:47.820
So we need to define the body parameters.

30:48.180 --> 30:52.700
This is what the voice agent will actually send to N810 when it calls the tool.

30:52.940 --> 30:58.740
So as you can read here, define parameters that will be collected by the LM and sent as the body of

30:58.740 --> 30:59.460
the request.

30:59.740 --> 31:01.020
So I'm going to enable it.

31:04.740 --> 31:05.900
As a description.

31:06.220 --> 31:12.560
I can say something like extract the user's query from the conversation and send it as a request.

31:12.960 --> 31:18.960
So this will be passed to LM and should describe in detail how to extract the data from the transcript.

31:19.000 --> 31:19.880
That should be fine.

31:19.920 --> 31:22.200
Now the next thing we need to do we need to add property.

31:22.840 --> 31:24.120
So click add property.

31:25.080 --> 31:30.440
The only thing we really need here is a field called you can call it questions.

31:32.480 --> 31:34.240
You can call it however you want.

31:36.360 --> 31:41.240
And that's where the user's spoken question will be passed along in the request.

31:41.560 --> 31:48.560
You can also add a short description something like user question.

31:50.720 --> 31:51.800
And that's actually it.

31:51.800 --> 31:55.480
So save changes and hit save again.

31:59.120 --> 32:00.040
Okay perfect.

32:00.080 --> 32:02.480
Now just a quick note because I forgot to mention.

32:02.480 --> 32:05.160
Let's go back to our tool configuration for a second.

32:06.680 --> 32:07.640
So double click.

32:10.260 --> 32:12.340
Scroll down to the body parameters.

32:14.460 --> 32:15.500
And to properties.

32:16.060 --> 32:22.300
So right now we are only sending the question as a body parameter, which is all we need for this basic

32:22.300 --> 32:22.900
setup.

32:23.300 --> 32:29.500
But if you ever want to extend this, like maybe you want the agent to book a calendar meeting, collect

32:29.500 --> 32:33.780
contact details, or pass date and time info, you can add more properties here.

32:34.060 --> 32:38.620
Just create additional fields and then will receive all of them in the webhook.

32:39.300 --> 32:41.540
So for now though, we will keep it simple.

32:42.180 --> 32:43.700
Just the question and answer flow.

32:43.740 --> 32:48.220
So once that's done, click Add Tool and you will see it appear in your agent setup.

32:48.340 --> 32:54.860
So I named mine Solar installers, but you can name yours whatever makes sense for your project.

32:55.580 --> 32:57.340
So now let's move on and finish.

32:57.620 --> 33:00.940
So now let's move on and finish integrating this in.

33:01.500 --> 33:06.940
Once you have added the tool and saved everything, let's do a quick test to make sure the webhook is

33:06.940 --> 33:07.960
working correctly.

33:08.800 --> 33:12.240
So now let's, um, in the webhook settings.

33:15.000 --> 33:21.240
Let's temporarily change it to respond immediately just for the test.

33:23.200 --> 33:26.440
That way we'll get a response right away while testing.

33:27.920 --> 33:29.440
So it's safe.

33:31.720 --> 33:32.800
Now test workflow.

33:35.960 --> 33:37.560
Go to your agent.

33:40.360 --> 33:43.280
So now let's test our agent.

33:43.760 --> 33:45.240
So click on Test agent.

33:47.840 --> 33:54.200
And I'm going to call to talk to it to get the data into our workflow.

33:54.760 --> 33:56.640
So click on this button.

33:58.760 --> 34:00.640
Hey I'm Rob your solar energy guide.

34:00.640 --> 34:01.840
How can I assist you today.

34:04.120 --> 34:05.080
Are available now.

34:08.020 --> 34:09.980
Let me check our current solar panel.

34:13.580 --> 34:15.340
Workflow executed successfully.

34:18.140 --> 34:19.700
Now let's check the executions.

34:21.300 --> 34:22.180
As you can see.

34:25.420 --> 34:26.420
Let's wait a moment.

34:29.020 --> 34:30.460
Let's open our web hook node.

34:32.940 --> 34:37.180
And as you can see, our agent successfully passed all the information.

34:37.180 --> 34:40.940
So the question I asked the webhook to our workflow.

34:42.580 --> 34:42.860
All right.

34:42.900 --> 34:43.380
Great.

34:45.780 --> 34:47.060
Now let's go back to editor.

34:49.620 --> 34:51.900
And let's carry on with the second part of the workflow.

34:51.940 --> 34:53.060
Now this is really important.

34:53.060 --> 35:03.780
Before we add our RAC agent let's change the response field from immediately to using respond to webhook

35:03.800 --> 35:04.200
Note.

35:04.240 --> 35:05.640
You will see why later.

35:06.720 --> 35:07.000
All right.

35:07.000 --> 35:07.480
Great.

35:10.640 --> 35:10.960
All right.

35:10.960 --> 35:11.480
Awesome.

35:12.440 --> 35:13.880
Now you have data in our flow.

35:16.680 --> 35:18.280
So let's search for a agent.

35:18.320 --> 35:21.160
So click on AI agent.

35:22.880 --> 35:23.120
All right.

35:23.160 --> 35:23.800
Perfect.

35:26.280 --> 35:31.040
Now the search for prompt we want to switch over to define below.

35:34.480 --> 35:35.240
Expression.

35:36.440 --> 35:43.560
So remember in the webhook configuration on 11 labs platform we can configure headers parameters body.

35:44.600 --> 35:45.600
So let's go back.

35:46.680 --> 35:47.840
Go back to our agent.

35:54.080 --> 35:54.920
Let's scroll down.

35:55.960 --> 35:57.040
Let's open our tool.

36:01.520 --> 36:03.580
Webhook configuration.

36:04.940 --> 36:09.380
You have headers, parameters, query parameters, and body parameters.

36:11.260 --> 36:12.700
So now let me go back to.

36:13.140 --> 36:21.380
So now when we check any then you have headers parameters query and body.

36:21.740 --> 36:23.340
So here you have two.

36:25.780 --> 36:29.100
So in the prompt field you have to include our question.

36:30.860 --> 36:32.620
So let's drag it and drop it here.

36:33.660 --> 36:33.980
Alright.

36:33.980 --> 36:34.620
Perfect.

36:36.060 --> 36:36.700
Great.

36:36.860 --> 36:42.860
Now of course if you switch over to JSON format you can see how it looks like in JSON.

36:42.900 --> 36:44.540
You have a body and a question.

36:45.980 --> 36:46.340
All right.

36:46.340 --> 36:46.780
Awesome.

36:47.220 --> 36:49.020
So now we have to add a couple more things.

36:49.020 --> 36:50.540
But this is very straightforward.

36:51.220 --> 36:54.100
So first chat model done it many times.

36:54.100 --> 36:58.740
So OpenAI model let's stick with GPT for me.

36:59.940 --> 37:00.540
All right.

37:00.540 --> 37:08.080
Once we have set up the prompt and the question is flowing into an agent, the next step is to connect

37:08.080 --> 37:09.320
it to our vector store.

37:09.880 --> 37:13.000
So I'm going to add a vector store tool to the agent.

37:13.040 --> 37:14.720
So click on add button.

37:15.840 --> 37:16.800
Search for answer.

37:22.840 --> 37:24.240
And you want to use this tool.

37:24.240 --> 37:31.480
So this is what allows it to look up relevant documents based on the user's question.

37:31.520 --> 37:33.000
You have to provide the data name.

37:33.160 --> 37:38.560
So let's call it data plus dot description of the data.

37:39.480 --> 37:41.240
So describe the data in vector store.

37:41.280 --> 37:43.920
This will be used to fill this to description.

37:43.920 --> 37:47.960
Useful for when you need to answer questions about and placeholder.

37:47.960 --> 37:54.000
Whenever you need information about placeholder data description, you should always use this input

37:54.040 --> 37:56.440
should be a fully formed question.

37:56.640 --> 37:58.480
So I'm going to use this description.

37:59.000 --> 38:02.780
Use this data to answer the questions clearly and accurately.

38:03.780 --> 38:07.820
You can specify limit or you can hit this button to let the model define.

38:07.820 --> 38:13.340
This parameter limit is the maximum number of results to return, let's say five.

38:15.460 --> 38:15.980
Great.

38:19.980 --> 38:27.820
And here we have to add a vector star to give our agent access to the documents we vectorize in the

38:27.820 --> 38:29.020
first part of the workflow.

38:29.660 --> 38:31.940
So the files you have created are folder.

38:36.540 --> 38:40.700
So you want to use vector store to work with the data.

38:43.860 --> 38:48.060
Now we have already connected our pinecone account in the previous steps.

38:50.380 --> 38:51.500
In operation mode.

38:53.380 --> 38:57.020
This time we want to retrieve documents as a vector store chain tool.

38:58.400 --> 38:59.480
Just to remind you.

39:05.920 --> 39:09.560
We are using Insert Documents operation as operation mode.

39:10.880 --> 39:12.920
So this time we change it.

39:16.240 --> 39:19.520
To retrieve documents from list.

39:21.520 --> 39:22.880
I choose the same index.

39:22.880 --> 39:24.920
So solar panels demo in my case.

39:25.360 --> 39:29.400
And you also want to add option to namespace.

39:32.240 --> 39:34.000
I forgot the name of the namespace.

39:34.000 --> 39:37.240
So let me go back to icon.

39:38.800 --> 39:40.600
I call it solar panels.

39:40.760 --> 39:43.320
Docs migrate.

39:46.560 --> 39:47.440
And paste here.

39:48.880 --> 39:49.560
Perfect.

39:50.480 --> 39:52.000
Now we need to add Embeddingmodel.

39:53.000 --> 39:59.100
So we are going to use the same Embeddingmodel Laura as we used in the first part of the workflow.

40:00.300 --> 40:01.420
So embedding a model.

40:04.060 --> 40:06.660
Takes embedding pixel perfect.

40:07.540 --> 40:13.540
Now we also need to add model to our Python tool to search for an eye.

40:16.660 --> 40:17.660
And let's stick with GPT.

40:17.700 --> 40:18.380
Follow me.

40:20.260 --> 40:20.860
Perfect.

40:28.580 --> 40:29.620
Now the last node.

40:29.820 --> 40:33.180
So we need to respond back to 11 laps with the final answer.

40:33.700 --> 40:36.300
I'm going to respond to webhook node.

40:36.900 --> 40:43.580
So click on this plus button and this test and intend to return the answer to the original webhook request.

40:45.340 --> 40:46.660
Let's search for webhook.

40:47.820 --> 40:50.860
But this time we want to return this data for webhook.

40:51.460 --> 40:54.260
So we're going to use respond to webhook node.

40:54.260 --> 40:54.320
Note.

40:57.240 --> 41:02.640
And we want to respond to your first incoming item so you can leave it as it is before we give it a

41:02.640 --> 41:03.360
final test.

41:03.360 --> 41:04.760
Let's actually clean it a bit.

41:05.360 --> 41:12.160
So I'm going to rename this note to respond to 11 labs.

41:19.960 --> 41:20.760
All right.

41:20.800 --> 41:24.960
Let's rename this workflow to 11 labs.

41:40.440 --> 41:41.280
Alright, great.

41:42.760 --> 41:43.080
Alright.

41:43.080 --> 41:43.560
Awesome.

41:46.200 --> 41:49.160
Actually this is Rogue Agent, so let's rename it to RAC.

41:51.200 --> 41:51.480
All right.

41:51.520 --> 41:52.160
Perfect.

41:53.500 --> 41:59.660
All right, so now is the time to give our airvoice agent a final test and check if it can actually

41:59.660 --> 42:04.580
answer questions based on the information we stored in our database.

42:04.980 --> 42:07.540
So let's see if everything's working end to end.

42:08.820 --> 42:11.420
So now I'm going to test the workflow.

42:11.980 --> 42:20.500
Just to let you know if you are using a test URL in a web node and not a production URL, and you and

42:20.500 --> 42:24.900
your workflow is not active, you need to hit test workflow.

42:25.580 --> 42:29.260
Every time we want to ask a new question your voice agent.

42:30.420 --> 42:31.940
So let's test workflow now.

42:35.500 --> 42:38.340
Now let's go to our Google Drive folder.

42:40.540 --> 42:44.420
And solar panels installer services document.

42:51.640 --> 42:52.760
Now let's say.

42:55.120 --> 43:01.120
I'm going to ask why you should choose solar panel installation.

43:02.120 --> 43:02.480
Alright.

43:02.480 --> 43:06.480
So let's go back to our agents on Living Labs platform.

43:14.200 --> 43:14.840
This one.

43:15.560 --> 43:17.080
Let's start the conversation.

43:21.480 --> 43:23.480
Hey, I'm Rob, your solar energy guide.

43:23.480 --> 43:24.720
How can I assist you today?

43:25.800 --> 43:26.040
Why?

43:26.040 --> 43:28.480
I should choose your solar panel installation.

43:31.800 --> 43:34.720
Let me check our specific offerings and advantages for you.

43:47.840 --> 43:52.860
We're known for our expertise and quick service, typically responding within five working days.

43:52.900 --> 43:58.020
Our team of renewable energy specialists will guide you through the entire process, and we back our

43:58.020 --> 44:00.340
work with a five year workmanship guarantee.

44:00.500 --> 44:06.220
Plus, we offer flexible payment options and can create custom installation packages based on your specific

44:06.220 --> 44:07.260
budget and needs.

44:10.180 --> 44:10.540
Perfect.

44:10.540 --> 44:10.860
Thank you.

44:12.180 --> 44:12.620
Yes.

44:12.620 --> 44:18.980
So as you just heard, the agent was able to answer the question accurately using the information we

44:18.980 --> 44:24.500
previously vectorized and stored in our Python database.

44:26.980 --> 44:34.900
And of course, if you want to double check where the answer came from, you can go into executions

44:34.900 --> 44:35.740
in any turn.

44:38.820 --> 44:40.260
So let's open executions.

44:42.740 --> 44:43.780
This is the last one.

44:45.540 --> 44:53.080
And as you can see our agents successfully retrieved the information from the Python vector store.

44:54.440 --> 44:57.840
It didn't provide the answer just by using the LM.

44:58.360 --> 44:59.360
So like ChatGPT.

45:02.000 --> 45:02.360
All right.

45:02.360 --> 45:02.800
Awesome.

45:03.880 --> 45:04.480
All right.

45:04.480 --> 45:10.320
In this part of the tutorial, we are going to make a couple of small changes to get things closer to

45:10.360 --> 45:11.680
a production ready setup.

45:12.560 --> 45:18.760
And the first thing we'll do is switch the manual trigger for a schedule trigger so the workflow can

45:18.760 --> 45:23.000
run automatically without you needing to start it manually every time.

45:23.480 --> 45:26.480
So let's search for schedule trigger.

45:39.880 --> 45:42.160
Now let's remove the manual trigger.

45:45.400 --> 45:49.260
Over here And connect it to the Google Drive node.

45:55.220 --> 46:00.140
Now I want this workflow to be activated every day.

46:01.340 --> 46:02.780
Let's say at 7 a.m..

46:05.460 --> 46:05.740
Right.

46:05.780 --> 46:06.420
Perfect.

46:06.540 --> 46:10.180
So basically this workflow will run on the schedule you define here.

46:10.820 --> 46:12.140
Once you activate it.

46:12.140 --> 46:14.220
So the next step is to activate the workflow.

46:17.060 --> 46:17.780
Confirm.

46:19.660 --> 46:20.260
Perfect.

46:23.140 --> 46:27.300
Now I want to show you a few things on the platform.

46:27.300 --> 46:29.420
So let's go back to our agent.

46:33.820 --> 46:39.460
Yes I forgot to mention that here in the voice section you can test different voices.

46:40.500 --> 46:41.820
So by default we have Eric.

46:43.140 --> 46:51.000
You can also play with different settings, such as you can configure latency, you can change the stability

46:51.160 --> 46:54.840
to higher values, which will make the speech more consistent.

46:55.280 --> 46:57.560
But you can also make it sound monotone.

46:58.840 --> 47:05.600
You can adjust the speed to control the speed of the generated speech similarity, so higher values

47:05.600 --> 47:11.760
will boost the overall clarity and consistency of the voice, and very high values may lead to artifacts.

47:11.800 --> 47:15.040
Adjusting the value to find the right balance is recommended.

47:16.160 --> 47:18.520
Right now.

47:18.520 --> 47:25.360
Here in the analysis, you can define custom criteria to evaluate conversations against.

47:25.360 --> 47:29.120
You can find the evaluation results for each conversation in the history tab.

47:30.160 --> 47:35.240
You can also collect data so you can define custom data specifications to extract from conversation

47:35.240 --> 47:36.080
transcripts.

47:36.080 --> 47:41.320
You can always refer to the documentation to find more details about the settings.

47:41.880 --> 47:48.580
Now I'm not going to dive deeper into all the settings in this tutorial, but what I wanted to show

47:48.580 --> 47:49.660
you is a widget.

47:50.660 --> 47:55.260
So here you have a code snippet we can copy.

47:56.460 --> 48:01.140
So add the following snippet to the pages where you want the conversation widget to be, which looks

48:01.140 --> 48:01.820
like that.

48:02.020 --> 48:06.020
Also, you can enable feedback collection, so callers will be able to provide feedback continuously

48:06.020 --> 48:08.860
during the conversation and after it ends.

48:09.300 --> 48:12.620
Information about which agent response caused the feedback will be collected.

48:15.700 --> 48:19.980
Here you can customize the appearance of this widget so you can change the background color, text,

48:19.980 --> 48:20.900
color, etc..

48:22.940 --> 48:24.460
You can also change the avatar.

48:25.700 --> 48:28.620
Add your favorite color or brand color.

48:34.340 --> 48:40.660
Now, if you want to add this beautiful voice widget to any website, all you need to do is paste the

48:40.660 --> 48:49.000
snippet code into a site's HTML, ideally somewhere between the body tags, so this makes sure the widget

48:49.000 --> 48:49.960
loads properly.

48:50.560 --> 48:55.800
And I'm going to quickly show you how this works using one of my website as an example.

48:56.160 --> 48:56.560
All right.

48:56.560 --> 48:58.040
So this is one of my websites.

48:58.040 --> 49:02.840
As you can see there is no voice widgets showing at the bottom of the page.

49:03.080 --> 49:06.520
Now I'm going to show you how easy it is to add to any website.

49:06.760 --> 49:09.920
This website is built on WordPress and hosted on Hostinger.

49:10.280 --> 49:13.120
So first I will head over to my WordPress admin dashboard.

49:13.480 --> 49:18.960
Now the exact place where you paste the snippet code can vary depending on the platform you are using

49:19.480 --> 49:20.400
on WordPress.

49:20.440 --> 49:23.600
It's usually done through theme settings or with a plugin.

49:24.000 --> 49:30.160
Now, if you are using a different platform like Webflow, Wix, Squarespace, or even a plain HTML

49:30.160 --> 49:36.520
site, you will usually want to paste it somewhere inside the body tags, ideally just before the closing

49:36.520 --> 49:40.780
body tag or in the footer section if the platform provides one.

49:41.220 --> 49:44.860
So now when I go to theme options.

49:48.580 --> 49:50.300
Inside I have integration tab.

49:53.100 --> 49:58.380
And when I scroll down this is where I can paste custom code.

49:58.380 --> 50:02.740
So the exact place where you paste the snippet code can vary depending on the platform.

50:02.740 --> 50:09.580
As I said, and as I mentioned earlier, the best place to add the snippet is somewhere inside the body

50:09.580 --> 50:10.100
tags.

50:11.140 --> 50:14.460
So I'm going to copy the code snippet from 11 labs platform.

50:16.180 --> 50:18.100
Go to my WordPress website.

50:21.260 --> 50:22.820
And paste code right here.

50:25.060 --> 50:28.500
And then save changes.

50:30.940 --> 50:36.620
And now when I refresh the website, the voice agent widget appears at the bottom of the page so I can

50:36.620 --> 50:37.340
talk to it.

50:37.660 --> 50:38.500
So let's try.

50:40.480 --> 50:40.960
three.

50:42.760 --> 50:44.640
Hey, I'm Rob, your solar energy guide.

50:44.640 --> 50:45.920
How can I assist you today?

50:47.040 --> 50:47.560
Hi, Rob.

50:47.560 --> 50:49.640
What's what services do you offer?

50:50.880 --> 50:52.880
Let me check our service offerings for you.

50:52.880 --> 50:55.240
I'd be happy to tell you about our main services.

50:55.240 --> 51:00.720
We specialize in solar panel installations, battery storage solutions, and EV charger installations

51:00.720 --> 51:03.200
for both residential and commercial properties.

51:03.200 --> 51:07.960
We handle everything from initial consultation and system design to professional installation and after

51:08.000 --> 51:09.080
service support.

51:09.080 --> 51:11.440
Would you like to know more about any specific service?

51:11.880 --> 51:12.240
Alright.

51:12.240 --> 51:12.760
Thanks, Rob.

51:12.800 --> 51:13.160
Bye.

51:14.720 --> 51:14.960
Yes.

51:14.960 --> 51:20.840
So remember we trained our RAC agent based on the information available on this website.

51:21.760 --> 51:22.840
So from this company.

51:23.720 --> 51:24.040
Right.

51:24.040 --> 51:24.520
Great.

51:25.680 --> 51:25.880
Yes.

51:25.880 --> 51:30.440
So now visitors can actually talk to the agent and ask questions.

51:30.480 --> 51:34.640
For example I could vectorize some key information about the services we offer.

51:35.200 --> 51:41.660
Add that to our knowledge base and the agent will be ready to answer those queries in real time.

51:43.620 --> 51:45.540
Now, back in my WordPress dashboard.

51:46.500 --> 51:49.980
As you can see, I'm using a built in integration panel.

51:50.100 --> 51:58.460
I don't actually see the full HTML code with the body tags directly, but this box is designed to inject

51:58.460 --> 52:03.500
whatever, whatever code I paste here into the body section of this site.

52:04.180 --> 52:11.180
So even though I can't see the actual body tags, this works just like placing it before the closing

52:11.180 --> 52:13.420
body tag manually.

52:14.300 --> 52:16.140
So this would look like that.

52:16.220 --> 52:19.980
Um, let me just paste here this.

52:20.380 --> 52:24.780
Yes, we have opening body tag for the website content.

52:25.580 --> 52:29.220
And this is where the widget code will go right here.

52:29.500 --> 52:31.060
And then closing body tag.

52:31.260 --> 52:31.580
All right.

52:31.580 --> 52:35.980
So now you know how to add the voice widget onto your website.

52:36.020 --> 52:36.580
Perfect.
