Elasticsearch로 ChatGPT 커넥터를 구축해 GitHub 문제 쿼리하기

사용자 정의 ChatGPT 커넥터를 구축하고, 하이브리드 검색을 활용해 내부 GitHub 문제를 쿼리하는 Elasticsearch MCP 서버를 배포하는 방법을 알아보세요.

Agent Builder는 현재 기술 미리보기 버전으로 제공됩니다. Elastic Cloud 체험판으로 시작한 뒤, Agent Builder 문서를 여기에서 확인하세요.

최근 OpenAI는 프로/비즈니스/엔터프라이즈 및 에듀 요금제에서 ChatGPT를 위한 사용자 정의 커넥터 기능을 발표했습니다. Gmail, GitHub, 드롭박스 등에서 데이터를 활용하기 위한 기본 제공 커넥터 외에도 MCP 서버를 사용하여 사용자 정의 커넥터를 만들 수 있습니다.

맞춤형 커넥터를 사용하면 기존 ChatGPT 커넥터를 Elasticsearch와 같은 추가 데이터 소스와 결합하여 포괄적인 답변을 얻을 수 있습니다.

이문서에서는 내부 GitHub 문제와 풀 요청에 대한 정보를 포함하는 Elasticsearch 인덱스에 ChatGPT를 연결하는 MCP 서버를 구축합니다. 이 기능을 통해 Elasticsearch 데이터를 사용하여 자연어 쿼리에 응답할 수 있습니다.

Google Colab에서 FastMCP를 사용하여 MCP 서버를 배포하고, ngrok을 통해 ChatGPT가 연결할 수 있는 공개 URL을 얻어 복잡한 인프라 설정을 간소화합니다.

MCP와 에코시스템에 대한 종합적인 개요는 MCP의 현재 상태를 참조하세요.

필수 구성 요소

시작하려면 다음이 필요합니다.

  • Elasticsearch 클러스터 (8.X 이상)
  • 인덱스에 대한 읽기 권한이 있는 Elasticsearch API 키
  • Google 계정 (Google Colab용)
  • Ngrok 계정 (무료 요금제 사용 가능)
  • 프로/엔터프라이즈/비즈니스 또는 에듀 요금제로 등록된 ChatGPT 계정

ChatGPT MCP 커넥터 요구사항 이해하기

ChatGPT MCP 커넥터를 사용하려면 searchfetch, 두 가지를 구현해야 합니다. 자세한 내용은 OpenAI 문서를 참조하세요.

검색 툴

사용자 쿼리를 기반으로 Elasticsearch 인덱스에서 관련 결과 목록을 반환합니다.

수신 내용:

  • 사용자의 자연어 쿼리가 포함된 단일 스트링입니다.
  • 예: 'Elasticsearch 마이그레이션과 관련된 문제 찾기'

반환값: 

  • 결과 객체 배열을 포함하는 result 키를 가진 객체입니다. 각 결과에는 다음이 포함됩니다.
    • id - 고유 문서 식별자
    • title - 이슈 또는 PR 제목
    • url - 문제/PR에 대한 링크

구현에서:

가져오기 도구

특정 문서의 전체 내용을 가져옵니다.

수신 내용:

  • 검색 결과에서 Elasticsearch 문서 ID를 포함하는 단일 스트링
  • 예: 'PR-578의 세부 정보를 가져와'

반환값:

  • 다음 항목을 포함한 완전한 문서 객체입니다.
    • id - 고유 문서 식별자
    • title - 이슈 또는 PR 제목
    • text - 전체 문제/PR 설명 및 세부 정보
    • url - 문제/PR에 대한 링크
    • type - 문서 유형(문제, pull_request)
    • status - 현재 상태(오픈, 진행 중, 해결 완료)
    • priority - 우선순위 수준(낮음, 중간, 높음, 긴급)
    • assignee - 문제/PR 담당자
    • created_date - 생성된 시점
    • resolved_date - 해결된 시점(해당되는 경우)
    • labels - 문서에 연결된 태그
    • related_pr - 관련 풀 요청 ID

참고: 이 예에서는 모든 필드가 루트 레벨에 있는 플랫 구조를 사용합니다. OpenAI 요구 사항은 유연하며 중첩된 메타데이터 개체도 지원합니다.

GitHub 이슈 및 PR 데이터 세트

이 튜토리얼에서는 문제와 풀 요청이 포함된 내부 GitHub 데이터 집합을 사용합니다. 이는 ChatGPT를 통해 비공개 내부 데이터를 쿼리하는 시나리오입니다.

데이터 세트는 여기에서 찾을 수 있습니다. 그리고 벌크 API를 사용해 데이터의 색인을 업데이트할 것입니다.

이 데이터 세트에는 다음이 포함되어 있습니다.

  • 설명, 상태, 우선순위 및 담당자와 관련된 문제
  • 코드 변경, 리뷰, 배포 정보가 포함된 풀 요청
  • 문제와 PR 간의 관계 (예: PR-578이 ISSUE-1889를 수정함)
  • 라벨, 날짜 및 기타 메타데이터

인덱스 매핑

인덱스는 매핑을 사용해 ELSER와의 하이브리드 검색을 지원합니다. text_semantic은 시맨틱 검색에 사용되며, 다른 필드는 키워드 검색을 지원합니다.

MCP 서버 구축

저희 MCP 서버는 더 나은 결과를 위해 하이브리드 검색을 사용하여 시맨틱과 텍스트 매칭을 결합하는 OpenAI 사양을 따르는 두 가지 도구를 구현합니다.

검색 툴

RRF(상호 순위 융합)을 사용하여 의미론적 검색과 텍스트 매칭을 결합한 하이브리드 검색을 사용합니다.

주요 사항:

  • RRF를 사용한 하이브리드 검색: 시맨틱 검색(ELSER)과 텍스트 검색(BM25)을 결합하여 더 나은 결과를 제공합니다.
  • 다중 일치 쿼리: 부스팅(title^3, text^2, assignee^2)을 사용하여 여러 필드에 걸쳐 검색합니다. 캐럿 기호(^)는 관련성 점수를 곱하여 콘텐츠보다 제목의 일치 항목에 우선순위를 부여합니다.
  • 퍼지 매칭: fuzziness: AUTO는 대략적인 매칭을 허용함으로써 오타와 맞춤법 오류를 처리합니다.
  • 상호 순위 결합(RRF) 파라미터 튜닝:
    • rank_window_size: 50 - 병합하기 전에 각 검색기(시맨틱 및 텍스트)에서 고려할 상위 결과의 수를 지정합니다.
    • rank_constant: 60 - 이 값은 개별 결과 집합의 문서가 최종 순위 결과에 미치는 영향을 결정합니다.
  • 필수 필드만 반환: OpenAI 사양에 따라 id, title, url 만 반환되며, 불필요한 추가 필드를 노출하지 않습니다.

가져오기 도구

문서가 있는 경우 문서 ID로 문서 세부 정보를 검색합니다.

주요 사항:

  • 문서 ID 필드로 검색: 사용자 정의 id 필드에서 용어 쿼리를 사용합니다.
  • 전체 문서 반환: 모든 콘텐츠가 포함된 전체 text 필드를 포함합니다.
  • 플랫 구조: 모든 필드가 루트 수준에 있으며, Elasticsearch의 문서 구조와 일치합니다.

Google Colab에 배포

Google Colab을 사용하여 MCP 서버를 실행하고 ngrok을 사용해 외부에 공개함으로써 ChatGPT가 연결할 수 있도록 합니다.

1단계: Google Colab 노트북 열기

사전 구성된 Elasticsearch MCP for ChatGPT 노트북에 액세스합니다.

2단계: 자격 증명을 구성하세요

세 가지 정보를 준비해야 합니다.

  • Elasticsearch URL: Elasticsearch 클러스터 URL입니다.
  • Elasticsearch API 키: API 키로 인덱스에 대한 읽기 액세스 권한을 부여합니다.
  • Ngrok 인증 토큰: ngrok에서 무료로 제공하는 토큰입니다. ngrok을 사용하여 MCP URL을 인터넷에 노출하여 ChatGPT가 연결할 수 있도록 합니다.

ngrok 토큰 받기

  1. ngrok에서 무료 계정 가입
  2. ngrok 대시보드로 이동
  3. 인증 토큰을 복사하세요

Google Colab에 시크릿 추가

Google Colab 노트북에서:

  1. 왼쪽 사이드바에서 키 아이콘을 클릭하여 시크릿을 엽니다.
  2. 이 세 가지 시크릿을 추가합니다.

3. 각 시크릿에 대한 노트북 접근 활성화

3단계: 노트북 실행

  1. 런타임을 클릭한 다음 모두 실행을 클릭하여 모든 셀을 실행합니다.
  2. 서버가 시작될 때까지 기다립니다(약 30초).
  3. 공개 ngrok URL을 표시하는 출력을 찾습니다.

4. 출력은 다음과 같이 표시됩니다.

ChatGPT에 연결

이제 MCP 서버를 ChatGPT 계정에 연결합니다.

  1. ChatGPT를 열고 설정으로 이동합니다.
  2. 커넥터로 이동합니다.프로 계정을 사용하는 경우 커넥터에서 개발자 모드를 사용 설정해야 합니다.

ChatGPT 엔터프라이즈 또는 비즈니스 버전을 사용하는 경우, 커넥터를 작업 환경에 게시해야 합니다.

3. 만들기를 클릭합니다.

참고: 비즈니스, 엔터프라이즈, 에듀 작업 공간에서는 작업 공간 소유자, 관리자 및 해당 설정이 활성화된 사용자(엔터프라이즈/에듀)만 사용자 정의 커넥터를 추가할 수 있습니다. 일반 회원 역할을 가진 사용자는 사용자 정의 커넥터를 직접 추가할 수 없습니다.

소유자 또는 관리자 사용자가 커넥터를 추가하고 활성화하면 작업 공간의 모든 구성원이 이를 사용할 수 있습니다.

4. 필요한 정보를 입력하고 /sse/로 끝나는 ngrok URL을 입력합니다. 'sse"' 뒤의 '/'에 주의하세요. 이것 없이는 작동하지 않습니다.

  • 이름: Elasticsearch MCP
  • 설명: GitHub 내부 정보를 검색하고 가져오기 위한 사용자 정의 MCP입니다.

5. 생성 을 눌러 사용자 정의 MCP를 저장하세요.

서버가 실행 중이면 즉시 연결됩니다. Elasticsearch API 키가 서버에 구성되어 있으므로 추가 인증이 필요하지 않습니다.

MCP 서버 테스트

질문을 하기 전에 ChatGPT가 사용할 커넥터를 선택해야 합니다.

프롬프트 1: 문제 검색

질문: 'Elasticsearch 마이그레이션과 관련된 문제를 찾아'라고 요청하고 작업 도구 호출을 확인하세요.

ChatGPT가 사용자의 쿼리를 사용하여 search 도구를 호출합니다. 사용 가능한 도구를 찾고 Elasticsearch 도구를 호출할 준비를 하며, 도구에 대해 조치를 취하기 전에 사용자에게 확인하는 것을 볼 수 있습니다.

도구 호출 요청:

도구 응답:

ChatGPT는 결과를 처리하여 자연스러운 대화 형식으로 표시합니다.

비하인드 스토리

1. ChatGPT 호출 search(“Elasticsearch migration”)

2. Elasticsearch가 하이브리드 검색 수행

  • 시맨틱 검색은 '업그레이드' 및 '버전 호환성'과 같은 개념을 이해합니다.
  • 텍스트 검색은 'Elasticsearch' 및 '마이그레이션'과 정확히 일치하는 결과를 찾습니다.
  • RRF는 두 가지 접근 방식의 결과를 결합하고 순위를 매깁니다.

3. id, title와 일치하는 상위 10개의 이벤트를 반환합니다, url

4. ChatGPT는 'ISSUE-1712: Elasticsearch 7.x에서 8.x로 마이그레이션'을 가장 관련성 있는 결과로 식별합니다

프롬프트 2: 전체 세부 정보 확인

문의: 'ISSUE-1889의 세부 정보를 보여줘'

ChatGPT는 사용자가 특정 문제에 대한 자세한 정보를 원한다는 것을 인식하고 fetch 도구를 호출한 후, 도구에 대해 조치를 취하기 전에 사용자에게 확인합니다.

도구 호출 요청:

도구 응답:

ChatGPT는 정보를 종합하여 명확하게 제시합니다.

비하인드 스토리

프롬프트: 'ISSUE-1889의 세부 정보를 가져와'

  1. ChatGPT 호출 fetch(“ISSUE-1889”)
  2. Elasticsearch가 전체 문서를 검색합니다.
  3. 모든 필드가 루트 수준에 포함된 전체 문서를 반환합니다.
  4. ChatGPT는 정보를 종합하고 적절한 출처를 제시하며 응답합니다.

결론

이 문서에서는 전용 검색가져오기 MCP 도구를 사용하여 ChatGPT를 Elasticsearch에 연결하고, 비공개 데이터에 대한 자연어 쿼리를 가능하게 하는 사용자 정의 MCP 서버를 구축했습니다.

이 MCP 패턴은 자연어로 쿼리하려는 모든 Elasticsearch 인덱스, 문서, 제품, 로그 또는 기타 데이터에 적용할 수 있습니다.

관련 콘텐츠

최첨단 검색 환경을 구축할 준비가 되셨나요?

충분히 고급화된 검색은 한 사람의 노력만으로는 달성할 수 없습니다. Elasticsearch는 여러분과 마찬가지로 검색에 대한 열정을 가진 데이터 과학자, ML 운영팀, 엔지니어 등 많은 사람들이 지원합니다. 서로 연결하고 협력하여 원하는 결과를 얻을 수 있는 마법 같은 검색 환경을 구축해 보세요.

직접 사용해 보세요