Consider the example of $\mathfrak{g} = sl_3$. Then $$ \mathfrak{g} = \mathfrak{n} \oplus \mathfrak{h} \oplus \mathfrak{n}^{-}, $$ where $\mathfrak{n}$ is generated by $E_{12}, E_{13}, E_{23}$, $\mathfrak{h}$ is generated by $E_{11}-E_{22}, E_{22}-E_{33}$, $\mathfrak{n}^{-}$ is generated by $E_{21}, E_{32}, E_{31}$, $E_{ij}$ is a matrix with $1$ at $(i,j)$ and $0$ elsewhere.

A PBW basis of $U(\mathfrak{n})$ is $$ B_1 = \{ E_1^a (E_1 E_2 - E_2 E_1)^b E_2^c \mid a, b, c \in \mathbb{N} \}. $$

There is another basis of $U(\mathfrak{n})$ called canonical basis which is given by $$ B_2 = \{ E_1^aE_2^bE_1^c \mid a+c \geq b \} \cup \{ E_2^aE_1^bE_2^c \mid a+c \geq b \}. $$

The basis $B_2$ has a property: given a lowest weight vector $v_0$ of a representation $V$ of $U(\mathfrak{n})$, the set $$ \{ b v_0 \mid b v_0 \ne 0 \} $$ is a basis of $V$.

My question is: in general, how to compute canonical basis for $U(\mathfrak{n})$ explicitly like the above example. Can we derive a canonical basis from a PBW basis? Thank you very much.