파브리스 AI: 현재 기술 구현

지난 글인 Fabrice AI: 기술 여정에서 Fabrice AI를 구축하기까지 겪었던 여정을 전체적으로 설명했습니다. 저는 먼저 Chat GPT 3과 3.5를 사용했습니다. 결과에 실망한 저는 Langchain 프레임워크를 사용하여 그 위에 자체 AI 모델을 구축한 후, 벡터 데이터베이스를 사용하기 시작하고 4o로 결과를 크게 개선한 후 다시 Chat GPT로 돌아왔습니다.

현재 Fabrice AI를 학습시키는 프로세스는 다음과 같습니다:

  • 교육 데이터(블로그 게시물, 유튜브 URL, 팟캐스트 URL, PDF URL 및 이미지 URL)는 워드프레스 데이터베이스에 저장됩니다.
  • 데이터를 추출하고 구조화합니다.
  • 어시스턴트 API를 사용하여 학습할 수 있도록 구조화된 데이터를 Open AI에 제공합니다.
  • 그런 다음 Open AI가 벡터 스토어 데이터베이스를 생성하여 저장합니다.

다음은 구조화된 데이터의 예입니다. 각 콘텐츠에는 고유한 JSON 파일이 있습니다. 토큰 한도인 32,000개를 초과하지 않도록 주의하고 있습니다.

{

“id”: “1”,

“날짜”: ” “,

“링크”:”https://fabricegrinda.com/”,

“title”: {

“렌더링”: “파브리스 AI란 무엇인가요?”

  },

“카테고리”: “파브리스 소개”,

“추천_미디어”: “https://fabricegrinda.com/wp-content/uploads/2023/12/About-me.png”,

“기타_미디어”: “”,

“지식 유형”: “블로그”,

“콘텐츠업데이트”: “파브리스 AI는 파브리스의 블로그 게시물과 ChatGPT를 사용하여 녹음된 일부 팟캐스트 및 인터뷰를 바탕으로 파브리스의 생각을 디지털로 표현한 것입니다. 많은 부분이 불완전하게 녹음되어 있고 블로그가 파브리스 개인에 대한 제한된 표현일 뿐이므로 부정확하고 누락된 정보가 있는 점에 대해 사과드립니다.”라고 설명합니다. 그럼에도 불구하고 여러 주제에 대한 파브리스의 생각을 알아볼 수 있는 좋은 출발점이 될 것입니다.”

}

는 현재 기술적으로 구현된 것입니다:

  • 소비자 대상 웹사이트는 AWS Amplify에서 호스팅됩니다.
  • 공개 사이트와 Open AI 간의 통합은 AWS에서 Python API 서버로 호스팅되는 API 계층을 통해 이루어집니다.
  • 저희는 MongoDB를 로그로 사용하여 대중이 질문한 모든 질문, Chat GPT에서 제공한 답변, 출처의 URL을 저장합니다.
  • 다양한 스크립트를 사용하여 블로그, YouTube 등의 데이터를 구조화하여 학습을 위해 Open AI에 전달합니다.
  • 저희는 음성 문의를 텍스트로 변환하기 위해 반응형 음성 인식을 사용합니다.
  • 또한 Google 애널리틱스를 사용하여 웹사이트 트래픽을 추적합니다.

두 명의 어시스턴트를 사용한다는 점에 유의하세요:

  • 하나는 질문에 대한 답변용입니다.
  • 하나는 메타데이터 URL, 즉 답변 하단에 소스를 표시할 원본 콘텐츠가 있는 블로그 URL을 가져오기 위한 것입니다.

다음 단계는 무엇인가요?

  1. 음성-텍스트 변환 개선 사항

음성을 텍스트로 변환하는 Open AI의 Whisper 모델은 React보다 더 정확합니다. 또한 기본적으로 여러 언어를 지원하며 혼합 언어 음성, 악센트 및 방언을 처리하는 데 능숙합니다. 따라서 저는 앞으로 몇 달 안에 이쪽으로 옮길 가능성이 높습니다. 다만 설정이 더 복잡하기 때문에 시간이 좀 걸릴 수도 있습니다. 모델을 처리하고, 종속성(예: Python, 라이브러리)을 관리하고, 효율적인 성능을 위해 충분한 하드웨어가 있는지 확인해야 합니다. 또한 Whisper는 브라우저에서 직접 사용하도록 설계되지 않았습니다. 웹 앱을 구축할 때는 트랜스크립션을 처리할 백엔드 서비스를 만들어야 하므로 복잡성이 가중됩니다.

  • 파브리스 AI 아바타

저와 닮은 외모와 음성을 가진 파브리스 AI 아바타를 만들어 대화를 나누고 싶어요. D-iD를 검토해 보았지만 제 목적에 비해 너무 비싸다는 것을 알게 되었습니다. Eleven Labs는 음성 전용입니다. Synthesia는 훌륭하지만 현재 실시간으로 동영상을 만들지 못합니다. 결국 가격대와 기능이 더 적절한 헤이젠을 사용하기로 결정했습니다.

언젠가는 Open AI가 자체 솔루션을 출시할 것이므로 이 작업은 무용지물이 될 것이라고 생각합니다. 저는 그것에 만족하며 Open AI 솔루션이 출시되면 그때 가서 전환할 것입니다. 지금 단계에서는 이 모든 연습의 요점은 AI로 무엇을 할 수 있는지, 그리고 공간을 더 잘 이해하는 데 얼마나 많은 작업이 필요한지 배우는 것입니다.

  • 사용자 지정 대시보드

지금은 그날의 질문과 답변의 추출을 얻기 위해 MongoDB 쿼리를 실행해야 합니다. 언어별 쿼리 수, 음성-텍스트 변환 요청 수 등에 대한 추출과 간단한 통계를 얻을 수 있는 간단한 대시보드를 만들고 있습니다.

  • 추가 데이터 소스

방금 FJ Labs 포트폴리오를 Fabrice AI에 업로드했습니다. 이제 포트폴리오에 포함되는 회사인지 여부를 물어볼 수 있습니다. Fabrice AI는 회사에 대한 간단한 설명과 웹사이트 링크를 통해 답변합니다.

Fabrice AI가 답변할 수 없는 개인적인 질문이 많았기 때문에 저는 시간을 들여 50번째 생일 동영상에 등장하는 모든 화자에게 수동으로 태그를 지정하여 필요한 콘텐츠를 제공했습니다.

결론

지난 12개월 동안 AI와 관련된 모든 것에 대해 연구한 결과, 분명한 보편적인 결론은 기다릴수록 더 저렴하고, 더 쉽고, 더 좋아지며, Open AI가 이를 제공할 가능성이 높아진다는 것입니다! 그동안 궁금한 점이 있으시면 언제든지 알려주세요.

파브리스 AI: 기술 여정

이전 게시물에서 언급했듯이 Fabrice AI 개발은 예상보다 훨씬 더 복잡해서 다양한 접근 방식을 모색해야 했습니다.

초기 접근 방식: 라마 인덱스 – 벡터 검색

Fabrice AI의 검색 능력을 향상시키기 위한 첫 번째 시도는 벡터 검색에 라마 인덱스를 사용하는 것이었습니다. 개념은 간단했습니다. 제 블로그의 콘텐츠를 가져와서 Langchain 문서로 변환한 다음, 이를 다시 Llama 문서로 변환하는 것이었죠. 그런 다음 이 라마 문서는 벡터 인덱스에 저장되어 이 인덱스에서 관련 정보를 쿼리할 수 있게 됩니다.

하지만 시스템을 테스트하기 시작하면서 이러한 접근 방식으로는 제가 기대했던 결과를 얻을 수 없다는 것이 분명해졌습니다. 특히 “마켓플레이스 창업자들이 가장 많이 저지르는 실수는 무엇인가요?”와 같이 맥락이 복잡한 질문을 시스템에 질문했을 때 AI는 의미 있는 답변을 제공하지 못했습니다. 데이터에 포함된 미묘한 내용을 검색하는 대신 관련성이 없거나 불완전한 답변을 반환했습니다.

이 초기 실패를 계기로 접근 방식을 재고하게 되었습니다. 단순히 콘텐츠를 벡터 인덱스에 저장하는 것만으로는 충분하지 않으며, 검색 메커니즘이 질문의 맥락과 뉘앙스를 이해해야 한다는 것을 깨달았습니다. 이 깨달음은 Fabrice AI의 진화에 영향을 미칠 많은 교훈 중 첫 번째 교훈이었습니다.

지식 저장: MongoDB 문서 저장 및 검색

라마 인덱스 접근 방식의 한계를 염두에 두고, 다음으로는 라마 문서를 몽고DB에 저장하는 방법을 모색했습니다. MongoDB의 유연한 스키마와 문서 중심 구조는 제가 수년간 축적해온 다양한 유형의 콘텐츠를 관리하기에 적합한 솔루션으로 보였습니다.

계획은 보다 역동적이고 반응이 빠른 검색 환경을 만드는 것이었습니다. 하지만 이 접근 방식은 곧 문제가 발생했습니다. 더 강력할 것으로 예상했던 검색 기능이 예상대로 작동하지 않았습니다. 관련 문서를 반환해야 할 쿼리가 아무런 결과도 반환하지 않거나 관련 없는 콘텐츠를 반환했습니다.

이 좌절은 실망스러웠지만, 저장 방법도 검색 전략만큼이나 중요하다는 중요한 교훈을 깨닫게 해 주었습니다. 저는 필요한 정밀도와 확장성을 제공할 수 있는 벡터 검색에 MongoDB Atlas를 활용하는 것과 같은 다른 옵션을 고려하기 시작했습니다. 하지만 이 대안을 선택하기 전에 더 효과적인 솔루션이 있는지 확인하기 위해 다른 접근 방식을 살펴보고 싶었습니다.

메타데이터 리트리버와 벡터 스토어: 구체성 추구

다음으로 살펴본 방법 중 하나는 벡터 스토어와 결합된 메타데이터 검색기를 사용하는 것이었습니다. 이 접근 방식의 아이디어는 Fabrice AI 내의 방대한 정보를 분류한 다음 이러한 분류에 따라 답을 검색하는 것이었습니다. 메타데이터로 데이터를 구조화함으로써 AI가 구체적이고 타겟팅된 답변을 제공하는 능력을 향상시키고자 했습니다.

하지만 이 방법에도 한계가 있었습니다. 겉으로 보기에는 유망해 보였지만 AI는 모든 유형의 쿼리에 대해 정확한 답변을 제공하는 데 어려움을 겪었습니다. 예를 들어 “저자가 낙관적인가요?”라고 물었을 때 다음과 같이 대답했습니다. 시스템은 관련 콘텐츠의 맥락에서 질문을 해석하지 못했습니다. 메타데이터를 기반으로 통찰력 있는 분석을 제공하는 대신 모호한 답변을 제공하거나 아예 답변을 제공하지 않았습니다.

이 접근 방식을 통해 AI에서 컨텍스트의 중요성에 대한 귀중한 교훈을 얻었습니다. 단순히 정보를 분류하는 것만으로는 충분하지 않으며, AI는 이러한 분류가 어떻게 상호 작용하고 겹치는지를 이해하여 콘텐츠에 대한 일관된 이해를 형성해야 합니다. 이러한 깊이 있는 이해가 없으면 아무리 정교한 검색 방법도 부족할 수 있습니다.

지식 구조화: 요약 트리 인덱스

Fabrice AI를 계속 개선해 나가면서 저는 SummaryTreeIndex를 만드는 실험을 했습니다. 이 접근 방식은 모든 문서를 트리 형식으로 요약하여 AI가 이러한 요약을 탐색하고 콘텐츠의 구조에 따라 관련 정보를 검색할 수 있도록 하는 것이 목표였습니다.

문서를 요약하면 AI가 핵심 사항을 빠르게 파악하고 간결하고 정확한 정보로 쿼리에 응답할 수 있다는 생각이었죠. 하지만 이 방법도 상당한 어려움에 직면했습니다. AI는 “인생에서 중요한 결정을 내리는 방법”과 같은 복잡한 쿼리에 대해 의미 있는 답변을 제공하는 데 어려움을 겪었습니다. 요약에 저장된 풍부하고 미묘한 콘텐츠를 활용하는 대신 AI의 답변은 종종 얕거나 불완전했습니다.

이 경험을 통해 AI에서 폭과 깊이의 균형을 맞추는 것이 얼마나 어려운지 알 수 있었습니다. 요약은 개괄적인 개요를 제공할 수 있지만, 더 복잡한 질문에 답하는 데 필요한 세부적인 맥락이 부족한 경우가 많습니다. 저는 효과적인 솔루션은 세부적인 콘텐츠와 높은 수준의 요약을 모두 통합하여 AI가 필요에 따라 두 가지를 모두 활용할 수 있도록 해야 한다는 것을 깨달았습니다.

그렇기 때문에 현재 운영 중인 Fabrice AI 버전에서는 더 자세한 내용을 설명하기 전에 AI가 먼저 답변의 요약을 제공하도록 하고 있습니다.

지평을 넓히다: 지식 그래프 색인

이전 방법의 한계를 인식한 저는 보다 정교한 접근 방식인 지식 그래프 인덱스로 전환했습니다. 이 접근 방식은 비정형 텍스트로부터 지식 그래프를 구축하여 AI가 엔티티 기반 쿼리에 참여할 수 있도록 하는 것이었습니다. 목표는 콘텐츠에 대한 보다 역동적이고 상호 연결된 이해를 만들어 Fabrice AI가 복잡하고 맥락이 많은 질문에 보다 효과적으로 답변할 수 있도록 하는 것이었습니다.

지식 그래프 인덱스는 그 잠재력에도 불구하고 상당한 장애물에 직면했습니다. 특히 문맥에 대한 깊은 이해가 필요한 쿼리에서 AI는 정확한 결과를 도출하는 데 어려움을 겪었습니다. 예를 들어, “공정한 시드 및 시리즈 A 밸류에이션은 무엇인가요?”라는 질문에 AI는 또다시 적절한 답변을 제공하지 못하여 구조화되지 않은 텍스트를 일관된 지식 그래프에 통합하는 데 어려움이 있음을 강조했습니다.

이 접근 방식은 궁극적으로 성공하지 못했지만, AI에서 지식 그래프를 사용할 때의 어려움에 대한 중요한 인사이트를 제공했습니다. 데이터의 복잡성과 정확한 컨텍스트의 필요성은 잘 구성된 지식 그래프조차도 원하는 결과를 제공하는 데 어려움을 겪을 수 있다는 것을 의미했습니다. 지식 그래프 인덱스의 또 다른 단점은 느린 속도였습니다. 관련 문서를 얻기 위한 응답 시간이 벡터 저장소 인덱스에 비해 매우 길었습니다.

데이터 재평가 쌍둥이자리

몇 번의 좌절 끝에 저는 Google의 AI인 Gemini를 활용하여 다른 접근 방식을 취하기로 결정했습니다. JSON-CSV 파일에서 데이터 세트를 만든 다음 이 데이터를 사용하여 사용자 지정 모델 LLM을 학습시키는 것이었습니다. 구조화된 데이터와 강력한 학습 모델을 사용하면 이전 시도를 괴롭혔던 몇 가지 문제를 극복할 수 있기를 바랐습니다.

하지만 이 접근 방식에도 어려움이 있었습니다. 잘못된 데이터 서식으로 인해 학습 프로세스가 중단되어 모델이 효과적으로 학습되지 못했습니다. 이 실패는 AI 학습에서 데이터 무결성의 중요성을 강조했습니다. 제대로 형식화되고 구조화된 데이터가 없으면 아무리 뛰어난 모델이라도 예상대로 작동하지 않을 수 있습니다.

이 경험을 통해 저는 BigQuery를 사용하여 JSON 데이터를 저장함으로써 Fabrice AI를 효과적으로 학습시키는 데 필요한 대규모 데이터 세트를 관리할 수 있는 보다 확장 가능하고 안정적인 플랫폼을 제공할 수 있는 가능성을 고려하게 되었습니다.

강점 결합: 랭체인 문서와 파인콘

지금까지 직면한 어려움에도 불구하고 저는 Fabrice AI가 지식을 효과적으로 저장하고 검색할 수 있는 솔루션을 찾아야겠다고 결심했습니다. 이러한 결심으로 저는 Langchain 문서와 Pinecone을 실험하게 되었습니다. 이 접근 방식에는 Langchain 문서와 OpenAI 임베딩을 사용해 Pinecone 벡터 저장소를 만든 다음 쿼리를 기반으로 가장 유사한 상위 문서를 검색하는 것이 포함되었습니다.

이 방법은 특히 쿼리에 문서 제목이 포함되어 있을 때 가능성을 보였습니다. 예를 들어 “행복의 열쇠는 무엇인가요?”라는 질문을 받았을 때 AI는 관련 내용을 정확하게 검색하고 요약할 수 있었습니다. 하지만 쿼리에 구체적인 키워드나 제목이 없는 경우에는 여전히 한계가 있었습니다.

이 접근 방식은 다양한 기술을 결합하여 AI 성능을 향상시킬 수 있는 잠재력을 보여주었습니다. Langchain 문서와 Pinecone의 벡터 스토어를 통합함으로써 몇 가지 한계가 있긴 했지만 AI 응답의 관련성과 정확성을 개선할 수 있었습니다.

일관성 확보하기: GPT 빌더 OpenAI

다양한 방법과 기술을 탐색한 끝에 저는 Fabrice AI에 저장된 지식을 통합하고 구체화하기 위해 Open AI의 GPT 빌더를 선택했습니다. 모든 콘텐츠를 GPT 지식 베이스에 업로드함으로써 지식을 검색하고 상호 작용할 수 있는 보다 일관되고 신뢰할 수 있는 플랫폼을 만들고자 했습니다.

이 접근 방식은 가장 성공적인 것으로 입증되었으며, AI는 다양한 쿼리에서 더 나은 결과를 제공할 수 있었습니다. 이러한 성공의 비결은 모든 지식을 하나의 일관된 시스템으로 통합하여 AI가 질문에 답할 때 모든 콘텐츠를 활용할 수 있도록 한 것이었습니다.

이전 게시물에서 언급했듯이 제 웹사이트에서는 실행할 수 없었고 Chat GPT 유료 가입자에게만 제공되어 너무 제한적이라고 생각했습니다. 또한 개선되긴 했지만 여전히 답변의 품질이 마음에 들지 않았고 대중에게 공개하는 것이 편하지 않았습니다.

최종 다듬기: 모델 4o를 사용하는 GPT 어시스턴트

파브리스 AI 개발의 마지막 퍼즐 조각은 모델 4o를 사용하는 GPT 어시스턴트를 도입하면서 완성되었습니다. 이 접근 방식은 프로젝트 전반에 걸쳐 제가 배운 모든 것의 정점에 해당하는 것이었습니다. 벡터 데이터베이스를 활용하고 프롬프트를 개선함으로써 AI의 응답에서 가능한 한 가장 높은 수준의 정확도와 문맥 이해를 달성하는 것을 목표로 했습니다.

이 방법은 제가 축적한 모든 지식을 벡터 데이터베이스에 업로드한 다음, 이를 AI의 상호작용을 위한 기초로 사용하는 것이었습니다. 벡터 데이터베이스를 통해 AI는 키워드 매칭에만 의존하지 않고 쿼리의 의미론적 의미를 기반으로 정보를 검색하여 보다 정교한 검색을 수행할 수 있었습니다. 이는 이전 접근 방식에 비해 크게 발전한 것으로, AI가 복잡하고 미묘한 질문을 더 잘 이해하고 대응할 수 있게 되었습니다.

이 접근 방식의 핵심 혁신 중 하나는 프롬프트를 신중하게 개선한 것입니다. 다양한 프롬프트를 세심하게 만들고 테스트함으로써 AI가 보다 정확하고 관련성 높은 답변을 제공하도록 유도할 수 있었습니다. 여기에는 프롬프트의 문구를 조정하는 것뿐만 아니라 가능한 최상의 답변을 이끌어내기 위해 쿼리를 구성하는 다양한 방법을 실험하는 것도 포함되었습니다.

결과는 인상적이었습니다. 이제 AI는 개방형 질문이거나 문맥에 대한 깊은 이해가 필요한 경우에도 다양한 쿼리를 높은 정확도로 처리할 수 있게 되었습니다. 예를 들어 “인생에서 가장 중요한 결정을 내리는 방법은 무엇인가요?”라는 질문이 있었습니다. AI는 다양한 출처와 관점을 바탕으로 포괄적이고 통찰력 있는 답변을 제공하여 균형 잡힌 답변을 제공했습니다.

이 성공은 수백 시간의 작업과 수많은 실험의 정점입니다. 기술과 정교함을 적절히 조합하면 정보를 효과적으로 저장하고 검색할 수 있을 뿐만 아니라 의미 있는 방식으로 정보를 활용할 수 있는 AI를 만들 수 있다는 것을 보여주었습니다. 모델 4o를 사용한 GPT 어시스턴트의 개발은 제가 처음부터 상상했던 수준의 정교함과 정확성을 달성하면서 Fabrice AI가 진정으로 자신의 모습을 드러낸 시점이었습니다. 그 후 GPT 어시스턴트 API를 제 블로그에 통합하여 최종 사용자가 현재 블로그에서 볼 수 있는 방식으로 Fabrice AI와 상호 작용할 수 있도록 했습니다.

여정 돌아보기

파브리스 AI를 개발하는 과정에서 특히 정보를 이해하고 맥락을 파악하는 데 있어 AI 작업의 복잡성을 강조했습니다. AI 개발에는 지름길이 없으며 모든 단계, 모든 반복, 모든 실험이 진정으로 효과적인 무언가를 만들기 위한 여정의 필수적인 부분이라는 것을 깨달았습니다.

앞으로 Fabrice AI를 계속 개선하고 확장해 나갈 생각에 기대가 큽니다. 지난 게시물에서 언급했듯이 지식창고의 부족한 부분을 보완하기 위해 질문을 검토할 것입니다. 또한 언젠가는 저와 똑같이 생겼고 저와 대화할 수 있는 대화형 버전도 출시하고 싶어요.

>