다음을 통해 공유


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

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

Important

이 문서에 표시된 항목(미리 보기)은 현재 퍼블릭 미리 보기에서 확인할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.

필수 조건

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

Azure AI Studio를 사용하면 더 빠르고 더 많은 파일을 지원하는 파일 검색 도구와 같은 여러 업그레이드를 제공하는 Assistants v2를 사용할 수 있습니다.

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

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

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

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

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

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

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

첫 번째 도우미 만들기

  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) |

필수 조건

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

  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 AI Studio의 배포 페이지를 통해 엔드포인트를 찾을 수도 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/입니다.
API-KEY 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.
DEPLOYMENT-NAME 이 값은 모델을 배포할 때 배포에 대해 선택한 사용자 지정 이름에 해당합니다. 이 값은 Azure Portal의 리소스 관리>모델 배포 또는 Azure AI Studio의 배포 페이지를 통해 찾을 수 있습니다.

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

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

환경 변수

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

Important

API 키를 사용하는 경우 Azure Key Vault와 같은 다른 위치에 안전하게 저장합니다. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요.

AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.

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)

필수 조건

설정

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

  1. 콘솔 창(예: cmd, PowerShell 또는 Bash)에서 이 명령을 사용하여 dotnet new 다음과 같은 이름으로 azure-openai-quickstart새 콘솔 앱을 만듭니다.

    dotnet new console -n azure-openai-assistants-quickstart
    
  2. 새로 만든 앱 폴더의 디렉터리로 변경하고 다음 명령을 사용하여 앱을 빌드합니다 dotnet build .

    dotnet build
    

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

    ...
    Build succeeded.
     0 Warning(s)
     0 Error(s)
    ...
    
  3. dotnet add package 명령을 사용하여 OpenAI .NET 클라이언트 라이브러리를 설치합니다.

    dotnet add package Azure.AI.OpenAI --prerelease
    

키 및 엔드포인트 검색

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

변수 이름
ENDPOINT 서비스 엔드포인트는 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. 또는 Azure AI Studio의 배포 페이지를 통해 엔드포인트를 찾을 수 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/입니다.
API-KEY 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.

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

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

환경 변수

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

Important

API 키를 사용하는 경우 Azure Key Vault와 같은 다른 위치에 안전하게 저장합니다. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요.

AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.

setx AZURE_OPENAI_API_KEY "REPLACE_WITH_YOUR_KEY_VALUE_HERE" 
setx AZURE_OPENAI_ENDPOINT "REPLACE_WITH_YOUR_ENDPOINT_HERE" 

암호 없는 인증은 키 기반 대안보다 더 안전하며 Azure 서비스에 연결하는 데 권장되는 방법입니다. 암호 없는 인증을 선택하는 경우 다음을 완료해야 합니다.

  1. Azure.Identity 패키지를 추가합니다.

    dotnet add package Azure.Identity
    
  2. 사용자 계정에 Cognitive Services User 역할을 할당합니다. 이 작업은 액세스 제어(IAM)> 역할 할당 추가 아래의 OpenAI 리소스에 있는 Azure Portal에서 수행할 수 있습니다.

  3. Visual Studio 또는 Azure CLI를 통해 az loginAzure에 로그인합니다.

도우미 만들기

도우미를 Program.cs 만들려면 다음 코드로 파일을 업데이트합니다.

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

// Assistants is a beta API and subject to change
// Acknowledge its experimental status by suppressing the matching warning.
string endpoint = Environment.GetEnvironmentVariable("AZURE_OPENAI_ENDPOINT");
string key = Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY");

var openAIClient = new AzureOpenAIClient(new Uri(endpoint), new AzureKeyCredential(key));

// Use for passwordless auth
//var openAIClient = new AzureOpenAIClient(new Uri(endpoint), new DefaultAzureCredential()); 

FileClient fileClient = openAIClient.GetFileClient();
AssistantClient assistantClient = openAIClient.GetAssistantClient();

// First, let's contrive a document we'll use retrieval with and upload it.
using Stream document = BinaryData.FromString("""
            {
                "description": "This document contains the sale history data for Contoso products.",
                "sales": [
                    {
                        "month": "January",
                        "by_product": {
                            "113043": 15,
                            "113045": 12,
                            "113049": 2
                        }
                    },
                    {
                        "month": "February",
                        "by_product": {
                            "113045": 22
                        }
                    },
                    {
                        "month": "March",
                        "by_product": {
                            "113045": 16,
                            "113055": 5
                        }
                    }
                ]
            }
            """).ToStream();

OpenAIFileInfo salesFile = await fileClient.UploadFileAsync(
    document,
    "monthly_sales.json",
    FileUploadPurpose.Assistants);

// Now, we'll create a client intended to help with that data
AssistantCreationOptions assistantOptions = new()
{
    Name = "Example: Contoso sales RAG",
    Instructions =
        "You are an assistant that looks up sales data and helps visualize the information based"
        + " on user queries. When asked to generate a graph, chart, or other visualization, use"
        + " the code interpreter tool to do so.",
    Tools =
            {
                new FileSearchToolDefinition(),
                new CodeInterpreterToolDefinition(),
            },
    ToolResources = new()
    {
        FileSearch = new()
        {
            NewVectorStores =
                    {
                        new VectorStoreCreationHelper([salesFile.Id]),
                    }
        }
    },
};

Assistant assistant = await assistantClient.CreateAssistantAsync(deploymentName, assistantOptions);

// Create and run a thread with a user query about the data already associated with the assistant
ThreadCreationOptions threadOptions = new()
{
    InitialMessages = { "How well did product 113045 sell in February? Graph its trend over time." }
};

ThreadRun threadRun = await assistantClient.CreateThreadAndRunAsync(assistant.Id, threadOptions);

// Check back to see when the run is done
do
{
    Thread.Sleep(TimeSpan.FromSeconds(1));
    threadRun = assistantClient.GetRun(threadRun.ThreadId, threadRun.Id);
} while (!threadRun.Status.IsTerminal);

// Finally, we'll print out the full history for the thread that includes the augmented generation
AsyncCollectionResult<ThreadMessage> messages
    = assistantClient.GetMessagesAsync(
        threadRun.ThreadId,
        new MessageCollectionOptions() { Order = MessageCollectionOrder.Ascending });

await foreach (ThreadMessage message in messages)
{
    Console.Write($"[{message.Role.ToString().ToUpper()}]: ");
    foreach (MessageContent contentItem in message.Content)
    {
        if (!string.IsNullOrEmpty(contentItem.Text))
        {
            Console.WriteLine($"{contentItem.Text}");

            if (contentItem.TextAnnotations.Count > 0)
            {
                Console.WriteLine();
            }

            // Include annotations, if any.
            foreach (TextAnnotation annotation in contentItem.TextAnnotations)
            {
                if (!string.IsNullOrEmpty(annotation.InputFileId))
                {
                    Console.WriteLine($"* File citation, file ID: {annotation.InputFileId}");
                }
                if (!string.IsNullOrEmpty(annotation.OutputFileId))
                {
                    Console.WriteLine($"* File output, new file ID: {annotation.OutputFileId}");
                }
            }
        }
        if (!string.IsNullOrEmpty(contentItem.ImageFileId))
        {
            OpenAIFileInfo imageInfo = await fileClient.GetFileAsync(contentItem.ImageFileId);
            BinaryData imageBytes = await fileClient.DownloadFileAsync(contentItem.ImageFileId);
            using FileStream stream = File.OpenWrite($"{imageInfo.Filename}.png");
            imageBytes.ToStream().CopyTo(stream);

            Console.WriteLine($"<image: {imageInfo.Filename}.png>");
        }
    }
    Console.WriteLine();
}

다음 명령을 사용하여 앱을 실행합니다.dotnet run

dotnet run

콘솔 출력은 다음과 유사합니다.

[USER]: How well did product 113045 sell in February? Graph its trend over time.

[ASSISTANT]: Product 113045 sold 22 units in February. Let's visualize its sales trend over the given months (January through March).

I'll create a graph to depict this trend.

[ASSISTANT]: <image: 553380b7-fdb6-49cf-9df6-e8e6700d69f4.png>
The graph above visualizes the sales trend for product 113045 from January to March. As seen, the sales peaked in February with 22 units sold, and fluctuated over the period from January (12 units) to March (16 units).

If you need further analysis or more details, feel free to ask!

리소스 정리

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

참고 항목

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

필수 조건

키 없는 인증의 경우 다음을 수행해야 합니다.

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

설정

  1. 애플리케이션을 포함할 새 폴더 assistants-quickstart 를 만들고 다음 명령을 사용하여 해당 폴더에서 Visual Studio Code를 엽니다.

    mkdir assistants-quickstart && code assistants-quickstart
    
  2. 다음 명령을 사용하여 package.json 만듭니다.

    npm init -y
    
  3. package.json 다음 명령을 사용하여 ECMAScript로 업데이트합니다.

    npm pkg set type=module
    
  4. 다음을 사용하여 JavaScript용 OpenAI Assistant 클라이언트 라이브러리를 설치합니다.

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

    npm install @azure/identity
    

리소스 정보 검색

변수 이름
AZURE_OPENAI_ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다.
AZURE_OPENAI_DEPLOYMENT_NAME 이 값은 모델을 배포할 때 배포에 대해 선택한 사용자 지정 이름에 해당합니다. 이 값은 Azure Portal의 리소스 관리>모델 배포에서 찾을 수 있습니다.
OPENAI_API_VERSION API 버전에 대해 자세히 알아봅니다.

키 없는 인증 및 환경 변수 설정에 대해 자세히 알아봅니다.

주의

SDK에서 권장되는 키 없는 인증을 사용하려면 환경 변수가 AZURE_OPENAI_API_KEY 설정되지 않았는지 확인합니다.

도우미 만들기

코드에서는 다음 값을 지정합니다.

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

도구

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

새 JavaScript 애플리케이션 만들기

  1. 다음 코드를 사용하여 index.js 파일을 만듭니다.

    const { AzureOpenAI } = require("openai");
    const {
      DefaultAzureCredential,
      getBearerTokenProvider,
    } = require("@azure/identity");
    
    // Get environment variables
    const azureOpenAIEndpoint = process.env.AZURE_OPENAI_ENDPOINT;
    const azureOpenAIDeployment = process.env.AZURE_OPENAI_DEPLOYMENT_NAME;
    const azureOpenAIVersion = process.env.OPENAI_API_VERSION;
    
    // Check env variables
    if (!azureOpenAIEndpoint || !azureOpenAIDeployment || !azureOpenAIVersion) {
      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 = () => {
      const credential = new DefaultAzureCredential();
      const scope = "https://cognitiveservices.azure.com/.default";
      const azureADTokenProvider = getBearerTokenProvider(credential, scope);
    
      const assistantsClient = new AzureOpenAI({
        endpoint: azureOpenAIEndpoint,
        apiVersion: azureOpenAIVersion,
        azureADTokenProvider,
      });
      return assistantsClient;
    };
    
    const assistantsClient = getClient();
    
    const options = {
      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" }],
    };
    const role = "user";
    const message = "I need to solve the equation `3x + 11 = 14`. Can you help me?";
    
    // Create an assistant
    const assistantResponse = await assistantsClient.beta.assistants.create(
      options
    );
    console.log(`Assistant created: ${JSON.stringify(assistantResponse)}`);
    
    // Create a thread
    const assistantThread = await assistantsClient.beta.threads.create({});
    console.log(`Thread created: ${JSON.stringify(assistantThread)}`);
    
    // Add a user question to the thread
    const threadResponse = 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 = 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 = 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)}`);
        }
      }
    }
    
  2. 다음 명령을 사용하여 Azure에 로그인합니다.

    az login
    
  3. JavaScript 파일을 실행합니다.

    node index.js
    

출력

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 리소스를 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

샘플 코드

참고 항목

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

필수 조건

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

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

설정

  1. 애플리케이션을 포함할 새 폴더 assistants-quickstart 를 만들고 다음 명령을 사용하여 해당 폴더에서 Visual Studio Code를 엽니다.

    mkdir assistants-quickstart && code assistants-quickstart
    
  2. 다음 명령을 사용하여 package.json 만듭니다.

    npm init -y
    
  3. package.json 다음 명령을 사용하여 ECMAScript로 업데이트합니다.

    npm pkg set type=module
    
  4. 다음을 사용하여 JavaScript용 OpenAI Assistant 클라이언트 라이브러리를 설치합니다.

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

    npm install @azure/identity
    

리소스 정보 검색

변수 이름
AZURE_OPENAI_ENDPOINT 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다.
AZURE_OPENAI_DEPLOYMENT_NAME 이 값은 모델을 배포할 때 배포에 대해 선택한 사용자 지정 이름에 해당합니다. 이 값은 Azure Portal의 리소스 관리>모델 배포에서 찾을 수 있습니다.
OPENAI_API_VERSION API 버전에 대해 자세히 알아봅니다.

키 없는 인증 및 환경 변수 설정에 대해 자세히 알아봅니다.

주의

SDK에서 권장되는 키 없는 인증을 사용하려면 환경 변수가 AZURE_OPENAI_API_KEY 설정되지 않았는지 확인합니다.

도우미 만들기

코드에서는 다음 값을 지정합니다.

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

도구

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

새 TypeScript 애플리케이션 만들기

  1. 다음 코드를 사용하여 index.ts 파일을 만듭니다.

    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)}`);
        }
      }
    }
    
  2. tsconfig.json TypeScript 코드를 변환하고 ECMAScript에 대해 다음 코드를 복사하는 파일을 만듭니다.

    {
        "compilerOptions": {
          "module": "NodeNext",
          "target": "ES2022", // Supports top-level await
          "moduleResolution": "NodeNext",
          "skipLibCheck": true, // Avoid type errors from node_modules
          "strict": true // Enable strict type-checking options
        },
        "include": ["*.ts"]
    }
    
  3. TypeScript에서 JavaScript로 변환합니다.

    tsc
    
  4. 다음 명령을 사용하여 Azure에 로그인합니다.

    az login
    
  5. 다음 명령을 사용하여 코드를 실행합니다.

    node index.js
    

출력

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 AI Studio의 배포 페이지를 통해 엔드포인트를 찾을 수 있습니다. 예제 엔드포인트는 https://docs-test-001.openai.azure.com/입니다.
API-KEY 이 값은 Azure Portal에서 리소스를 검사할 때 키 및 엔드포인트 섹션에서 찾을 수 있습니다. KEY1 또는 KEY2를 사용할 수 있습니다.
DEPLOYMENT-NAME 이 값은 모델을 배포할 때 배포에 대해 선택한 사용자 지정 이름에 해당합니다. 이 값은 Azure Portal의 리소스 관리>배포 또는 Azure AI Studio의 배포 페이지를 통해 찾을 수 있습니다.

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

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

환경 변수

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

Important

API 키를 사용하는 경우 Azure Key Vault와 같은 다른 위치에 안전하게 저장합니다. API 키를 코드에 직접 포함하지 말고, 공개적으로 게시하지 마세요.

AI 서비스 보안에 대한 자세한 내용은 Azure AI 서비스에 대한 요청 인증을 참조하세요.

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 리소스를 정리하고 제거하려면 리소스 또는 리소스 그룹을 삭제하면 됩니다. 리소스 그룹을 삭제하면 해당 리소스 그룹에 연결된 다른 모든 리소스가 함께 삭제됩니다.

참고 항목