Here is my way of doing it.
"Ingredients"
Tom Yum paste. Buy this in a jar as its the most economical way, though you can also buy cubes. There are receipes about, but no housewife makes her own Tom Yum paste in Thailand, so nor should you. Buy it from a Chinese supermarket.
-Fresh Coriander, preferably with some root
-3 or 4 fresh Kaffir Lime Leaves, twice as many if dried. (Dried Kaffir Lime leaves are sold in quite large quantities in supermarkets in Chinatown in London, and I suspect they are a mainstay of many a Thai restaurant))
-A couple of sticks of fresh lemon grass, squashed with the flat of a kitchen knife and cut diagonally into 1 cm lengths, with as much surface area as possible. Lemongrass is now available in ASDA but can be bought much more cheaply in Chinatown.
-A couple of hot chillies, cut into long slivers. (De-seed and de-vein if you don't want the soup to be too hot. Add more if you do, but remember to balance them with slightly more lime juice and fish sauce. You should wash your hands anyway when cooking but always wash your hands after cutting up the chilli)
-At least one fresh lime, maybe two.
-Fish sauce. There is no substitute for fish sauce. Don't swig it on its own straight off the bat and expect it to be great- it is an acquired taste, like Worcestershire sauce. Think of it as a substitute for salt in the soup which also acts as a fish stock. Fish Sauce is a condiment that works wonders and does not cost very much in Chinese or oriental supermarkets.
-Mushrooms of some kind. A tin of straw mushrooms or a couple of hundred grammes of fresh straw mushrooms if you ever see them, and/or hand shredded fresh oyster mushrooms. I have sometimes used small button mushrooms, but these should not be at the stage of having black gills, as the colour of the soup will be spoiled and the 'mushroomy' taste will unbalance the dish. Another fungus that works reasonably well is 'Snow' fungus- this can be bought dried and pre-soaked before adding, and although it looks good it tends to add more exotic texture than taste. (NB Never be tempted to go OTT on the orientalism and add shitake mushrooms as they are too strong and will spoil the soup.)
-A good tin of coconut milk. This should be a virtually solid when opened at room temperature, the consistency of clotted cream with hardly any liquid. If you shake the tin and if feels 'light' and full of liquid, it is not good enough - get another brand. (I like TRS, at the moment, but there are some very good Sri Lankan and Thai brands available as well. Whatever the brand, it is usually ludicrously overpriced when sold in small quantities in foodie shops. Find a small local shop serving an Asian community that will sell it by the case and haggle for a bulk discount: there is a big margin on retail coconut milk in the UK. Coconut milk in tins lasts for ages and is the basis of many wonderful culinary experiments)
-Enough fish or squid for the number being fed, cut into bite-sized pieces and/or other seafood like fresh prawns. (Always take out the vein in the back of prawns, I prefer them with head and shells on, as they taste better, but these make the soup taste 'fishier') Wash these ingredients thoroughly. Some fresh mussels in their shells can also be nice, but don't just add seafood cocktail from a supermarket as precooked mussels just taste over-fishy and often go like bullets when put in the soup. Remember, you don't need that much as this is a soup, not a fish stew.
Method
Start with the coconut. Get a much larger saucepan than you think you are going to need and empty the can of coconut milk into it.
Use the empty can to measure in another two or three cans full of water if there is a particularly good load of coconut solid in the tin. If there is no coconut solid, you will have to open several tins as the people who own the brand you are using seem to have sold you the water already. Bring the coconut to a boil.
Coconut milk boils faster than water in most pans and can get to higher temperatures. The boiling coconut milk will rise up the pan and be foamy on top, but do not let it overboil. Smell the coconut - it should be fragrant. You are going to try and make a spicy soup which doesn't quite lose that fragrance, which should be in the background of everything else. If you don't like coconut milk, by the way, you can do without it and just use boiling water - many restaurants try to do this if they can as it makes the soup much cheaper, but it is not such a good soup - the spices will do everything they are supposed to in your mouth but the fragrance and texture will be missing something important.
Coconut milk can be very hot - as it has oil in it it will be getting to a higher temperature than plain water. Even when simmering it can scald.
Add the Kaffir Lime leaves and lemon grass, a few roots or bottoms of coriander and a table spoon of tom yum paste, more if you like things hot. Slivers of fresh chili are also added to give kick, but don't over do it if you are using delicate fish you want to be able to taste. Turn down the heat. Let the liquor simmer for a minute or so and taste it to see if you have enough lemon grass and kaffir leaves to balance the paste, which will melt into the soup. It should be piquant. Add whatever mushrooms you want. Give them a minute or two.
Then add whatever fish or seafood you like. If puttng in a mixture of seafoods, put them in in order - firmer and larger items first. Avoid too much of any one 'fishy' item - a few mussels are OK but I don't recommend making the soup entirely of mussels. Squid works very well, as does a firm fish like a monkfish and above all, prawns. Firm white fish like cod loin can be used, but be gentle as they can fall apart if you cook for too long. Squid can take a little longer than prawns, but none of it should need more than a couple of minutes. If you put fresh mussels in their (cleaned) shells in the mixture they are ready when they are open. The coconut milk soup will probably be hotter than you think and cook the seafood faster than if they were poaching in water. Cook the fish in the soup until it is a few seconds under being cooked and no longer. otherwise it will either go tough and rubbery (prawns and squid) or fall to bits. Take off the heat.
Add the juice of a lime and a desert spoon of fish sauce. Add coriander leaves. Taste and correct the seasoning as required but if you faff about, the coriander leaves will go black, so make your mind up fairly quickly and adjust accordingly - if too salty or hot add lime juice, if too sour add fish sauce. By the time you have done this, the seafood should be perfect.
Serve in bowls. Put some fresh coriander leaves on top as a garnish. Have some plain steamed rice on the side to eat with the soup, especially if you have made it with a lot of chili.
I will be the first to admit that my version of Tom Yum soup is not exactly the same as people may have tasted in restaurants, here or in Thailand and for this reason the word "ingredients" above is within quotation marks. There are a number of reasons for this:
1. It is based on having lived in Thailand for only three years, having tried numerous variations and from getting tips from various people, not all of whom agree with each other.
2. I tend to be more generous with some ingredients such as the coconut milk than they are in restaurants.
3. I am prepared to adapt some ingredients to make them cheaper such as using dried rather than jet fresh, airmile carbonating kaffir lime leaves. I am even willing on a whim to leave some things out, such as galangal, which some people might put in the soup. Wikipedia agrees with me that this is wrong, as most don't. Tom Yum is based around tamarind. Having said that I have also been served this soup with cabbage in it in Thailand, with cauliflower (which I did not enjoy) and also with very fine long french beans, (which were delicious), and I have left these vegetables off my list as well.
Tom Yum is is not so much a recipe as a technique, which can be quite fun to play about with.
Znethru
Pro

Now I realise why it's so expensive in restaurants! Definitely one of my favourite soups!