Hi friends, well, Power Virtual Agent
features are now part of Copilot Studio. That's old news, of course, but
it's way more than just a rebrand. All of the functionality of AI Builder
is now there and a whole load more AI
features, and it's all set to make your classic bots way, way smarter using AI and
in this video, we're going to look at some
of those features, especially the plugins. And as you know, I love to
extend and customize things. And that's what plugins are doing is
they're allowing us to create these
reusable pieces of functionality that can be added to your copilots to allow
you to integrate with external data. Copilot is a word that you'll see all
over the place because there are so
many copilots, but broadly there are there are three different types. There is the Microsoft 365 copilot. That you can use inside Teams that
allows you to do things like summarize
your meetings and get action points. And then there are these first party
copilot that are built also by Microsoft. And you'll see those in other products
like Dynamic 365 for Sales, but also
you'll see them in places like Power Apps that allows you to Build apps using
natural language and then custom copilots. These are built by you for very
specific tasks and they can be added
into teams, into power apps, even or
on a website which is public facing. And these are closer to what
you might've been doing when
you were building classic bots. But there are some very
important differences. Stick around for the end of
this video where I show you some
really cool things you can do. So there are at least seven
different types of plugins. So let's take a run through them. So Microsoft 365 Copilot can be
extended, using conversational plugins
built using low code and you can drag
actions on to the canvas that allows you to do things like integrate with
maybe an external site that allows you
to ask questions about a HR procedure. Then there are the AI plugins and there
are four different types of AI plugins. Generate content or extract insights
and these are GPT prompts allowing
you to provide a system prompt
that can take data from the user. So here you can see where I've created
a prompt to provide career advice where
you're giving it information about what
you're good at, what you're interested in, and then it can give you all of the
suggestions with like what university
degree you may need or what high
school qualifications you might need. And then there's custom automation
and there is a new trigger for
cloud flows called a skills trigger. And this is where it can be triggered
from the Microsoft 365 copilot and then
you can just do a normal cloud flow and integrate with whatever you need to do
and then respond some data that way. Then there is a custom connector plugin
and well that's just what it says on the
tin that you can use a custom connector but there's this new tab that allows
you to then define how your custom
connector is exposed to the copilot. So you can create like a natural language
description of what the various different
actions and the different parameters do. And then the copilot does the rest. It just works out when it needs to call
that plugin and on how best to, and
you can have a conversation with it. And it will ask for different parameters. Maybe if you haven't provided them all,
then there is the traditional OpenAI
plugins, which you can then integrate
in just using the OpenAI manifest. And actually that creates a custom
connector behind the scenes for you. Then your custom copilots can be extended
using the Azure Bot Framework, but also
you can extend using Action Plugins. And what Action Plugins do is that
they can call a custom connector,
similar to the custom connector plugin,
but this is for your custom copilot. What's cool about these is that you
describe what it does in natural language
and use this dynamic chaining, which is
where the GPT will work out when best to call your, your action and how to
extract all the different parameters from
the different messages that you give it. And it may ask you for some more data. And then the response that comes
back from that plug in, it will then
work out how best to describe it. or you can even show a an
adaptive card if you want to. And this is especially exciting if
you've been used to creating the question
and answer linear flow classic bot. Because no longer with dynamic
chaining, do you need to worry
about constantly changing topic and working out what information needs
to be passed between those topics. The copilot just handles that. it kind of feels like magic. Let me show you. So here I have a Power App and it is
not using a Dataverse Connector, it is
using a custom connector and that custom
connector is built using Visual studio and I have a video on how to do this and
I'm actually debugging this locally so
if I go and run my uh, custom connector
and I refresh my orders there you can see, it has hit a breakpoint and it's
going to return those and this just is
actually just returning an in memory
database of and I can do things like it. So I can edit them and I can
update them and add new ones. But if we go and look at the custom
connector definition, and if we look
at the definition, we've got all the different, uh, order operations,
order list add, update, delete. And these are simply being
called in my Power App. So if we go and edit here and we look at
what's going on behind the save button,
you can see that we are calling the
update order or the order Add operation. So what I've also done is I've
added in a chatbot control. So what this allows us to do is to
select a particular chatbot that's
being published by Copilot Studio. So if I run this, I can now ask questions. So I can say, let's say, what date
was the order with ID 1002 placed on? And that simply is integrating
with my custom connector. But what I can also say
is, what was the status? So there we go. It's now giving us processing and I can
now also integrate with the update order. So if I say update status to be shipped,
it's asking me for confirmation. So I'll say yes. And up order updated. So if I update this now, if I
refresh this, it's now going
to go and get me all the latest orders. And there you can see that the status
now has been, is changed to shipped. So here is my list of copilots. Now if I go and create a new co-pilot
like this, and I say order admin, copilot,
uh, and now we give it the language, this is the primary language, but later on
you can go and add additional languages. If we go to edit advance options,
we can go and put it in the right
solution, which is very important,
and give it a schema name. And then if we go create, so there we go. We, our chat bot is now created. In here we can see we've got all these
AI plug in at this AI plug in area. But what we want to do is go into
the topics here and I'm going to
go and create a new plug in action. And the first thing we want to
do there is we want to select
the Order Admin connector. So we search for the Order Admin. There we go. We can see Get Order, List Orders. So let's select List Orders. So there we go, I'm going to go next. Now it's just asking for a little
bit of information about my orders. So this just came from
my custom connector. What we can also do is add in additional
information here that will allow the
copilot to be smarter when it works out
that you want to actually list the order. So list order orders
with an optional filter. We could also say allows showing
orders placed on a specific date. If we go back, it's also asking for the
inputs here, so the date of the order,
and this has all come from that connector. So I'm going do a save. So I'm going to go back into my app. If say list all orders placed on the
3rd of January 2024 .So this should
come up with this particular order here. um, only just a single one. So it's hit our break point
and we come back there. So there you go. You can see that it's now come
back with the information. So we've come back over to Copilot
Studio and we can say the same thing. So list all the orders placed
on the 3rd of January 2024. So you can see that it's saying, I'm
sorry, I don't know how to help with that. Now before with classic bots, you
used to have phrases that would
trigger our different topics. Now the cool thing about this plugin
actions, there is this generative
AI dynamic chaining feature that
we can turn on and I'll save that. And if we go back to topics and
plugins, now what we can see is that
we've got this our action here, and you
can see it's saying dynamic chaining. So now we can do the same thing. So list all orders placed
on the 3rd January 2024. And now you can see it's
invoking our action. And there we go. It's actually taken that information
back and it's interpreted the response
and just giving it to us in text. I could even say if we
now go and add in another. plug in action and this time what we're
going to do is just the get the order so
order admin and just say get order and say
next now if we look at this the id here what we want to say this is actually the
order id and in the description we want
to give information that allows the the
language model to work out what it is so order id it could be the identifier and
you provide other formats perhaps so i
could even just say eg 1001 And we are
going to enable it for dynamic chaining. And if we do finish for this,
there we go, it's created it. Now what we can say is we can say get the
order status of order with ID, like that. And so what's cool about this is
that it's maintained that context. It knows that we're still
talking about the new order. But what happens if I wanted
to update the order status? We can go and add in a plugin action,
and this time we'll use the update order. And as before, we'll go
and edit the parameters. But this time we also want
to look at the return. So if we say the outputs and edit that,
we know that we're not going to actually
return anything from the order update. So I can just simply say order updated. And we'll save that. So it's before we get the status
of the order, and then we can say,
Update order status to be delivered. And so it's now updated it. Now if I wanted to say this, if I said,
Update order status to be shipped. Of course we don't have a context,
so it doesn't know the order ID. So it's now just asking for the order ID. And this is all just built in. I didn't need to create that
traditional, Question response
branching in a, a traditional bot. So I, I say 1001 again like that. Then it does the order updated. All I've done is I've just given it a
little bit of information about that
connector, a little bit of information about what the parameters are and the more
context I put into those descriptions. That kind of clever it gets. So before, if I do a list all. So if I go into the List Orders
action, and on the output tabs,
at the moment, it's using this
dynamically generated message. But what happens if I wanted to
create something a little bit fancier? Now, we can also create a
message or an adaptive card. Now, there's this Grade Out option
that is not yet available, but I'm
looking forward to it where it will dynamically generate an adaptive
card from the example I give it. But if I select adaptive card here
and you can go and use the adaptive
card designer, I'll put a link
in the description to do that. But if we go to the formula, I've
created one already, and if we expand
this out, what this is doing is this is iterating over all of the
the are output response records and
creating a fact set for each of them. And so we've got the schema that comes
back from the connector, and I can
just reference that as though they were
variables in the standard Power Fx. And this is just so cool. It's just like writing
Power Fx in a Power App. And so if we save that now and
do the same thing, there we go. It's now rendering it as an
adaptive card and you could
make that as fancy as you like. Now, I did promise that I was going
to show you something really cool,
which I'll do a video on next. So if I do the same thing here, what
I've done here is I've created a
much, much more complex adaptive card. And so what we've got is
we've got action here. And I can click the action and
that will invoke my plugin action. And so it's asking me, are
you sure I want to update it? And I say, yes. And then if I list all of
them again, you can see there
it's now marked it as shipped. But what I'm also going to
show you in another video is
how to make it multi language. So I can change this to Norwegian
and I'm actually going to be
a judge at ACDC in Norway. So I've been trying to
brush up on my Norwegian. And so now it's asking us in Norwegian. Now I. I'm not going to try and type this in,
but I've said, what is the order date? And I can go and copy this and
there is giving us the information. You can see here that the, the log is
showing that it's picked up an order
idea of 10 001, and it's actually translated into Norwegian using
the Microsoft translation services. So it does it back and forwards. But what's also cool is I can
actually actually set that
status using Norwegian as well. I definitely do want to. And there we go. It's updated the order. I didn't need to make my custom
connector speak Norwegian. So there we have it. I think you'll agree that
it's a pretty cool feature. Do remember it is preview. Have fun playing with it. Uh, but it is AI and so it
can come up with some fairly
unpredictable results at this point. Uh, I think you'll agree that it's
moving in the right direction though. So a little bit of news. I'm going to be speaking at
the Microsoft AI tour in New
York on the 25th of January. So if you're that way, uh,
you can go and register. I'll put the link below. I'm also going to be a judge at the Arctic
Cloud Developer Challenge ACDC in Oslo. And that's February the 1st and the 4th. And it's really looking
forward to that event. It's the second time I've been a judge
and it's just an amazing hackathon. Um, then there's also the
Canadian Power Platform Summit. So if you are near Vancouver, or you can
get to Vancouver, check out the website. I've again, put the link below March the
15th to the 16th, and, uh, there's going
to be loads of really exciting content there, and it'd be great to see you at
any of those events, but until next time,
friends have a great rest of your day. Cheers.