본문

테크
ChatGPT가 모르는 것을 ChatGPT에게 물어보기

작성일 2024년 06월 25일

우리는 종종 ChatGPT에게 질문을 하지만, 때로는 ChatGPT가 알지 못하는 정보에 대해 물어봐야 할 때가 있습니다. 이런 경우에 OpenAI Embeddings를 활용하면 비공개 자료에 대해서도 ChatGPT에게 물어볼 수 있습니다.

 

특히 참고자료의 양이 너무 커서 ChatGPT에 입력할 수가 없을 때 유용하게 사용될 수 있습니다. 이 글에서는 로컬 디스크에 저장된 프로젝트 폴더의 소스 파일을 이용해서 이 과정을 설명하겠습니다. 자동차를 운전하기 위해 엔진의 원리를 자세히 알 필요가 없듯이, 복잡한 기술적 세부사항 없이 이 방법을 실제로 적용하는 방법에 집중하겠습니다.

 

준비하기

먼저, 필요한 도구들을 준비해봅시다.

  • 파이썬 3 버전이 설치되어 있어야 합니다.
  • 필요한 라이브러리를 설치합니다. 명령 프롬프트(또는 터미널)를 열고 다음 명령어를 입력하세요.


pip install requests numpy nltk

  • OpenAI 웹사이트(https://openai.com/)에서 API 키를 받아야 합니다.
 

소스 코드 준비하기


우리는 GitHub에서 필요한 코드를 가져와 사용할 것입니다.
https://github.com/ryujt/openai-embeddings에서 코드를 다운로드 받으세요.

다운로드 받은 폴더에는 아래와 같은 파이썬 파일이 있습니다:

  • emb_save.py: 이 파일은 우리의 소스 코드를 ChatGPT가 이해할 수 있는 형태로 변환합니다.
  • emb_ask.py: 이 파일은 우리가 질문을 입력하면 관련된 소스 코드를 찾아 ChatGPT에게 전달하고 답변을 받아옵니다.

 

소스 코드 변환하기

 

먼저 emb_save.py 파일을 열어 몇 가지 설정을 변경해야 합니다.

  • API_KEY: 여기에 OpenAI에서 받은 API 키를 입력하세요.
  • FOLDER_PATH: 분석하고 싶은 소스 코드가 있는 폴더 경로를 지정하세요.
  • EXTENSIONS: 분석할 파일의 확장자를 지정하세요. 예를 들어, ['.py', '.java', '.cpp']와 같이 설정할 수 있습니다.

설정을 마쳤다면, 명령 프롬프트에서 다음 명령어를 실행하세요.

 

python emb_save.py

 

이 과정이 끝나면 embeddings.jsonl이라는 파일이 생성됩니다.

이 파일에는 우리의 소스 코드가 ChatGPT가 이해할 수 있는 형태로 변환되어 저장되어 있습니다.

 

ChatGPT에게 질문하기

 

이제 emb_ask.py 파일을 열어서

  • API_KEY를 설정하세요.
  • user_input 변수에 원하는 질문을 입력합니다.
    • 예를 들어, "프로젝트에서 데이터베이스 연결은 어떻게 처리하나요?"와 같은 질문을 할 수 있습니다.

그리고 다음 명령어를 실행합니다.

 

python emb_ask.py

 

질문에 대한 답변은 response.md 파일에 저장됩니다.

이 파일을 열어 ChatGPT의 답변을 확인할 수 있습니다.

 

결과 화면

 

다음 이미지는 결과 내용의 일부를 스크립샷으로 캡쳐한 것입니다.
상당히 자세한 리포트가 마크다운 형태로 저장되어 있는 것을 확인할 수 있습니다.

 

주의할 점

 

  • API 키는 비밀번호와 같습니다. 절대로 다른 사람에게 공유하거나 공개 저장소에 올리지 마세요.
  • OpenAI API 사용에는 비용이 발생할 수 있습니다. 사용량을 주의깊게 모니터링하세요.
  • 큰 프로젝트의 경우 처리 시간이 오래 걸릴 수 있습니다. 인내심을 가지고 기다려주세요.
  • 텍스트를 벡터로 변경하는 모델로 text-embedding-3-large를 사용하고 있습니다.
    • 이전 모델에 비해서 많이 나아지기는 했지만, 여전히 한글보다는 영어를 잘인식하는 경향이 있습니다. 참고자료가 되는 입력과 질문에 영어를 사용하면 보다 나은 결과를 얻을 수 있습니다.

 

원리 설명

 

이 시스템의 작동 원리를 간단히 설명하면 다음과 같습니다:

  1. 텍스트 임베딩:
    • 우리의 소스 코드나 문서를 벡터(숫자의 배열)로 변환합니다.
    • AI가 알아듣기 쉬운 형태로 자료를 변환한다고 생각하시면 됩니다.
    • 이 과정은 'emb_save.py'에서 수행됩니다.
  2. 유사성 검색:
    • 사용자가 질문을 입력하면, 이 질문도 같은 방식으로 벡터로 변환됩니다.
    • 'emb_ask.py'는 이 질문 벡터와 가장 유사한 소스 코드 또는 문서 부분을 찾습니다.
    • 유사성은 보통 코사인 유사도를 사용하여 계산됩니다.
  3. 컨텍스트 구성:
    • 가장 관련성 높은 소스 코드나 문서 부분을 선택하여 사용자의 질문에 붙여 넣습니다.
  4. GPT 쿼리:
    • 보강된 질문을 GPT 모델에 전송합니다.
    • GPT는 제공된 컨텍스트를 바탕으로 질문에 답변합니다.

 

스크린샷 2024-06-25 155615.png

 

이 과정을 통해, GPT는 원래 학습하지 않은 특정 정보에 대해서도 맥락을 이해하고 답변할 수 있게 됩니다. 이는 마치 GPT에게 관련 문서를 제공하고 그 내용을 바탕으로 질문에 답하도록 하는 것과 유사합니다.

 

다이어그램의 위쪽 화살표처럼 바로 질문하지 않고, 아랫쪽 화살표와 같이 참고가 될만한 정보가 자동으로 전송된다고 생각하시면 됩니다. 이 방식의 장점은 다음과 같습니다:

  • 대량의 문서나 코드를 효율적으로 처리할 수 있습니다.
  • 필요한 정보만을 선택적으로 제공하여 GPT의 컨텍스트 제한을 극복할 수 있습니다.
  • 사용자의 질문에 가장 관련된 정보만을 제공하여 정확한 답변을 얻을 수 있습니다.

다만, 이 방식은 텍스트 임베딩의 품질과 유사성 검색의 정확도에 크게 의존하므로, 사용되는 임베딩 모델과 유사성 측정 방법의 선택이 중요합니다.

 

마무리

이 방법을 사용하면 ChatGPT가 원래 알지 못하는 우리의 특정 프로젝트나 문서에 대해서도 질문할 수 있습니다. 이는 팀 내 문서 검색, 코드 분석, 프로젝트 이해 등 다양한 분야에서 활용될 수 있습니다.


ChatGPT의 강력한 언어 이해 능력과 우리의 특정 데이터를 결합함으로써, 우리는 더욱 효율적이고 정확한 정보를 얻을 수 있게 됩니다.

류종택[email protected]
Development TeamAPM Agent Developer

지금 바로
와탭을 경험해 보세요.