본관은 연안(延安). 자는 광중(光仲), 호는 죽하(竹下)·약현(藥峴). 김제남(金悌男)의 5대손으로, 할아버지는 김호(金澔)이고, 아버지는 판돈녕부사(判敦寧府事) 김상석(金相奭)이며, 어머니는 임경(任敬)의 딸이다.
1763년(영조 39)에 정시 문과에 병과로 급제하여 홍문관에 등용되고, 이듬해 왕이 인원왕후(仁元王后: 肅宗繼妃)의 제삿날을 맞아 매일같이 불공을 드리는 것을 반대하다가 왕의 노여움을 사서 갑산(甲山)으로 유배되었다.
뒤에 석방되어 응교(應敎)에 제수된 뒤 1769년에 세자시강원 겸 필선(世子侍講院兼弼善)에 임명되었고, 1778년(정조 2)에 대사헌이 되었다. 1782년 강화유수를 거쳐 이듬해에 원자보양관(元子輔養官)에 임명되었다.
1784년 우의정으로 진주 겸 주청사(陳奏兼奏請使)의 정사가 되어 청나라에 다녀왔으며, 이듬해 판중추부사(判中樞府事)에 임명되었다. 1786년에 또다시 동지사은사(冬至謝恩使)가 되어 청나라에 다녀왔다. 1789년 우의정에서 물러났으나 바로 영의정에 올랐다. 시호는 문정(文貞)이다.