제 블로그 컨텐츠로 커스텀 GPT를 만들어 봤습니다

Custom GPT 사용후기와 개선점 분석
Jan 21, 2024
제 블로그 컨텐츠로 커스텀 GPT를 만들어 봤습니다
작년 11월 OpenAI DevDay에서 처음 announced된 GPT Store이 드디어 이번 주에 출시되었습니다.
이번 블로그 글을 포함해 이제 총 20개의 컨텐츠를 작성했는데 제 블로그 PDF 파일을 때려 넣어서 GPT를 만들어 봤습니다.

Custom GPT에 대한 나의 기대 (My Ambitious Expectation)

코딩 경력이 전혀 없는 저로썬 작년 11월 OpenAI DevDay에서 가장 기대된 프로덕트는 Custom GPT였습니다.
저 뿐만 아니라 저와 비슷한 많은 분들께서도 그러셨을 것이라 믿고 있습니다. 현재로썬 자신만의 챗봇을 만드는 것이 매우 비싸기 때문(e.g. fine-tuning 비용, 전문가 채용비용 등)에 economies of scale이 있는 기업고객들에게만 국한되었고, 심지어 예상한 것 만큼 사용성이 낮아 적극적인 도입이 진행되지 않았습니다.
제 블로그 컨텐츠로 챗봇을 만들었을 때 기대한 Custom GPT는:
  1. 누구나 쉽게 원하는 글의 핵심요약을 볼 수 있는 것 (e.g. 몽고DB 글을 요약해줘)
  1. 챗봇 사용자가 궁금해 하는 질문이나 토픽에 대해 블로그 글에서 정확히 Retrieve하고 제공할 수 있는 것 (e.g. jasonlee가 생각하는 클라비요의 가장 큰 비즈니스 리스크는 뭐야?)
  1. 이해에 도움이 된다면 블로그에 들어가 있는 이미지(그래프, 사진 등)을 사용하여 답변하는 것 (e.g. META는 재무적으로 어떤 노력을 통해 실적 전환을 할 수 있었어?)
  1. 나(작성자)보다 내 글에 대해 더 잘 기억하며 내 성향을 이해하고 이 것을 기반으로 답변을 제시하는 것 (e.g. jasonlee라면 넷플릭스 비즈니스 모델에 대해 어떻게 생각할 것 같아?)
  1. 블로그 컨텐츠와 관련하여 누구나 챗봇과 깊은 대화나 Debate을 할 수 있는 것 (e.g. 나는 jasonlee가 말한 “창업자 친화적”에 대한 정의에 동의하지 않아. 왜 그렇게 생각하는지 더 상세하게 설명해줄 수 있어?)
  1. 학습된 블로그 컨텐츠에서 이해한 내 철학과 성향을 바탕으로 새로운 주제가 주어졌을 때 나(작성자)와 aligned 된 견해를 아웃풋 할 수 있는 것 (e.g. 나는 창업자야. 벤처투자자가 X 조건을 제안했어. 이런 상황에서 어떤 것을 고려하고 행동해야 할지 조언해 줄 수 있어?)
  1. 블로그 곳곳엔 “forward looking statements”가 많은데 시간이 지난 현재 시점에서 이 발언을 support하거나 dismiss 할 수 있는 새로운 데이터 포인트를 웹에서 찾아 주는 것 (e.g. 클라비요의 Shopify 매출 의존도가 큰 리스크 사항이라고 했는데 최근 실적 기준으로 매출 의존도는 개선되었어?)
💡
ChatGPT 프리미엄 고객이면 아래 검정색 CTR 버튼 (”jasonlee custom GPT”)을 통해 직접 사용해보실 수 있습니다!

구축 방법

jasonlee 챗봇은 ChatGPT 내에서 별 다른 customization이나 사전 지식 없이 매우 쉽게 만들 수 있었습니다. 일단 아웃풋이 어떻든 간에 사용자 입장에서 OpenAI가 개발환경을 단순하고 쉽게 만들기 위해 얼마나 고민하고 신경 썼는지 볼 수 있습니다.

Prompt

여러 Trial and Error로 제 Custom GPT는 아래 Prompt로 현재 사용되고 있습니다.
You are jasonlee who is the writer of the uploaded blog posts. Your tone should always be excited and enthusiastic. Your role is to be knowledgeable about the contents and provide accurate information, insights, and answers based on the uploaded blog content. Always prioritize the uploaded documents first, not your pretrained data. Understand the user's key words and intentions to find the accurate and relevant document to base your answer on. Always cite the name of the document whenever you give an answer. Reference multiple documents when applicable to provide diverse insights to an abstract question. Answer in bullet points. Always suggest visiting my blog with a hyperlink to (https://inblog.ai/jasonlee) and my LinkedIn profile (https://www.linkedin.com/in/jason-lee-953919a8/) for more information and provide the name of the document that is relevant to the question. Don't write out the link. Speak in Korean. You're encouraged to ask for clarification when necessary to provide the most pertinent information. If you don't know, say you don't know. Keep your answers concise, accurate, and to the point.
  • 여러 차례 사용해 본 결과, Custom GPT가 제 데이터가 아닌 Pre-Trained 데이터에 의존하거나, 또는 Hallucination을 하는 것을 최소화하기 위해 제 문서들을 우선 시 했습니다.

Uploaded Documents

Notion에 저장되어 있는 블로그를 각각 PDF로 변형하고 단순히 때려 넣었습니다. 따로 제목이나 내용을 변형하거나 정리하는 가공작업은 없었습니다.

사용 후기

사용해보니 매우 재밌기 하면서도 개인용 Custom GPT가 제가 ambitious하게 기대했던 모습을 구현하기 까지는 시간이 걸릴 것 같습니다. 제가 기대한 사항들 1~7번 중 1번만 구동되는 것 같고, 사실 그것마저도 틀리는 경우가 많습니다.
하지만 이 정도로 챗봇의 미래에 대해 부정하는 것은 매우 unfair합니다. 저는 이 과정에서 데이터 정제, 엠베딩 모델 fine-tuning 등 RAG를 최적화하기 위한 노력을 전혀 하지 않았습니다. 사용자가 이런 과정을 거치지 않고 단순히 파일만 때려넣으면 OpenAI 모델들이 알아서 최적화 해주면 좋겠지만 이 미래는 아직 멀게 느껴집니다.
OpenAI의 커스텀 GPT 내엔 세세한 사항들을 customizing할 툴은 제공하지 않지만 제 데이터와 use case에 따라 최적화가 가능하다면 더 훌륭한 아웃풋을 낼 수 있다고 생각합니다.

Down the Rabbit Hole: Production-Ready 챗봇을 위해선 어떤 최적화 작업을 해야할까?

제가 언급하는 “커스텀 챗봇”이란 단순히 pre-trained 데이터를 활용하는 ChatGPT 수준이 아니라 LLM의 “지식”과 “생성 capability”와 기업고객이나 개인이 proprietary 데이터를 활용하여 다양한 도메인에서 70~80점 짜리 답변이 아닌 90~100점 도메인 최적화 답변을 내는 챗봇입니다.
이미 ChatGPT나 Bard와 같은 LLM 챗봇들은 훌륭하지만 general purpose use-case이며 많은 분들이 좀 더 상세한 답변을 원할 때 아쉬운 부분을 느끼셨을 겁니다.
그래서 더 정확하고 상세한 답변을 생성하기 위해 LLM에게 Context(정보)를 제공하는 방식으로 Retrieval-Augmented Generation (RAG) 방법이 연구 커뮤니티에서 큰 인기를 끌고 있습니다. RAG는 AI를 크게 레벨업 시킬 수 있는 기술이기 때문에 현재도 많이 연구되고 업데이트 되는 분야입니다.
notion image
💡
Retrieval-Augmented Generation에 대한 지난 1년간 구글 서치 트렌드

12 Hyperparameters of RAG

RAG의 복잡함(complexity)에 대해 이해하기 위해 RAG의 12개 hyperparameter를 알아보도록 하겠습니다. 좀 더 자세히 알아보고 싶은 분들은 링크 참조 부탁드립니다.
RAG는 proprietary 데이터를 벡터 엠베딩을 통해 벡터DB에 저장하고 LLM과 연결해 놓은 후, 향후 질문을 던졌을 때 LLM이 컨텍스트에 맞게 벡터DB를 query하고 필요한 데이터를 정확히 Retrieve해서 답변에 융합하여 아웃풋을 내놓는 방식입니다. 단순 pre-trained 지식보다 내 데이터 기반으로 답변을 하면 더 정확한 아웃풋을 내놓을 수 있습니다.
커스텀 챗봇을 개발하고 싶은 자라면 이 RAG 방법을 어떻게 얼마나 최적화 할 수 있느냐 게임입니다. RAG 내엔 크게 보면 12개의 hyperparameter가 있는데 이 매개변수를 여러 차례 tuning과 experimentation으로 모델을 최적화하는 프로세스를 거쳐야 합니다.
RAG는 크게 2 분야로 이해할 수 있습니다: 1) Ingestion Stage, 2) Inference Stage

Ingestion Stage

notion image
💡
Collect Data —> Chunk Data —> Generate Vector Embeddings —> Store in Vector DB
챗봇 개발자는 크게 위 프로세스를 거치게 됩니다. Ingestion Stage에서 개발자가 만지고 “tune” 할 수 있는 파라미터는 아래와 같습니다:
  1. Data Cleaning
  1. Chunking
  1. Embedding Models
  1. Metadata
  1. Multi-Indexing
  1. Indexing Algorithms
Embedding 모델이 데이터를 정확히 이해하고 읽을 수 있도록 데이터를 정제하는 프로세스, 벡터DB에 올바르게 저장될 수 있도록 적합한 embedding 모델을 정하고 엠베딩 모델 자체를 파인튜닝하는 작업, 벡터DB에 메타데이터를 추가 하는 등 각 스텝에서 고민하고 테스트해야 하는 사항들이 많습니다.

Inferencing Stage (Retrieval & Generation)

notion image
💡
질문이 던져지면 벡터DB에서 올바른 context를 찾아서 Prompt에 추가하고 LLM에 feed하는 프로세스를 거치게 됨
벡터DB가 준비되었다면 인퍼런스 쪽을 손 봐야 합니다.
  1. Query Transformation
  1. Retrieval Parameters
  1. Advanced Retrieval Strategies
  1. Re-ranking Models
  1. LLMs
  1. Prompt Engineering
어떤 LLM 모델이 내 데이터와 가장 적합한지, RAG와 별도로 LLM을 파인튜닝할지, 어떤 방식의 Query Transformation이 최고의 아웃풋을 만드는지 등을 각 스텝에서 또 고려해야 합니다.

Product Idea? 커스텀 챗봇 MLOps

jasonlee 챗봇을 사용해보신 분들은 느끼셨겠지만 결과물이 매우 실망스럽습니다😥. 제대로 구축만 하면 정말 재밌는 프로덕트가 될 수 있을 것 같지만 엔지니어링 백그라운드가 없는 저 혼자서 위 12개 hyperparameter를 조금씩 만져가고 디버깅하고 호스팅까지 구축을 하는데 매우 막막합니다…
이 내용을 공부하다가 생각난 프로덕트 아이디어가 커스텀 챗봇 MLOps입니다.
분명히 개인들/자영업자(e.g. 인플루언서)도 커스텀 챗봇을 만들고 싶은 니즈가 있을 것입니다. 다만, 커스텀 GPT만으로는 충분한 효용이 나오지 않고 직접 customizing을 원한들, 이를 구현하고 테스트할 수 있는 technical expertise가 없습니다.
하나의 MLOps 플랫폼 내에서 쉽게 Hyperparameter를 커스터마이징하고 아웃풋을 테스트할 수 있는 Playground가 있으면 좋지 않을까요?
현재 Hugging Face 내 Spaces에선 다양한 커스터마이징 개념(링크)이 있지만 “Production-Ready” 챗봇 구축을 위한 프로덕트가 아니고,
Abascus.ai를 비롯해 많은 업체들은 B2B 솔루션을 타겟하고 있습니다.
이 문제에 대해 RAGxplorer과 같이 오픈소스 프로젝트들도 공개되기도 하고 있습니다.
분명히 저와 같은 개인, 또는 자영업자 고객들의 ASP는 높지 않을 것이고 scalable 하지도 않습니다. 생각만 해도 끊임 없는 컨설팅, CS와 SI 악몽일 것입니다. 그리고 위 Hyperparameter들을 하나의 플랫폼에서 변형 가능하도록 소프트웨어 구현이 가능한지도 모르겠습니다.
다만, 아래 사항들을 고려했을 때 꽤 시도할만한 프로덕트가 아닐까 싶습니다. “Do things that don’t scale!”
  • 95~100점을 요구하는 B2B 고객들과 다르게 개인 고객들은 70~80점 짜리도 용인할 수 있을 정도로 expectation과 hurdle이 낮을 것 (low-stakes customers)
  • 여러 인터뷰와 실험을 통해 얻은 노하우로 딱 필요한 Hyperparameter만 구현; 12개 모두 하는 것보다 4~6개 (maybe even less!)여도 충분하지 않을까?
  • 만약에 고객 온보딩이 된다면 매우 높은 stickiness 예상됨; 데이터는 소비자 것이지만 벡터DB나 챗봇 아키텍쳐는 회사 것이기 때문에 Switching cost가 매우 높음
  • 개인 고객들은 호스팅 모르고 신경쓰고 싶지 않음; 사용량에 따라 과금하고 안정적인 소프트웨어 (recurring revenue) RM 예상
혹시 주변에 이런 아이디어로 스타트업이나 사이드 프로젝트를 시도 하고 계신 분이 있으실까요? 꼭 한번 얘기 나눠보고 싶습니다!

1월 25일 업데이트:

블로그를 읽어보시고 휴튼 오영준 대표님께서 Delphi.ai 를 소개해주셨습니다. 2023년 하반기에 Founders Fund로부터 투자를 받았네요. 정말 재밌는 프로덕트네요! 2월부터 무료 서비스를 출시한다는데 꼭 써봐야겠습니다.
Share article
Subscribe to my newsletter
RSSPowered by inblog