학생에게 진로에 맞는 책을 권할 때 서가를 한참 뒤지게 된다. 도서관 장서 안에서 상담 메모에 맞는 책을 골라 주는 웹앱을 만들었다.
데이터 만들기#
장서 목록만으로는 “이 책이 무슨 내용인지”를 알 수 없다. 그래서 다음 순서로 데이터를 쌓았다.
- 국립중앙도서관 자료로 ISBN, 분류, 주제명을 채운다.
- 도서관 정보나루에서 책 소개와 키워드를 모은다.
- Claude Haiku로 책마다 소개 2~3문장, 계열, 키워드, 난이도, 생각해 볼 질문을 태깅한다. 1만 4천 권을 배치로 처리하는 데 약 3.7달러가 들었다.
- 책 하나하나를 벡터로 바꿔서 의미로 검색할 수 있게 한다.
추천 방식#
상담 메모를 검색 문장 몇 개로 바꾸고, 벡터로 후보 60권을 뽑은 뒤, 언어 모델이 “진로에 직결되는 책 3권, 다른 분야 1권, 입문 1권”을 골라 이유를 쓴다. 학습서와 이미 읽은 책은 제외하고, 시리즈는 1권만 보여 준다.
시험해 보니#
가상 학생 12명에 대해 추천된 60권을 서점 정보와 하나씩 대조했다. 처음에는 추천 이유를 지어낸 경우가 4건, 학생에게 부적절한 책이 6건이었다. 번호와 제목을 함께 대조하도록 프롬프트를 고치고 후보 필터를 손봤더니 각각 1건, 2건으로 줄었다. 소개 내용이 사실과 다른 경우 2건은 태깅 데이터 자체의 오류라서 남았다.
약관이 설계를 바꿨다#
개발 중반에 자료 출처의 이용 약관을 읽어 보고 문제를 발견했다.
- 카카오 책 검색 응답은 AI 입력을 금지하고 있었다.
- 정보나루의 표지 이미지 주소는 비영리 화면 표시만 허용하고 저장과 AI 입력은 허용하지 않았다.
이미 태깅과 임베딩에 카카오 소개가 섞여 있었기 때문에, 교내에 공개하는 2판은 카카오 자료를 빼고 다시 만들었다. 데이터를 일괄 수집하거나 AI에 넣기 전에 약관의 저장·AI 입력·출처 표시 조항을 먼저 확인하는 것을 이때부터 규칙으로 삼았다.
2판의 구조#
질문을 벡터로 바꾸는 부분은 집에 있는 서브 PC가 맡고(다음 글 참고), 최종 큐레이션은 언어 모델이 한다. 서버가 꺼져 있을 때는 미리 만들어 둔 목록으로 대신 보여 준다.