프롬프트 흐름에서 RAG 구현

완료됨

Azure AI Search와의 통합을 사용하여 Microsoft Foundry에 데이터를 업로드하고 데이터에 대한 인덱싱을 만든 후 프롬프트 흐름 으로 RAG 패턴을 구현하여 생성 AI 애플리케이션을 빌드할 수 있습니다.

프롬프트 흐름는 LLM과의 상호 작용을 오케스트레이션하는 흐름을 정의하기 위한 개발 프레임워크입니다.

프롬프트 흐름의 다이어그램

흐름은 하나 이상의 입력(일반적으로 사용자가 입력한 질문 또는 프롬프트)으로 시작되며, 반복적인 대화의 경우 이 지점까지의 채팅 기록입니다.

그런 다음 흐름은 일련의 연결된 도구로 정의되며, 각 도구는 입력 및 기타 환경 변수에 대해 특정 작업을 수행합니다. 다음과 같은 작업을 수행하기 위해 프롬프트 흐름에 포함할 수 있는 여러 형식의 도구가 있습니다.

  • 사용자 지정 Python 코드 실행
  • 인덱스에서 데이터 값 조회
  • 프롬프트 변형 만들기 - LLM(대규모 언어 모델)에 대한 여러 버전의 프롬프트, 다양한 시스템 메시지 또는 프롬프트 문구를 정의하고 각 변형의 결과를 비교 및 평가할 수 있습니다.
  • 결과를 생성하기 위해 LLM에 프롬프트를 제출합니다.

마지막으로 흐름에는 일반적으로 LLM에서 생성된 결과를 반환하는 하나 이상의 출력이 있습니다.

프롬프트 흐름에서 RAG 패턴 사용

프롬프트 흐름에서 RAG 패턴을 사용하는 핵심은 흐름의 후속 도구가 결과를 사용하여 LLM에서 출력을 생성하는 데 사용되는 프롬프트를 보강할 수 있도록 인덱스 조회 도구를 사용하여 인덱스에서 데이터를 검색하는 것입니다.

인덱스 조회 도구를 사용한 프롬프트 흐름 다이어그램.

샘플을 사용하여 채팅 흐름 만들기

프롬프트 흐름은 애플리케이션을 만들기 위한 시작점으로 사용할 수 있는 다양한 샘플을 제공합니다. 애플리케이션에서 RAG 및 언어 모델을 결합하려는 경우 데이터 샘플에서 다중 라운드 Q&A를 복제할 수 있습니다.

샘플에는 RAG 및 언어 모델을 포함하는 데 필요한 요소가 포함되어 있습니다.

Q&A 샘플로 만들어진 채팅 흐름의 스크린샷.

  1. 채팅 입력에 기록을 추가하여 컨텍스트화된 형식의 질문 형식으로 프롬프트를 정의합니다.
  2. 검색 인덱스를 사용하여 데이터에서 관련 정보를 조회합니다.
  3. 인덱스에서 검색된 데이터를 사용하여 질문을 보강하여 프롬프트 컨텍스트를 생성합니다.
  4. 시스템 메시지를 추가하고 채팅 기록을 구조화하여 프롬프트 변형을 만듭니다.
  5. 자연어 응답을 생성하는 언어 모델에 프롬프트를 제출합니다.

해당 요소를 각각 자세히 살펴보겠습니다.

기록을 사용하여 쿼리 수정

흐름의 첫 번째 단계는 채팅 기록 및 사용자의 마지막 질문을 사용하여 필요한 모든 정보를 포함하는 새 질문을 생성하는 LLM(대규모 언어 모델) 노드입니다. 이렇게 하면 흐름의 나머지 부분에서 처리되는 더 간결한 입력이 생성됩니다.

관련 정보 조회

다음으로, 인덱스 조회 도구를 사용하여 통합된 Azure AI 검색 기능을 사용하여 만든 검색 인덱스 쿼리를 수행하고 데이터 원본에서 관련 정보를 찾습니다.

인덱스 조회 도구에 대해 자세히 알아봅니다.

프롬프트 컨텍스트 생성

인덱스 조회 도구의 출력은 사용자에게 응답을 생성할 때 사용하려는 검색된 컨텍스트입니다. 언어 모델로 전송되는 프롬프트에서 출력을 사용하려고 합니다. 즉, 출력을 보다 적합한 형식으로 구문 분석하려고 합니다.

인덱스 조회 도구의 출력에는 설정한 매개 변수에 따라 상위 n개의 결과가 포함될 수 있습니다. 프롬프트 컨텍스트를 생성할 때 Python 노드를 사용하여 데이터 원본에서 검색된 문서를 반복하고 해당 콘텐츠와 원본을 하나의 문서 문자열로 결합할 수 있습니다. 문자열은 흐름의 다음 단계에서 언어 모델로 보내는 프롬프트에서 사용됩니다.

프롬프트 변형 정의

언어 모델로 보낼 프롬프트를 생성할 때 변형을 사용하여 다른 프롬프트 콘텐츠를 나타낼 수 있습니다.

채팅 흐름에 RAG를 포함할 때 목표는 챗봇의 응답을 접지하는 것입니다. 데이터 원본에서 관련 컨텍스트를 검색한 다음에는 컨텍스트를 사용하고 사실에 기반을 두도록 지시하여 챗봇의 응답의 접지성에 영향을 줄 수도 있습니다.

프롬프트 변형을 사용하면 프롬프트에서 다양한 시스템 메시지를 제공하여 접지성이 가장 높은 콘텐츠를 제공할 수 있습니다.

컨텍스트를 사용하여 채팅

마지막으로, LLM 노드를 사용하여 언어 모델에 프롬프트를 보내 데이터 원본에서 검색된 관련 컨텍스트를 사용하여 응답을 생성합니다. 이 노드의 응답은 전체 흐름의 출력이기도 합니다.

인덱싱된 데이터와 선택한 언어 모델을 사용하도록 샘플 채팅 흐름을 구성한 후 흐름을 배포하고 애플리케이션과 통합하여 사용자에게 에이전트 환경을 제공할 수 있습니다.