본문 바로가기

Cloud/AZURE

Azure AI Studio - Part 3 (prompt flow)

Today Keys :  azure ai, ai studio, studio, prompt flow, runtime, model, catalog, playground, 프롬프트, 플로우


이번 포스팅은 현재 Preview로 오픈된 Azure AI Studio의 세 번째 포스팅입니다. 

세 번째 포스팅에서는 Azure AI Studio에서 제공하는  Prompt flow에 대해서 기본적인 생성 및 예시 Flow를 하나씩 만들어서 실행해 봅니다. Prompt flow가 어떻게 돌아가는지 예시를 통해서 알아보고 이후 포스팅에서는 이러한 예시를 변경해서 Prompt flow를 어떻게 활용 할 수 있는지 알아 보겠습니다.


Prompt Flow를 만들기 위해서, 프로젝트에서 Flows로 들어갑니다.

 

Create 메뉴를 눌러서, 새로운 Flow를 생성하면 다음과 같은 팝업 메뉴를 볼 수 있습니다.

Standard, Chat, Evaluation Type에 따른 생성이나, 

혹은 가장 많이 사용될 수 있는 Flow를 미리 만들어 두고, 복제(Clone)해서 사용 할 수 있는 gallery가 있습니다.

먼저 Chat Flow라는 Type의 Flow를 생성해 보겠습니다.

Chat Flow에서 'Create' 버튼을 클릭합니다.

 

다음과 같은 flow 생성 창이 뜨는 데, 해당 flow의 Folder name을 지어줍니다.

여기에서는 zigi-chat-flow1 이라는 이름으로 생성합니다.

 

기본적으로 생성된 Flow는 다음과 같습니다.

Flow를 처음 실행하는 경우에는 Flow가 동작하기 위한 Runtime이 필요합니다.

처음에는 아래의 그림의 상단의 Runtime에 'No runtime available'로 된 것을 볼 수 있습니다.

Rumtime에서 '+' 버튼을 누릅니다.

 

그럼 다음과 같이 Compute instance runtime을 추가 할 수 있습니다.

처음에 Azure ML compute instance가 없기 때문에 'No compute instances found' 메시지를 확인 할 수 있습니다.

하단의 'Create Azure ML compute instance'를 눌러서 새로운 인스턴스를 생성합니다.

 

Instance가 생성되면 다음과 같이 Instance를 지정 할 수 있습니다.

이제 하단의 Create 버튼을 눌러서 instance runtime을 생성합니다.

 

이제 flow의 Runtime이 지정된 것을 볼 수 있습니다.

처음에 설정하게 되면, 사용 가능한 상태를 알리는 녹색 체크까지 뜨는 데  수 분 정도 소요 될 수 있습니다.

이제 Chat Flow로 생성한 내용을 간단히 보겠습니다.

Flow 시트 상단에 Inputs과 Ouputs이라는 박스가 있는 것을 볼 수 있습니다.

Inputs과 Outputs은 Flow에 대한 입력 값과 결괏 값에 대한 부분입니다.

앞의 Name이 변수명, 뒤의 Type이 변수에 대한 데이터 타입으로 보시면 됩니다.

하단에는 Chat 이라는 박스가 있고, 우측에 'llm' 이라는 회색 글씨가 있는 것을 볼 수 있습니다.

Input으로 들어온 값을 Chat 이라는 LLM을 통해서 처리하여, Outputs으로 LLM의 응답 값을 보내는 Flow가 됩니다.

우측의 Graph를 보시면 이러한 구조를 좀 더 쉽게 이해 할 수 있습니다.

Chat에서는 LLM 모델과 연결해야 하기 때문에, LLM 모델과 연결 가능한 Connection, 배포된 모델명, API 정보 등을 설정합니다. 

하단의 LLM으로 보낼 때의 프롬프트가 기본적으로 제공됩니다.

우측 상단에 파란색 'Chat' 버튼을 클릭하면, 해당 Chat Flow가 실행됩니다.

 

참고로, 프롬프트에서 사용되는 Input에 대한 변수 값은 Chat이라는 LLM박스 하단에 Inputs에서 선언된 값으로 가져올 수 있습니다.

 

Chat 버튼을 클릭하고 나면, 

아래의 우측 하단과 같이 Chat을 할 수 있는 팝업창이 뜹니다.

하단에 LLM으로 보낼 질문을 보내면, Input 값으로 입력되어서, LLM에서 처리 된 후 Outputs에 대한 값을 채팅창에 표시해 줍니다.

이러한 Flow가 진행되면, 우측의 Graph에서도 진행 및 완료 표시가 나타나게 됩니다.

하단의 이미지에서는 해당 Flow가 모두 완료되었기 때문에 Completed라고 뜨는 것을 볼 수 있습니다.

 

다음은 Q&A on Your Data 라는 gallery 예시를 복제(Clone)하여 prompt flow를 만들어 보겠습니다.

 

복제를 하면, Create와 마찬가지고 Flow에 대한 Folder name을 설정합니다.

여기에서는 zigi-qa-rag로 Folder name을 짓고, 복제합니다.

 

Q&A on Your Data 예시는 RAG 방식으로 LLM의 답변을 사용자의 데이터에서 자연어 검색을 통해서 찾아내기 때문에 

사용자 질문을 벡터화 하기 위한 Embedding을 해야 합니다.

따라서, 예시의 'embed_the_question'에서 embedding을 위한 모델을 선택해줘야 합니다.

여기에서는 미리 Azure OpenAI에서 배포한 text-embedding-ada-002를 선택합니다.

 

그리고, 앞선 예제와 마찬가지로 답변 생성을 위한 LLM 모델도 설정해 줍니다.

모델을 선택하고 나면, 'Run' 버튼을 클릭해서 실행합니다.

 

실행하게 되면, flow 실행에 앞서서 variants  설정을 하는 데, variants 설정은 기본 값으로 바로 실행하겠습니다.

 

prompt를 실행하면 다음과 같이 Graph에서 flow가 실행되는 과정을 볼 수 있습니다.

 

정상적으로 실행이 완료되고 나면, 다음과 같이 Graph에서 Completed 된 것을 볼 수 있습니다.

좌측의  Outpus에서는 Input에 있던 질문에 대해서 사전에 예제로 준비된 데이터를 기반으로 답변을 생성 한 것을 볼 수 있습니다.

 

 

Q&A on Your Data 예시 Flow를 좀만 더 살펴보면, 

처음에  Input로 받은 사용자의 질문을 자연어 검색하기 위해서 Embedding을 먼저 합니다.

 

임베딩 된 결괏 값을  Query 변수로 두고, 미리 indexing 된 문서에서 유사 문서 청크를 검색합니다.

예시에서는 top_k를 2로 두어서, 유사 문서 청크를 2개 검색하네요. 

 

검색된 결괏 값으로 프롬프트에 사용 될, 참조 내용 값을 만듭니다. 

 

참조 내용을 포함한 프롬프트를 생성합니다.

 

참조 문서와 질문(Query)을 기반으로 LLM에 답변을 얻게 됩니다.