# Recommendations

The providing recommendation pattern often involves features of the [collecting information pattern](broken://pages/EMMG991zfA7rFesrsyIP). This is because providing recommendations is broken into two parts, which can loop on each other: collecting user preferences (input) and providing a recommendation (output). Recommendation systems are built to narrow a set of possible alternatives down to something the user is likely to like. Doing this can start with a recommendation that the user responds to (e.g. like or dislike), or it can start with collecting user preferences and then offering a recommendation.

The collection of user preferences tends to be either system driven or user driven. In a system driven approach, a bot would guide the interaction, asking a user for things like their shoe size, color, running style and more. In a user driven approach, a bot may ask the user to state their own preferences. In response, a user may say something like “I’d like some size 10 running shoes for women,” which the system then needs to process appropriately (which can be a challenge). Mixed-initiative approaches are a mix of bot-asked questions and user questions of the bot. Done well, this is probably the best. Many recommendation systems are one-shot, but multi-turn approaches where users can ask questions and give feedback can be more robust.

A good recommendation system requires not just dialog management, but also user modeling and knowledge elements. That is, the system needs a way to keep track of the user’s preferences, and to organize the set of recommendable items with their attributes. This discussion of the providing recommendations pattern will focus on the dialog side of things, but for it to work well it needs all three parts.

The channel can also affect how to implement a recommendation pattern. If you’re voice-only or text-only, then you have to work within those constraints. But situations of disambiguation work best with a mix of interfaces (e.g. NLP with buttons) (Narducci et al.). It is not always clear how much guidance a user wants, so offering flexibility and adaptability can help.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.opendialog.ai/opendialog-platform/conversation-designer/conversation-design/conversational-patterns/recommendations.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
