ChatGPT와 Elasticsearch: Elastic 데이터와 함께 ChatGPT를 사용하는 플러그인
Elasticsearch의 정확도 기능과 OpenAI 질문 답변 기능을 연결하는 여정에 대한 이전 블로그 포스팅을 읽어보셨을 것입니다. 해당 포스팅의 핵심 아이디어는 Elastic을 OpenAI의 GPT 모델과 함께 사용하여 응답을 구축하고 상황에 맞는 콘텐츠를 사용자에게 반환하는 방법을 설명하는 것이었습니다.
Elastic이 만든 애플리케이션은 검색 엔드포인트를 노출하고 프론트 엔드 서비스에서 호출될 수 있습니다. 좋은 소식은 이제 OpenAI가 미래의 ChatGPT 플러그인 프레임워크의 비공개 알파를 출시했다는 것입니다.
이 블로그에서는, Elastic 설명서를 사용하여 플러그인을 구현하고 Elasticsearch에서 색인된 모든 콘텐츠로 ChatGPT 사용을 확장하는 방법에 대해 알아봅니다.
ChatGPT 플러그인이란?
ChatGPT 플러그인은 모델이 지식을 완성하거나 작업을 실행하는 데 도움이 되도록 개발된 확장 프로그램입니다.
예를 들어, 우리는 지식 관점에서 ChatGPT의 컷오버가 2021년 9월이라는 것을 알고 있으므로, 최근 데이터에 대한 어떤 질문에도 답변이 제공되지 않을 것입니다. 또한 모델이 교육받은 것의 경계를 넘어 너무 구체적인 것과 관련된 질문에도 답변이 제공되지 않을 것입니다.
플러그인은 가능한 애플리케이션의 범위를 넓히고 모델의 기능을 향상시킬 수 있지만, 상호적으로 플러그인의 출력은 모델 자체에 의해 증강됩니다.
현재 ChatGPT에서 지원하는 플러그인의 공식 목록은 다음과 같습니다. 더 많은 조직에서 ChatGPT를 실험함에 따라 이 목록이 빠르게 확장될 것으로 예상할 수 있습니다.
목록을 스캔하면, 사용 사례가 여기서 서서히 드러나고 있음을 알 수 있습니다. 예를 들어, Expedia의 경우 그 플러그인이 여행 계획을 지원하기 위해 ChatGPT를 확장하여 ChatGPT가 여행 계획 도우미가 됩니다.
이 블로그는 Elastic에 대해 유사한 목표를 달성하는 것을 목표로 합니다. ChatGPT가 Elastic의 현재 지식 기반 시스템에 액세스하여 Elastic 프로젝트를 지원할 수 있도록 하는 것입니다.
아키텍처
저의 동료인 Jeff Vestal이 제1부에서 제시한 샘플 코드에 비용 측면에서 긍정적인 영향을 주는 약간의 수정을 가져오려고 합니다.
이제 ChatGPT가 Elasticsearch에서 콘텐츠를 가져와 사용자에게 다시 요약하는 역할을 수행하게 되므로, OpenAI API에 대한 호출을 제거하겠습니다.
1. ChatGPT가 플러그인의 `/search` 엔드포인트로 호출합니다.
- 이 결정은 플러그인 “rules” `description_for_human`에 기반합니다(아래 plugin-manifest 참조).
2. 플러그인 코드는 Elasticsearch에 전송되는 검색 요청을 생성합니다.
3. 설명서 본문과 원본 URL이 Python으로 반환됩니다.
4. 플러그인은 문서 본문과 URL을 텍스트 형식으로 ChatGPT로 반환합니다.
5. ChatGPT는 플러그인의 정보를 사용하여 해당 응답을 정교하게 작성합니다.
다시 말씀드리지만, 이 블로그 포스팅은 Elastic Cloud 계정을 설정하고, 콘텐츠를 벡터화했으며, 사용 준비가 된 데이터로 채워진 Elasticsearch 클러스터가 있다고 가정합니다. 만약 아직 모든 것을 설정하지 않으셨다면, Elastic의 이전 포스팅에서 따라야 할 상세한 단계를 참조하세요.
플러그인 코드
OpenAI는 ChatGPT를 위해 상당히 다루기 쉬운 플러그인 프레임워크를 구축했으며, 다음을 드러내는 서비스를 배포합니다.
- 플러그인이 사용자 및 ChatGPT에게 무엇을 제공하는지 설명하는 플러그인 매니페스트
- ChatGPT가 이용 가능한 API를 이해할 수 있도록 하는 기능 설명인 플러그인 openAPI 정의
플러그인 파일 구조
아래 스크린샷은 구조의 모양을 보여줍니다.
- 플러그인 매니페스트는 OpenAI 모범 사례에 따라 .well-known 디렉터리 아래에 있는 ai-plugin.json 파일에 저장됩니다.
- 주요 서비스 코드는 app.py에 있습니다.
- Dockerfile은 나중에 Google Cloud Compute에 플러그인을 배포하는 데 사용됩니다.
- ChatGPT 플러그인 스토어에 표시되는 플러그인의 로고(logo.ong)로서 여기서는 Elastic 로고를 나타냄.
- 플러그인의 OpenAI 설명.
Python 코드
전체 코드는 GitHub 리포지토리를 참조하세요. 우리는 다음과 같이 이 코드의 주요 부분만 살펴보겠습니다.
…
@app.get("/search")
…
@app.get("/logo.png")
…
@app.get("/.well-known/ai-plugin.json")
…
@app.get("/openapi.yaml")
…
여기에서는 모든 세부사항을 빼고 주요 부분만 남겨놓았습니다. 여기에는 두 가지 범주의 API가 있습니다.
1. 플러그인을 구축하기 위해 OpenAI에서 필요한 API:
- /logo.png: 플러그인 로고 검색
- /.well-known/ai-plugin.json: 플러그인 매니페스트 가져오기
- /openapi.yaml: 플러그인 OpenAPI 설명 가져오기
2. 플러그인 API:
- /search는 여기서 Elasticsearch에서 검색을 실행하는 ChatGPT에 노출되는 유일한 것입니다
플러그인 매니페스트
플러그인 매니페스트는 ChatGPT가 플러그인의 존재(연결할 수 있는)를 검증하는 데 사용하게 되는 것입니다. 정의는 다음과 같습니다.
{
"schema_version": "v1",
"name_for_human": "ElasticGPTDoc_Plugin",
"name_for_model": "ElasticGPTDoc_Plugin",
"description_for_human": "Elastic Assistant, you know, for knowledge",
"description_for_model": "Get most recent elasticsearch docs post 2021 release, anything after release 7.15",
"auth": {
"type": "none"
},
"api": {
"type": "openapi",
"url": "PLUGIN_HOSTNAME/openapi.yaml",
"is_user_authenticated": false
},
"logo_url": "PLUGIN_HOSTNAME/logo.png",
"contact_email": "info@elastic.co",
"legal_info_url": "http://www.example.com/legal"
}
여기서 몇 가지 지적해야 할 사항이 있습니다.
1. 다음 두 가지 설명이 있습니다.
- description_for_human - ChatGPT 웹 UI에서 플러그인을 설치할 때 사람이 보는 내용입니다.
- description_for_model - 모델이 플러그인을 사용하는 시기를 이해하기 위한 지침입니다.
2. Python 코드에서 대체되는 PLUGIN_HOSTNAME과 같은 일부 자리 표시자가 있습니다.
OpenAPI 정의
우리 코드는 단일 API 엔드포인트만 ChatGPT에 노출시켜 ChatGPT가 Elastic 설명서를 검색할 수 있도록 합니다. 다음은 설명입니다.
openapi: 3.0.1
info:
title: ElasticDocGPT
description: Retrieve information front the most recent Elastic documentation
version: 'v1'
servers:
- url: PLUGIN_HOSTNAME
paths:
/search:
get:
operationId: search
summary: retrieves the document matching the query
parameters:
- in: query
name: query
schema:
type: string
description: use to filter relevant part of the elasticsearch documentations
responses:
"200":
description: OK
정의 파일의 경우, 핵심 사항은 다음과 같습니다.
- ChatGPT 프롬프트 내용을 가져와 Elasticsearch 클러스터에 쿼리로 전달합니다.
- PLUGIN_HOSTNAME과 같은 일부 자리 표시자가 Python 코드에서 대체됩니다.
Google Cloud Platform(GCP)에서 Elastic 플러그인 배포
다른 클라우드 서비스 제공자 사용뿐만 아니라 플러그인을 노출하기 위한 배포 방법을 선택할 수 있습니다. 이 블로그 포스팅에서는 GCP를 사용합니다. 좀더 구체적으로 말하자면, Google Cloud Run과 Google Cloud Build입니다. 첫 번째는 서비스를 노출하고 실행하기 위한 것이고, 두 번째는 지속적인 통합을 위한 것입니다.
설정
이 설정에서는 GCP 사용자에게 다음과 같은 적절한 권한이 있다고 가정합니다.
- Google Container Registry에서 Google Cloud Build를 사용하여 컨테이너 이미지를 작성할 권한
- Google Cloud Run에서 컨테이너를 배포할 권한
이러한 권한이 없는 경우, GCP IAM 페이지에서 권한을 업데이트해야 합니다.
우리는 gcloud CLI를 사용하여 환경을 설정하겠습니다. 설치 지침은 여기에서 확인하실 수 있습니다.
설치가 완료되면, 다음 명령을 실행하여 인증합니다.
gcloud auth
그런 다음 프로젝트 식별자를 GCP 프로젝트로 설정합니다.
gcloud config set project PROJECT_ID
이제 빌드하고 배포할 준비가 되었습니다.
빌드 및 배포
첫 번째 단계는 Cloud Build를 사용하여 컨테이너 이미지를 빌드하고 Google Container Registry에 이를 푸시하는 것입니다.
gcloud builds submit --tag gcr.io/PROJECT_ID/my-python-app
PROJECT_ID를 GCP 프로젝트 ID로, my-python-app을 컨테이너 이미지에 부여할 이름으로 바꿉니다.
Python 코드에서 필요한 환경을 내보내 Elasticsearch 클라이언트를 만듭니다.
export YOUR_CLOUD_ID=VALUE
export YOUR_CLOUD_PASS=VALUE
export YOUR_CLOUD_USER=VALUE
마지막으로, 컨테이너 이미지를 Cloud Run에 배포합니다.
gcloud run deploy my-python-app \
--image gcr.io/PROJECT_ID/my-python-app \
--platform managed \
--region us-central1 \
--allow-unauthenticated \
--set-env-vars cloud_id=YOUR_CLOUD_ID,cloud_pass=YOUR_CLOUD_PASS,cloud_user=YOUR_CLOUD_USER
다음과 같이 Cloud Run에서 서비스가 실행되고 있는 것을 확인할 수 있습니다.
또한 GitHub 리포지토리의 모든 커밋이 재배포를 트리거하도록 지속적인 통합을 활성화할 수도 있습니다. 서비스 세부 정보 페이지에서, Set up continuous deployment(지속적인 배포 설정)를 클릭합니다.
ChatGPT에 플러그인 설치
플러그인이 배포되고 공개 액세스 가능한 엔드포인트가 있으면, 이를 ChatGPT에 설치할 수 있습니다. 우리의 경우에는, Google Cloud Run에서 배포되므로 여기에서 URL을 얻을 수 있습니다.
그런 다음 ChatGPT에서, 플러그인 스토어로 이동합니다.
"Develop your own plugin(자체 플러그인 개발)"을 선택합니다.
Google Cloud Run 페이지에서 복사한 URL을 붙여넣습니다.
플러그인을 찾을 수 있고 유효한지 확인합니다.
이용 가능한 플러그인이 목록에 표시될 때까지 설치 지침을 따릅니다.
이제 플러그인을 테스트해 보겠습니다!
됐습니다. 이제 가장 재미있는 부분이네요! 사용자의 프롬프트가 ChatGPT 지식 수준을 넘어서면 ChatGPT가 위임하게 됨을 기억하세요. 이를 수행하려면, 다음 예제와 유사한 질문을 하면 됩니다.
이 블로그에서 제공하는 단계를 따라, 자체 플러그인을 생성하여 클라우드 서비스 제공자나 자체 호스트에서 배포할 수 있습니다. 이로써 ChatGPT의 지식과 기능을 개선하기 시작할 수 있으며, 전문 지식과 독점적인 지식을 통해 이미 놀라운 도구를 향상시킬 수 있습니다.
지금 이 블로그에서 논의된 모든 기능을 사용해 보실 수 있습니다! 무료 Elastic Cloud 체험판에 가입하여 시작해 보세요.
다음은 여러분이 흥미롭게 생각하실 수 있는 다른 블로그들입니다.
- ChatGPT와 Elasticsearch: OpenAI가 프라이빗 데이터를 만나다
- OpenTelemetry와 Elastic을 통한 OpenAI API 및 GPT 모델 모니터링
- ChatGPT를 통한 보안의 미래 모색
이 블로그 포스팅에서, Elastic은 각 소유자가 소유하고 운영하는 서드파티 생성형 AI 도구를 사용했을 수 있습니다. Elastic은 서드파티 도구에 대한 어떠한 통제권도 없으며 당사는 그 내용, 작동 또는 사용에 대한 책임이나 법적 의무가 없고 이러한 도구의 사용으로 인해 발생할 수 있는 손실 또는 손상에 대해 책임을 지지 않습니다. 개인 정보, 민감한 정보 또는 기밀 정보와 함께 AI 도구를 사용할 때 주의하세요. 제출하신 모든 데이터는 AI 교육을 위해 또는 다른 목적으로 사용될 수 있습니다. 제공하시는 정보가 안전하게 유지되거나 기밀로 유지된다는 보장은 없습니다. 사용 전에 생성형 AI 도구의 개인 정보 보호 관행 및 사용 약관을 숙지하셔야 합니다.
Elastic, Elasticsearch 및 관련 상표는 미국 및 기타 국가에서 Elasticsearch N.V.의 상표, 로고 또는 등록 상표입니다. 기타 모든 회사 및 제품 이름은 해당 소유자의 상표, 로고 또는 등록 상표입니다.