본문 바로가기
WIKI 기술 지식 베이스

Building AI search workflows in OpenSearch Dashboards

원문 보기 위키 갱신

출처: 문서

본문

OpenSearch Dashboards에서 AI 검색 워크플로 구축하기

OpenSearch Dashboards에서는 AI Search Flows를 사용해 인제스트 파이프라인과 검색 파이프라인이 포함된 워크플로를 반복적으로 만들고 테스트할 수 있어요. UI 편집기로 워크플로를 만들면 벡터 검색, 검색 증강 생성(RAG) 같은 ML 추론 프로세서가 들어가는 인공지능/머신러닝(AI/ML) 사용 사례를 훨씬 간단하게 구축할 수 있어요.

사용 가능한 AI 검색 유형(시맨틱 검색, 하이브리드 검색, RAG, 멀티모달 검색 포함)의 예시 구성은 AI 검색 유형 구성을 참고하세요.

에이전틱 검색 플로를 구성하는 예시는 에이전틱 검색 구성을 참고하세요.

워크플로를 확정하고 나면 워크플로 템플릿으로 내보내서 여러 클러스터에서 동일한 리소스를 다시 만들 수 있어요.

사전 지식

인제스트 파이프라인과 검색 파이프라인은 OpenSearch에서 인제스트 및 검색 작업의 여러 단계에서 데이터 변환을 수행하게 해줘요. _인제스트 파이프라인_은 인제스트 프로세서의 나열로 구성되고, _검색 파이프라인_은 검색 요청 프로세서 및/또는 검색 응답 프로세서로 구성돼요. 이 프로세서들을 조합해서 데이터 처리 요구 사항에 맞는 커스텀 파이프라인을 만들 수 있어요.

이 파이프라인들은 세 가지 핵심 단계에서 데이터를 수정해요:

  1. 인제스트: 문서가 인덱스에 인제스트되기 전에 변환해요.
  2. 검색 요청: 검색을 실행하기 전에 검색 요청을 변환해요.
  3. 검색 응답: 검색을 실행한 후 응답을 반환하기 전에, 결과에 포함된 문서를 포함한 검색 응답을 변환해요.

OpenSearch에서는 서드파티 플랫폼에 호스팅된 모델을 통합해서 그 추론 기능을 OpenSearch에서 바로 사용할 수 있어요. 인제스트 파이프라인과 검색 파이프라인 모두 ML 추론 프로세서를 제공하기 때문에, 인제스트와 검색 두 단계에서 파이프라인 안에서 외부 호스팅 모델로 추론을 수행할 수 있어요.

AI Search Flows 접근하기

AI Search Flows에 접근하려면 OpenSearch Dashboards로 이동한 다음 상단 메뉴에서 OpenSearch Plugins > AI Search Flows를 선택하세요.

프리셋 템플릿

홈 페이지에서 New workflow 탭을 선택하거나, 오른쪽에 있는 Create workflow 버튼을 선택하세요. 그러면 다양한 사용 사례에 맞게 설계된 프리셋 템플릿 목록이 열리는데, 각 템플릿에는 고유하게 사전 구성된 인제스트 및 검색 프로세서 세트가 들어 있어요. 이 템플릿은 두 가지 주요 용도로 사용돼요:

  • AI/ML 솔루션 빠르게 테스트: 배포한 모델에 정의된 인터페이스가 있다면 클릭 몇 번으로 클러스터에 기본 솔루션을 구성할 수 있어요. 자세한 내용은 예시: RAG를 활용한 시맨틱 검색을 참고하세요.
  • 커스텀/고급 솔루션의 출발점: 각 템플릿은 커스텀 솔루션을 만들기 위한 구조화된 출발점을 제공해요. 필요에 맞게 이 템플릿들을 수정하고 확장할 수 있어요.

워크플로 편집기

다음 이미지에 나온 워크플로 편집기에서 인제스트 및 검색 워크플로를 만들고 테스트할 수 있어요.

워크플로 편집기

워크플로 편집기는 통합 개발 환경(IDE)과 비슷하게 구성되어 있고 세 가지 주요 구성 요소로 이루어져 있어요:

  • Flow overview: 인제스트 및 검색 플로 안의 여러 구성 요소를 선택할 수 있는, 접었다 펼 수 있는 내비게이션 패널이에요. 이 패널에서 프로세서를 추가, 삭제, 재정렬할 수 있어요. 이미 데이터가 채워진 인덱스가 있고 검색 플로만 필요하다면 Ingest flow를 비활성화하면 돼요.
  • Component details: 개별 구성 요소의 세부 사항을 구성하는 가운데 패널이에요. Flow overview에서 구성 요소를 선택하면 이 패널에 해당 세부 사항이 채워져요.
  • Inspect: 워크플로와 상호작용할 수 있는 탭 모음이에요.
    • Test flow: 검색 파이프라인을 붙이거나 붙이지 않은 상태로 검색 플로를 실행하고, 결과를 표 또는 raw JSON 형태로 볼 수 있어요.
    • Ingest response: 인제스트 플로를 업데이트한 후의 API 응답을 표시해요.
    • Errors: 업데이트, 인제스트 작업, 검색에서 발생한 최신 오류를 보여줘요. 새 오류가 발생하면 이 탭이 자동으로 열려요.
    • Resources: 워크플로에 연결된 OpenSearch 리소스(인제스트 파이프라인, 인덱스, 검색 파이프라인 각각 최대 1개)를 나열해요. 리소스 세부 사항을 보려면 Inspect를 선택하세요.
    • Preview: 데이터가 인제스트 및 검색 플로를 거치며 어떻게 이동하는지 보여주는 읽기 전용 시각화예요. 플로를 수정하면 이 뷰가 자동으로 업데이트돼요. JSON 탭으로 전환하면 그 밑에 깔린 템플릿 구성도 볼 수 있어요.

예제: RAG를 사용한 시맨틱 검색

다음 예제에서는 배포된 Titan Text Embedding 모델과 Amazon Bedrock에서 호스팅되는 Anthropic Claude 모델을 사용해 벡터 검색과 RAG를 수행하기 위한 인제스트 파이프라인, 인덱스, 검색 파이프라인을 만들어요.

전체 모델 인터페이스를 갖춘 모델을 사용하는 것을 강력히 권장해요. 예제 구성 목록은 모델을 참고하세요. {: .note}

  1. Workflows 페이지에서 다음 이미지와 같이 New workflow 탭을 선택하세요. 새 워크플로 페이지

  2. RAG with Vector Retrieval 템플릿에서 Create를 선택하세요.

  3. 다음 이미지와 같이 기본 정보를 입력하세요:

    • 고유한 워크플로 이름과 설명
    • 벡터 임베딩을 생성하는 데 사용할 임베딩 모델
    • RAG를 수행하는 데 사용할 대규모 언어 모델(LLM) 빠른 구성 모달

    인덱스에 저장될 텍스트 필드와 벡터 필드 이름 같은 추가 옵션을 지정하려면 Optional configuration을 선택하세요. 이 설정은 언제든지 업데이트할 수 있어요.

  4. Create를 선택하면 구성이 미리 채워지고 Workflow Details 페이지로 자동으로 이동해요. 이 페이지에서 인제스트 플로우를 구성할 수 있어요.

  5. 샘플 데이터를 제공하려면 Flow overview에서 Sample data를 선택하세요. 그다음 Import data를 선택해요. 다음 이미지와 같이 데이터를 직접 입력하거나, 로컬 .jsonl 파일을 업로드하거나, 기존 인덱스에서 샘플 문서를 가져올 수 있어요. 데이터 가져오기 모달

    폼은 JSON Lines 형식의 데이터를 기대하며, 각 줄이 하나의 독립적인 문서를 나타내요. 이 과정은 벌크 인제스트 작업과 비슷해요. 다 끝나면 Confirm을 선택하세요.

  6. Flow overview 패널에서 가장 위에 있는 ML Inference Processor를 선택하세요. 이 프로세서에는 데이터를 기대되는 모델 입력 to 및 모델 출력 from 방향으로 매핑하는 데 사용되는 구성이 미리 채워져 있어요. Inputs 섹션은 대상 문서 필드를 모델 입력 필드에 매핑해서 해당 필드의 벡터 임베딩을 생성해요. Outputs 섹션은 모델 출력 필드를 인덱스에 저장되는 새 필드에 매핑해요. 다음 이미지를 참고하세요. 데이터 변환

    복잡한 데이터 스키마와 모델 인터페이스를 수용하는 변환 타입에 대한 자세한 내용은 고급 데이터 변환을 참고하세요.

  7. Flow overview 패널에서 Index를 선택하세요. 인덱스에는 선택한 유스 케이스에 필요한 인덱스 구성이 미리 채워져 있어요. 예를 들어 벡터 검색의 경우 my_embedding 필드가 knn_vector로 매핑되고, 인덱스가 벡터 인덱스(index.knn: true)로 지정돼요. 다음 이미지를 참고하세요. 이 구성은 필요에 따라 수정할 수 있어요. 데이터 인제스트

  8. Flow overview 하단에서 Update ingest flow를 선택하면 구성된 인제스트 파이프라인과 인덱스가 빌드되고 제공된 샘플 데이터가 인제스트돼요. 그다음 Inspect 아래의 Test flow로 이동해서 새로 만든 인덱스를 검색하고 변환된 문서가 기대한 대로 표시되는지 확인하세요. 이 예제에서는 인제스트된 각 문서에 대해 벡터 임베딩이 생성됐는지 확인하면 돼요. 다음 이미지를 참고하세요. 인제스트 플로우 테스트

  9. 검색 플로우를 구성하려면 다음 이미지와 같이 Flow overview > Transform query에서 ML Inference Processor를 선택하세요. 이 프로세서는 벡터 임베딩을 생성하려는 검색 쿼리 입력을 파싱해요. 이 예제에서는 query.match.review.query의 값을 임베딩 모델에 전달해요.
    쿼리 변환

    이 프로세서는 또한 모델이 생성한 벡터 임베딩을 사용해 knn 쿼리를 만들기 위한 쿼리 리라이트도 수행해요. 세부 정보를 보려면 다음 이미지와 같이 Rewrite query를 선택하세요. 이 방식은 복잡한 쿼리 세부 사항을 추상화하면서, 검색 파이프라인을 사용해 고급 쿼리 생성을 수행하는 간단한 쿼리 인터페이스를 제공해요.

    쿼리 리라이트

  10. 검색 결과 변환을 구성하려면 다음 이미지와 같이 Flow overview > Transform response에서 ML Inference Processor를 선택하세요. Claude LLM은 반환된 결과를 처리하고 사람이 읽을 수 있는 응답을 생성하는 데 사용돼요. 응답 변환
    Inputs에서 prompt 항목 옆에 있는 연필 아이콘을 선택하세요. 그러면 반환된 문서를 요약하도록 설계된, 미리 구성된 프롬프트 템플릿이 담긴 팝업 창이 열려요. 다음 이미지를 참고하세요. 이 템플릿은 필요에 따라 수정할 수 있고, 시작점으로 활용할 수 있는 프리셋이 여러 개 마련되어 있어요. LLM에 컨텍스트 정보로 동적으로 주입하고 싶은 반환 문서의 데이터를 담고 있는 Input variables를 추가, 업데이트, 제거할 수도 있어요. 기본 옵션은 모든 review 데이터를 수집해서 결과를 요약해요. 변경 사항을 적용하려면 Save를 선택하세요. 프롬프트 구성

  11. 검색 파이프라인을 만들려면 Create search flow를 선택하세요. Inspect 섹션이 자동으로 Test flow 컴포넌트로 이동해서, 다음 이미지와 같이 다양한 쿼리를 테스트하고 검색을 실행할 수 있어요. 기본 쿼리를 수정하지 않고도 {% raw %}{{ }}{% endraw %}로 감싼 변수를 사용해 다양한 쿼리 값을 빠르게 테스트할 수 있어요. 검색 플로우 테스트

  12. 검색 결과를 보려면 Run test를 선택하세요. 결과는 포맷된 히트 목록으로 볼 수도 있고, raw JSON 검색 응답으로 볼 수도 있어요.

  13. 유스 케이스에 따라 다음과 같은 방법으로 구성을 수정할 수 있어요:

  • 다양한 쿼리 파라미터로 실험해 보세요.
  • 다른 쿼리를 시도해 보세요.
  • Transform query 또는 Transform results 아래에서 기존 프로세서를 수정해 보세요.
  • Transform query 또는 Transform results 아래에 프로세서를 추가하거나 제거해 보세요.
  1. 워크플로를 내보내려면 헤더에서 Export를 선택하세요. 표시되는 데이터는 워크플로 템플릿에 해당하며, 여기에는 인제스트 파이프라인, 인덱스, 검색 파이프라인을 포함해 생성한 OpenSearch 리소스의 전체 구성이 담겨 있어요. 오른쪽 버튼을 선택하면 템플릿을 JSON 또는 YAML 형식으로 다운로드할 수 있어요. 다른 OpenSearch 클러스터에서 동일한 리소스를 만들려면 Provision Workflow API를 사용하세요.

고급 데이터 변환

ML 인퍼런스 프로세서는 입력 데이터를 모델 입력 to 및 모델 출력 from 방향으로 변환하는 몇 가지 유연한 방법을 제공해요.

Inputs에서는 모델 to 전달되는 파라미터를 구성할 수 있어요. 입력 파라미터 변환 타입은 네 가지가 있어요:

  1. Data field: 기존 데이터 필드를 모델 입력으로 사용해요.
  2. JSONPath expression: JSON 구조에서 데이터를 추출하고, JSONPath를 사용해 추출한 데이터를 모델 입력 필드에 매핑해요.
  3. Prompt: 동적 변수를 포함할 수 있는 상수 값을 사용해요. Custom string 변환과 Data field, JSONPath expression 변환의 요소를 결합한 것이라 LLM용 프롬프트를 만들 때 특히 유용해요.
  4. Custom string: 상수 문자열 값을 사용해요.

Outputs에서는 모델 from 전달되는 값을 구성할 수 있어요. 출력 파라미터 변환 타입은 세 가지가 있어요:

  1. Data field: 모델 출력을 새 문서 필드에 복사해요.
  2. JSONPath Expression: JSON 구조에서 데이터를 추출하고, JSONPath를 사용해 추출한 데이터를 하나 이상의 새 문서 필드에 매핑해요.
  3. No transformation: 모델 출력 필드를 변환하지 않고 이름과 값을 모두 그대로 유지해요.

다음 단계

  • AI Search Flows에서 사용하도록 권장되는 모델과 모델 인터페이스는 모델을 참고하세요.

  • 다양한 AI/ML 유스 케이스의 예제 구성은 AI 검색 타입 구성을 참고하세요.

  • agentic search 플로우를 구성하는 예제는 agentic search 구성을 참고하세요.

더 알아보기 (Learn more)