666년(문무왕 6) 4월 나마(奈麻)로서 김천존(金天存)의 아들 한림(漢林)과 함께 당나라에 파견되어 좌무위익부중랑장(左武衛翊府中郎將)의 직을 받고 숙위(宿衛)하였다. 668년 6월 당나라에서 사찬(沙飡)의 관등에 올라 있으면서 당나라 장수 유인궤(劉仁軌)를 따라 당나라 고종(高宗)의 고구려 정벌 칙지(勅旨)를 가지고 당항진(黨項津 : 지금의 경기도 화성시 남양읍)에 도착하였다. 그 뒤 한동안 기록이 없어 자세한 것은 알 수 없으나 집안이 대대로 출장입상(出將入相 : 문무를 다 갖추어 將相의 벼슬을 모두 지낸다는 뜻)의 집안이었던 점이나, 아버지 김유신이 당시 고구려 정벌군의 최고 사령관인 대당대총관(大幢大摠管)의 직책에 있었던 점으로 보아, 고구려와의 전쟁에서 크게 활약했으리라는 것을 짐작할 수 있다.
683년(신문왕 3)에 왕이 일길찬(一吉飡) 김흠운(金欽運)의 딸을 왕비로 맞아들이게 되자 이찬(伊飡) 김문영(金文穎)과 함께 그 집에 가서 가례(嘉禮) 날을 정하였다. 납채(納采 : 신랑집에서 신부집으로 혼인을 정하는 의례)는 대아찬(大阿飡) 지상(知常)이 하였다. 이 때 관등은 파진찬(波珍飡)이었는데 뒤에 제2관등인 이찬까지 올랐다.
아버지의 휘하에서 고구려와 싸울 때 큰 공을 세워 사찬의 관등에 있던 열기(裂起)가 정치를 맡고 있던 그에게 군수(郡守)를 희망했으나 들어주지 않은 일이 있었다. 이에 열기가 기원사(祇園寺)의 승려 순경(順憬)에게 “그가 나의 청을 들어주지 않는 것은 아마 그의 아버지가 죽어 나를 잊은 모양인가 보다.”라고 말했는데, 뒤에 그가 이 말을 듣고 삼년산군(三年山郡)의 태수(太守)로 천거하였다.