Behavior Tree Task calls Blueprint Interface to be implemented by Blueprint Class

I’m planning on designing a generic Behavior Tree whose Tasks, Decorators, and Services don’t have any immediate implementations. Instead, these nodes call Blueprint Interface functions. As a result, the Behavior Tree is used to just organize high-level behavior. Then, multiple Blueprint Classes are created, each one implementing the Blueprint Interface functions differently. This way, low-level behaviors are different, but use the same high-level organization. Here’s an example:

Blueprint Interface: Combatant
Interface Functions: FindEnemy, AttackEnemy, IsOutnumbered, IsFlanked
Organization of Tasks/Decorators: If NOT IsOutnumbered and NOT IsFlanked, then FindEnemy then AttackEnemy

Blueprint Class: Spearman
Implemented Functions: FindEnemy (only those directly in front), AttackEnemy (thrust spear), IsOutnumbered (x > y), IsFlanked (more than x enemies are behind this soldier)

Blueprint Class: Berserker
Implemented Functions: FindEnemy (considers both friend and foe as enemies), AttackEnemy (swings a giant axe), IsOutnumbered (never considers itself outnumbered), IsFlanked (never considers itself outflanked)

Is this a valid use of Blueprint Interfaces, or is there a better way of achieving what I’m trying to do? Thanks