Быстрый старт: Создайте нового классического агента

Замечание

Этот документ относится к порталу Майкрософт Foundry (классическая модель).

Агенты (классические) теперь устарели и будут выведены из эксплуатации 31 марта 2027 года. Используйте новые агенты в общедоступной службе Майкрософт Foundry Agents. Следуйте руководству по миграции, чтобы обновить ваши рабочие нагрузки.

Замечание

Это краткое руководство предназначено для предыдущей версии агентов. См. инструкцию quickstart для Майкрософт Foundry для использования новой версии API.

Служба агента Foundry позволяет создавать агенты ИИ, адаптированные к вашим потребностям, с помощью пользовательских инструкций и дополнены расширенными инструментами, такими как интерпретатор кода и пользовательские функции.

Предпосылки

  • Подписка Azure — Создайте её бесплатно.
  • Убедитесь, что пользователь, создающий учетную запись и проект, имеет роль владелец учетной записи Azure AI в области подписки, что предоставит необходимые разрешения для создания проекта.
    • Кроме того, роль участника или владельца на уровне подписки позволит создать проект.
  • После создания проекта убедитесь, что человек, создающий агента в проекте, имеет роль пользователь Azure Искусственного интеллекта на уровне проекта.

Это важно

Портал Майкрософт Foundry поддерживает только базовую настройку агента в настоящее время. Если вы хотите выполнить стандартную настройку агента, ознакомьтесь со статьей о настройке среды , чтобы узнать больше.

Создание учетной записи и проекта Foundry на портале Foundry

Чтобы создать учетную запись и проект в Foundry, выполните следующие действия.

  1. Перейдите в Литейный цех. Если вы находитесь в проекте, выберите Foundry в левом верхнем углу страницы, чтобы перейти на домашнюю страницу.

  2. Используйте поток создания агента для быстрого начала работы. Нажмите кнопку "Создать агент".

    Снимок экрана портала Foundry.

  3. Введите имя проекта. Если вы хотите настроить значения по умолчанию, выберите дополнительные параметры.

    Снимок экрана: дополнительные параметры для создания проекта.

  4. Нажмите кнопку "Создать".

  5. Подождите, пока будут подготовлены ресурсы.

    1. Будет создана учетная запись и проект (дочерний ресурс учетной записи).
    2. Модель gpt-4o будет автоматически развернута
    3. Агент по умолчанию будет создан
  6. После завершения вы окажетесь непосредственно на площадке для агентов и можете приступить к созданию агентов. Вы можете предоставить агенту инструкции о том, что делать и как это сделать. Например: "Вы полезный агент, который может отвечать на вопросы о географическом регионе". Затем вы можете начать чат с агентом.

    Снимок экрана: игровая площадка агента.

    Замечание

    Если при попытке настроить или создать агента возникает ошибка разрешения, убедитесь, что в проекте есть пользователь Azure AI.

| Справочная документация | Примеры | Исходный код библиотеки | Пакет (NuGet) |

Предпосылки

  • Настройка среды агента
  • Назначьте Azure AI UserRBAC роль каждому участнику команды, которому необходимо создать или изменить агентов с помощью SDK или Agent Playground.
    • Эта роль должна быть назначена в пределах проекта
    • Минимальные необходимые разрешения: агенты/*/чтение, агенты/*/действие, агенты/*/удаление

Настройка и запуск агента

Создайте проект консоли .NET.

dotnet new console

Установите пакет .NET в проект. Например, если вы используете интерфейс командной строки .NET, выполните следующую команду.

dotnet add package Azure.AI.Agents.Persistent
dotnet add package Azure.Identity

Затем, чтобы пройти проверку подлинности запросов API и запустить программу, используйте команду az login для входа в подписку Azure.

az login

Используйте следующий код для создания и запуска агента. Чтобы запустить этот код, необходимо получить конечную точку для проекта. Эта строка находится в формате:

https://<AIFoundryResourceName>.services.ai.azure.com/api/projects/<ProjectName>

Это важно

Начиная с мая 2025 года, служба агента ИИ Azure использует конечную точку для проектов Foundry вместо строки подключения, которая ранее использовалась для проектов, основанных на концентраторах. Если вы используете центральный проект, вы не сможете использовать текущие версии пакета SDK и REST API. Дополнительные сведения см. в статье об использовании пакета SDK с проектами на основе концентраторов.

Конечную точку вы можете найти в разделе Обзор вашего проекта на портале Майкрософт Foundry, в подразделе Библиотеки>Foundry.

Снимок экрана: конечная точка на портале Foundry.

Задайте эту конечную точку в переменной среды с именем ProjectEndpoint.

Вам также потребуется имя развертывания модели. Его можно найти в левой панели навигации "Модели и конечные точки".

Снимок экрана: экран развертывания модели на портале Foundry.

Сохраните имя имени развертывания модели в качестве переменной среды с именем ModelDeploymentName.

using Azure;
using Azure.AI.Agents.Persistent;
using Azure.Identity;
using System.Diagnostics;

var projectEndpoint = System.Environment.GetEnvironmentVariable("ProjectEndpoint");
var modelDeploymentName = System.Environment.GetEnvironmentVariable("ModelDeploymentName");



//Create a PersistentAgentsClient and PersistentAgent.
PersistentAgentsClient client = new(projectEndpoint, new DefaultAzureCredential());

//Give PersistentAgent a tool to execute code using CodeInterpreterToolDefinition.
PersistentAgent agent = client.Administration.CreateAgent(
    model: modelDeploymentName,
    name: "My Test Agent",
    instructions: "You politely help with math questions. Use the code interpreter tool when asked to visualize numbers.",
    tools: [new CodeInterpreterToolDefinition()]
);

//Create a thread to establish a session between Agent and a User.
PersistentAgentThread thread = client.Threads.CreateThread();

//Ask a question of the Agent.
client.Messages.CreateMessage(
    thread.Id,
    MessageRole.User,
    "Hi, Agent! Draw a graph for a line with a slope of 4 and y-intercept of 9.");

//Have Agent begin processing user's question with some additional instructions associated with the ThreadRun.
ThreadRun run = client.Runs.CreateRun(
    thread.Id,
    agent.Id,
    additionalInstructions: "Please address the user as Jane Doe. The user has a premium account.");

//Poll for completion.
do
{
    Thread.Sleep(TimeSpan.FromMilliseconds(500));
    run = client.Runs.GetRun(thread.Id, run.Id);
}
while (run.Status == RunStatus.Queued
    || run.Status == RunStatus.InProgress
    || run.Status == RunStatus.RequiresAction);

//Get the messages in the PersistentAgentThread. Includes Agent (Assistant Role) and User (User Role) messages.
Pageable<PersistentThreadMessage> messages = client.Messages.GetMessages(
    threadId: thread.Id,
    order: ListSortOrder.Ascending);

//Display each message and open the image generated using CodeInterpreterToolDefinition.
foreach (PersistentThreadMessage threadMessage in messages)
{
    foreach (MessageContent content in threadMessage.ContentItems)
    {
        switch (content)
        {
            case MessageTextContent textItem:
                Console.WriteLine($"[{threadMessage.Role}]: {textItem.Text}");
                break;
            case MessageImageFileContent imageFileContent:
                Console.WriteLine($"[{threadMessage.Role}]: Image content file ID = {imageFileContent.FileId}");
                BinaryData imageContent = client.Files.GetFileContent(imageFileContent.FileId);
                string tempFilePath = Path.Combine(AppContext.BaseDirectory, $"{Guid.NewGuid()}.png");
                File.WriteAllBytes(tempFilePath, imageContent.ToArray());
                client.Files.DeleteFile(imageFileContent.FileId);

                ProcessStartInfo psi = new()
                {
                    FileName = tempFilePath,
                    UseShellExecute = true
                };
                Process.Start(psi);
                break;
        }
    }
}

//If you want to delete your agent, uncomment the following lines:
//client.Threads.DeleteThread(threadId: thread.Id);
//client.Administration.DeleteAgent(agentId: agent.Id);

| Справочная документация | Примеры | Исходный код библиотеки | Пакет (PyPi) |

Предпосылки

  • Настройка среды агента
  • Назначьте роль пользователя Azure AIRBAC каждому участнику команды, которому необходимо создать или изменить агентов с помощью SDK или Agent Playground
    • Эта роль должна быть назначена в пределах проекта
    • Минимальные необходимые разрешения: агенты/*/чтение, агенты/*/действие, агенты/*/удаление

Настройка и запуск агента

Выполните следующие команды, чтобы установить пакеты Python.

pip install azure-ai-projects
pip install azure-identity

Затем, чтобы пройти проверку подлинности запросов API и запустить программу, используйте команду az login для входа в подписку Azure.

az login

Используйте следующий код для создания и запуска агента. Чтобы запустить этот код, необходимо получить конечную точку для проекта. Эта строка находится в формате:

https://<AIFoundryResourceName>.services.ai.azure.com/api/projects/<ProjectName>

Это важно

Начиная с мая 2025 года, служба агента ИИ Azure использует конечную точку для проектов Foundry вместо строки подключения, которая ранее использовалась для проектов, базирующихся на концентраторах. Если вы используете центральный проект, вы не сможете использовать текущие версии пакета SDK и REST API. Дополнительные сведения см. в статье об использовании пакета SDK с проектами на основе концентраторов.

Конечную точку можно найти в разделе обзор для вашего проекта на портале Майкрософт Foundry, в разделе Libraries>Foundry.

Снимок экрана: конечная точка на портале Foundry.

Задайте эту конечную точку в качестве переменной среды с именем PROJECT_ENDPOINT.

Вам также потребуется имя развертывания модели. Его можно найти в левой панели навигации "Модели и конечные точки".

Снимок экрана: экран развертывания модели на портале Foundry.

Сохраните имя имени развертывания модели в качестве переменной среды с именем MODEL_DEPLOYMENT_NAME.

import os
from pathlib import Path
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.agents.models import CodeInterpreterTool

# Create an AIProjectClient instance
project_client = AIProjectClient(
    endpoint=os.getenv("PROJECT_ENDPOINT"),
    credential=DefaultAzureCredential(),  
    # Use Azure Default Credential for authentication
)

with project_client:

    code_interpreter = CodeInterpreterTool()

    agent = project_client.agents.create_agent(
        model=os.getenv("MODEL_DEPLOYMENT_NAME"),  # Model deployment name
        name="my-agent",  # Name of the agent
        instructions="""You politely help with math questions. 
        Use the Code Interpreter tool when asked to visualize numbers.""",  
        # Instructions for the agent
        tools=code_interpreter.definitions,  # Attach the tool
        tool_resources=code_interpreter.resources,  # Attach tool resources
    )
    print(f"Created agent, ID: {agent.id}")

    # Create a thread for communication
    thread = project_client.agents.threads.create()
    print(f"Created thread, ID: {thread.id}")

    question = """Draw a graph for a line with a slope of 4 
    and y-intercept of 9 and provide the file to me?"""

    # Add a message to the thread
    message = project_client.agents.messages.create(
        thread_id=thread.id,
        role="user",  # Role of the message sender
        content=question,  # Message content
    )
    print(f"Created message, ID: {message['id']}")

    # Create and process an agent run
    run = project_client.agents.runs.create_and_process(
        thread_id=thread.id,
        agent_id=agent.id,
        additional_instructions="""Please address the user as Jane Doe.
        The user has a premium account.""",
    )

    print(f"Run finished with status: {run.status}")

    # Check if the run failed
    if run.status == "failed":
        print(f"Run failed: {run.last_error}")

    # Fetch and log all messages
    messages = project_client.agents.messages.list(thread_id=thread.id)
    print(f"Messages: {messages}")

    for message in messages:
        print(f"Role: {message.role}, Content: {message.content}")
        for this_content in message.content:
            print(f"Content Type: {this_content.type}, Content Data: {this_content}")
            if this_content.text.annotations:
                for annotation in this_content.text.annotations:
                    print(f"Annotation Type: {annotation.type}, Text: {annotation.text}")
                    print(f"Start Index: {annotation.start_index}")
                    print(f"End Index: {annotation.end_index}")
                    print(f"File ID: {annotation.file_path.file_id}")
                    # Save every image file in the message
                    file_id = annotation.file_path.file_id
                    file_name = f"{file_id}_image_file.png"
                    project_client.agents.files.save(file_id=file_id, file_name=file_name)
                    print(f"Saved image file to: {Path.cwd() / file_name}")
    #Uncomment these lines to delete the agent when done
    #project_client.agents.delete_agent(agent.id)
    #print("Deleted agent")

| Справочная документация | Примеры | Исходный код библиотеки | Пакет (npm) |

Предпосылки

  • Настройка среды агента
  • Назначьте роль Azure AI UserRBAC каждому участнику команды, которому необходимо создать или изменить агента с помощью SDK или Agent Playground
    • Эта роль должна быть назначена в пределах проекта
    • Минимальные необходимые разрешения: агенты/*/чтение, агенты/*/действие, агенты/*/удаление

Настройка и запуск агента

Ключевые объекты в этом коде включают:

Сначала инициализировать новый проект TypeScript, выполнив следующие действия:

npm init -y
npm pkg set type="module"

Выполните следующие команды, чтобы установить необходимые пакеты npm.

npm install @azure/ai-agents @azure/identity
npm install @types/node typescript --save-dev

Затем, чтобы пройти проверку подлинности запросов API и запустить программу, используйте команду az login для входа в подписку Azure.

az login

Используйте следующий код, чтобы ответить на математический вопрос I need to solve the equation '3x + 11 = 14'. Can you help me?. Чтобы запустить этот код, необходимо получить конечную точку для проекта. Эта строка находится в формате:

https://<AIFoundryResourceName>.services.ai.azure.com/api/projects/<ProjectName>

Конечную точку можно найти в разделе обзор вашего проекта на портале Майкрософт Foundry, в подразделе Libraries>Foundry.

Снимок экрана: конечная точка на портале Foundry.

Задайте эту конечную точку в качестве переменной среды с именем PROJECT_ENDPOINT в .env файле.

Вам также потребуется имя развертывания модели. Его можно найти в левой панели навигации "Модели и конечные точки".

Снимок экрана: экран развертывания модели на портале Foundry.

Сохраните имя имени развертывания модели в качестве переменной среды с именем MODEL_DEPLOYMENT_NAME.

Это важно

  • В этом коде быстрого старта используются переменные среды для чувствительной конфигурации. Никогда не добавляйте .env файл в систему управления версиями, убедившись в том, что .env указан в файле .gitignore.
  • Помните: если вы случайно зафиксируете конфиденциальную информацию, считайте эти учетные данные скомпрометированными и немедленно замените их.

Создайте файл tsconfig.json со следующим содержимым:

{
  "compilerOptions": {
    "module": "nodenext",
    "target": "esnext",
    "types": ["node"],
    "lib": ["esnext"],
    "sourceMap": true,
    "declaration": true,
    "declarationMap": true,
    "noUncheckedIndexedAccess": true,
    "exactOptionalPropertyTypes": true,
    "strict": true,
    "verbatimModuleSyntax": true,
    "isolatedModules": true,
    "noUncheckedSideEffectImports": true,
    "moduleDetection": "force",
    "skipLibCheck": true,
  }
}

Затем создайте index.ts файл и вставьте следующий код:

import { AgentsClient } from "@azure/ai-agents";
import { DefaultAzureCredential } from "@azure/identity";

const projectEndpoint = process.env["PROJECT_ENDPOINT"] || "<project endpoint>";
const modelDeploymentName = process.env["MODEL_DEPLOYMENT_NAME"] || "gpt-4o";

export async function main(): Promise<void> {
  // Create an Azure AI Client
  const client = new AgentsClient(projectEndpoint, new DefaultAzureCredential());

  // Create an agent
  const agent = await client.createAgent(modelDeploymentName, {
    name: "my-agent",
    instructions: "You are a helpful agent specialized in math. When providing mathematical explanations, use plain text formatting with simple characters like +, -, *, / for operations. Do not use LaTeX formatting with backslashes or special notation. Make your explanations clear and easy to read in a terminal.",
  });
  console.log(`Created agent, agent ID : ${agent.id}`);

  // Create a thread
  const thread = await client.threads.create();
  console.log(`Created thread, thread ID : ${thread.id}`);

  // List all threads for the agent
  const threads = client.threads.list();
  console.log(`Threads for agent ${agent.id}:`);
  for await (const t of threads) {
    console.log(`Thread ID: ${t.id} created at: ${t.createdAt}`);
  }

  // Create a message
  const message = await client.messages.create(thread.id, "user", "I need to solve the equation `3x + 11 = 14`. Can you help me?");
  console.log(`Created message, message ID : ${message.id}`);

  // Create and poll a run
  console.log("Creating run...");
  const run = await client.runs.createAndPoll(thread.id, agent.id, {
    pollingOptions: {
      intervalInMs: 2000,
    },
    onResponse: (response): void => {
      const parsedBody =
        typeof response.parsedBody === "object" && response.parsedBody !== null
          ? response.parsedBody
          : null;
      const status = parsedBody && "status" in parsedBody ? parsedBody.status : "unknown";
      console.log(`Received response with status: ${status}`);
    },
  });
  console.log(`Run finished with status: ${run.status}`);

  const messagesIterator = client.messages.list(thread.id);
  console.log("\n\n========================================================");
  console.log("=================== CONVERSATION RESULTS ===================");
  console.log("========================================================\n");
  
  // Collect all messages first
  const messages = [];
  for await (const m of messagesIterator) {
    messages.push(m);
  }
  
  // Reverse the order of messages (or sort by timestamp if available)
  messages.reverse();
  
  // Display messages in the new order
  for (const m of messages) {
    if (m.role === "user") {
      console.log(`\n❓ USER QUESTION: ${
        Array.isArray(m.content) && m.content[0]?.type === "text" && 'text' in m.content[0]
          ? m.content[0].text.value
          : JSON.stringify(m.content)
      }`);
    } else if (m.role === "assistant") {
      console.log("\n🤖 ASSISTANT'S ANSWER:");
      console.log("--------------------------------------------------");
      
      // Extract and print the text content in a more readable format
      if (m.content && Array.isArray(m.content)) {
        for (const content of m.content) {
          if (content.type === "text" && 'text' in content) {
            console.log(content.text?.value);
          } else {
            console.log(content);
          }
        }
      } else {
        console.log(JSON.stringify(m.content, null, 2));
      }
      console.log("--------------------------------------------------\n");
    }
  }
  
  console.log("\n========================================================");
  console.log("====================== END OF RESULTS ======================");
  console.log("========================================================\n");

  // Clean up
  await client.threads.delete(thread.id);
  await client.deleteAgent(agent.id);
}

main().catch((err) => {
  console.error("The sample encountered an error:", err);
});

Запустите код с помощью npx tsx -r dotenv/config index.ts. Этот код отвечает на вопрос I need to solve the equation '3x + 11 = 14'. Can you help me?. Ответы не детерминированные, выходные данные будут выглядеть примерно так, как показано ниже.

Created agent, agent ID : asst_X4yDNWrdWKb8LN0SQ6xlzhWk
Created thread, thread ID : thread_TxqZcHL2BqkNWl9dFzBYMIU6
Threads for agent asst_X4yDNWrdWKb8LN0SQ6xlzhWk:
...
Created message, message ID : msg_R0zDsXdc2UbfsNXvS1zeS6hk
Creating run...
Received response with status: queued
Received response with status: in_progress
Received response with status: completed
Run finished with status: completed

========================================================
=================== CONVERSATION RESULTS ===================
========================================================

❓ USER QUESTION: I need to solve the equation `3x + 11 = 14`. Can you help me?

🤖 ASSISTANT'S ANSWER:
--------------------------------------------------
Certainly! Let's solve the equation step by step:

We have:
3x + 11 = 14

### Step 1: Eliminate the constant (+11) on the left-hand side.
Subtract 11 from both sides:
3x + 11 - 11 = 14 - 11
This simplifies to:
3x = 3

We have:
3x + 11 = 14

### Step 1: Eliminate the constant (+11) on the left-hand side.
Subtract 11 from both sides:
3x + 11 - 11 = 14 - 11
This simplifies to:
3x = 3

### Step 2: Solve for x.
Divide both sides by 3:
3x / 3 = 3 / 3
This simplifies to:
x = 1

### Final Answer:
x = 1
--------------------------------------------------

========================================================
====================== END OF RESULTS ======================
========================================================

Доступен полный исходный код примера.

документация Референсная документацияПримерыИсходный код библиотекиПакет (Maven)

Предпосылки

  • Настройка среды агента
  • Назначьте роль Пользователь Azure AIRBAC каждому участнику команды, которому необходимо создавать или редактировать агентов с помощью пакета SDK или игровой площадки агента.
    • Эта роль должна быть назначена в пределах проекта
    • Минимальные необходимые разрешения: агенты/*/чтение, агенты/*/действие, агенты/*/удаление

Настройка и запуск агента

Сначала создайте проект консоли Java. Для запуска кода потребуется следующие зависимости:

<dependencies>
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-ai-agents-persistent</artifactId>
        <version>1.0.0-beta.2</version>
    </dependency>
    <dependency>
        <groupId>com.azure</groupId>
        <artifactId>azure-identity</artifactId>
        <version>1.17.0-beta.1</version>
    </dependency>
</dependencies>

Затем, чтобы пройти проверку подлинности запросов API и запустить программу, используйте команду az login для входа в подписку Azure.

az login

Используйте следующий код для создания и запуска агента. Чтобы запустить этот код, необходимо получить конечную точку для проекта. Эта строка находится в формате:

https://<AIFoundryResourceName>.services.ai.azure.com/api/projects/<ProjectName>

Это важно

Начиная с мая 2025 года служба агента Azure AI использует эндпоинт для проектов Foundry вместо строки подключения, которая использовалась ранее для проектов на основе хабов. Если вы используете центральный проект, вы не сможете использовать текущие версии пакета SDK и REST API. Дополнительные сведения см. в статье об использовании пакета SDK с проектами на основе концентраторов.

Конечную точку можно найти в разделе Обзор для вашего проекта на портале Майкрософт Foundry в разделе Libraries>Foundry.

Снимок экрана: конечная точка на портале Foundry.

Задайте эту конечную точку в переменной среды с именем PROJECT_ENDPOINT.

Вам также потребуется имя развертывания модели. Его можно найти в левой панели навигации "Модели и конечные точки".

Снимок экрана: экран развертывания модели на портале Foundry.

Сохраните имя имени развертывания модели в качестве переменной среды с именем MODEL_DEPLOYMENT_NAME.

Пример кода

package com.example.agents;

import com.azure.ai.agents.persistent.MessagesClient;
import com.azure.ai.agents.persistent.PersistentAgentsAdministrationClient;
import com.azure.ai.agents.persistent.PersistentAgentsClient;
import com.azure.ai.agents.persistent.PersistentAgentsClientBuilder;
import com.azure.ai.agents.persistent.RunsClient;
import com.azure.ai.agents.persistent.ThreadsClient;
import com.azure.ai.agents.persistent.models.CodeInterpreterToolDefinition;
import com.azure.ai.agents.persistent.models.CreateAgentOptions;
import com.azure.ai.agents.persistent.models.CreateRunOptions;
import com.azure.ai.agents.persistent.models.MessageImageFileContent;
import com.azure.ai.agents.persistent.models.MessageRole;
import com.azure.ai.agents.persistent.models.MessageTextContent;
import com.azure.ai.agents.persistent.models.PersistentAgent;
import com.azure.ai.agents.persistent.models.PersistentAgentThread;
import com.azure.ai.agents.persistent.models.RunStatus;
import com.azure.ai.agents.persistent.models.ThreadMessage;
import com.azure.ai.agents.persistent.models.ThreadRun;
import com.azure.ai.agents.persistent.models.MessageContent;
import com.azure.core.http.rest.PagedIterable;
import com.azure.identity.DefaultAzureCredentialBuilder;
import java.util.Arrays;

public class AgentSample {

    public static void main(String[] args) {
        // variables for authenticating requests to the agent service 
        String projectEndpoint = System.getenv("PROJECT_ENDPOINT");
        String modelName = System.getenv("MODEL_DEPLOYMENT_NAME");

        // initialize clients to manage various aspects of agent runtime
        PersistentAgentsClientBuilder clientBuilder = new PersistentAgentsClientBuilder()
            .endpoint(projectEndpoint)
            .credential(new DefaultAzureCredentialBuilder().build());
        PersistentAgentsClient agentsClient = clientBuilder.buildClient();
        PersistentAgentsAdministrationClient administrationClient = agentsClient.getPersistentAgentsAdministrationClient();
        ThreadsClient threadsClient = agentsClient.getThreadsClient();
        MessagesClient messagesClient = agentsClient.getMessagesClient();
        RunsClient runsClient = agentsClient.getRunsClient();
        
        
        String agentName = "my-agent"; // the name of the agent
        CreateAgentOptions createAgentOptions = new CreateAgentOptions(modelName)
            .setName(agentName)
            .setInstructions("You are a helpful agent") // system instructions
            .setTools(Arrays.asList(new CodeInterpreterToolDefinition()));
        PersistentAgent agent = administrationClient.createAgent(createAgentOptions);

        PersistentAgentThread thread = threadsClient.createThread();
        ThreadMessage createdMessage = messagesClient.createMessage(
            thread.getId(),
            MessageRole.USER,
            "I need to solve the equation `3x + 11 = 14`. Can you help me?"); // The message to the agent

        try {
            //run the agent
            CreateRunOptions createRunOptions = new CreateRunOptions(thread.getId(), agent.getId())
                .setAdditionalInstructions("");
            ThreadRun threadRun = runsClient.createRun(createRunOptions);
            // wait for the run to complete before printing the message
            waitForRunCompletion(thread.getId(), threadRun, runsClient);
            printRunMessages(messagesClient, thread.getId());
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        } finally {
            //cleanup - uncomment these lines if you want to delete the agent
            //threadsClient.deleteThread(thread.getId());
            //administrationClient.deleteAgent(agent.getId());
        }
    }

    // A helper function to print messages from the agent
    public static void printRunMessages(MessagesClient messagesClient, String threadId) {

        PagedIterable<ThreadMessage> runMessages = messagesClient.listMessages(threadId);
        for (ThreadMessage message : runMessages) {
            System.out.print(String.format("%1$s - %2$s : ", message.getCreatedAt(), message.getRole()));
            for (MessageContent contentItem : message.getContent()) {
                if (contentItem instanceof MessageTextContent) {
                    System.out.print((((MessageTextContent) contentItem).getText().getValue()));
                } else if (contentItem instanceof MessageImageFileContent) {
                    String imageFileId = (((MessageImageFileContent) contentItem).getImageFile().getFileId());
                    System.out.print("Image from ID: " + imageFileId);
                }
                System.out.println();
            }
        }
    }

    // a helper function to wait until a run has completed running
    public static void waitForRunCompletion(String threadId, ThreadRun threadRun, RunsClient runsClient)
        throws InterruptedException {

        do {
            Thread.sleep(500);
            threadRun = runsClient.getRun(threadId, threadRun.getId());
        }
        while (
            threadRun.getStatus() == RunStatus.QUEUED
                || threadRun.getStatus() == RunStatus.IN_PROGRESS
                || threadRun.getStatus() == RunStatus.REQUIRES_ACTION);

        if (threadRun.getStatus() == RunStatus.FAILED) {
            System.out.println(threadRun.getLastError().getMessage());
        }
    }
}

| Справочная документация |

Предпосылки

  • Настройка среды агента
  • Назначьте роль Azure AI UserRBAC каждому участнику команды, которому необходимо создать или изменить агента с помощью SDK или Agent Playground.
    • Эта роль должна быть назначена в пределах проекта
    • Минимальные необходимые разрешения: агенты/*/чтение, агенты/*/действие, агенты/*/удаление

Настройка и запуск агента

Чтобы выполнить проверку подлинности запросов API, используйте команду az login для входа в подписку Azure.

az login

Затем необходимо получить маркер Entra ID, чтобы предоставить его в качестве авторизационного маркера для вызовов API. Извлеките токен с помощью команды CLI:

az account get-access-token --resource 'https://ai.azure.com' | jq -r .accessToken | tr -d '"'

Задайте маркер доступа в качестве переменной среды с именем AGENT_TOKEN.

Чтобы успешно выполнять вызовы REST API к службе агента Foundry, необходимо использовать конечную точку проекта:

https://<your_ai_service_name>.services.ai.azure.com/api/projects/<your_project_name>

Например, конечная точка будет выглядеть примерно так:

https://exampleaiservice.services.ai.azure.com/api/projects/project

Задайте эту конечную точку в качестве переменной среды с именем AZURE_AI_FOUNDRY_PROJECT_ENDPOINT.

Замечание

  • Для параметра api-version используется GA версия API 2025-05-01, а последняя версия предварительного API 2025-05-15-preview. Необходимо использовать API предварительной версии для средств, которые находятся в предварительной версии.
  • Можно сделать версию API переменной среды, например $API_VERSION.

Создание агента

Замечание

Для службы агентов ИИ Azure для параметра model требуется имя развертывания модели. Если имя развертывания модели отличается от имени базовой модели, измените код на "model": "{your-custom-model-deployment-name}".

curl --request POST \
  --url $AZURE_AI_FOUNDRY_PROJECT_ENDPOINT/assistants?api-version=2025-05-01 \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "instructions": "You are a helpful agent.",
    "name": "my-agent",
    "tools": [{"type": "code_interpreter"}],
    "model": "gpt-4o-mini"
  }'

Создать тему

curl --request POST \
  --url $AZURE_AI_FOUNDRY_PROJECT_ENDPOINT/threads?api-version=2025-05-01 \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d ''

Добавьте вопрос пользователя в тему

curl --request POST \
  --url $AZURE_AI_FOUNDRY_PROJECT_ENDPOINT/threads/thread_abc123/messages?api-version=2025-05-01 \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
      "role": "user",
      "content": "I need to solve the equation `3x + 11 = 14`. Can you help me?"
    }'

Запустить поток

curl --request POST \
  --url $AZURE_AI_FOUNDRY_PROJECT_ENDPOINT/threads/thread_abc123/runs?api-version=2025-05-01 \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "assistant_id": "asst_abc123",
  }'

Получить статус выполнения

curl --request GET \
  --url $AZURE_AI_FOUNDRY_PROJECT_ENDPOINT/threads/thread_abc123/runs/run_abc123?api-version=2025-05-01 \
  -H "Authorization: Bearer $AGENT_TOKEN"

Получение ответа агента

curl --request GET \
  --url $AZURE_AI_FOUNDRY_PROJECT_ENDPOINT/threads/thread_abc123/messages?api-version=2025-05-01 \
  -H "Authorization: Bearer $AGENT_TOKEN"

Дальнейшие шаги

Узнайте об инструментах, которые можно использовать для расширения возможностей агентов, таких как доступ к Интернету, предоставление основной информации и т. д.