Share via


프롬프트 흐름 SDK를 사용하여 Python에서 사용자 지정 채팅 앱 빌드

Important

이 문서에 설명된 기능 중 일부는 미리 보기로만 제공될 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

이 빠른 시작에서는 프롬프트 흐름 SDK를 사용하여 로컬 개발 환경을 설정하는 과정을 안내합니다. 프롬프트를 작성하고 이를 앱 코드의 일부로 실행하며 진행 중인 LLM 호출을 추적하고 LLM 출력에 대한 기본 평가를 실행합니다.

필수 조건

이 빠른 시작을 따르기 전에 애플리케이션에 필요한 리소스를 만듭니다.

아직 만들지 않은 경우 이러한 리소스를 만들려면 AI 스튜디오 플레이그라운드 빠른 시작을 완료합니다. 허브 및 프로젝트를 만들기 위한 SDK 가이드 문서에 따라 이러한 리소스를 만들 수도 있습니다.

또한 Azure 구독의 스토리지 계정에 대한 역할 할당을 추가하는 데 필요한 권한이 있어야 합니다. 권한 부여(역할 할당 추가)는 특정 Azure 리소스의 소유자에게만 허용됩니다. ID를 사용하여 Azure OpenAI Service에 호출할 수 있는 액세스 권한을 부여하려면 IT 관리자에게 도움을 요청해야 할 수도 있습니다.

자신의 ID를 사용하여 Azure OpenAI Service를 호출할 수 있는 액세스 권한을 부여합니다.

보안 모범 사례를 사용하기 위해 API 키 대신 Microsoft Entra ID를 사용해 사용자 ID로 Azure OpenAI에 인증합니다.

사용자 또는 사용자의 관리자는 사용자의 사용자 ID에 사용 중인 Azure AI 서비스 리소스에 대한 Cognitive Services OpenAI 사용자 역할을 부여해야 합니다. 이 역할은 사용자 ID를 사용하여 Azure OpenAI 서비스를 호출할 수 있는 기능을 부여합니다.

사용 중인 Azure AI 서비스 리소스에 대한 액세스 권한을 자신에게 부여하려면 다음을 수행합니다.

  1. AI 스튜디오에서 프로젝트로 이동하여 왼쪽 창에서 설정을 선택합니다.

  2. 연결된 리소스 섹션에서 AIServices 형식의 연결 이름을 선택합니다.

    연결된 AI 서비스 리소스를 선택하여 여는 방법을 강조 표시하는 프로젝트 설정 페이지의 스크린샷.

    참고 항목

    AIServices 연결이 표시되지 않으면 대신 Azure OpenAI 연결을 사용합니다.

  3. 리소스 세부 정보 페이지에서 리소스 제목 아래의 링크를 선택하여 Azure Portal에서 AI 서비스 리소스를 엽니다.

    Azure Portal에서 리소스를 여는 방법을 보여 주는 AI Services 연결 세부 정보의 스크린샷.

  4. Azure Portal의 왼쪽 페이지에서 액세스 제어(IAM)>+ 추가>역할 할당 추가를 선택합니다.

  5. Cognitive Services OpenAI 사용자 역할을 검색한 후 선택합니다. 그런 후 다음을 선택합니다.

    Cognitive Services OpenAI 사용자 역할을 선택하는 페이지의 스크린샷.

  6. 사용자, 그룹 또는 서비스 주체를 선택합니다. 그런 다음, 멤버 선택을 선택합니다.

  7. 열리는 멤버 선택 창에서 역할 할당을 추가하려는 사용자의 이름을 검색합니다. 사용자를 선택한 다음 선택을 선택합니다.

    사용자에게 새 역할이 할당된 페이지의 스크린샷.

  8. 마법사를 계속 진행하고 검토 + 할당을 선택하여 역할 할당을 추가합니다.

Azure CLI 설치 및 로그인

이제 사용자 자격 증명을 사용하여 Azure OpenAI 서비스를 호출할 수 있도록 Azure CLI를 설치하고 로컬 개발 환경에서 로그인합니다.

대부분의 경우 다음 명령을 사용하여 터미널에서 Azure CLI를 설치할 수 있습니다.

winget install -e --id Microsoft.AzureCLI

특정 운영 체제나 설정에서 이러한 명령이 작동하지 않는 경우 Azure CLI 설치 방법 지침을 따를 수 있습니다.

Azure CLI를 설치한 후 az login 명령을 사용하여 로그인하고 브라우저를 사용하여 로그인합니다.

az login

이제 앱을 만들고 코드에서 Azure OpenAI Service를 호출합니다.

새 Python 환경 만들기

먼저 프롬프트 흐름 SDK 패키지를 설치하는 데 사용할 수 있는 새로운 Python 환경을 만들어야 합니다. 전역 Python 설치에 패키지를 설치하지 마세요. Python 패키지를 설치할 때 항상 가상 환경 또는 conda 환경을 사용해야 합니다. 그렇지 않으면 Python의 전역 설치가 중단될 수 있습니다.

필요한 경우 Python을 설치합니다.

Python 3.10 이상을 사용하는 것이 좋지만 Python 3.8 이상이 필요합니다. 적합한 Python 버전이 설치되어 있지 않은 경우 운영 체제에 Python을 설치하는 가장 쉬운 방법을 알아보려면 VS Code Python 자습서의 지침을 따릅니다.

가상 환경 만들기

이미 Python 3.10 이상이 설치되어 있는 경우 다음 명령을 사용하여 가상 환경을 만들 수 있습니다.

py -3 -m venv .venv
.venv\scripts\activate

Python 환경을 활성화한다는 것은 명령줄에서 python 또는 pip를 실행할 때 애플리케이션의 .venv 폴더에 포함된 Python 인터프리터를 사용하게 된다는 의미입니다.

참고 항목

deactivate 명령을 사용하여 Python 가상 환경을 종료하고 나중에 필요할 때 다시 활성화할 수 있습니다.

프롬프트 흐름 SDK 설치

이 섹션에서는 프롬프트 흐름을 사용하여 애플리케이션을 빌드합니다. [https://microsoft.github.io/promptflow/](프롬프트 흐름)은 아이디어 구상, 프로토타이핑, 테스트, 평가부터 프로덕션 배포 및 모니터링에 이르기까지 LLM 기반 AI 애플리케이션의 엔드투엔드 개발 주기를 간소화하도록 설계된 개발 도구 모음입니다.

pip를 사용하여 만든 가상 환경에 프롬프트 흐름 SDK를 설치합니다.

pip install promptflow
pip install azure-identity

프롬프트 흐름 SDK는 여러 패키지에 대한 종속성을 사용하므로 모든 패키지를 원하지 않는 경우 별도로 설치하도록 선택할 수 있습니다.

  • promptflow-core: LLM 코드 실행에 사용되는 핵심 프롬프트 흐름 런타임을 포함합니다.
  • promptflow-tracing: 표준에서 OpenTelemetry 추적을 내보내는 데 사용되는 경량 라이브러리입니다.
  • promptflow-devkit: 로컬 개발 환경을 위한 프롬프트 흐름 테스트 베드 및 추적 뷰어 도구가 포함되어 있습니다.
  • openai: Azure OpenAI 서비스를 사용하기 위한 클라이언트 라이브러리입니다.
  • python-dotenv: .env 파일에서 환경 변수를 읽어 설정하는 데 사용됩니다.

환경 변수 구성

코드에서 Azure OpenAI 서비스를 호출하려면 AI 서비스 엔드포인트 및 배포 이름이 필요합니다. 이 빠른 시작에서는 애플리케이션이 읽을 수 있는 환경 변수가 포함된 파일인 .env 파일에 이러한 값을 저장합니다. AI 스튜디오 채팅 플레이그라운드에서 이러한 값을 찾을 수 있습니다.

  1. .env 파일을 만들고 다음 코드를 붙여넣습니다.

    AZURE_OPENAI_ENDPOINT=endpoint_value
    AZURE_OPENAI_DEPLOYMENT_NAME=deployment_name
    AZURE_OPENAI_API_VERSION=2024-02-15-preview
    
  2. AI 스튜디오 프로젝트 내의 채팅 플레이그라운드로 이동합니다. 먼저 LLM에 메시지를 보내 채팅이 모델과 작동하는지 유효성을 검사합니다.

  3. 채팅 플레이그라운드에서 Azure OpenAI 배포 이름을 찾습니다. 드롭다운에서 배포를 선택하고 배포 이름을 마우스로 가리키면 해당 배포가 표시됩니다. 이 예에서 배포 이름은 gpt-35-turbo-16k입니다.

    배포 이름과 코드 보기 단추가 강조 표시되어 열린 AI 스튜디오 채팅 플레이그라운드의 스크린샷.

  4. .env 파일에서 deployment_name을 이전 단계의 배포 이름으로 바꿉니다. 이 예에서는 배포 이름 gpt-35-turbo-16k를 사용합니다.

  5. <>코드 보기 단추를 선택하고 엔드포인트 값을 복사합니다.

    엔드포인트 값을 복사하는 단추를 강조 표시하는 보기 코드 팝업의 스크린샷.

  6. .env 파일에서 endpoint_value를 이전 단계의 대화 상자에서 복사한 엔드포인트 값으로 바꿉니다.

Warning

키 기반 인증은 지원되지만 Microsoft에서는 권장하지 않습니다. 키를 사용하려면 .env에 키를 추가할 수 있지만 실수로 git 리포지토리에 체크 인하지 않도록 .env.gitignore 파일에 있는지 확인하세요.

기본 채팅 프롬프트 및 앱 만들기

먼저 프롬프트 템플릿 파일을 만듭니다. 이를 위해 프롬프트 흐름에서 지원하는 프롬프트 템플릿 형식인 Prompty를 사용합니다.

chat.prompty 파일을 만들고 다음 코드를 여기에 복사합니다.

---
name: Chat Prompt
description: A basic prompt that uses the chat API to answer questions
model:
    api: chat
    configuration:
        type: azure_openai
    parameters:
        max_tokens: 256
        temperature: 0.2
inputs:
    chat_input:
        type: string
    chat_history:
        type: list
        is_chat_history: true
        default: []
outputs:   
  response:
    type: string
sample:
    chat_input: What is the meaning of life?
---
system:
You are an AI assistant who helps people find information.

{% for item in history %}
{{item.role}}:
{{item.content}}
{% endfor %}

user:
{{chat_input}}

이제 이 프롬프트 템플릿을 사용하는 Python 파일을 만들겠습니다. chat.py 파일을 만들고 다음 코드를 붙여넣습니다.

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
result = prompty(
    chat_history=[
        {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
        {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
    ],
    chat_input="Do other Azure AI services support this too?")

print(result)

이제 콘솔에서 Python 코드를 실행합니다.

python chat.py

이제 프롬프트 실행 결과가 표시됩니다.

Yes, other Azure AI services also support various capabilities and features. Some of the Azure AI services include Azure Cognitive Services, Azure Machine Learning, Azure Bot Service, and Azure Databricks. Each of these services offers different AI capabilities and can be used for various use cases. If you have a specific service or capability in mind, feel free to ask for more details.

채팅 코드 실행 추적

이제 프롬프트 흐름 추적이 어떻게 Python 스크립트에서 발생하는 다양한 LLM 호출에 대한 인사이트를 제공할 수 있는지 살펴보겠습니다.

chat.py 파일 시작 부분에 다음 코드를 추가하여 프롬프트 흐름 추적을 사용하도록 설정합니다.

from promptflow.tracing import start_trace
start_trace()

chat.py를 다시 실행합니다.

python chat.py

이번에는 실행의 프롬프트 흐름 추적을 볼 수 있는 링크가 출력에 표시됩니다.

Starting prompt flow service...
Start prompt flow service on port 23333, version: 1.10.1.
You can stop the prompt flow service with the following command:'pf service stop'.
Alternatively, if no requests are made within 1 hours, it will automatically stop.
You can view the trace detail from the following URL:
http://localhost:23333/v1.0/ui/traces/?#collection=aistudio-python-quickstart&uiTraceId=0x59e8b9a3a23e4e8893ec2e53d6e1e521

해당 링크를 선택하면 프로그램 실행 단계, LLM에 전달된 내용 및 응답 출력을 보여 주는 추적이 표시됩니다.

프로그램 실행 단계를 보여 주는 추적 스크린샷.

프롬프트 흐름 추적을 사용하면 특정 함수 호출을 추적하고 AI 스튜디오에 추적을 기록할 수도 있습니다. 자세한 내용은 프롬프트 흐름 SDK에서 추적을 사용하는 방법을 확인합니다.

프롬프트 평가

이제 프롬프트 흐름 평가기를 사용하여 대화 품질을 0에서 5까지 점수를 매길 수 있는 메트릭을 생성하는 방법을 살펴보겠습니다. 프롬프트를 다시 실행하지만 이번에는 결과를 전체 대화가 포함된 배열에 저장한 다음 이를 ChatEvaluator에 전달하여 점수를 매깁니다.

먼저 promptflow-evals package를 설치합니다.

pip install promptflow-evals

이제 다음 코드를 evaluate.py 파일에 복사합니다.

import os
from dotenv import load_dotenv
load_dotenv()

from promptflow.core import Prompty, AzureOpenAIModelConfiguration
from promptflow.evals.evaluators import ChatEvaluator

model_config = AzureOpenAIModelConfiguration(
    azure_deployment=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
    api_version=os.getenv("AZURE_OPENAI_API_VERSION"),
    azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT")
)

chat_history=[
    {"role": "user", "content": "Does Azure OpenAI support customer managed keys?"},
    {"role": "assistant", "content": "Yes, customer managed keys are supported by Azure OpenAI."}
]
chat_input="Do other Azure AI services support this too?"

prompty = Prompty.load("chat.prompty", model={'configuration': model_config})
response = prompty(chat_history=chat_history, chat_input=chat_input)

conversation = chat_history
conversation += [
    {"role": "user", "content": chat_input},
    {"role": "assistant", "content": response}
]

chat_eval = ChatEvaluator(model_config=model_config)
score = chat_eval(conversation=conversation)

print(score)

evaluate.py 스크립트를 실행합니다.

python evaluate.py

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

{'gpt_coherence': 5.0, 'gpt_fluency': 5.0, 'evaluation_per_turn': {'gpt_coherence': {'score': [5.0, 5.0]}, 'gpt_fluency': {'score': [5.0, 5.0]}}}

이 대화에 대한 LLM 응답의 일관성과 유창성에 대해 5점을 받은 것 같습니다!

자체 사용자 지정 평가기를 만들고 평가 결과를 AI 스튜디오에 기록하는 방법을 포함하여 프롬프트 흐름 평가기를 사용하는 방법에 대한 자세한 내용은 프롬프트 흐름 SDK를 사용하여 앱 평가를 확인합니다.