다음을 통해 공유


빠른 시작: Azure OpenAI 도우미(미리 보기)를 사용하여 시작

Azure OpenAI 도우미(미리 보기)를 사용하면 사용자 지정 지침을 통해 필요에 맞게 조정되고 코드 해석기 및 사용자 지정 함수와 같은 고급 도구로 강화된 AI 도우미를 만들 수 있습니다.

필수 조건

Azure OpenAI Studio로 이동

https://oai.azure.com/에서 Azure OpenAI Studio로 이동한 다음, OpenAI 리소스에 액세스할 수 있는 자격 증명으로 로그인합니다. 로그인 워크플로 도중 또는 이후에 적절한 디렉터리, Azure 구독 및 Azure OpenAI 리소스를 선택합니다.

Azure OpenAI Studio 방문 페이지의 왼쪽 탐색 메뉴에서 플레이그라운드>도우미(미리 보기)를 통해 도우미 플레이그라운드를 시작합니다.

Azure OpenAI Studio 방문 페이지 스크린샷.

플레이그라운드

도우미 플레이그라운드를 사용하면 코드를 실행할 필요 없이 AI 도우미를 탐색하고, 프로토타입을 만들고, 테스트할 수 있습니다. 이 페이지에서 새로운 아이디어를 빠르게 반복하고 실험할 수 있습니다.

모든 값이 채워지지 않은 도우미 구성 화면의 스크린샷.

도우미 설정

새 AI 도우미를 만들거나 기존 도우미를 선택하려면 도우미 설정 창을 사용합니다.

이름 설명
비서 이름 특정 모델과 연결된 배포 이름입니다.
지침 지침은 시스템 메시지와 유사합니다. 여기서 응답을 생성할 때 참조해야 하는 컨텍스트와 작동 방식에 대한 모델 지침을 제공합니다. 도우미의 성격을 설명하고, 대답해야 하는 것과 대답해서는 안 되는 것을 말하고, 응답의 형식을 지정하는 방법을 말할 수 있습니다. 답변에 답변할 때 수행해야 하는 단계의 예를 제공할 수도 있습니다.
배포 여기에서 도우미와 함께 사용할 모델 배포를 설정합니다.
함수 사양에 따라 API 호출을 수식화하고 데이터 출력을 구조화하기 위해 모델에 대한 사용자 지정 함수 정의를 만듭니다.
코드 해석기 코드 해석기는 모델이 코드를 테스트하고 실행할 수 있도록 하는 데 사용할 수 있는 샌드박스 Python 환경에 대한 액세스를 제공합니다.
파일 도구와 함께 사용할 수 있는 최대 파일 크기는 512MB로 최대 20개의 파일을 업로드할 수 있습니다.

도구

개별 도우미는 code interpreter를 포함하여 최대 128개의 도구는 물론 함수를 통해 만든 모든 사용자 지정 도구에 액세스할 수 있습니다.

채팅 세션

도우미 API 내에서 스레드라고도 알려진 채팅 세션은 사용자와 도우미 간의 대화가 이루어지는 곳입니다. 기존 채팅 완료 호출과 달리 스레드의 메시지 수에는 제한이 없습니다. 도우미는 모델의 입력 토큰 제한에 맞게 요청을 자동으로 압축합니다.

이는 또한 대화가 진행될 때마다 모델에 전달되는 토큰 수를 제어할 수 없음을 의미합니다. 토큰 관리는 추상화되어 완전히 도우미 API에 의해 처리됩니다.

채팅 지우기 단추를 선택하여 현재 대화 기록을 삭제합니다.

텍스트 입력 상자 아래에는 두 개의 단추가 있습니다.

  • 실행하지 않고 메시지를 추가합니다.
  • 추가하고 실행합니다.

로그

로그는 assistant API 작업에 대한 자세한 스냅샷을 제공합니다.

창 표시

기본적으로 도우미 설정, 채팅 세션 및 로그의 세 가지 패널이 있습니다. 패널 표시를 사용하면 패널을 추가, 제거하고 다시 정렬할 수 있습니다. 패널을 닫고 다시 가져와야 하는 경우 패널 표시를 사용하여 손실된 패널을 복원합니다.

첫 번째 도우미 만들기

  1. 도우미 설정 드롭다운에서 새로 만들기를 선택합니다.

  2. 도우미 이름 부여

  3. 다음 지침을 입력합니다. "당신은 수학 문제에 답하는 데 도움이 되는 코드를 작성할 수 있는 AI 도우미입니다."

  4. gpt-4 (1106-preview)의 배포를 선택합니다. 드롭다운에는 사용자 지정 배포 이름이 표시되므로 모델/배포 이름이 다른 경우 기본 모델이 1106 미리 보기 모델과 동등한 배포를 선택해야 합니다.

  5. 코드 해석기를 사용하도록 설정하는 토글을 선택합니다.

  6. [저장]을 선택합니다.

    구성 세부 정보가 입력된 도우미의 스크린샷.

  7. 도우미가 대답할 질문을 입력합니다. " 3x + 11 = 14수식을 해결해야 합니다. 도와주실 수 있으세요?"

  8. 추가 및 실행 단추을 선택합니다.

    The solution to the equation (3x + 11 = 14) is (x = 1).
    

    답변이 정확하다는 것을 알 수 있지만, 모델이 이 답변을 가져오기 위해 코드 해석기를 사용했는지, 그리고 모델의 학습 데이터에서 답변을 반복하는 대신 모델이 작성한 코드가 유효한지 확인하기 위해 다른 질문을 할 것입니다.

  9. 후속 질문을 입력합니다. "이 솔루션을 가져오기 위해 실행한 코드를 보여 주세요."

    Certainly! Here's the Python code I ran to find the solution for the equation (3x + 11 = 14):
    
    from sympy import symbols, Eq, solve  
    
    # Define the variable  
    x = symbols('x')  
    
    # Define the equation  
    equation = Eq(3*x + 11, 14)  
    
    # Solve the equation  
    solution = solve(equation, x)  
    solution  
    

도우미 플레이그라운드의 대화 세션 스크린샷.

또한 오른쪽 패널의 로그를 참조하여 코드 해석기가 사용되었는지 유효성을 검사하고 응답을 생성하기 위해 실행된 코드의 유효성을 검사할 수도 있습니다. 코드 해석기는 질문을 코드로 변환하고 샌드박스 Python 환경에서 실행함으로써 더 복잡한 수학 질문에 응답할 수 있는 기능을 모델에 제공하지만, 모델이 질문을 코드의 유효한 표현으로 올바르게 변환했는지 확인하려면 응답을 검증해야 합니다.

리소스 정리

Azure OpenAI 리소스를 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

참고 항목

Important

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

필수 조건

Azure AI 스튜디오(미리 보기)로 이동

  1. Azure AI 스튜디오에 로그인합니다.

  2. 프로젝트로 이동하거나 Azure AI 스튜디오에서 새 프로젝트를 만듭니다.

  3. 프로젝트 개요에서 프로젝트 플레이그라운드 아래에 있는 도우미를 선택합니다.

    도우미 플레이그라운드를 사용하면 코드를 실행할 필요 없이 AI 도우미를 탐색하고, 프로토타입을 만들고, 테스트할 수 있습니다. 이 페이지에서 새로운 아이디어를 빠르게 반복하고 실험할 수 있습니다.

    플레이그라운드에서는 도우미를 구성할 수 있는 여러 옵션을 제공합니다. 다음 단계에서는 도우미 설정 창을 사용하여 새 AI 도우미를 만듭니다.

    이름 설명
    비서 이름 특정 모델과 연결된 배포 이름입니다.
    지침 지침은 시스템 메시지와 유사합니다. 여기서 응답을 생성할 때 참조해야 하는 컨텍스트와 작동 방식에 대한 모델 지침을 제공합니다. 도우미의 성격을 설명하고, 대답해야 하는 것과 대답해서는 안 되는 것을 말하고, 응답의 형식을 지정하는 방법을 말할 수 있습니다. 답변에 답변할 때 수행해야 하는 단계의 예를 제공할 수도 있습니다.
    배포 여기에서 도우미와 함께 사용할 모델 배포를 설정합니다.
    함수 사양에 따라 API 호출을 수식화하고 데이터 출력을 구조화하기 위해 모델에 대한 사용자 지정 함수 정의를 만듭니다. 이 빠른 시작에서는 사용되지 않습니다.
    코드 해석기 코드 해석기는 모델이 코드를 테스트하고 실행할 수 있도록 하는 데 사용할 수 있는 샌드박스 Python 환경에 대한 액세스를 제공합니다.
    파일 도구와 함께 사용할 수 있는 최대 파일 크기는 512MB로 최대 20개의 파일을 업로드할 수 있습니다. 이 빠른 시작에서는 사용되지 않습니다.

    모든 값이 채워지지 않은 도우미 구성 화면의 스크린샷.

첫 번째 도우미 만들기

  1. 배포 드롭다운에서 배포를 선택합니다.

  2. 도우미 설정 드롭다운에서 새로 만들기를 선택합니다.

  3. 도우미 이름을 지정합니다.

  4. 다음 지침을 입력합니다. "당신은 수학 문제에 답하는 데 도움이 되는 코드를 작성할 수 있는 AI 도우미입니다."

  5. 모델 배포를 선택합니다. 최신 gpt-4 모델 중 하나로 테스트하는 것이 좋습니다.

  6. 코드 해석기를 사용하도록 설정하는 토글을 선택합니다.

  7. [저장]을 선택합니다.

    구성 세부 정보가 입력된 도우미의 스크린샷.

  8. 도우미가 대답할 질문을 입력합니다. " 3x + 11 = 14수식을 해결해야 합니다. 도와주실 수 있으세요?"

  9. 추가 및 실행 단추을 선택합니다.

    The solution to the equation (3x + 11 = 14) is (x = 1).
    

    답변이 정확하다는 것을 알 수 있지만, 모델이 이 답변을 가져오기 위해 코드 해석기를 사용했는지, 그리고 모델의 학습 데이터에서 답변을 반복하는 대신 모델이 작성한 코드가 유효한지 확인하기 위해 다른 질문을 할 것입니다.

  10. 후속 질문을 입력합니다. "이 솔루션을 가져오기 위해 실행한 코드를 보여 주세요."

    Sure. The code is very straightforward
    
    # calculation
    x = (14 - 11) / 3
    x
    
    
    First, we subtract 11 from 14, then divide the result by 3. This gives us the value of x which is 1.0.
    

    도우미 플레이그라운드의 대화 세션 스크린샷.

또한 오른쪽 패널의 로그를 참조하여 코드 해석기가 사용되었는지 유효성을 검사하고 응답을 생성하기 위해 실행된 코드의 유효성을 검사할 수도 있습니다. 코드 해석기는 질문을 코드로 변환하고 샌드박스 Python 환경에서 실행함으로써 더 복잡한 수학 질문에 응답할 수 있는 기능을 모델에 제공하지만, 모델이 질문을 코드의 유효한 표현으로 올바르게 변환했는지 확인하려면 응답을 검증해야 합니다.

주요 개념

도우미 플레이그라운드를 사용하는 동안 다음 개념을 염두에 두세요.

도구

개별 도우미는 code interpreter를 포함하여 최대 128개의 도구는 물론 함수를 통해 만든 모든 사용자 지정 도구에 액세스할 수 있습니다.

채팅 세션

도우미 API 내에서 스레드라고도 알려진 채팅 세션은 사용자와 도우미 간의 대화가 이루어지는 곳입니다. 기존 채팅 완료 호출과 달리 스레드의 메시지 수에는 제한이 없습니다. 도우미는 모델의 입력 토큰 제한에 맞게 요청을 자동으로 압축합니다.

이는 또한 대화가 진행될 때마다 모델에 전달되는 토큰 수를 제어할 수 없음을 의미합니다. 토큰 관리는 추상화되어 완전히 도우미 API에 의해 처리됩니다.

채팅 지우기 단추를 선택하여 현재 대화 기록을 삭제합니다.

텍스트 입력 상자 아래에는 두 개의 단추가 있습니다.

  • 실행하지 않고 메시지를 추가합니다.
  • 추가하고 실행합니다.

로그

로그는 assistant API 작업에 대한 자세한 스냅샷을 제공합니다.

창 표시

기본적으로 도우미 설정, 채팅 세션 및 로그의 세 가지 패널이 있습니다. 패널 표시를 사용하면 패널을 추가, 제거하고 다시 정렬할 수 있습니다. 패널을 닫고 다시 가져와야 하는 경우 패널 표시를 사용하여 손실된 패널을 복원합니다.

리소스 정리

Azure OpenAI 리소스를 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

또는 도우미 API를 통해 도우미 또는 스레드를 삭제할 수 있습니다.

참고 항목

참조 설명서 | 라이브러리 소스 코드 | 패키지(PyPi) |

필수 조건

  • Azure 구독 - 체험 구독 만들기

  • 원하는 Azure 구독의 Azure OpenAI에 부여된 액세스 권한

    현재 이 서비스에 대한 액세스 권한은 애플리케이션에서만 부여됩니다. https://aka.ms/oai/access에서 양식을 작성하여 Azure OpenAI에 대한 액세스를 신청할 수 있습니다. 문제가 있는 경우 이 리포지토리에서 문제를 엽니다.

  • Python 3.8 이상 버전

  • 다음 Python 라이브러리: os, openai(버전 1.x가 필요함)

  • 로컬 개발 환경에서 암호 없는 인증에 사용되는 Azure CLI는 Azure CLI로 로그인하여 필요한 컨텍스트를 만듭니다.

  • 지원되는 지역의 호환 모델을 갖춘 Azure OpenAI 리소스입니다.

  • Azure OpenAI Service의 기능과 제한 사항을 숙지하려면 책임 있는 AI 투명성 고지 및 기타 책임 있는 AI 리소스를 검토하는 것이 좋습니다.

  • 이 예를 테스트하려면 gpt-4 (1106-preview) 모델이 배포된 Azure OpenAI 리소스가 사용되었습니다.

암호 없는 인증을 위해서는 다음을 수행해야 합니다.

  1. azure-identity 패키지를 사용합니다.
  2. 사용자 계정에 Cognitive Services User 역할을 할당합니다. 이 작업은 Azure Portal의 액세스 제어(IAM)>역할 할당 추가에서 수행할 수 있습니다.
  3. az login과 같은 Azure CLI를 사용하여 로그인합니다.

설정

  1. 다음을 사용하여 OpenAI Python 클라이언트 라이브러리를 설치합니다.
pip install openai
  1. 권장하는 암호 없는 인증의 경우:
pip install azure-identity

참고 항목

  • 파일 검색은 도우미당 최대 10,000개의 파일을 수집할 수 있으며, 이는 이전보다 500배 이상 높은 수치입니다. 빠르고 다중 스레드 검색을 통해 병렬 쿼리를 지원하며 향상된 순위 재지정 및 쿼리 다시 쓰기 기능을 제공합니다.
    • 벡터 저장소는 API의 새 개체입니다. 파일이 벡터 저장소에 추가되면 자동으로 구문 분석, 청크 분할, 포함되어 검색할 수 있는 상태가 됩니다. 벡터 저장소는 도우미와 스레드에서 사용할 수 있으므로 파일 관리 및 청구를 간소화합니다.
  • 특정 실행에서 특정 도구(예: 파일 검색, 코드 인터프리터, 함수)를 강제로 사용하는 데 사용할 수 있는 tool_choice 매개 변수에 대한 지원이 추가되었습니다.

참고 항목

이 라이브러리는 OpenAI에서 유지 관리합니다. 라이브러리의 최신 업데이트를 추적하려면 릴리스 기록을 참조하세요.

키 및 엔드포인트 검색

Azure OpenAI 서비스에 대한 호출을 성공적으로 수행하려면 다음이 필요합니다.

변수 이름
ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Azure OpenAI Studio>플레이그라운드>코드 보기에서 값을 찾을 수 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/입니다.
API-KEY 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.
DEPLOYMENT-NAME 이 값은 모델을 배포할 때 배포에 대해 선택한 사용자 지정 이름에 해당합니다. 이 값은 Azure Portal의 리소스 관리>모델 배포에서 또는 Azure OpenAI Studio의 관리>배포에서 찾을 수 있습니다.

Azure Portal에서 해당 리소스로 이동합니다. 키 및 엔드포인트리소스 관리 섹션에서 찾을 수 있습니다. 엔드포인트 및 액세스 키를 복사합니다. API 호출을 인증하는 데 모두 필요합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

Azure Portal의 OpenAI 리소스 개요 블레이드에서 엔드포인트 및 액세스 키 위치에 빨간색 원이 표시된 스크린샷.

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

환경 변수

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

도우미 만들기

코드에서는 다음 값을 지정할 예정입니다.

이름 설명
비서 이름 특정 모델과 연결된 배포 이름입니다.
지침 지침은 시스템 메시지와 유사합니다. 여기서 응답을 생성할 때 참조해야 하는 컨텍스트와 작동 방식에 대한 모델 지침을 제공합니다. 도우미의 성격을 설명하고, 대답해야 하는 것과 대답해서는 안 되는 것을 말하고, 응답의 형식을 지정하는 방법을 말할 수 있습니다. 답변에 답변할 때 수행해야 하는 단계의 예를 제공할 수도 있습니다.
모델 여기에서 도우미와 함께 사용할 모델 배포 이름을 설정합니다. 검색 도구에는 gpt-35-turbo (1106) 또는 gpt-4 (1106-preview) 모델이 필요합니다. 이 값을 모델 이름이 아닌 배포 이름으로 설정합니다.
코드 해석기 코드 해석기는 모델이 코드를 테스트하고 실행할 수 있도록 하는 데 사용할 수 있는 샌드박스 Python 환경에 대한 액세스를 제공합니다.

도구

개별 도우미는 code interpreter를 포함하여 최대 128개의 도구는 물론 함수를 통해 만든 모든 사용자 지정 도구에 액세스할 수 있습니다.

Python 앱 만들기

az login을 사용하여 Azure에 로그인한 다음, 다음과 같은 권장 암호 없는 Python 예제를 사용하여 도우미를 만들고 실행합니다.

import os
from azure.identity import DefaultAzureCredential, get_bearer_token_provider
from openai import AzureOpenAI

token_provider = get_bearer_token_provider(DefaultAzureCredential(), "https://cognitiveservices.azure.com/.default")

client = AzureOpenAI(
    azure_ad_token_provider=token_provider,
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version="2024-05-01-preview",
)

# Create an assistant
assistant = client.beta.assistants.create(
    name="Math Assist",
    instructions="You are an AI assistant that can write code to help answer math questions.",
    tools=[{"type": "code_interpreter"}],
    model="gpt-4-1106-preview" # You must replace this value with the deployment name for your model.
)

# Create a thread
thread = client.beta.threads.create()

# Add a user question to the thread
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

# Run the thread and poll for the result
run = client.beta.threads.runs.create_and_poll(
    thread_id=thread.id,
    assistant_id=assistant.id,
    instructions="Please address the user as Jane Doe. The user has a premium account.",
)

print("Run completed with status: " + run.status)

if run.status == "completed":
    messages = client.beta.threads.messages.list(thread_id=thread.id)
    print(messages.to_json(indent=2))

인증을 위해 서비스 API 키를 사용하려면 다음 Python 예제를 사용하여 도우미를 만들고 실행할 수 있습니다.

import os
from openai import AzureOpenAI

client = AzureOpenAI(
    api_key=os.environ["AZURE_OPENAI_API_KEY"],
    azure_endpoint=os.environ["AZURE_OPENAI_ENDPOINT"],
    api_version="2024-05-01-preview",
)

# Create an assistant
assistant = client.beta.assistants.create(
    name="Math Assist",
    instructions="You are an AI assistant that can write code to help answer math questions.",
    tools=[{"type": "code_interpreter"}],
    model="gpt-4-1106-preview" # You must replace this value with the deployment name for your model.
)

# Create a thread
thread = client.beta.threads.create()

# Add a user question to the thread
message = client.beta.threads.messages.create(
    thread_id=thread.id,
    role="user",
    content="I need to solve the equation `3x + 11 = 14`. Can you help me?"
)

# Run the thread and poll for the result
run = client.beta.threads.runs.create_and_poll(
    thread_id=thread.id,
    assistant_id=assistant.id,
    instructions="Please address the user as Jane Doe. The user has a premium account.",
)

print("Run completed with status: " + run.status)

if run.status == "completed":
    messages = client.beta.threads.messages.list(thread_id=thread.id)
    print(messages.to_json(indent=2))

출력

실행 완료 상태: 완료됨

{
  "data": [
    {
      "id": "msg_4SuWxTubHsHpt5IlBTO5Hyw9",
      "assistant_id": "asst_cYqL1RuwLyFV3HU1gkaE2k0K",
      "attachments": [],
      "content": [
        {
          "text": {
            "annotations": [],
            "value": "The solution to the equation \\(3x + 11 = 14\\) is \\(x = 1\\)."
          },
          "type": "text"
        }
      ],
      "created_at": 1716397091,
      "metadata": {},
      "object": "thread.message",
      "role": "assistant",
      "run_id": "run_hFgBPbUtO8ZNTnNPC8PgpH1S",
      "thread_id": "thread_isb7spwRycI5ueT9E7357aOm"
    },
    {
      "id": "msg_Z32w2E7kY5wEWhZqQWxIbIUB",
      "assistant_id": null,
      "attachments": [],
      "content": [
        {
          "text": {
            "annotations": [],
            "value": "I need to solve the equation `3x + 11 = 14`. Can you help me?"
          },
          "type": "text"
        }
      ],
      "created_at": 1716397025,
      "metadata": {},
      "object": "thread.message",
      "role": "user",
      "run_id": null,
      "thread_id": "thread_isb7spwRycI5ueT9E7357aOm"
    }
  ],
  "object": "list",
  "first_id": "msg_4SuWxTubHsHpt5IlBTO5Hyw9",
  "last_id": "msg_Z32w2E7kY5wEWhZqQWxIbIUB",
  "has_more": false
}

결과 해석

이 예에서는 코드 해석기가 사용하도록 설정된 도우미를 만듭니다. 도우미에게 수학 질문을 하면 질문에 대한 답을 결정하기 위해 질문을 Python 코드로 변환하고 샌드박스 환경에서 코드를 실행합니다. 답변에 도달하기 위해 모델이 만들고 테스트하는 코드는 다음과 같습니다.

from sympy import symbols, Eq, solve  
  
# Define the variable  
x = symbols('x')  
  
# Define the equation  
equation = Eq(3*x + 11, 14)  
  
# Solve the equation  
solution = solve(equation, x)  
solution  

코드 해석기는 질문을 코드로 변환하고 솔루션에 도달할 때까지 Python 샌드박스에서 해당 코드를 반복적으로 실행하여 더 복잡한 쿼리에 응답할 수 있는 기능을 모델에 제공하지만 여전히 응답의 유효성을 검사하여 유효성 검사해야 한다는 점을 기억해야 합니다. 모델이 사용자의 질문을 코드의 유효한 표현으로 올바르게 변환했는지 유효성을 검사합니다.

리소스 정리

Azure OpenAI 리소스를 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

참고 항목

참조 설명서 | 소스 코드 | 패키지(NuGet)

필수 조건

  • Azure 구독 - 체험 구독 만들기

  • 원하는 Azure 구독의 Azure OpenAI에 부여된 액세스 권한

    현재 이 서비스에 대한 액세스 권한은 애플리케이션에서만 부여됩니다. https://aka.ms/oai/access에서 양식을 작성하여 Azure OpenAI에 대한 액세스를 신청할 수 있습니다. 문제가 있는 경우 이 리포지토리에서 문제를 엽니다.

  • .NET 8 SDK

  • 지원되는 지역의 호환 모델을 갖춘 Azure OpenAI 리소스입니다.

  • Azure OpenAI Service의 기능과 제한 사항을 숙지하려면 책임 있는 AI 투명성 고지 및 기타 책임 있는 AI 리소스를 검토하는 것이 좋습니다.

  • 이 예를 테스트하려면 gpt-4 (1106-preview) 모델이 배포된 Azure OpenAI 리소스가 사용되었습니다.

설정

새 .NET Core 애플리케이션 만들기

콘솔 창(예: cmd, PowerShell 또는 Bash)에서 dotnet new 명령을 사용하여 azure-openai-quickstart라는 새 콘솔 앱을 만듭니다. 이 명령은 program.cs라는 단일 C# 원본 파일을 사용하여 간단한 "Hello World" 프로젝트를 만듭니다.

dotnet new console -n azure-openai-assistants-quickstart

새로 만든 앱 폴더로 디렉터리를 변경합니다. 다음을 통해 애플리케이션을 빌드할 수 있습니다.

dotnet build

빌드 출력에 경고나 오류가 포함되지 않아야 합니다.

...
Build succeeded.
 0 Warning(s)
 0 Error(s)
...

다음을 사용하여 OpenAI .NET 클라이언트 라이브러리를 설치합니다.

dotnet add package Azure.AI.OpenAI.Assistants --prerelease

키 및 엔드포인트 검색

Azure OpenAI에 대해 성공적으로 호출하려면 엔드포인트가 필요합니다.

변수 이름
ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Azure OpenAI Studio>플레이그라운드>코드 보기에서 값을 찾을 수 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/입니다.
API-KEY 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.

Azure Portal에서 해당 리소스로 이동합니다. 키 및 엔드포인트 섹션은 리소스 관리 섹션에서 찾을 수 있습니다. 엔드포인트 및 액세스 키를 복사합니다. API 호출을 인증하는 데 모두 필요합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

엔드포인트 및 액세스 키 위치가 빨간색 원으로 표시된 Azure Portal의 OpenAI 리소스에 대한 개요 UI 스크린샷.

환경 변수

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

도우미 만들기

코드에서는 다음 값을 지정할 예정입니다.

이름 설명
비서 이름 특정 모델과 연결된 배포 이름입니다.
지침 지침은 시스템 메시지와 유사합니다. 여기서 응답을 생성할 때 참조해야 하는 컨텍스트와 작동 방식에 대한 모델 지침을 제공합니다. 도우미의 성격을 설명하고, 대답해야 하는 것과 대답해서는 안 되는 것을 말하고, 응답의 형식을 지정하는 방법을 말할 수 있습니다. 답변에 답변할 때 수행해야 하는 단계의 예를 제공할 수도 있습니다.
모델 여기에서 도우미와 함께 사용할 모델 배포 이름을 설정합니다. 검색 도구에는 gpt-35-turbo (1106) 또는 gpt-4 (1106-preview) 모델이 필요합니다. 이 값을 모델 이름이 아닌 배포 이름으로 설정합니다.
코드 해석기 코드 해석기는 모델이 코드를 테스트하고 실행할 수 있도록 하는 데 사용할 수 있는 샌드박스 Python 환경에 대한 액세스를 제공합니다.

도구

개별 도우미는 code interpreter를 포함하여 최대 128개의 도구는 물론 함수를 통해 만든 모든 사용자 지정 도구에 액세스할 수 있습니다.

다음을 사용하여 도우미를 작성하고 실행합니다.

using Azure;
using Azure.AI.OpenAI.Assistants;

string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT") ?? throw new ArgumentNullException("AZURE_OPENAI_ENDPOINT");
string key = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY") ?? throw new ArgumentNullException("AZURE_OPENAI_API_KEY");
AssistantsClient client = new AssistantsClient(new Uri(endpoint), new AzureKeyCredential(key));

// Create an assistant
Assistant assistant = await client.CreateAssistantAsync(
    new AssistantCreationOptions("gpt-4-1106-preview") // Replace this with the name of your model deployment
    {
        Name = "Math Tutor",
        Instructions = "You are a personal math tutor. Write and run code to answer math questions.",
        Tools = { new CodeInterpreterToolDefinition() }
    });

// Create a thread
AssistantThread thread = await client.CreateThreadAsync();

// Add a user question to the thread
ThreadMessage message = await client.CreateMessageAsync(
    thread.Id,
    MessageRole.User,
    "I need to solve the equation `3x + 11 = 14`. Can you help me?");

// Run the thread
ThreadRun run = await client.CreateRunAsync(
    thread.Id,
    new CreateRunOptions(assistant.Id)
);

// Wait for the assistant to respond
do
{
    await Task.Delay(TimeSpan.FromMilliseconds(500));
    run = await client.GetRunAsync(thread.Id, run.Id);
}
while (run.Status == RunStatus.Queued
    || run.Status == RunStatus.InProgress);

// Get the messages
PageableList<ThreadMessage> messagesPage = await client.GetMessagesAsync(thread.Id);
IReadOnlyList<ThreadMessage> messages = messagesPage.Data;

// Note: messages iterate from newest to oldest, with the messages[0] being the most recent
foreach (ThreadMessage threadMessage in messages.Reverse())
{
    Console.Write($"{threadMessage.CreatedAt:yyyy-MM-dd HH:mm:ss} - {threadMessage.Role,10}: ");
    foreach (MessageContent contentItem in threadMessage.ContentItems)
    {
        if (contentItem is MessageTextContent textItem)
        {
            Console.Write(textItem.Text);
        }
        Console.WriteLine();
    }
}

그러면 다음과 같이 출력이 출력됩니다.

2024-03-05 03:38:17 -       user: I need to solve the equation `3x + 11 = 14`. Can you help me?
2024-03-05 03:38:25 -  assistant: The solution to the equation \(3x + 11 = 14\) is \(x = 1\).

다시 실행하기 전에 스레드에서 새 메시지를 만들 수 있습니다. 그러면 도우미가 과거 메시지를 스레드 내에서 컨텍스트로 사용하는 것을 볼 수 있습니다.

리소스 정리

Azure OpenAI 리소스를 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

참고 항목

참조 설명서 | 라이브러리 소스 코드 | 패키지(npm) |

필수 조건

암호 없는 인증을 위해서는 다음을 수행해야 합니다.

  1. @azure/identity 패키지를 사용합니다.
  2. 사용자 계정에 Cognitive Services User 역할을 할당합니다. 이 작업은 Azure Portal의 액세스 제어(IAM)>역할 할당 추가에서 수행할 수 있습니다.
  3. az login과 같은 Azure CLI를 사용하여 로그인합니다.

설정

  1. 다음을 사용하여 JavaScript용 OpenAI Assistant 클라이언트 라이브러리를 설치합니다.

    npm install openai
    
  2. 권장하는 암호 없는 인증의 경우:

    npm install @azure/identity
    

키 및 엔드포인트 검색

Azure OpenAI 서비스에 대한 호출을 성공적으로 수행하려면 다음이 필요합니다.

변수 이름
ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Azure OpenAI Studio>플레이그라운드>코드 보기에서 값을 찾을 수 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/입니다.
API-KEY 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.
DEPLOYMENT-NAME 이 값은 모델을 배포할 때 배포에 대해 선택한 사용자 지정 이름에 해당합니다. 이 값은 Azure Portal의 리소스 관리>모델 배포에서 또는 Azure OpenAI Studio의 관리>배포에서 찾을 수 있습니다.

Azure Portal에서 해당 리소스로 이동합니다. 키 및 엔드포인트리소스 관리 섹션에서 찾을 수 있습니다. 엔드포인트 및 액세스 키를 복사합니다. API 호출을 인증하는 데 모두 필요합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

엔드포인트 및 액세스 키 위치가 빨간색으로 원을 그리는 Azure Portal의 OpenAI 리소스에 대한 개요 블레이드의 스크린샷.

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

환경 변수

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

배포 이름 및 API 버전에 대한 추가 환경 변수를 추가합니다.

  • AZURE_OPENAI_DEPLOYMENT_NAME: Azure Portal에 표시된 배포 이름입니다.
  • OPENAI_API_VERSION: API 버전에 대해 자세히 알아봅니다.

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx AZURE_OPENAI_DEPLOYMENT_NAME "REPLACE_WITH_YOUR_DEPLOYMENT_NAME" 
setx OPENAI_API_VERSION "REPLACE_WITH_YOUR_API_VERSION" 

도우미 만들기

코드에서는 다음 값을 지정할 예정입니다.

이름 설명
비서 이름 특정 모델과 연결된 배포 이름입니다.
지침 지침은 시스템 메시지와 유사합니다. 여기서 응답을 생성할 때 참조해야 하는 컨텍스트와 작동 방식에 대한 모델 지침을 제공합니다. 도우미의 성격을 설명하고, 대답해야 하는 것과 대답해서는 안 되는 것을 말하고, 응답의 형식을 지정하는 방법을 말할 수 있습니다. 답변에 답변할 때 수행해야 하는 단계의 예를 제공할 수도 있습니다.
모델 배포 이름입니다.
코드 해석기 코드 해석기는 모델이 코드를 테스트하고 실행할 수 있도록 하는 데 사용할 수 있는 샌드박스 Python 환경에 대한 액세스를 제공합니다.

도구

개별 도우미는 code interpreter를 포함하여 최대 128개의 도구는 물론 함수를 통해 만든 모든 사용자 지정 도구에 액세스할 수 있습니다.

az login을 사용하여 Azure에 로그인한 후 다음과 같은 권장 암호 없는 TypeScript 모듈(index.ts)을 사용하여 도우미를 만들고 실행합니다.

import "dotenv/config";
import { AzureOpenAI } from "openai";
import {
  Assistant,
  AssistantCreateParams,
  AssistantTool,
} from "openai/resources/beta/assistants";
import { Message, MessagesPage } from "openai/resources/beta/threads/messages";
import { Run } from "openai/resources/beta/threads/runs/runs";
import { Thread } from "openai/resources/beta/threads/threads";

// Add `Cognitive Services User` to identity for Azure OpenAI resource
import {
  DefaultAzureCredential,
  getBearerTokenProvider,
} from "@azure/identity";

// Get environment variables
const azureOpenAIEndpoint = process.env.AZURE_OPENAI_ENDPOINT as string;
const azureOpenAIDeployment = process.env
  .AZURE_OPENAI_DEPLOYMENT_NAME as string;
const openAIVersion = process.env.OPENAI_API_VERSION as string;

// Check env variables
if (!azureOpenAIEndpoint || !azureOpenAIDeployment || !openAIVersion) {
  throw new Error(
    "Please ensure to set AZURE_OPENAI_DEPLOYMENT_NAME and AZURE_OPENAI_ENDPOINT in your environment variables."
  );
}

// Get Azure SDK client
const getClient = (): AzureOpenAI => {
  const credential = new DefaultAzureCredential();
  const scope = "https://cognitiveservices.azure.com/.default";
  const azureADTokenProvider = getBearerTokenProvider(credential, scope);
  const assistantsClient = new AzureOpenAI({
    endpoint: azureOpenAIEndpoint,
    apiVersion: openAIVersion,
    azureADTokenProvider,
  });
  return assistantsClient;
};

const assistantsClient = getClient();

const options: AssistantCreateParams = {
  model: azureOpenAIDeployment, // Deployment name seen in Azure AI Studio
  name: "Math Tutor",
  instructions:
    "You are a personal math tutor. Write and run JavaScript code to answer math questions.",
  tools: [{ type: "code_interpreter" } as AssistantTool],
};
const role = "user";
const message = "I need to solve the equation `3x + 11 = 14`. Can you help me?";

// Create an assistant
const assistantResponse: Assistant =
  await assistantsClient.beta.assistants.create(options);
console.log(`Assistant created: ${JSON.stringify(assistantResponse)}`);

// Create a thread
const assistantThread: Thread = await assistantsClient.beta.threads.create({});
console.log(`Thread created: ${JSON.stringify(assistantThread)}`);

// Add a user question to the thread
const threadResponse: Message =
  await assistantsClient.beta.threads.messages.create(assistantThread.id, {
    role,
    content: message,
  });
console.log(`Message created:  ${JSON.stringify(threadResponse)}`);

// Run the thread and poll it until it is in a terminal state
const runResponse: Run = await assistantsClient.beta.threads.runs.createAndPoll(
  assistantThread.id,
  {
    assistant_id: assistantResponse.id,
  },
  { pollIntervalMs: 500 }
);
console.log(`Run created:  ${JSON.stringify(runResponse)}`);

// Get the messages
const runMessages: MessagesPage =
  await assistantsClient.beta.threads.messages.list(assistantThread.id);
for await (const runMessageDatum of runMessages) {
  for (const item of runMessageDatum.content) {
    // types are: "image_file" or "text"
    if (item.type === "text") {
      console.log(`Message content: ${JSON.stringify(item.text?.value)}`);
    }
  }
}

인증을 위해 서비스 키를 사용하려면 다음 TypeScript 모듈(index.ts)을 사용하여 도우미를 만들고 실행할 수 있습니다.

import "dotenv/config";
import { AzureOpenAI } from "openai";
import {
  Assistant,
  AssistantCreateParams,
  AssistantTool,
} from "openai/resources/beta/assistants";
import { Message, MessagesPage } from "openai/resources/beta/threads/messages";
import { Run } from "openai/resources/beta/threads/runs/runs";
import { Thread } from "openai/resources/beta/threads/threads";

// Get environment variables
const azureOpenAIKey = process.env.AZURE_OPENAI_KEY as string;
const azureOpenAIEndpoint = process.env.AZURE_OPENAI_ENDPOINT as string;
const azureOpenAIDeployment = process.env
  .AZURE_OPENAI_DEPLOYMENT_NAME as string;
const openAIVersion = process.env.OPENAI_API_VERSION as string;

// Check env variables
if (!azureOpenAIKey || !azureOpenAIEndpoint || !azureOpenAIDeployment || !openAIVersion) {
  throw new Error(
    "Please set AZURE_OPENAI_KEY and AZURE_OPENAI_ENDPOINT and AZURE_OPENAI_DEPLOYMENT_NAME in your environment variables."
  );
}

// Get Azure SDK client
const getClient = (): AzureOpenAI => {
  const assistantsClient = new AzureOpenAI({
    endpoint: azureOpenAIEndpoint,
    apiVersion: openAIVersion,
    apiKey: azureOpenAIKey,
  });
  return assistantsClient;
};

const assistantsClient = getClient();

const options: AssistantCreateParams = {
  model: azureOpenAIDeployment, // Deployment name seen in Azure AI Studio
  name: "Math Tutor",
  instructions:
    "You are a personal math tutor. Write and run JavaScript code to answer math questions.",
  tools: [{ type: "code_interpreter" } as AssistantTool],
};
const role = "user";
const message = "I need to solve the equation `3x + 11 = 14`. Can you help me?";

// Create an assistant
const assistantResponse: Assistant =
  await assistantsClient.beta.assistants.create(options);
console.log(`Assistant created: ${JSON.stringify(assistantResponse)}`);

// Create a thread
const assistantThread: Thread = await assistantsClient.beta.threads.create({});
console.log(`Thread created: ${JSON.stringify(assistantThread)}`);

// Add a user question to the thread
const threadResponse: Message =
  await assistantsClient.beta.threads.messages.create(assistantThread.id, {
    role,
    content: message,
  });
console.log(`Message created:  ${JSON.stringify(threadResponse)}`);

// Run the thread and poll it until it is in a terminal state
const runResponse: Run = await assistantsClient.beta.threads.runs.createAndPoll(
  assistantThread.id,
  {
    assistant_id: assistantResponse.id,
  },
  { pollIntervalMs: 500 }
);
console.log(`Run created:  ${JSON.stringify(runResponse)}`);

// Get the messages
const runMessages: MessagesPage =
  await assistantsClient.beta.threads.messages.list(assistantThread.id);
for await (const runMessageDatum of runMessages) {
  for (const item of runMessageDatum.content) {
    // types are: "image_file" or "text"
    if (item.type === "text") {
      console.log(`Message content: ${JSON.stringify(item.text?.value)}`);
    }
  }
}

출력

Assistant created: {"id":"asst_zXaZ5usTjdD0JGcNViJM2M6N","createdAt":"2024-04-08T19:26:38.000Z","name":"Math Tutor","description":null,"model":"daisy","instructions":"You are a personal math tutor. Write and run JavaScript code to answer math questions.","tools":[{"type":"code_interpreter"}],"fileIds":[],"metadata":{}}
Thread created: {"id":"thread_KJuyrB7hynun4rvxWdfKLIqy","createdAt":"2024-04-08T19:26:38.000Z","metadata":{}}
Message created:  {"id":"msg_o0VkXnQj3juOXXRCnlZ686ff","createdAt":"2024-04-08T19:26:38.000Z","threadId":"thread_KJuyrB7hynun4rvxWdfKLIqy","role":"user","content":[{"type":"text","text":{"value":"I need to solve the equation `3x + 11 = 14`. Can you help me?","annotations":[]},"imageFile":{}}],"assistantId":null,"runId":null,"fileIds":[],"metadata":{}}
Created run
Run created:  {"id":"run_P8CvlouB8V9ZWxYiiVdL0FND","object":"thread.run","status":"queued","model":"daisy","instructions":"You are a personal math tutor. Write and run JavaScript code to answer math questions.","tools":[{"type":"code_interpreter"}],"metadata":{},"usage":null,"assistantId":"asst_zXaZ5usTjdD0JGcNViJM2M6N","threadId":"thread_KJuyrB7hynun4rvxWdfKLIqy","fileIds":[],"createdAt":"2024-04-08T19:26:39.000Z","expiresAt":"2024-04-08T19:36:39.000Z","startedAt":null,"completedAt":null,"cancelledAt":null,"failedAt":null}
Message content: "The solution to the equation \\(3x + 11 = 14\\) is \\(x = 1\\)."
Message content: "Yes, of course! To solve the equation \\( 3x + 11 = 14 \\), we can follow these steps:\n\n1. Subtract 11 from both sides of the equation to isolate the term with x.\n2. Then, divide by 3 to find the value of x.\n\nLet me calculate that for you."
Message content: "I need to solve the equation `3x + 11 = 14`. Can you help me?"

코드 해석기는 질문을 코드로 변환하고 솔루션에 도달할 때까지 JavaScript에서 해당 코드를 반복적으로 실행하여 더 복잡한 쿼리에 응답할 수 있는 기능을 모델에 제공하지만 여전히 응답의 유효성을 검사하여 유효성 검사해야 한다는 점을 기억해야 합니다. 모델이 사용자의 질문을 코드의 유효한 표현으로 올바르게 변환했는지 유효성을 검사합니다.

리소스 정리

Azure OpenAI 리소스를 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

샘플 코드

참고 항목

필수 조건

설정

키 및 엔드포인트 검색

Azure OpenAI에 대한 호출을 성공적으로 수행하려면 다음이 필요합니다.

변수 이름
ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Azure OpenAI Studio>플레이그라운드>코드 보기에서 값을 찾을 수 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/입니다.
API-KEY 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.
DEPLOYMENT-NAME 이 값은 모델을 배포할 때 배포에 대해 선택한 사용자 지정 이름에 해당합니다. 이 값은 Azure Portal의 리소스 관리>배포에서 또는 Azure OpenAI Studio의 관리>배포에서 찾을 수 있습니다.

Azure Portal에서 해당 리소스로 이동합니다. 엔드포인트 및 키리소스 관리 섹션에서 찾을 수 있습니다. 엔드포인트 및 액세스 키를 복사합니다. API 호출을 인증하는 데 모두 필요합니다. KEY1 또는 KEY2를 사용할 수 있습니다. 항상 두 개의 키를 사용하면 서비스 중단 없이 키를 안전하게 회전하고 다시 생성할 수 있습니다.

Azure Portal의 OpenAI 리소스 개요 블레이드에서 엔드포인트 및 액세스 키 위치에 빨간색 원이 표시된 스크린샷.

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

환경 변수

키 및 엔드포인트에 대한 영구 환경 변수를 만들고 할당합니다.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

REST API

도우미 만들기

참고 항목

Azure OpenAI를 사용하면 model 매개 변수에 모델 배포 이름이 필요합니다. 모델 배포 이름이 기본 모델 이름과 다른 경우 코드를 "model": "{your-custom-model-deployment-name}"으로 조정합니다.

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/assistants?api-version=2024-05-01-preview \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "instructions": "You are an AI assistant that can write code to help answer math questions.",
    "name": "Math Assist",
    "tools": [{"type": "code_interpreter"}],
    "model": "gpt-4-1106-preview"
  }'

도구

개별 도우미는 code interpreter를 포함하여 최대 128개의 도구는 물론 함수를 통해 만든 모든 사용자 지정 도구에 액세스할 수 있습니다.

스레드 만들기

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d ''

스레드에 사용자 질문 추가

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/messages \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -d '{
      "role": "user",
      "content": "I need to solve the equation `3x + 11 = 14`. Can you help me?"
    }'

스레드 실행

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/runs \
  -H "api-key: $AZURE_OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "assistant_id": "asst_abc123",
  }'

실행 상태 검색

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/runs/run_abc123 \
  -H "api-key: $AZURE_OPENAI_API_KEY" \

도우미 응답

curl https://YOUR_RESOURCE_NAME.openai.azure.com/openai/threads/thread_abc123/messages \
  -H "Content-Type: application/json" \
  -H "api-key: $AZURE_OPENAI_API_KEY" \

결과 해석

이 예에서는 코드 해석기가 사용하도록 설정된 도우미를 만듭니다. 도우미에게 수학 질문을 하면 질문에 대한 답을 결정하기 위해 질문을 Python 코드로 변환하고 샌드박스 환경에서 코드를 실행합니다. 답변에 도달하기 위해 모델이 만들고 테스트하는 코드는 다음과 같습니다.

    from sympy import symbols, Eq, solve  
      
    # Define the variable  
    x = symbols('x')  
      
    # Define the equation  
    equation = Eq(3*x + 11, 14)  
      
    # Solve the equation  
    solution = solve(equation, x)  
    solution  

코드 해석기는 질문을 코드로 변환하고 솔루션에 도달할 때까지 Python 샌드박스에서 해당 코드를 반복적으로 실행하여 더 복잡한 쿼리에 응답할 수 있는 기능을 모델에 제공하지만 여전히 응답의 유효성을 검사하여 유효성 검사해야 한다는 점을 기억해야 합니다. 모델이 사용자의 질문을 코드의 유효한 표현으로 올바르게 변환했는지 유효성을 검사합니다.

리소스 정리

Azure OpenAI 리소스를 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

참고 항목