Faits: A. A._, ressortissant serbe né en 1990 et domicilié à Genève, se trouve en détention provisoire depuis le 20 mars 2012 sous la prévention de lésions corporelles graves et tentative de meurtre. Le 18 mars 2012, avec deux comparses, il avait agressé trois personnes à coups de pieds et de poings, portant à deux d'entre elles des coups de couteau qui, selon un expert, auraient concrètement mis en danger la vie des victimes. La détention provisoire a été prolongée par décisions du Tribunal des mesures de contrainte (Tmc) des 22 mars, 21 juin et 31 juillet 2012. Seul le risque de collusion a été retenu dans la dernière décision, le prévenu n'ayant pas encore été confronté avec l'une des victimes des coups de couteau (B._); le Ministère public était enjoint à procéder à cette audition dans le délai de prolongation de la détention. B. Le 27 août 2012, le Ministère public a requis une nouvelle prolongation de la détention provisoire. Par ordonnance du 31 août 2012, le Tmc a fait droit à cette demande et prolongé la détention jusqu'au 30 novembre 2012. Le risque de fuite (précédemment écarté) a été retenu au vu de la nationalité étrangère du prévenu et de la gravité de l'infraction. Le risque de collusion demeurait avec les complices et les victimes: un risque de représailles était apparu dans une procédure menée parallèlement et des menaces avaient été formulées. Par arrêt du 26 septembre 2012, la Chambre pénale de recours de la Cour de justice genevoise a confirmé cette décision. B._ n'avait toujours pas pu être entendu en raison de son état de santé. L'amie du prévenu faisait l'objet d'une procédure pénale séparée; son rôle dans l'altercation apparaissait important et elle aurait transmis les menaces du prévenu. Celui-ci avait manifesté une certaine propension à la violence. Il existait dès lors un risque de collusion, qui se recoupait avec un risque de réitération. Le principe de la proportionnalité était respecté. C. Par acte du 29 octobre 2012, A._ forme un recours en matière pénale par lequel il demande l'annulation de l'arrêt cantonal et sa mise en liberté immédiate, moyennant le cas échéant des mesures de substitution. Subsidiairement, il conclut au renvoi de la cause à la cour cantonale pour nouvelle décision au sens des considérants. Le recourant a par la suite demandé l'assistance judiciaire. La Chambre pénale de recours se réfère à son arrêt, sans observations. Le Ministère public conclut au rejet du recours.