Knowledge Base Actions
Knowledge Base Actions
Warning
This feature is experimental.
We introduce experimental features to get feedback from our community, so we encourage you to try it out!
However, the functionality might be changed or removed in the future.
If you have feedback (positive or negative) please share it with us on the forum.
Using ActionQueryKnowledgeBase
Create a Knowledge Base
The data used to answer the user’s requests will be stored in a knowledge base.
A knowledge base can be used to store complex data structures.
We suggest you get started by using the InMemoryKnowledgeBase.
Once you want to start working with a large amount of data, you can switch to a custom knowledge base
(see Creating Your Own Knowledge Base).
{
"restaurant": [
{
"id": 0,
"name": "Donath",
"cuisine": "Italian",
"outside-seating": true,
"price-range": "mid-range"
},
{
"id": 1,
"name": "Berlin Burrito Company",
"cuisine": "Mexican",
"outside-seating": false,
"price-range": "cheap"
},
{
"id": 2,
"name": "I due forni",
"cuisine": "Italian",
"outside-seating": true,
"price-range": "mid-range"
}
],
"hotel": [
{
"id": 0,
"name": "Hilton",
"price-range": "expensive",
"breakfast-included": true,
"city": "Berlin",
"free-wifi": true,
"star-rating": 5,
"swimming-pool": true
},
{
"id": 1,
"name": "Hilton",
"price-range": "expensive",
"breakfast-included": true,
"city": "Frankfurt am Main",
"free-wifi": true,
"star-rating": 4,
"swimming-pool": false
},
{
"id": 2,
"name": "B&B",
"price-range": "mid-range",
"breakfast-included": false,
"city": "Berlin",
"free-wifi": false,
"star-rating": 1,
"swimming-pool": false
}
]
}
Define the NLU Data
In this section:
- we will introduce a new intent,
query_knowledge_base - we will to annotate
mentionentities so that our model detects indirect mentions of objects like “the
first one” - we will use synonyms extensively
Create an Action to Query your Knowledge Base
from rasa_sdk.knowledge_base.storage import InMemoryKnowledgeBase
from rasa_sdk.knowledge_base.actions import ActionQueryKnowledgeBase
class MyKnowledgeBaseAction(ActionQueryKnowledgeBase):
def __init__(self):
knowledge_base = InMemoryKnowledgeBase("data.json")
super().__init__(knowledge_base)
How It Works
ActionQueryKnowledgeBase looks at both the entities that were picked up in the request as well as the
previously set slots to decide what to query for.
Query the Knowledge Base for Objects
In order to query the knowledge base for any kind of object, the user’s request needs to include the object type.
Query the Knowledge Base for an Attribute of an Object
Resolve Mentions
Customization
Creating Your Own Knowledge Base
👋 I can help you get started with Rasa and answer your technical questions.