본관은 연안(延安). 자는 응덕(應德). 김호(金灝)의 증손으로, 할아버지는 대사헌 김상옥(金相玉)이고, 아버지는 김묵(金默)이며, 어머니는 교리 신정하(申靖夏)의 딸이다.
1753년(영조 29) 사마시에 합격하여 생원이 되고, 1759년(영조 35) 성균관 유생으로 있으면서 통독(通讀)과 제술(製述) 시험에 1등을 하여, 그해 식년 문과 바로 나아가 을과로 급제하여 곧 한림(翰林: 藝文館檢閱)에 제수되었다.
그 뒤 은산(殷山)·평택(平澤)의 수령으로 있으면서 고을을 잘 다스려 왕의 신임을 얻었고, 경직에 복귀하여서는 홍문관에 소속되어 있으면서 세손(世孫)의 교육에도 참여하였다. 관계에 진출한 지 10년 만에 당상관으로 승진하여 승지·대사간을 역임한 뒤 특히 지방관으로서의 재질을 인정받아 경상도관찰사로 나아갔다.
정조가 즉위하자 대사헌으로 외척의 화를 우려한 상소를 올렸는데, 도리어 외척처벌에 미온적인 태도를 보였다고 탄핵을 받아 전라도 해남(海南)에 유배되었다. 그 뒤 풀려나와 대사헌을 지냈다.