Focus on the most important parts of your spec that are technical challenges and or provide business value. Have them commit code and monitor updates to the repo. If you don't get working software for some fraction of the requirements within a few weeks, then close the contract and do another search.
Make sure to get new software releases every week or two.
Whether they are Chinese or American or what city they are in is a very stupid way to judge things.
Make sure you meet the individual developers dedicated to your project before opening the contract and on an ongoing basis. Get their individual work histories before you select any firm. Make sure you find out how many other projects they are working on at the same time and verify that as you go.
There are two main things that are going to determine your success: whether what you are asking for is reasonable within your budget and feasible, and the skill level and resources actually dedicated to the project. In all my years on Upwork, the first part of that is often where things get doomed -- they want someone to build a Facebook clone for a few thousand dollars or whatever it is. Then it gets worse because the only people that take those projects are inexperienced or poorly managed teams that just don't care.
Or firms pick up a bunch of under-resourced projects at the same time and juggle them to try to make ends meet. Which means the developers are being pulled in many directions at once, starving your project of attention and any hope of a serious effort. (Although that was kind of guaranteed by the budget from the beginning.)
What exactly are you trying to build?
Do not do a fixed fee project like that. You can tell them your max budget, but work on targeted milestones (updated at the end of each milestone) no more than a few weeks at a time and prompt payment for that section or billed hours. Absolutely never try to spec out a large project and just leave it with some company until it's supposedly done and paid at the end.