개요
빙글에는 제휴 쇼핑몰 링크만으로 상품을 자동 등록하는 크롤러가 있다. (물론 내가 만들었다..)
하지만 실제 등록하기 전, 요구사항이 하나 있는데, 바로 카테고리 분류다.
이건 자동화가 어렵다…
지금까지는 스타일, 1차, 2차 카테고리 총 3개 항목을 직접 분류하곤 했는데, 기준이 너무 주관적일 뿐더러 운영 리소스가 계속 들어가기도 한다.
안그래도 바쁜데.. 불필요한 노동을 줄이고 더 가치있는 곳에 시간을 써야한다.
텍스트 + 사진 분석으로 상품을 진짜로 자동 등록하도록 개선해보자.
검증
내가 AI를 거의 연구해보지 않았기 때문에 당장은 선택지가 크게 없다.
우선 OpenAI를 사용해보고, 비용 절감 방법은 모색해보도록 하자.
GPTs
사전지식을 주고, 링크를 주었을 때 분류하도록 했다.
꽤나 일을 잘한다.
히지만 종종 할루시네이션이 있고, JSON에 주석을 집어넣는 몰상식한 행동을 하기도 한다.
OpenAI Assistant
GPTs 같은 역할을 하는 API다.
하지만 더 많은 것을 제어할 수 있다.
Temperature를 낮추어 할루시네이션을 줄이거나, 출력을 JSON으로 강제할 수도 있다.
playground가 있어 용도에 맞을지를 미리 만들어 검증해볼 수도 있었다.
다만 크리티컬한 이슈가 하나 있다.
인터넷이 뭐죠?
우리가 ChatGPT를 사용하는 것처럼 알아서 웹서핑을 할 줄 알았는데, 그렇지가 않다.
GPT 모델은 인터넷을 할 줄 모른다.
인터넷을 못하니까 자꾸 나한테 다시 물어보곤 했다.
여러가지 방법을 삽질해봤다.
- GPT에게 웹서핑이라는 손,발을 달아주기
- HTML 및 이미지를 직접 넣기
1번 방법은 작업량이 꽤 있어서 뚝딱 되지는 않았다.
게다가 결과적으로 2번으로 이어지기 때문에, 나는 2번을 선택해 관리 포인트를 줄이기로 했다.
오… 나쁘지 않다.
코드로 검증하기
OpenAI API에 대한 라이브러리가 이미 구현되어있다.
suspend function?
동기화에 관련된 키워드 같은데, 이름만 놓고보면 작업 중단점인듯?
아니 파일 첨부도 안돼…
내가 쓰는 OpenAI client 라이브러리가 메시지에 파일을 첨부하는 기능을 지원하지 않는다.
이런 일을 해야하는데 말이다.
Java 라이브러리는 마침 OpenAI API 2.0이 나오면서 아카이빙 되었다. 버려진 것이다.
이거하자고 직접 라이브러리를 만들기엔 비용이 너무 크고… 직접 만들어서 PR을 날리는 방법을 택했다.
그리고 꽤 빨리 머지가 된 후 새 버전까지 배포해주셨다.
해당 버전이 배포되는게 언제일지를 몰라서 직접 dependency를 추가해서 사용하려고 삽질하고 있었는데,
개꿀이다 👍
남의 오픈소스에 기여하긴 처음인 것 같다. (특히 활발한)
사실 유명 오픈소스에 오타 수정으로 기여하는 것보단 이게 더 자연스럽고 생산적이지 않을까?
해치웠나?
여전히 내가 원하는대로 동작하지 않았다.
사실 content의 타입 자체가 string에서 더 구체적인 모델로 변해야 했던 것이다.
너무 큰 작업이라서 남의 코드를 섣불리 건들기가 어려웠다.
그래서 손수 수정/빌드해서 사용했다.
일단 이렇게 직접 빌드한 Jar dependency를 추가하고, 동작을 확인했다.
나중에 다듬어서 PR을 날리도록 해야겠다.
구현
일단 동작하게 하기
사실 꿈은 크롤링 내역을 DB에 올려 잘 표현하고 제어할 수 있게 하고 싶다.
이걸 위해선 새로 만들어져야 하는 시스템이 많은데, 1주일 안에 수행할 수 있는 작업 단위는 아닌 것 같다.
그래서 일단 기존 시스템을 개선해서, 먼저 완벽한 동작을 하는 것을 목표로 했다..
외부 API와 통신하는 작업이기 때문에 IO 블로킹 타임이 작업 시간의 대부분을 차지한다.
따라서 병렬적으로 처리할 수 있는 작업 — 이미지 업로드 — 는 병렬 처리할 수 있도록 했다.
덕분에 양을 늘린다고 작업시간이 기하급수적으로 늘어나진 않게 되었다.
코틀린의 coroutine 및 Java의 Future API를 잘 사용하니 비동기 작업을 제어하기에 무리가 없었다.
좋은 소식
이걸 하고 나니 좋은 소식이 있었는데, 그 소식은 바로 GPT 4o “mini” 모델이 등장했다는 것이었다.
추론 성능은 좀 부족할 수 있지만, 가격이 1/10 이상으로 싸서 거의 무제한으로 활용할 수 있게 되었다.
AI 사용 비용 생각하면 수지타산이 맞나…? 하는 생각도 들었었는데 더 적극적으로 활용할 수 있을 것 같다.
더 많이 썼는데 더 싸다니… 이건 혁명이다…
물이 들어오는구나…
활용 아이디어
이제 연결도 다 했고, OpenAI 플랫폼을 구경하다보니, Embeddings가 있어 떠오르는 것이 있었다.
Embeddings가 뭐냐 하면, 질문에 대해 참고할 수 있는 지표를 미리 생성하는거다.
이걸 활용하면 뭐가 좋은데? 라는 의문이 들 수 있다.
빈티지 의류의 핵심적인 문제 중 하나인 ‘옷이 한 벌 뿐’임을 완화할 수 있을 것 같다.
텍스트와 이미지에 대한 검색 지표를 미리 생성해두고
- 비슷한 상품 검색 가능
- 지금은 코디가 일회적인데, 비슷한 상품을 추천하면서 여러 사용자에게 도달할 수 있다.
- 유사한 단어 검색 가능
- 상품의 키워드(태그) 자동 추출보다 강력할 듯?
에 사용할 수 있을 것 같다.