본관은 안동(安東). 자는 술부(述夫). 김수일(金壽一)의 증손으로, 할아버지는 김성대(金盛大)이고, 아버지는 김시서(金時敍)이며, 어머니는 송이석(宋彛錫)의 딸이다.
1739년(영조 15) 알성 문과에 병과로 주1 설서(說書)가 되고, 이어 지평(持平) · 교리(校理) · 수찬(修撰) · 정언(正言) 등을 지냈다.
1749년 헌납(獻納) · 사간 · 보덕(輔德)을 거쳐 1755년 도승지 · 예조참판이 되었다. 1756년 수원부사 재직시에는 경내의 흉년으로 농민들의 양곡이 떨어져 폐농지경이므로, 창고에 남아 있는 향미(餉米: 군량미)를 나누어주도록 주2. 1757년 대사헌이 된 뒤 몇 차례에 걸쳐 중임하였는데, 특히 인륜을 거스르는 죄에 대하여 엄격하였다.
1760년 도승지 · 함경도관찰사를 거쳐서 한성부좌윤을 지냈다. 1764년 조참(朝參)에서 간언이 없다고 영조가 책망하자, 옛 성왕의 간하는 법은 언관을 책하는 데 있지 않으므로 대신을 책하지 말라는 소를 올렸다가 대사헌에서 주3. 그 뒤 예조참판을 지냈고, 1766년 동지부사로 청나라에 다녀왔으며, 1768년에는 다시 대사헌과 좌윤을 역임하였다.