20세 때에 관직 생활을 시작하여 무안감무(務安監務), 중부녹사(中部錄事) 등을 역임하다가 1260년(원종 원년)에 이장용(李藏用)과 유경(柳璥)이 주관한 과거에서 3등으로 합격하였다. 원종(元宗) 때 직사관(直史館), 직한림원(直翰林院) 등 문한직(文翰職)을 역임하였다. 1269년(원종 10)에 임연(林衍)이 왕을 폐위하자 원나라에서는 고려를 공격할 계획을 세우고 있었다. 이때 사신단의 일원으로 원나라에 갔던 김훤이 이해관계를 들어 설득하여 이 계획을 중단하게 하였다.
1270년(원종 11)에는 금주방어사(金州防禦使)가 되어 지역의 반란을 진압하고 삼별초(三別抄)의 침입을 막아 냈다. 이때의 공으로 예부낭중(禮部郞中)으로 승진하였다.
충렬왕(忠烈王) 초반에 전라도부부사(全羅道部夫使), 양주부사(襄州副使), 국자사업(國子司業), 전법총랑(典法摠郞), 전라주도찰방사(全羅州道察訪使) 등을 역임하였으나 왕의 뜻을 거슬러 1279년(충렬왕 5)에 파직되었다. 1286년(충렬왕 12)에 영월감무(寧越監務)로 복귀하였다가 곧 사직하고 또 강등되었으나, 1288년(충렬왕 14)에 옛 관질로 복구되었다.
그 후 좌간의대부(左諫議大夫), 밀직학사(密直學士) 등을 지냈고, 한림시독학사(翰林侍講學士) 지제고(知制誥) 등 청요직(淸要職)을 역임하면서 국왕 명의의 문서를 기초(起草)하는 역할을 맡았다. 1293년(충렬왕 19)에는 하정사(賀正使)가 되어 원나라에 갔다가 당시 그곳에 있던 세자, 훗날의 충선왕(忠宣王)을 수종하였고, 1295년(충렬왕 21)에 다시 세자를 수종하여 원나라에 갔다가 1297년(충렬왕 23)에 귀국하여 이듬해에 은퇴하였다. 이때의 관직은 정당문학(政堂文學) 보문각대학사(寶文閣大學士) 동수국사(同修國史)였다. 1303년(충렬왕 복위5)에는 도첨의찬성사(都簽議贊成事)를 더하였다.
이진(李瑱)이 지은 그의 묘지명(墓誌銘)에서는 그의 품성을 두고 “평생 동안 천성이 강직하고 청렴하였다.”라고 하였다. 또한 그는 시와 문장을 짓는 데 능하고 글씨에도 뛰어났으며 불경(佛經)을 외는 데도 능통하였다고 한다.