빠른 시작: 새 에이전트 만들기
Azure AI 에이전트 서비스를 사용하면 사용자 지정 지침을 통해 요구 사항에 맞게 조정되고 코드 인터프리터 및 사용자 지정 함수와 같은 고급 도구로 보강된 AI 에이전트를 만들 수 있습니다.
| 참조 설명서 | 샘플 | 라이브러리 소스 코드 | 패키지(NuGet) |
필수 조건
- Azure 구독 – 체험 구독을 만듭니다.
- 최신 버전의 .NET
- 적절한 수준에서 Azure AI 개발자 RBAC 역할이 할당되었는지 확인합니다.
- Azure CLI 및 기계 학습 확장을 설치 합니다. CLI가 이미 설치되어 있는 경우 최신 버전으로 업데이트되었는지 확인합니다.
Azure AI Hub 및 에이전트 프로젝트 설정
다음 섹션에서는 Azure AI 에이전트 서비스를 시작하는 데 필요한 리소스를 설정하는 방법을 보여 줍니다.
허브에서 Azure AI 프로젝트를 만들면 앱이 호출할 엔드포인트가 만들어지고 테넌트에서 리소스에 액세스하도록 앱 서비스를 설정합니다.
Azure OpenAI 리소스 또는 Azure AI Services 리소스 연결
기본 또는 표준 에이전트 설정 선택
기본 설정: 에이전트는 Microsoft에서 완전히 관리되는 다중 테넌트 검색 및 스토리지 리소스를 사용합니다. 이러한 기본 Azure 리소스에 대한 가시성이나 제어 권한이 없습니다.
표준 설정: 에이전트는 고객 소유의 단일 테넌트 검색 및 스토리지 리소스를 사용합니다. 이 설정을 사용하면 이러한 리소스에 대한 모든 권한과 가시성이 있지만 사용량에 따라 비용이 발생합니다.
[선택 사항] 자동 배포 템플릿의 모델 선택
자동 배포 템플릿에서 모델 매개 변수를 편집하여 에이전트에서 사용하는 모델을 사용자 지정할 수 있습니다. 다른 모델을 배포하려면 최소한 및 modelVersion
매개 변수를 modelName
업데이트해야 합니다.
기본적으로 배포 템플릿은 다음 값으로 구성됩니다.
모델 매개 변수 | 기본값 |
---|---|
modelName | gpt-4o-mini |
modelFormat | OpenAI(Azure OpenAI의 경우) |
모델 버전 | 2024-07-18 |
modelSkuName | GlobalStandard |
modelLocation | eastus |
Important
modelFormat 매개 변수를 변경하지 마세요.
템플릿은 Azure OpenAI 모델의 배포만 지원합니다. Azure AI 에이전트 서비스 모델 지원 설명서에서 지원되는 Azure OpenAI 모델을 확인합니다.
[선택 사항] 에이전트를 설정하는 동안 사용자 고유의 리소스 사용
참고 항목
기존 AI 서비스 또는 Azure OpenAI 리소스를 사용하는 경우 모델이 배포되지 않습니다. 에이전트 설정이 완료된 후 리소스에 모델을 배포할 수 있습니다.
매개 변수 파일에 전체 arm 리소스 ID를 제공하여 기존 AI 서비스, Azure OpenAI, AI Search 및/또는 Azure Blob Storage 리소스를 사용합니다.
aiServiceAccountResourceId
aiSearchServiceResourceId
aiStorageAccountResourceId
기존 Azure OpenAI 리소스를 사용하려면 매개 변수 파일의 aiServiceAccountResourceId
매개 변수와 매개 변수를 aiServiceKind
업데이트해야 합니다. 매개 변수는 aiServiceKind
.로 AzureOpenAI
설정해야 합니다.
자세한 내용은 사용자 고유의 리소스를 사용하는 방법을 참조 하세요.
에이전트 구성 및 실행
구성 요소 | 설명 |
---|---|
에이전트 | 도구와 함께 AI 모델을 사용하는 사용자 지정 AI입니다. |
도구 | 도구를 사용하면 대화 중에 안정적이고 정확하게 응답할 수 있는 에이전트의 기능을 확장할 수 있습니다. 예를 들어 모델을 접지하기 위해 사용자 정의 기술 자료 연결하거나 웹 검색을 사용하여 현재 정보를 제공할 수 있습니다. |
스레드 | 에이전트와 사용자 간의 대화 세션입니다. 스레드는 메시지를 저장하고 자동으로 잘림을 처리하여 콘텐츠를 모델의 컨텍스트에 맞춥니다. |
메시지 | 에이전트 또는 사용자가 만든 메시지입니다. 메시지에는 텍스트, 이미지 및 기타 파일이 포함될 수 있습니다. 메시지는 스레드에 목록으로 저장됩니다. |
Run | 스레드의 내용에 따라 실행을 시작할 에이전트의 활성화입니다. 에이전트는 해당 구성 및 스레드의 메시지를 사용하여 모델 및 도구를 호출하여 작업을 수행합니다. 실행의 일부로 에이전트는 스레드에 메시지를 추가합니다. |
실행 단계 | 에이전트가 실행의 일부로 수행한 단계의 자세한 목록입니다. 에이전트는 실행하는 동안 도구를 호출하거나 메시지를 만들 수 있습니다. 실행 단계를 검사하면 에이전트가 결과를 얻는 방법을 이해할 수 있습니다. |
프로젝트에 .NET 패키지를 설치합니다. 예를 들어 .NET CLI를 사용하는 경우 다음 명령을 실행합니다.
dotnet add package Azure.AI.Projects
dotnet add package Azure.Identity
다음으로, API 요청을 인증하고 프로그램을 실행하려면 az login 명령을 사용하여 Azure 구독에 로그인합니다.
az login
다음 코드를 사용하여 에이전트를 만들고 실행합니다. 이 코드를 실행하려면 프로젝트의 정보를 사용하여 연결 문자열 만들어야 합니다. 이 문자열의 형식은 다음과 같습니다.
<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<ProjectName>
HostName
은 (을) 탐색하고 discovery_url
선행 https://
및 후행을 제거하여 찾을 수 있습니다 /discovery
. 찾으려면 다음 CLI 명령을 실행합니다 discovery_url
.
az ml workspace show -n {project_name} --resource-group {resource_group_name} --query discovery_url
예를 들어 연결 문자열 다음과 같이 표시할 수 있습니다.
eastus.api.azureml.ms;12345678-abcd-1234-9fc6-62780b3d3e05;my-resource-group;my-project-name
이 연결 문자열 환경 PROJECT_CONNECTION_STRING
변수로 설정합니다.
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License.
#nullable disable
using Azure.Identity;
namespace Azure.AI.Projects.Tests;
public class Sample_Agent
{
static async Task Main()
{
var connectionString = Environment.GetEnvironmentVariable("AZURE_AI_CONNECTION_STRING");
AgentsClient client = new AgentsClient(connectionString, new DefaultAzureCredential());
// Step 1: Create an agent
Response<Agent> agentResponse = await client.CreateAgentAsync(
model: "gpt-4o-mini",
name: "My Agent",
instructions: "You are a helpful agent.",
tools: new List<ToolDefinition> { new CodeInterpreterToolDefinition() });
Agent agent = agentResponse.Value;
// Intermission: agent should now be listed
Response<PageableList<Agent>> agentListResponse = await client.GetAgentsAsync();
//// Step 2: Create a thread
Response<AgentThread> threadResponse = await client.CreateThreadAsync();
AgentThread thread = threadResponse.Value;
// Step 3: Add a message to a thread
Response<ThreadMessage> messageResponse = await client.CreateMessageAsync(
thread.Id,
MessageRole.User,
"I need to solve the equation `3x + 11 = 14`. Can you help me?");
ThreadMessage message = messageResponse.Value;
// Intermission: message is now correlated with thread
// Intermission: listing messages will retrieve the message just added
Response<PageableList<ThreadMessage>> messagesListResponse = await client.GetMessagesAsync(thread.Id);
//Assert.That(messagesListResponse.Value.Data[0].Id == message.Id);
// Step 4: Run the agent
Response<ThreadRun> runResponse = await client.CreateRunAsync(
thread.Id,
agent.Id,
additionalInstructions: "");
ThreadRun run = runResponse.Value;
do
{
await Task.Delay(TimeSpan.FromMilliseconds(500));
runResponse = await client.GetRunAsync(thread.Id, runResponse.Value.Id);
}
while (runResponse.Value.Status == RunStatus.Queued
|| runResponse.Value.Status == RunStatus.InProgress);
Response<PageableList<ThreadMessage>> afterRunMessagesResponse
= await client.GetMessagesAsync(thread.Id);
IReadOnlyList<ThreadMessage> messages = afterRunMessagesResponse.Value.Data;
// Note: messages iterate from newest to oldest, with the messages[0] being the most recent
foreach (ThreadMessage threadMessage in messages)
{
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);
}
else if (contentItem is MessageImageFileContent imageFileItem)
{
Console.Write($"<image from ID: {imageFileItem.FileId}");
}
Console.WriteLine();
}
}
}
}
| 참조 설명서 | 샘플 | 라이브러리 소스 코드 | 패키지(PyPi) |
필수 조건
- Azure 구독 – 체험 구독을 만듭니다.
- Python 3.8 이상
- 적절한 수준에서 Azure AI 개발자 RBAC 역할이 할당되었는지 확인합니다.
- Azure CLI 및 기계 학습 확장을 설치 합니다. CLI가 이미 설치되어 있는 경우 최신 버전으로 업데이트되었는지 확인합니다.
Azure AI Hub 및 에이전트 프로젝트 설정
다음 섹션에서는 Azure AI 에이전트 서비스를 시작하는 데 필요한 리소스를 설정하는 방법을 보여 줍니다.
허브에서 Azure AI 프로젝트를 만들면 앱이 호출할 엔드포인트가 만들어지고 테넌트에서 리소스에 액세스하도록 앱 서비스를 설정합니다.
Azure OpenAI 리소스 또는 Azure AI Services 리소스 연결
기본 또는 표준 에이전트 설정 선택
기본 설정: 에이전트는 Microsoft에서 완전히 관리되는 다중 테넌트 검색 및 스토리지 리소스를 사용합니다. 이러한 기본 Azure 리소스에 대한 가시성이나 제어 권한이 없습니다.
표준 설정: 에이전트는 고객 소유의 단일 테넌트 검색 및 스토리지 리소스를 사용합니다. 이 설정을 사용하면 이러한 리소스에 대한 모든 권한과 가시성이 있지만 사용량에 따라 비용이 발생합니다.
[선택 사항] 자동 배포 템플릿의 모델 선택
자동 배포 템플릿에서 모델 매개 변수를 편집하여 에이전트에서 사용하는 모델을 사용자 지정할 수 있습니다. 다른 모델을 배포하려면 최소한 및 modelVersion
매개 변수를 modelName
업데이트해야 합니다.
기본적으로 배포 템플릿은 다음 값으로 구성됩니다.
모델 매개 변수 | 기본값 |
---|---|
modelName | gpt-4o-mini |
modelFormat | OpenAI(Azure OpenAI의 경우) |
모델 버전 | 2024-07-18 |
modelSkuName | GlobalStandard |
modelLocation | eastus |
Important
modelFormat 매개 변수를 변경하지 마세요.
템플릿은 Azure OpenAI 모델의 배포만 지원합니다. Azure AI 에이전트 서비스 모델 지원 설명서에서 지원되는 Azure OpenAI 모델을 확인합니다.
[선택 사항] 에이전트를 설정하는 동안 사용자 고유의 리소스 사용
참고 항목
기존 AI 서비스 또는 Azure OpenAI 리소스를 사용하는 경우 모델이 배포되지 않습니다. 에이전트 설정이 완료된 후 리소스에 모델을 배포할 수 있습니다.
매개 변수 파일에 전체 arm 리소스 ID를 제공하여 기존 AI 서비스, Azure OpenAI, AI Search 및/또는 Azure Blob Storage 리소스를 사용합니다.
aiServiceAccountResourceId
aiSearchServiceResourceId
aiStorageAccountResourceId
기존 Azure OpenAI 리소스를 사용하려면 매개 변수 파일의 aiServiceAccountResourceId
매개 변수와 매개 변수를 aiServiceKind
업데이트해야 합니다. 매개 변수는 aiServiceKind
.로 AzureOpenAI
설정해야 합니다.
자세한 내용은 사용자 고유의 리소스를 사용하는 방법을 참조 하세요.
에이전트 구성 및 실행
구성 요소 | 설명 |
---|---|
에이전트 | 도구와 함께 AI 모델을 사용하는 사용자 지정 AI입니다. |
도구 | 도구를 사용하면 대화 중에 안정적이고 정확하게 응답할 수 있는 에이전트의 기능을 확장할 수 있습니다. 예를 들어 모델을 접지하기 위해 사용자 정의 기술 자료 연결하거나 웹 검색을 사용하여 현재 정보를 제공할 수 있습니다. |
스레드 | 에이전트와 사용자 간의 대화 세션입니다. 스레드는 메시지를 저장하고 자동으로 잘림을 처리하여 콘텐츠를 모델의 컨텍스트에 맞춥니다. |
메시지 | 에이전트 또는 사용자가 만든 메시지입니다. 메시지에는 텍스트, 이미지 및 기타 파일이 포함될 수 있습니다. 메시지는 스레드에 목록으로 저장됩니다. |
Run | 스레드의 내용에 따라 실행을 시작할 에이전트의 활성화입니다. 에이전트는 해당 구성 및 스레드의 메시지를 사용하여 모델 및 도구를 호출하여 작업을 수행합니다. 실행의 일부로 에이전트는 스레드에 메시지를 추가합니다. |
실행 단계 | 에이전트가 실행의 일부로 수행한 단계의 자세한 목록입니다. 에이전트는 실행하는 동안 도구를 호출하거나 메시지를 만들 수 있습니다. 실행 단계를 검사하면 에이전트가 결과를 얻는 방법을 이해할 수 있습니다. |
다음 명령을 실행하여 Python 패키지를 설치합니다.
pip install azure-ai-projects
pip install azure-identity
다음으로, API 요청을 인증하고 프로그램을 실행하려면 az login 명령을 사용하여 Azure 구독에 로그인합니다.
az login
다음 코드를 사용하여 에이전트를 만들고 실행합니다. 이 코드를 실행하려면 프로젝트의 정보를 사용하여 연결 문자열 만들어야 합니다. 이 문자열의 형식은 다음과 같습니다.
<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<ProjectName>
HostName
은 (을) 탐색하고 discovery_url
선행 https://
및 후행을 제거하여 찾을 수 있습니다 /discovery
. 찾으려면 다음 CLI 명령을 실행합니다 discovery_url
.
az ml workspace show -n {project_name} --resource-group {resource_group_name} --query discovery_url
예를 들어 연결 문자열 다음과 같이 표시할 수 있습니다.
eastus.api.azureml.ms;12345678-abcd-1234-9fc6-62780b3d3e05;my-resource-group;my-project-name
이 연결 문자열 환경 PROJECT_CONNECTION_STRING
변수로 설정합니다.
import os
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import CodeInterpreterTool
from azure.identity import DefaultAzureCredential
from typing import Any
from pathlib import Path
# Create an Azure AI Client from a connection string, copied from your Azure AI Foundry project.
# At the moment, it should be in the format "<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<ProjectName>"
# HostName can be found by navigating to your discovery_url and removing the leading "https://" and trailing "/discovery"
# To find your discovery_url, run the CLI command: az ml workspace show -n {project_name} --resource-group {resource_group_name} --query discovery_url
# Project Connection example: eastus.api.azureml.ms;12345678-abcd-1234-9fc6-62780b3d3e05;my-resource-group;my-project-name
# Customer needs to login to Azure subscription via Azure CLI and set the environment variables
project_client = AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(), conn_str=os.environ["PROJECT_CONNECTION_STRING"]
)
with project_client:
# Create an instance of the CodeInterpreterTool
code_interpreter = CodeInterpreterTool()
# The CodeInterpreterTool needs to be included in creation of the agent
agent = project_client.agents.create_agent(
model="gpt-4o-mini",
name="my-agent",
instructions="You are helpful agent",
tools=code_interpreter.definitions,
tool_resources=code_interpreter.resources,
)
print(f"Created agent, agent ID: {agent.id}")
# Create a thread
thread = project_client.agents.create_thread()
print(f"Created thread, thread ID: {thread.id}")
# Create a message
message = project_client.agents.create_message(
thread_id=thread.id,
role="user",
content="Could you please create a bar chart for the operating profit using the following data and provide the file to me? Company A: $1.2 million, Company B: $2.5 million, Company C: $3.0 million, Company D: $1.8 million",
)
print(f"Created message, message ID: {message.id}")
# Run the agent
run = project_client.agents.create_and_process_run(thread_id=thread.id, assistant_id=agent.id)
print(f"Run finished with status: {run.status}")
if run.status == "failed":
# Check if you got "Rate limit is exceeded.", then you want to get more quota
print(f"Run failed: {run.last_error}")
# Get messages from the thread
messages = project_client.agents.list_messages(thread_id=thread.id)
print(f"Messages: {messages}")
# Get the last message from the sender
last_msg = messages.get_last_text_message_by_role("assistant")
if last_msg:
print(f"Last Message: {last_msg.text.value}")
# Generate an image file for the bar chart
for image_content in messages.image_contents:
print(f"Image File ID: {image_content.image_file.file_id}")
file_name = f"{image_content.image_file.file_id}_image_file.png"
project_client.agents.save_file(file_id=image_content.image_file.file_id, file_name=file_name)
print(f"Saved image file to: {Path.cwd() / file_name}")
# Print the file path(s) from the messages
for file_path_annotation in messages.file_path_annotations:
print(f"File Paths:")
print(f"Type: {file_path_annotation.type}")
print(f"Text: {file_path_annotation.text}")
print(f"File ID: {file_path_annotation.file_path.file_id}")
print(f"Start Index: {file_path_annotation.start_index}")
print(f"End Index: {file_path_annotation.end_index}")
project_client.agents.save_file(file_id=file_path_annotation.file_path.file_id, file_name=Path(file_path_annotation.text).name)
# Delete the agent once done
project_client.agents.delete_agent(agent.id)
print("Deleted agent")
| 참조 설명서 | 라이브러리 소스 코드 | 패키지(PyPi) |
필수 조건
- Azure 구독 – 체험 구독을 만듭니다.
- Python 3.8 이상
- 적절한 수준에서 Azure AI 개발자 RBAC 역할이 할당되었는지 확인합니다.
- Azure AI Services 리소스를 사용하려면 Cognitive Services OpenAI 사용자 역할이 할당되어야 합니다.
- Azure CLI 및 기계 학습 확장을 설치 합니다. CLI가 이미 설치되어 있는 경우 최신 버전으로 업데이트되었는지 확인합니다.
Azure AI Hub 및 에이전트 프로젝트 설정
다음 섹션에서는 Azure AI 에이전트 서비스를 시작하는 데 필요한 리소스를 설정하는 방법을 보여 줍니다.
허브에서 Azure AI 프로젝트를 만들면 앱이 호출할 엔드포인트가 만들어지고 테넌트에서 리소스에 액세스하도록 앱 서비스를 설정합니다.
Azure OpenAI 리소스 또는 Azure AI Services 리소스 연결
기본 또는 표준 에이전트 설정 선택
기본 설정: 에이전트는 Microsoft에서 완전히 관리되는 다중 테넌트 검색 및 스토리지 리소스를 사용합니다. 이러한 기본 Azure 리소스에 대한 가시성이나 제어 권한이 없습니다.
표준 설정: 에이전트는 고객 소유의 단일 테넌트 검색 및 스토리지 리소스를 사용합니다. 이 설정을 사용하면 이러한 리소스에 대한 모든 권한과 가시성이 있지만 사용량에 따라 비용이 발생합니다.
[선택 사항] 자동 배포 템플릿의 모델 선택
자동 배포 템플릿에서 모델 매개 변수를 편집하여 에이전트에서 사용하는 모델을 사용자 지정할 수 있습니다. 다른 모델을 배포하려면 최소한 및 modelVersion
매개 변수를 modelName
업데이트해야 합니다.
기본적으로 배포 템플릿은 다음 값으로 구성됩니다.
모델 매개 변수 | 기본값 |
---|---|
modelName | gpt-4o-mini |
modelFormat | OpenAI(Azure OpenAI의 경우) |
모델 버전 | 2024-07-18 |
modelSkuName | GlobalStandard |
modelLocation | eastus |
Important
modelFormat 매개 변수를 변경하지 마세요.
템플릿은 Azure OpenAI 모델의 배포만 지원합니다. Azure AI 에이전트 서비스 모델 지원 설명서에서 지원되는 Azure OpenAI 모델을 확인합니다.
[선택 사항] 에이전트를 설정하는 동안 사용자 고유의 리소스 사용
참고 항목
기존 AI 서비스 또는 Azure OpenAI 리소스를 사용하는 경우 모델이 배포되지 않습니다. 에이전트 설정이 완료된 후 리소스에 모델을 배포할 수 있습니다.
매개 변수 파일에 전체 arm 리소스 ID를 제공하여 기존 AI 서비스, Azure OpenAI, AI Search 및/또는 Azure Blob Storage 리소스를 사용합니다.
aiServiceAccountResourceId
aiSearchServiceResourceId
aiStorageAccountResourceId
기존 Azure OpenAI 리소스를 사용하려면 매개 변수 파일의 aiServiceAccountResourceId
매개 변수와 매개 변수를 aiServiceKind
업데이트해야 합니다. 매개 변수는 aiServiceKind
.로 AzureOpenAI
설정해야 합니다.
자세한 내용은 사용자 고유의 리소스를 사용하는 방법을 참조 하세요.
에이전트 구성 및 실행
구성 요소 | 설명 |
---|---|
에이전트 | 도구와 함께 AI 모델을 사용하는 사용자 지정 AI입니다. |
도구 | 도구를 사용하면 대화 중에 안정적이고 정확하게 응답할 수 있는 에이전트의 기능을 확장할 수 있습니다. 예를 들어 모델을 접지하기 위해 사용자 정의 기술 자료 연결하거나 웹 검색을 사용하여 현재 정보를 제공할 수 있습니다. |
스레드 | 에이전트와 사용자 간의 대화 세션입니다. 스레드는 메시지를 저장하고 자동으로 잘림을 처리하여 콘텐츠를 모델의 컨텍스트에 맞춥니다. |
메시지 | 에이전트 또는 사용자가 만든 메시지입니다. 메시지에는 텍스트, 이미지 및 기타 파일이 포함될 수 있습니다. 메시지는 스레드에 목록으로 저장됩니다. |
Run | 스레드의 내용에 따라 실행을 시작할 에이전트의 활성화입니다. 에이전트는 해당 구성 및 스레드의 메시지를 사용하여 모델 및 도구를 호출하여 작업을 수행합니다. 실행의 일부로 에이전트는 스레드에 메시지를 추가합니다. |
실행 단계 | 에이전트가 실행의 일부로 수행한 단계의 자세한 목록입니다. 에이전트는 실행하는 동안 도구를 호출하거나 메시지를 만들 수 있습니다. 실행 단계를 검사하면 에이전트가 결과를 얻는 방법을 이해할 수 있습니다. |
다음 명령을 실행하여 Python 패키지를 설치합니다.
pip install azure-ai-projects
pip install azure-identity
pip install openai
다음으로, API 요청을 인증하고 프로그램을 실행하려면 az login 명령을 사용하여 Azure 구독에 로그인합니다.
az login
다음 코드를 사용하여 에이전트를 만들고 실행합니다. 이 코드를 실행하려면 프로젝트의 정보를 사용하여 연결 문자열 만들어야 합니다. 이 문자열의 형식은 다음과 같습니다.
<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<ProjectName>
HostName
은 (을) 탐색하고 discovery_url
선행 https://
및 후행을 제거하여 찾을 수 있습니다 /discovery
. 찾으려면 다음 CLI 명령을 실행합니다 discovery_url
.
az ml workspace show -n {project_name} --resource-group {resource_group_name} --query discovery_url
예를 들어 연결 문자열 다음과 같이 표시할 수 있습니다.
eastus.api.azureml.ms;12345678-abcd-1234-9fc6-62780b3d3e05;my-resource-group;my-project-name
이 연결 문자열 환경 PROJECT_CONNECTION_STRING
변수로 설정합니다.
import os, time
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from openai import AzureOpenAI
with AIProjectClient.from_connection_string(
credential=DefaultAzureCredential(),
conn_str=os.environ["PROJECT_CONNECTION_STRING"],
) as project_client:
# Explicit type hinting for IntelliSense
client: AzureOpenAI = project_client.inference.get_azure_openai_client(
# The latest API version is 2024-10-01-preview
api_version = os.environ.get("AZURE_OPENAI_API_VERSION"),
)
with client:
agent = client.beta.assistants.create(
model="gpt-4o-mini", name="my-agent", instructions="You are a helpful agent"
)
print(f"Created agent, agent ID: {agent.id}")
thread = client.beta.threads.create()
print(f"Created thread, thread ID: {thread.id}")
message = client.beta.threads.messages.create(thread_id=thread.id, role="user", content="Hello, tell me a joke")
print(f"Created message, message ID: {message.id}")
run = client.beta.threads.runs.create(thread_id=thread.id, assistant_id=agent.id)
# Poll the run while run status is queued or in progress
while run.status in ["queued", "in_progress", "requires_action"]:
time.sleep(1) # Wait for a second
run = client.beta.threads.runs.retrieve(thread_id=thread.id, run_id=run.id)
print(f"Run status: {run.status}")
client.beta.assistants.delete(agent.id)
print("Deleted agent")
messages = client.beta.threads.messages.list(thread_id=thread.id)
print(f"Messages: {messages}")
| 참조 설명서 | 샘플 | 라이브러리 소스 코드 | 패키지(npm) |
필수 조건
- Azure 구독 – 체험 구독을 만듭니다.
- Node.js LTS
- 적절한 수준에서 Azure AI 개발자 RBAC 역할이 할당되었는지 확인합니다.
- Azure CLI 및 기계 학습 확장을 설치 합니다. CLI가 이미 설치되어 있는 경우 최신 버전으로 업데이트되었는지 확인합니다.
Azure AI Hub 및 에이전트 프로젝트 설정
다음 섹션에서는 Azure AI 에이전트 서비스를 시작하는 데 필요한 리소스를 설정하는 방법을 보여 줍니다.
허브에서 Azure AI 프로젝트를 만들면 앱이 호출할 엔드포인트가 만들어지고 테넌트에서 리소스에 액세스하도록 앱 서비스를 설정합니다.
Azure OpenAI 리소스 또는 Azure AI Services 리소스 연결
기본 또는 표준 에이전트 설정 선택
기본 설정: 에이전트는 Microsoft에서 완전히 관리되는 다중 테넌트 검색 및 스토리지 리소스를 사용합니다. 이러한 기본 Azure 리소스에 대한 가시성이나 제어 권한이 없습니다.
표준 설정: 에이전트는 고객 소유의 단일 테넌트 검색 및 스토리지 리소스를 사용합니다. 이 설정을 사용하면 이러한 리소스에 대한 모든 권한과 가시성이 있지만 사용량에 따라 비용이 발생합니다.
[선택 사항] 자동 배포 템플릿의 모델 선택
자동 배포 템플릿에서 모델 매개 변수를 편집하여 에이전트에서 사용하는 모델을 사용자 지정할 수 있습니다. 다른 모델을 배포하려면 최소한 및 modelVersion
매개 변수를 modelName
업데이트해야 합니다.
기본적으로 배포 템플릿은 다음 값으로 구성됩니다.
모델 매개 변수 | 기본값 |
---|---|
modelName | gpt-4o-mini |
modelFormat | OpenAI(Azure OpenAI의 경우) |
모델 버전 | 2024-07-18 |
modelSkuName | GlobalStandard |
modelLocation | eastus |
Important
modelFormat 매개 변수를 변경하지 마세요.
템플릿은 Azure OpenAI 모델의 배포만 지원합니다. Azure AI 에이전트 서비스 모델 지원 설명서에서 지원되는 Azure OpenAI 모델을 확인합니다.
[선택 사항] 에이전트를 설정하는 동안 사용자 고유의 리소스 사용
참고 항목
기존 AI 서비스 또는 Azure OpenAI 리소스를 사용하는 경우 모델이 배포되지 않습니다. 에이전트 설정이 완료된 후 리소스에 모델을 배포할 수 있습니다.
매개 변수 파일에 전체 arm 리소스 ID를 제공하여 기존 AI 서비스, Azure OpenAI, AI Search 및/또는 Azure Blob Storage 리소스를 사용합니다.
aiServiceAccountResourceId
aiSearchServiceResourceId
aiStorageAccountResourceId
기존 Azure OpenAI 리소스를 사용하려면 매개 변수 파일의 aiServiceAccountResourceId
매개 변수와 매개 변수를 aiServiceKind
업데이트해야 합니다. 매개 변수는 aiServiceKind
.로 AzureOpenAI
설정해야 합니다.
자세한 내용은 사용자 고유의 리소스를 사용하는 방법을 참조 하세요.
에이전트 구성 및 실행
구성 요소 | 설명 |
---|---|
에이전트 | 도구와 함께 AI 모델을 사용하는 사용자 지정 AI입니다. |
도구 | 도구를 사용하면 대화 중에 안정적이고 정확하게 응답할 수 있는 에이전트의 기능을 확장할 수 있습니다. 예를 들어 모델을 접지하기 위해 사용자 정의 기술 자료 연결하거나 웹 검색을 사용하여 현재 정보를 제공할 수 있습니다. |
스레드 | 에이전트와 사용자 간의 대화 세션입니다. 스레드는 메시지를 저장하고 자동으로 잘림을 처리하여 콘텐츠를 모델의 컨텍스트에 맞춥니다. |
메시지 | 에이전트 또는 사용자가 만든 메시지입니다. 메시지에는 텍스트, 이미지 및 기타 파일이 포함될 수 있습니다. 메시지는 스레드에 목록으로 저장됩니다. |
Run | 스레드의 내용에 따라 실행을 시작할 에이전트의 활성화입니다. 에이전트는 해당 구성 및 스레드의 메시지를 사용하여 모델 및 도구를 호출하여 작업을 수행합니다. 실행의 일부로 에이전트는 스레드에 메시지를 추가합니다. |
실행 단계 | 에이전트가 실행의 일부로 수행한 단계의 자세한 목록입니다. 에이전트는 실행하는 동안 도구를 호출하거나 메시지를 만들 수 있습니다. 실행 단계를 검사하면 에이전트가 결과를 얻는 방법을 이해할 수 있습니다. |
다음 명령을 실행하여 npm 패키지를 설치합니다.
npm install @azure/ai-projects
npm install @azure/identity
다음으로, API 요청을 인증하고 프로그램을 실행하려면 az login 명령을 사용하여 Azure 구독에 로그인합니다.
az login
다음 코드를 사용하여 에이전트를 만들고 실행합니다. 이 코드를 실행하려면 프로젝트의 정보를 사용하여 연결 문자열 만들어야 합니다. 이 문자열의 형식은 다음과 같습니다.
<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<ProjectName>
HostName
은 (을) 탐색하고 discovery_url
선행 https://
및 후행을 제거하여 찾을 수 있습니다 /discovery
. 찾으려면 다음 CLI 명령을 실행합니다 discovery_url
.
az ml workspace show -n {project_name} --resource-group {resource_group_name} --query discovery_url
예를 들어 연결 문자열 다음과 같이 표시할 수 있습니다.
eastus.api.azureml.ms;12345678-abcd-1234-9fc6-62780b3d3e05;my-resource-group;my-project-name
이 연결 문자열 환경 PROJECT_CONNECTION_STRING
변수로 설정합니다.
// index.js
import {
AIProjectsClient,
DoneEvent,
ErrorEvent,
isOutputOfType,
MessageStreamEvent,
RunStreamEvent,
ToolUtility,
} from "@azure/ai-projects";
import { DefaultAzureCredential } from "@azure/identity";
const connectionString =
process.env["AZURE_AI_PROJECTS_CONNECTION_STRING"] || "<project connection string>";
if (!connectionString) {
throw new Error("AZURE_AI_PROJECTS_CONNECTION_STRING must be set in the environment variables");
}
export async function main() {
const client = AIProjectsClient.fromConnectionString(
connectionString || "",
new DefaultAzureCredential(),
);
// Step 1 code interpreter tool
const codeInterpreterTool = ToolUtility.createCodeInterpreterTool();
// Step 2 an agent
const agent = await client.agents.createAgent("gpt-4o-mini", {
name: "my-agent",
instructions: "You are a helpful agent",
tools: [codeInterpreterTool.definition],
toolResources: codeInterpreterTool.resources,
});
// Step 3 a thread
const thread = await client.agents.createThread();
// Step 4 a message to thread
await client.agents.createMessage(
thread.id, {
role: "user",
content: "I need to solve the equation `3x + 11 = 14`. Can you help me?",
});
// Intermission is now correlated with thread
// Intermission messages will retrieve the message just added
// Step 5 the agent
const streamEventMessages = await client.agents.createRun(thread.id, agent.id).stream();
for await (const eventMessage of streamEventMessages) {
switch (eventMessage.event) {
case RunStreamEvent.ThreadRunCreated:
break;
case MessageStreamEvent.ThreadMessageDelta:
{
const messageDelta = eventMessage.data;
messageDelta.delta.content.forEach((contentPart) => {
if (contentPart.type === "text") {
const textContent = contentPart;
const textValue = textContent.text?.value || "No text";
}
});
}
break;
case RunStreamEvent.ThreadRunCompleted:
break;
case ErrorEvent.Error:
console.log(`An error occurred. Data ${eventMessage.data}`);
break;
case DoneEvent.Done:
break;
}
}
// 6. Print the messages from the agent
const messages = await client.agents.listMessages(thread.id);
// Messages iterate from oldest to newest
// messages[0] is the most recent
for (let i = messages.data.length - 1; i >= 0; i--) {
const m = messages.data[i];
if (isOutputOfType(m.content[0], "text")) {
const textContent = m.content[0];
console.log(`${textContent.text.value}`);
console.log(`---------------------------------`);
}
}
// 7. Delete the agent once done
await client.agents.deleteAgent(agent.id);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
출력에는 프롬프트와 답변이 포함됩니다.
I need to solve the equation `3x + 11 = 14`. Can you help me?
---------------------------------
Sure! I can help you solve the equation \(3x + 11 = 14\).
To solve this equation, we need to isolate the variable \(x\). Let's go ahead and solve it.
---------------------------------
The solution to the equation \(3x + 11 = 14\) is \(x = 1\).
Therefore, the value of \(x\) that satisfies the equation is 1.
Let me know if you need help with anything else!
---------------------------------
| 참조 설명서 | 샘플 | 라이브러리 소스 코드 | 패키지(npm) |
필수 조건
- Azure 구독 – 체험 구독을 만듭니다.
- Node.js LTS
- TypeScript 5.x
- 적절한 수준에서 Azure AI 개발자 RBAC 역할이 할당되었는지 확인합니다.
- Azure CLI 및 기계 학습 확장을 설치 합니다. CLI가 이미 설치되어 있는 경우 최신 버전으로 업데이트되었는지 확인합니다.
Azure AI Hub 및 에이전트 프로젝트 설정
다음 섹션에서는 Azure AI 에이전트 서비스를 시작하는 데 필요한 리소스를 설정하는 방법을 보여 줍니다.
허브에서 Azure AI 프로젝트를 만들면 앱이 호출할 엔드포인트가 만들어지고 테넌트에서 리소스에 액세스하도록 앱 서비스를 설정합니다.
Azure OpenAI 리소스 또는 Azure AI Services 리소스 연결
기본 또는 표준 에이전트 설정 선택
기본 설정: 에이전트는 Microsoft에서 완전히 관리되는 다중 테넌트 검색 및 스토리지 리소스를 사용합니다. 이러한 기본 Azure 리소스에 대한 가시성이나 제어 권한이 없습니다.
표준 설정: 에이전트는 고객 소유의 단일 테넌트 검색 및 스토리지 리소스를 사용합니다. 이 설정을 사용하면 이러한 리소스에 대한 모든 권한과 가시성이 있지만 사용량에 따라 비용이 발생합니다.
[선택 사항] 자동 배포 템플릿의 모델 선택
자동 배포 템플릿에서 모델 매개 변수를 편집하여 에이전트에서 사용하는 모델을 사용자 지정할 수 있습니다. 다른 모델을 배포하려면 최소한 및 modelVersion
매개 변수를 modelName
업데이트해야 합니다.
기본적으로 배포 템플릿은 다음 값으로 구성됩니다.
모델 매개 변수 | 기본값 |
---|---|
modelName | gpt-4o-mini |
modelFormat | OpenAI(Azure OpenAI의 경우) |
모델 버전 | 2024-07-18 |
modelSkuName | GlobalStandard |
modelLocation | eastus |
Important
modelFormat 매개 변수를 변경하지 마세요.
템플릿은 Azure OpenAI 모델의 배포만 지원합니다. Azure AI 에이전트 서비스 모델 지원 설명서에서 지원되는 Azure OpenAI 모델을 확인합니다.
[선택 사항] 에이전트를 설정하는 동안 사용자 고유의 리소스 사용
참고 항목
기존 AI 서비스 또는 Azure OpenAI 리소스를 사용하는 경우 모델이 배포되지 않습니다. 에이전트 설정이 완료된 후 리소스에 모델을 배포할 수 있습니다.
매개 변수 파일에 전체 arm 리소스 ID를 제공하여 기존 AI 서비스, Azure OpenAI, AI Search 및/또는 Azure Blob Storage 리소스를 사용합니다.
aiServiceAccountResourceId
aiSearchServiceResourceId
aiStorageAccountResourceId
기존 Azure OpenAI 리소스를 사용하려면 매개 변수 파일의 aiServiceAccountResourceId
매개 변수와 매개 변수를 aiServiceKind
업데이트해야 합니다. 매개 변수는 aiServiceKind
.로 AzureOpenAI
설정해야 합니다.
자세한 내용은 사용자 고유의 리소스를 사용하는 방법을 참조 하세요.
에이전트 구성 및 실행
구성 요소 | 설명 |
---|---|
에이전트 | 도구와 함께 AI 모델을 사용하는 사용자 지정 AI입니다. |
도구 | 도구를 사용하면 대화 중에 안정적이고 정확하게 응답할 수 있는 에이전트의 기능을 확장할 수 있습니다. 예를 들어 모델을 접지하기 위해 사용자 정의 기술 자료 연결하거나 웹 검색을 사용하여 현재 정보를 제공할 수 있습니다. |
스레드 | 에이전트와 사용자 간의 대화 세션입니다. 스레드는 메시지를 저장하고 자동으로 잘림을 처리하여 콘텐츠를 모델의 컨텍스트에 맞춥니다. |
메시지 | 에이전트 또는 사용자가 만든 메시지입니다. 메시지에는 텍스트, 이미지 및 기타 파일이 포함될 수 있습니다. 메시지는 스레드에 목록으로 저장됩니다. |
Run | 스레드의 내용에 따라 실행을 시작할 에이전트의 활성화입니다. 에이전트는 해당 구성 및 스레드의 메시지를 사용하여 모델 및 도구를 호출하여 작업을 수행합니다. 실행의 일부로 에이전트는 스레드에 메시지를 추가합니다. |
실행 단계 | 에이전트가 실행의 일부로 수행한 단계의 자세한 목록입니다. 에이전트는 실행하는 동안 도구를 호출하거나 메시지를 만들 수 있습니다. 실행 단계를 검사하면 에이전트가 결과를 얻는 방법을 이해할 수 있습니다. |
다음 명령을 실행하여 npm 패키지를 설치합니다.
npm install @azure/ai-projects
npm install @azure/identity
다음으로, API 요청을 인증하고 프로그램을 실행하려면 az login 명령을 사용하여 Azure 구독에 로그인합니다.
az login
다음 코드를 사용하여 에이전트를 만들고 실행합니다. 이 코드를 실행하려면 프로젝트의 정보를 사용하여 연결 문자열 만들어야 합니다. 이 문자열의 형식은 다음과 같습니다.
<HostName>;<AzureSubscriptionId>;<ResourceGroup>;<ProjectName>
HostName
은 (을) 탐색하고 discovery_url
선행 https://
및 후행을 제거하여 찾을 수 있습니다 /discovery
. 찾으려면 다음 CLI 명령을 실행합니다 discovery_url
.
az ml workspace show -n {project_name} --resource-group {resource_group_name} --query discovery_url
예를 들어 연결 문자열 다음과 같이 표시할 수 있습니다.
eastus.api.azureml.ms;12345678-abcd-1234-9fc6-62780b3d3e05;my-resource-group;my-project-name
이 연결 문자열 환경 PROJECT_CONNECTION_STRING
변수로 설정합니다.
// index.ts
import type {
MessageDeltaChunk,
MessageDeltaTextContent,
MessageTextContentOutput,
} from "@azure/ai-projects";
import {
AIProjectsClient,
DoneEvent,
ErrorEvent,
isOutputOfType,
MessageStreamEvent,
RunStreamEvent,
ToolUtility,
} from "@azure/ai-projects";
import { DefaultAzureCredential } from "@azure/identity";
const connectionString =
process.env["AZURE_AI_PROJECTS_CONNECTION_STRING"] || "<project connection string>";
if (!connectionString) {
throw new Error("AZURE_AI_PROJECTS_CONNECTION_STRING must be set in the environment variables");
}
export async function main(): Promise<void> {
const client = AIProjectsClient.fromConnectionString(
connectionString || "",
new DefaultAzureCredential(),
);
// Step 1: Create code interpreter tool
const codeInterpreterTool = ToolUtility.createCodeInterpreterTool();
// Step 2: Create an agent
const agent = await client.agents.createAgent("gpt-4o-mini", {
name: "my-agent",
instructions: "You are a helpful agent",
tools: [codeInterpreterTool.definition],
toolResources: codeInterpreterTool.resources,
});
// Step 3: Create a thread
const thread = await client.agents.createThread();
// Step 4: Add a message to thread
await client.agents.createMessage(
thread.id, {
role: "user",
content: "I need to solve the equation `3x + 11 = 14`. Can you help me?",
});
// Intermission: message is now correlated with thread
// Intermission: listing messages will retrieve the message just added
// Step 5: Run the agent
const streamEventMessages = await client.agents.createRun(thread.id, agent.id).stream();
for await (const eventMessage of streamEventMessages) {
switch (eventMessage.event) {
case RunStreamEvent.ThreadRunCreated:
break;
case MessageStreamEvent.ThreadMessageDelta:
{
const messageDelta = eventMessage.data as MessageDeltaChunk;
messageDelta.delta.content.forEach((contentPart) => {
if (contentPart.type === "text") {
const textContent = contentPart as MessageDeltaTextContent;
const textValue = textContent.text?.value || "No text";
}
});
}
break;
case RunStreamEvent.ThreadRunCompleted:
break;
case ErrorEvent.Error:
console.log(`An error occurred. Data ${eventMessage.data}`);
break;
case DoneEvent.Done:
break;
}
}
// 6. Print the messages from the agent
const messages = await client.agents.listMessages(thread.id);
// Messages iterate from oldest to newest
// messages[0] is the most recent
for (let i = messages.data.length - 1; i >= 0; i--) {
const m = messages.data[i];
if (isOutputOfType<MessageTextContentOutput>(m.content[0], "text")) {
const textContent = m.content[0] as MessageTextContentOutput;
console.log(`${textContent.text.value}`);
console.log(`---------------------------------`);
}
}
// 7. Delete the agent once done
await client.agents.deleteAgent(agent.id);
}
main().catch((err) => {
console.error("The sample encountered an error:", err);
});
출력에는 프롬프트와 답변이 포함됩니다.
I need to solve the equation `3x + 11 = 14`. Can you help me?
---------------------------------
Sure! I can help you solve the equation \(3x + 11 = 14\).
To solve this equation, we need to isolate the variable \(x\). Let's go ahead and solve it.
---------------------------------
The solution to the equation \(3x + 11 = 14\) is \(x = 1\).
Therefore, the value of \(x\) that satisfies the equation is 1.
Let me know if you need help with anything else!
---------------------------------