Topic authoring best practices in Copilot Studio

Important

Power Virtual Agents capabilities and features are now part of Microsoft Copilot Studio following significant investments in generative AI and enhanced integrations across Microsoft Copilot.

Some articles and screenshots may refer to Power Virtual Agents while we update documentation and training content.

Create and organize topics in a way that's manageable and maintainable for your context

Copilot Studio offers much flexibility when it comes to topic management. While there's no one size fits all, it's a good practice to keep in mind the different ways that topics can be triggered:

  • Topics can trigger based on the user utterance and the natural language understanding (NLU) model.
    These topics can almost be seen as your entry points topics.
    If you have trigger phrases that overlap multiple topics, it's good to have a catch-all topic (or disambiguation topic) and then redirect to other topics through slot filling and clarifying questions.
    Thanks to entity extraction, clarifying questions can be skipped and the conversation directly flows to the appropriate topic, without further input from the user.

  • Topics can trigger when called from a redirect action.
    These topics can contain conversation and logic nodes, can be called by multiple topics, and can have input and output variables. They're ideally reusable, bite-size, topics.

  • A topic can also be both.
    For example, topics triggered through intent recognition or by an explicit redirect.

  • Topics can be triggered by other events.
    For example, custom events, inactivity, and so on.

For more information, see the full list of topic triggers.

Tip

In the following example, trigger phrases are associated to two main topics that then break down their logic into multiple topics that are called with redirect actions.

Some topics can be called by multiple other topics: that's typically the case with the End Of Conversation topic.

Thanks to slot filling and entity extraction, if a user says "I need to unblock my credit card", the Card topic is triggered, and both Debit/Credit and Block/Unblock questions are skipped, since CardType and OperationType are deduced from the trigger phrase. Then, the appropriate Credit Card child topic is automatically called, without the user providing any additional input.

Diagram showing Copilot Studio topics triggered by trigger phrases, but also by other topics.

Create bite-size topics

Large topics can be challenging to maintain and update. It's a good idea to break down your copilot logic whenever possible, especially if parts of your copilot conversation logic are shared by multiple topics.

Topics don’t need to all have trigger phrases, as topics can redirect to other topics and pass variable information back and forth.

Tip

It’s often more manageable to create many bite-size topics rather than a few large topics. Taking this approach also helps making triggering more effective, by clearly mapping trigger phrases to the specific topics that address those areas.

The number of topics is a conversational design preference and decision. It either results in having a few bigger topics (if there's joining) or having smaller topics (if there's splitting).

Tip

For intents that are more complex to recognize (for example, for generic words, such as "request" or "issue", as these could be about different things), then splitting the topics might be a better option, with adequate trigger phrases.

Create reusable topics

Whenever conversation messages or logic nodes are shared by multiple topics, it's a good idea to group them in a new topic instead of duplicating their content. That way, a single update to that topic reflects on all the topics redirecting to it.

Tip

If you call the same Power Automate cloud flows from multiple Copilot Studio topics with the same or similar before and after nodes, it's a good idea to group them in a dedicated topic.

Avoid topic overlap

Monitor and remove ambiguity between topics

When topics are triggered with NLU, it's important to avoid overlap issues. Overlap issues typically reflect through a large number of multiple topics matched topics (also known as "did you mean").

You can avoid these issues by reducing the overlap in intent meaning between the trigger phrases of different topics.

Tip

For topics triggered with trigger phrases, you should:

  • Compare the trigger phrases across your topics and remove ambiguous pairs.
  • Try to not use the same words in different topics trigger phrases.

There are multiple ways to monitor topic overlap:

  • Analyze the user utterances that trigger a "did you mean" topic, as it’s a key indicator that you have overlap
  • Copilot Studio offers a topic overlap detection feature, that lets copilot authors discover overlapping topics to resolve accordingly (deleting/moving trigger phrases between topics).

Create a disambiguation topic

When multiple topics have trigger phrases that are too close, you can avoid topic overlap by creating a disambiguation topic.

Tip

To continue on the previous example, to address with certainty scenarios such as "unblock credit card" or "unblock debit card", where users might just say "unblock card" and the NLU model doesn’t know what specific topic and process to trigger, you can call a generic Card disambiguation topic, use an entity slot filling question for CardType, and launch the appropriate topic accordingly.

Use entities to reduce the number of topics

You should avoid duplicating logic when the variation could be stored in a variable. For example, instead of creating similar topics, such as:

  • Order Pizzas
  • Order Burgers
  • Order Drinks

You could create:

  • One topic for Order
  • One entity for FoodType, with Pizzas, Burgers, and Drinks as values.