If I was writing wallet software I would use BIP 39 for generating private keys from seed phrases.
Generally I would use standard algorithms (as defined in the BIPs) and standard libraries rather than invent my own.
You avoid generating duplicate keys by using sufficient numbers of words from carefully prepared lists of words and using publicly vetted algorithms carefully designed for the purpose. For example hashing algorithms are designed to minimise the chance of "collisions" (two different sources producing same result).
Choosing a large number of seed words using a properly initialized random number generator should minimise the chances of two users generating the same seed phrase.