Proviene da una famiglia di etnia mongola residente nella prefettura autonoma di Bortala, nel Xinjiang: il padre muore quando Bu era bambino e la madre si risposa. Per anni vive coi nonni, che non conoscevano il mandarino, e in seguito viene mandato all'SOS Children's Village di Urumqi. Inizia a giocare a 5 anni sotto la guida del coach Luo Yong.
Nel 2022 vince nel giro di quattro mesi i suoi primi sei tornei nel circuito ITF. Quello stesso anno fa il suo esordio nella squadra cinese di Coppa Davis. Nell'aprile 2023 conquista il suo primo titolo Challenger al Seoul Open Challenger, sconfiggendo in finale Aleksandar Vukic, e l'8 maggio sale alla 164ª posizione del ranking ATP. Vince il suo primo match in un torneo Masters 1000 come wild card allo Shanghai Masters contro Miomir Kecmanović, che si ritira nel corso del terzo set, e Bu esce al secondo turno.
Si aggiudica il suo secondo Challenger al Wuxi Open 2024 sconfiggendo in finale Jahor Herasimaŭ e diventa il più giovane giocatore cinese a vincere più titoli in questa categoria. Raggiunge la top 150 del ranking il 22 luglio 2024 dopo aver vinto un altro titolo Challenger agli Championnats de Granby, battendo in finale Térence Atmane. Ad agosto fa il suo debutto in una prova del Grande Slam dopo essersi qualificato per il tabellone principale agli US Open, e viene sconfitto al primo turno da Casper Ruud.
Il 23 settembre fa il suo ingresso nella top 100, alla 96ª posizione; la settimana successiva raggiunge la semifinale dell’ATP 500 di Pechino e viene sconfitto dal nº 1 del mondo Jannik Sinner, risultato con cui sale al 69º posto mondiale. Sconfitto nelle qualificazioni nei tornei di Astana, Vienna e Parigi Bercy, raggiunge i quarti all'ATP 250 del Moselle Open e chiude la stagione con il nuovo miglior ranking alla 65ª posizione mondiale.
Sconfitto al primo turno nei primi tre tornei del 2025, raggiunge i quarti al torneo ATP di Montpellier. Sul cemento americano di Dallas e Delray beach conquista una sola vittoria. Viene sconfitto poi di nuovo al primo turno al Rio Open e all'Abierto Mexicano de Tenis. Sia a Indian Wells che a Miami raggiunge il secondo turno e viene battuto rispettivamente da Medvedev e de Minaur. Supera le qualificazioni al Monte Carlo Masters e, nonostante esca al primo turno, porta il miglior ranking alla 64ª posizione.
Sconfitto al primo turno anche nei Masters 1000 di Madrid e Roma, raggiunge la finale al Challenger 175 di Torino battendo Fonio, Fognini e Passaro, e cede in due set ad Aleksandr Bublik. Perde di nuovo al primo turno nei cinque tornei ATP successivi, tra cui il Roland Garros e Wimbledon. Torna al successo a Los Cabos, a Washington e al Masters di Toronto e viene eliminato al secondo turno rispettivamente da Nava, de Minaur e Sonego. Si spinge fino al quarto turno al Winston-Salem Open eliminando tra gli altri il top 30 Stefanos Tsitsipas. Sconfitto al primo turno agli US Open e a Pechino, esce dalla top 100 e perde di nuovo al secondo turno allo Shanghai Masters.
Perde i primi tre match disputati nel 2026, anche nel periodo successivo consegue risultati negativi e ad aprile scende al 175º posto mondiale. Quello stesso mese arriva il primo risultato di rilievo stagionale con la finale raggiunta al Challenger 125 del Busan Open, persa in tre set contro Leandro Riedi. Il mese successivo perde la finale anche al Challenger 100 del Wuxi Open contro Kwon Soon-woo. A giugno vince il primo torneo dopo quasi due anni al Challenger 125 sull'erba del Birmingham Open rimontando in finale Otto Virtanen. Si ripete al successivo Challenger 125 dell'Ilkley Open, nella cui finale supera in due set Jacob Fearnley.