1771년(영조 47) 진사시, 1773년 증광시 문과에 병과로 급제하였다. 1776년(정조 즉위년)에 한림 권점에 뽑혔으며, 1780년에 홍문록, 도당록에 뽑혔고, 이후 부교리, 시독관, 이조좌랑 등을 지냈다. 같은 해에 영남 암행어사로 관리들의 부정과 대구 감영의 고리대업, 환곡과 시노비(寺奴婢)의 폐단을 보고하였다. 1781년에 교리 재임 시에도 경상도 감영의 채전(債錢)의 폐단과 대책을 보고하였다.
이후 1782년에 성균관 대사성, 1784년에 사간원 대사간이 되었다. 같은 해에 승지로 있으면서 왕세자의 이름에 의견을 제시하여 결정되었다. 이후 이조 참의, 황해도관찰사, 개성부 유수, 한성부판윤, 공조판서, 병조판서, 호조판서 등을 거쳐 정조 대에 우의정, 좌의정을 역임하였다.
순조 대에도 좌의정을 거쳐 영의정을 역임하였다. 무슨 일이든 치밀하고 기민하게 하였으며, 처세와 처신을 잘 하였다. 1804년(순조 4)에 정순왕후가 다시 수렴청정을 하려고 하자 대의를 내세워 끝내 반대하였다.