Подключение индекса Поиск с использованием ИИ Azure к агентам Foundry

Совет

Сведения об управляемой базе знаний см. в разделе "IQ Foundry". Сведения об оптимизации инструментов см. в рекомендациях.

Подкрепите ответы вашего агента Foundry вашим собственным контентом, подключив его к индексу Поиск с использованием ИИ Azure. Средство Поиск с использованием ИИ Azure извлекает индексированные документы, чтобы модель Foundry могла генерировать ответы с встроенными ссылками, обеспечивая точные ответы, основанные на источниках.

Важно

Если вы хотите использовать частную виртуальную сеть с средством Поиск с использованием ИИ Azure, убедитесь, что вы используете управляемое удостоверение проекта Microsoft Entra для проверки подлинности в подключении Поиск с использованием ИИ Azure. Проверка подлинности на основе ключей не поддерживается с частными виртуальными сетями.

Поддержка использования

В следующей таблице показана поддержка пакета SDK и настройки.

поддержка Microsoft Foundry пакет SDK Python Пакет SDK для C# Пакет SDK для JavaScript пакет SDK Java REST API Базовая настройка агента Настройка стандартного агента
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Необходимые условия

Предполагаемое время установки: 15–30 минут, если у вас есть существующий индекс поиска

  • Базовая или стандартная среда агента.
  • Установите пакет SDK для предпочитаемого языка. Дополнительные сведения см. в кратком руководстве .
    • Python: pip install "azure-ai-projects>=2.0.0"
    • C#: установите пакет NuGet Azure.AI.Projects
    • JavaScript/TypeScript: npm install @azure/ai-projects
    • Java. Добавьте зависимость com.azure:azure-ai-agents:2.0.0 в pom.xml
  • Подписка Azure и проект Microsoft Foundry, имеющие:
    • Конечная точка проекта
    • Имя развертывания модели
    • Настройка проверки подлинности (например, DefaultAzureCredential)
  • Индекс Поиск с использованием ИИ Azure, настроенный для векторного поиска с:
    • Одно или несколько Edm.String полей, доступных для поиска и извлекаемых
    • Одно или несколько Collection(Edm.Single) векторных полей, доступных для поиска
    • По крайней мере одно извлекаемое текстовое поле, содержащее содержимое, которое агенту нужно процитировать.
    • Извлекаемое поле, содержащее исходный URL-адрес (и необязательно название), чтобы ссылки могли включать ссылку.
  • Подключение между проектом Foundry и службой Поиск с использованием ИИ Azure (см. раздел Setup).
  • Для аутентификации без использования ключей назначьте управляемому удостоверению проекта следующие роли контроля доступа на основе ролей в Azure (RBAC):
    • Поставщик данных индекса поиска
    • Участник службы поиска

Настройка параметров средства

параметр средства Поиск с использованием ИИ Azure Обязательно Заметки
project_connection_id Да Идентификатор ресурса подключения проекта к Поиск с использованием ИИ Azure.
index_name Да Имя индекса в ресурсе Поиск с использованием ИИ Azure.
top_k Нет Значение по умолчанию равно 5.
query_type Нет По умолчанию используется vector_semantic_hybrid. Поддерживаемые значения: simple, , vectorsemantic, vector_simple_hybridvector_semantic_hybrid.
filter Нет Применяется ко всем запросам, которые агент выполняет к индексу.

Пример кода

Примечание

  • Вам нужен последний пакет SDK. Дополнительные сведения см. в кратком руководстве.
  • Если вы используете пример REST, идентификатор подключения находится в формате /subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroupName}}/providers/Microsoft.CognitiveServices/accounts/{{foundryAccountName}}/projects/{{foundryProjectName}}/connections/{{connectionName}}.
  • Если вы используете пример Python, C#или TypeScript, вы можете указать имя подключения и получить идентификатор подключения с помощью пакета SDK.
from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient
from azure.ai.projects.models import (
    AzureAISearchTool,
    PromptAgentDefinition,
    AzureAISearchToolResource,
    AISearchIndexResource,
    AzureAISearchQueryType,
)

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
SEARCH_CONNECTION_NAME = "my-search-connection"
SEARCH_INDEX_NAME = "my-search-index"

# Create clients to call Foundry API
project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)
openai = project.get_openai_client()

# Resolve the connection ID from the connection name
azs_connection = project.connections.get(SEARCH_CONNECTION_NAME)
connection_id = azs_connection.id

# Create an agent with the Azure AI Search tool
agent = project.agents.create_version(
    agent_name="MyAgent",
    definition=PromptAgentDefinition(
        model="gpt-4.1-mini",
        instructions="""You are a helpful assistant. You must always provide citations for
        answers using the tool and render them as: `[message_idx:search_idx†source]`.""",
        tools=[
            AzureAISearchTool(
                azure_ai_search=AzureAISearchToolResource(
                    indexes=[
                        AISearchIndexResource(
                            project_connection_id=connection_id,
                            index_name=SEARCH_INDEX_NAME,
                            query_type=AzureAISearchQueryType.SIMPLE,
                        ),
                    ]
                )
            )
        ],
    ),
    description="You are a helpful agent.",
)
print(f"Agent created (id: {agent.id}, name: {agent.name}, version: {agent.version})")

# Prompt user for a question to send to the agent
user_input = input(
    """Enter your question for the AI Search agent available in the index
    (e.g., 'Tell me about the mental health services available from Premera'): \n"""
)

# Stream the response from the agent
stream_response = openai.responses.create(
    stream=True,
    tool_choice="required",
    input=user_input,
    extra_body={"agent_reference": {"name": agent.name, "type": "agent_reference"}},
)

# Process the streaming response and print citations
for event in stream_response:
    if event.type == "response.output_text.delta":
        print(event.delta, end="")
    elif event.type == "response.output_item.done":
        if event.item.type == "message":
            item = event.item
            if item.content[-1].type == "output_text":
                text_content = item.content[-1]
                for annotation in text_content.annotations:
                    if annotation.type == "url_citation":
                        print(
                            f"URL Citation: {annotation.url}, "
                            f"Start index: {annotation.start_index}, "
                            f"End index: {annotation.end_index}"
                        )
    elif event.type == "response.completed":
        print(f"\nFull response: {event.response.output_text}")

# Clean up resources
project.agents.delete_version(agent_name=agent.name, agent_version=agent.version)
print("Agent deleted")

Ожидаемый результат

Агент запрашивает индекс поиска и возвращает ответ со встроенными ссылками. Выходные данные консоли показывают идентификатор агента, потоковую передачу обновлений при генерации ответа, URL-ссылки с начальными и конечными индексами, и полный окончательный текст ответа. Затем агент успешно удален.

Полный пример

В следующем примере кода показаны синхронные примеры использования средства Поиск с использованием ИИ Azure в Azure. AI. Extensions.OpenAI для запроса индекса. Примеры асинхронного C# см. в репозитории GitHub.

В этом примере показано, как использовать средство Поиск с использованием ИИ Azure с агентами для запроса индекса.

using System;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var searchConnectionName = "my-search-connection";
var searchIndexName = "my-search-index";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// Resolve the project connection ID from the connection name.
AIProjectConnection aiSearchConnection = projectClient.Connections.GetConnection(connectionName: searchConnectionName);

// Create an AzureAISearchToolIndex object that defines the index and the search parameters.
AzureAISearchToolIndex index = new()
{
    ProjectConnectionId = aiSearchConnection.Id,
    IndexName = searchIndexName,
    TopK = 5,
    Filter = "category eq 'sleeping bag'",
    QueryType = AzureAISearchQueryType.Simple
};

// Create the agent definition with the Azure AI Search tool.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
    Instructions = "You are a helpful assistant. You must always provide citations for answers using the tool and render them as: `\u3010message_idx:search_idx\u2020source\u3011`.",
    Tools = { new AzureAISearchTool(new AzureAISearchToolOptions(indexes: [index])) }
};

// Create the agent version with the agent definition.
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// Create an OpenAIResponse object with the ProjectResponsesClient object.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);
ResponseResult response = responseClient.CreateResponse("What is the temperature rating of the cozynights sleeping bag?");

// In the search, an index containing "embedding", "token", "category", "title", and "url" fields is used.
// The last two fields are needed to get citation title and URL, which the agent retrieves.
// To get the reference, you need to parse the output items.
string result = "";
foreach (ResponseItem item in response.OutputItems)
{
    if (item is MessageResponseItem messageItem)
    {
        foreach (ResponseContentPart content in messageItem.Content)
        {
            foreach (ResponseMessageAnnotation annotation in content.OutputTextAnnotations)
            {
                if (annotation is UriCitationMessageAnnotation uriAnnotation)
                {
                    result = $" [{uriAnnotation.Title}]({uriAnnotation.Uri})";
                }
            }
        }
    }
}

// Use the helper method to output the result.
Assert.That(response.Status, Is.EqualTo(ResponseStatus.Completed));
Console.WriteLine($"{response.GetOutputText()}{result}");

// Finally, delete all the resources you created in this sample.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Ожидаемый результат

Агент обращается к указанному индексу для получения информации о спальном мешке. Ответ включает оценку температуры и форматированную ссылку с заголовком документа и URL-адресом. Состояние ответа — Completedи версия агента успешно удалена.

Использование агентов с средством Поиск с использованием ИИ Azure для сценариев потоковой передачи

В этом примере показано, как использовать средство Поиск с использованием ИИ Azure с агентами для запроса индекса в сценарии потоковой передачи.

using System;
using Azure.AI.Projects;
using Azure.AI.Extensions.OpenAI;
using Azure.Identity;

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var searchConnectionName = "my-search-connection";
var searchIndexName = "my-search-index";

// Create project client to call Foundry API
AIProjectClient projectClient = new(
    endpoint: new Uri(projectEndpoint),
    tokenProvider: new DefaultAzureCredential());

// Resolve the project connection ID from the connection name.
AIProjectConnection aiSearchConnection = projectClient.Connections.GetConnection(connectionName: searchConnectionName);

// Create an AzureAISearchToolIndex object that defines the index and the search parameters.
AzureAISearchToolIndex index = new()
{
    ProjectConnectionId = aiSearchConnection.Id,
    IndexName = searchIndexName,
    TopK = 5,
    Filter = "category eq 'sleeping bag'",
    QueryType = AzureAISearchQueryType.Simple
};

// Create the agent definition with the Azure AI Search tool.
DeclarativeAgentDefinition agentDefinition = new(model: "gpt-4.1-mini")
{
    Instructions = "You are a helpful assistant. You must always provide citations for answers using the tool and render them as: `\u3010message_idx:search_idx\u2020source\u3011`.",
    Tools = { new AzureAISearchTool(new AzureAISearchToolOptions(indexes: [index])) }
};

// Create the agent version with the agent definition.
AgentVersion agentVersion = projectClient.AgentAdministrationClient.CreateAgentVersion(
    agentName: "myAgent",
    options: new(agentDefinition));

// Create an OpenAIResponse object with the ProjectResponsesClient object.
ProjectResponsesClient responseClient = projectClient.ProjectOpenAIClient.GetProjectResponsesClientForAgent(agentVersion.Name);

string annotation = "";
string text = "";

// Stream the response from the agent and parse the output items for citations.
foreach (StreamingResponseUpdate streamResponse in responseClient.CreateResponseStreaming("What is the temperature rating of the cozynights sleeping bag?"))
{
    if (streamResponse is StreamingResponseCreatedUpdate createUpdate)
    {
        Console.WriteLine($"Stream response created with ID: {createUpdate.Response.Id}");
    }
    else if (streamResponse is StreamingResponseOutputTextDeltaUpdate textDelta)
    {
        Console.WriteLine($"Delta: {textDelta.Delta}");
    }
    else if (streamResponse is StreamingResponseOutputTextDoneUpdate textDoneUpdate)
    {
        text = textDoneUpdate.Text;
    }
    else if (streamResponse is StreamingResponseOutputItemDoneUpdate itemDoneUpdate)
    {
        if (annotation.Length == 0)
        {
            if (itemDoneUpdate.Item is MessageResponseItem messageItem)
            {
                // Use an index containing "embedding", "token", "category", "title", and "url" fields.
                // The last two fields are needed to get citation title and URL, retrieved by the agent.
                foreach (ResponseContentPart content in messageItem.Content)
                {
                    foreach (ResponseMessageAnnotation messageAnnotation in content.OutputTextAnnotations)
                    {
                        if (messageAnnotation is UriCitationMessageAnnotation uriAnnotation)
                        {
                            annotation = $" [{uriAnnotation.Title}]({uriAnnotation.Uri})";
                        }
                    }
                }
            }
        }
    }
    else if (streamResponse is StreamingResponseErrorUpdate errorUpdate)
    {
        throw new InvalidOperationException($"The stream has failed: {errorUpdate.Message}");
    }
}
Console.WriteLine($"{text}{annotation}");

// Finally, delete all the resources that were created in this sample.
projectClient.AgentAdministrationClient.DeleteAgentVersion(agentName: agentVersion.Name, agentVersion: agentVersion.Version);

Ожидаемый результат

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

Использование агентов с инструментом Поиск с использованием ИИ Azure

В следующем примере показано, как использовать средство Поиск с использованием ИИ Azure с REST API для запроса индекса. В примере используется cURL, но можно использовать любой HTTP-клиент.

Перед выполнением этого примера получите маркер носителя для проверки подлинности. Используйте Azure CLI, чтобы получить токен.

export AGENT_TOKEN=$(az account get-access-token --scope "https://ai.azure.com/.default" --query accessToken -o tsv)
curl --request POST \
  --url "$FOUNDRY_PROJECT_ENDPOINT/openai/v1/responses" \
  -H "Authorization: Bearer $AGENT_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{
    "model": "$FOUNDRY_MODEL_DEPLOYMENT_NAME",
    "input": "Tell me about the mental health services available from Premera.",
    "tool_choice": "required",
    "tools": [
      {
        "type": "azure_ai_search",
        "azure_ai_search": {
          "indexes": [
            {
              "project_connection_id": "$AZURE_AI_SEARCH_CONNECTION_ID",
              "index_name": "$AI_SEARCH_INDEX_NAME",
              "query_type": "semantic",
              "top_k": 5
            }
          ]
        }
      }
    ]
  }'

Ожидаемый результат

API возвращает ответ JSON, содержащий ответ агента о службах психического здоровья из индекса Premera. Ответ содержит цитаты и ссылки на индексированные документы, на основе которых был составлен ответ.

В этом примере показано, как создать агент ИИ с возможностями Поиск с использованием ИИ Azure, используя AzureAISearchAgentTool и клиента для синхронных проектов Azure AI. Агент может выполнять поиск индексированного содержимого и предоставлять ответы со ссылкой на результаты поиска.

import { DefaultAzureCredential } from "@azure/identity";
import { AIProjectClient } from "@azure/ai-projects";
import * as readline from "readline";

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
const PROJECT_ENDPOINT = "your_project_endpoint";
const SEARCH_CONNECTION_NAME = "my-search-connection";
const SEARCH_INDEX_NAME = "my-search-index";

export async function main(): Promise<void> {
  // Create clients to call Foundry API
  const project = new AIProjectClient(PROJECT_ENDPOINT, new DefaultAzureCredential());
  const openai = project.getOpenAIClient();

  // Get connection ID from connection name
  const aiSearchConnection = await project.connections.get(SEARCH_CONNECTION_NAME);

  // Define Azure AI Search tool that searches indexed content
  const agent = await project.agents.createVersion("MyAISearchAgent", {
    kind: "prompt",
    model: "gpt-4.1-mini",
    instructions:
      "You are a helpful assistant. You must always provide citations for answers using the tool and render them as: `[message_idx:search_idx†source]`.",
    tools: [
      {
        type: "azure_ai_search",
        azure_ai_search: {
          indexes: [
            {
              project_connection_id: aiSearchConnection.id,
              index_name: SEARCH_INDEX_NAME,
              query_type: "simple",
            },
          ],
        },
      },
    ],
  });
  console.log(`Agent created (id: ${agent.id}, name: ${agent.name}, version: ${agent.version})`);

  // Prompt user for input
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout,
  });

  const userInput = await new Promise<string>((resolve) => {
    rl.question(
      "Enter your question for the AI Search agent available in the index (e.g., 'Tell me about the mental health services available from Premera'): \n",
      (answer) => {
        rl.close();
        resolve(answer);
      },
    );
  });

  // Stream the response from the agent
  const streamResponse = await openai.responses.create(
    {
      input: userInput,
      stream: true,
    },
    {
      body: {
        agent: { name: agent.name, type: "agent_reference" },
        tool_choice: "required",
      },
    },
  );

  // Process the streaming response and print citations
  for await (const event of streamResponse) {
    if (event.type === "response.output_text.delta") {
      process.stdout.write(event.delta);
    } else if (event.type === "response.output_item.done") {
      if (event.item.type === "message") {
        const item = event.item;
        if (item.content && item.content.length > 0) {
          const lastContent = item.content[item.content.length - 1];
          if (lastContent.type === "output_text" && lastContent.annotations) {
            for (const annotation of lastContent.annotations) {
              if (annotation.type === "url_citation") {
                console.log(
                  `URL Citation: ${annotation.url}, Start index: ${annotation.start_index}, End index: ${annotation.end_index}`,
                );
              }
            }
          }
        }
      }
    } else if (event.type === "response.completed") {
      console.log("\nResponse completed.");
    }
  }

  // Clean up resources
  await project.agents.deleteVersion(agent.name, agent.version);
  console.log("Agent deleted");
}

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

Ожидаемый результат

Приложение создает агент с возможностями Поиск с использованием ИИ Azure, запрашивает входные данные от пользователя, осуществляет запрос к поисковому индексу и передает ответ с обновлениями в режиме реального времени. Выходные данные консоли включают идентификатор агента, дельты потокового текста, URL-ссылки с индексами и подтверждение успешного удаления агента. Агент предоставляет ответы на индексированные материалы с соответствующими ссылками.

Использование Поиск с использованием ИИ Azure в агенте Java

Добавьте зависимость в вашу pom.xml:

<dependency>
    <groupId>com.azure</groupId>
    <artifactId>azure-ai-agents</artifactId>
    <version>2.0.0</version>
</dependency>
import com.azure.ai.agents.AgentsClient;
import com.azure.ai.agents.AgentsClientBuilder;
import com.azure.ai.agents.ResponsesClient;
import com.azure.ai.agents.models.*;
import com.azure.identity.DefaultAzureCredentialBuilder;
import com.openai.models.responses.Response;
import com.openai.models.responses.ResponseCreateParams;

import java.util.Arrays;
import java.util.Collections;

public class AzureAISearchExample {
    public static void main(String[] args) {
        // Format: "https://resource_name.ai.azure.com/api/projects/project_name"
        String projectEndpoint = "your_project_endpoint";
        String searchConnectionId = "your-search-connection-id";
        String searchIndexName = "my-search-index";

        AgentsClientBuilder builder = new AgentsClientBuilder()
            .credential(new DefaultAzureCredentialBuilder().build())
            .endpoint(projectEndpoint);

        AgentsClient agentsClient = builder.buildAgentsClient();
        ResponsesClient responsesClient = builder.buildResponsesClient();

        // Create Azure AI Search tool with index configuration
        AzureAISearchTool aiSearchTool = new AzureAISearchTool(
            new AzureAISearchToolResource(Arrays.asList(
                new AISearchIndexResource()
                    .setProjectConnectionId(searchConnectionId)
                    .setIndexName(searchIndexName)
                    .setQueryType(AzureAISearchQueryType.SIMPLE)
            ))
        );

        // Create agent with AI Search tool
        PromptAgentDefinition agentDefinition = new PromptAgentDefinition("gpt-4.1-mini")
            .setInstructions("You are a helpful assistant that can search through indexed documents. "
                + "Always provide citations for answers using the tool.")
            .setTools(Collections.singletonList(aiSearchTool));

        AgentVersionDetails agent = agentsClient.createAgentVersion("ai-search-agent", agentDefinition);
        System.out.printf("Agent created: %s (version %s)%n", agent.getName(), agent.getVersion());

        // Create a response
        AgentReference agentReference = new AgentReference(agent.getName())
            .setVersion(agent.getVersion());

        Response response = responsesClient.createAzureResponse(
            new AzureCreateResponseOptions().setAgentReference(agentReference),
            ResponseCreateParams.builder()
                .input("Search for information about Azure AI services"));

        System.out.println("Response: " + response.output());

        // Clean up
        agentsClient.deleteAgentVersion(agent.getName(), agent.getVersion());
    }
}

Ограничения

Помните об этих ограничениях при использовании средства Поиск с использованием ИИ Azure:

  • Доступ к виртуальной сети. Если вы используете частную виртуальную сеть с средством Поиск с использованием ИИ Azure, необходимо использовать Microsoft Entra управляемое удостоверение проекта (проверка подлинности без ключей) в подключении Поиск с использованием ИИ Azure. Проверка подлинности на основе ключей не поддерживается с частными виртуальными сетями. Если вы отключили доступ к общедоступной сети в ресурсе Поиск с использованием ИИ Azure, настройте подключение для использования управляемого удостоверения вместо ключа API.
  • Средство Поиск с использованием ИИ Azure может использовать только один индекс.
  • Ресурс Поиск с использованием ИИ Azure и агент Microsoft Foundry должны находиться в одном клиенте.

Проверка результатов

После запуска примера убедитесь, что агент заземливает ответы из индекса.

  1. Задайте вопрос, ответ на который известен в определённом индексированном документе.
  2. Подтвердите, что ответ содержит ссылки, отформатированные как [message_idx:search_idx†source].
  3. Если вы выполняете потоковую передачу, убедитесь, что в ответе отображаются аннотации url_citation с допустимыми URL-адресами.
  4. Убедитесь, что указанный контент соответствует исходным документам в индексе поиска.

Если ссылки отсутствуют или неверны, см. раздел "Устранение неполадок ".

Установка

В этом разделе описано, как создать подключение между проектом Microsoft Foundry, содержащим агент и службу Поиск с использованием ИИ Azure, содержащую индекс.

Если проект уже подключен к службе поиска, пропустите этот раздел.

Совет

Самый быстрый способ создания подключения — на портале Foundry. Все методы подключения и поддерживаемые типы подключений см. в разделе "Добавление нового подключения к проекту".

Чтобы создать подключение, вам потребуется конечная точка службы поиска и метод проверки подлинности. Ниже приведены инструкции по сбору этих сведений.

Сбор сведений о подключении

Перед созданием подключения к проекту соберите конечную точку службы Поиск с использованием ИИ Azure и учетные данные проверки подлинности.

Для подключения к проекту требуется конечная точка службы поиска и проверка подлинности на основе ключей или бессерверная проверка подлинности с помощью Microsoft Entra ID.

Для проверки подлинности без ключа необходимо включить управление доступом на основе ролей (RBAC) и назначить роли управляемому удостоверению проекта. Хотя этот метод включает дополнительные шаги, он повышает безопасность, устраняя необходимость жестко закодированных ключей API.

Выберите вкладку для требуемого метода проверки подлинности.

  1. Войдите на портал Azure и выберите службу поиска.

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

    1. В левой области выберите "Обзор".

    2. Запишите URL-адрес, который должен выглядеть следующим https://my-service.search.windows.netобразом.

      Снимок экрана вкладки обзора ресурса ИИ Поиск на портале Azure.

  3. Чтобы получить ключ API, выполните следующие действия.

    1. На левой панели выберите Настройки>Ключи.
    2. Выберите оба параметра, чтобы включить проверку подлинности на основе ключей и без ключа, которая рекомендуется для большинства сценариев.

    Снимок экрана вкладки

    1. Запишите один из ключей в разделе "Управление ключами администратора".

Создание подключения к проекту

Создайте подключение проекта с помощью собранных сведений о службе поиска.

Используйте один из следующих параметров.

  1. Перейдите на портал Foundry.
  2. Откройте проект, а затем выберите "Управление администратором>".
  3. Выберите имя проекта в списке "Управление всеми проектами ".
  4. Выберите "Добавить подключение".
  5. Выберите Поиск с использованием ИИ Azure из списка доступных служб.
  6. Найдите и выберите службу Поиск с использованием ИИ Azure, а затем выберите тип аутентификации.
  7. Выберите "Добавить подключение".

Дополнительные сведения см. в разделе "Добавление нового подключения к проекту".

Подтверждение идентификатора подключения

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

Python

from azure.identity import DefaultAzureCredential
from azure.ai.projects import AIProjectClient

# Format: "https://resource_name.ai.azure.com/api/projects/project_name"
PROJECT_ENDPOINT = "your_project_endpoint"
SEARCH_CONNECTION_NAME = "my-search-connection"

project = AIProjectClient(
    endpoint=PROJECT_ENDPOINT,
    credential=DefaultAzureCredential(),
)

connection = project.connections.get(SEARCH_CONNECTION_NAME)
print(connection.id)

C#

// Format: "https://resource_name.ai.azure.com/api/projects/project_name"
var projectEndpoint = "your_project_endpoint";
var searchConnectionName = "my-search-connection";

AIProjectClient projectClient = new(endpoint: new Uri(projectEndpoint), tokenProvider: new DefaultAzureCredential());
AIProjectConnection connection = projectClient.Connections.GetConnection(connectionName: searchConnectionName);
Console.WriteLine(connection.Id);

Устранение неполадок

Проблема Причина Разрешение
"Рабочая область не найдена" при создании подключения Пакет CLI az ml и SDK Python azure-ai-ml использует поставщик ресурсов Microsoft.MachineLearningServices, который не поддерживает новые проекты Foundry (Microsoft.CognitiveServices) Вместо этого используйте az cognitiveservices account project connection create или пакет SDK azure-mgmt-cognitiveservices Python. См . статью "Создание подключения к проекту".
Ответ не содержит ссылок Инструкции агента не запрашивают цитат Обновите инструкции агента, чтобы явно запрашивать ссылки в ответах.
Ответ не содержит ссылок (стриминг) Аннотации не зафиксированы Убедитесь, что при потоковой передаче отображаются url_citation аннотации. Проверьте логику потоковой обработки.
Средство не может получить доступ к индексу (401/403) Отсутствующие роли RBAC (бесключевая аутентификация) Назначьте роли соавтор индекса поиска и соавтор службы поиска на управляемую идентичность проекта Foundry. См. Azure RBAC в Foundry.
Средство не может получить доступ к индексу (401/403) Недопустимый или отключенный ключ API Убедитесь, что ключ API правильный и включен в ресурсе Поиск с использованием ИИ Azure.
Средство возвращает "индекс не найден" Несоответствие имени индекса Убедитесь, что имя индекса соответствует точному имени индекса в ресурсе Поиск с использованием ИИ Azure (учитывает регистр).
Средство возвращает "индекс не найден" Неправильная конечная точка подключения Убедитесь, что подключение проекта указывает на ресурс Поиск с использованием ИИ Azure, содержащий индекс.
Поиск не возвращает результатов Запрос не соответствует индексированному содержимому Убедитесь, что индекс содержит ожидаемые данные. Используйте функцию тестового запроса Поиск с использованием ИИ Azure для проверки.
Низкая производительность поиска Индекс не оптимизирован Просмотрите конфигурацию индекса, рассмотрите возможность добавления семантического ранжирования или оптимизации схемы индекса.
"Не удается подключиться к ресурсу Поиск с использованием ИИ Azure. Убедитесь, что подключение Поиск с использованием ИИ Azure имеет правильную конечную точку, а ресурс поиска имеет соответствующие параметры сети для настройки агентов. Не удается подключиться к узлу ... [DNS-сервер вернул ответ без данных]" Подключение Поиск с использованием ИИ Azure использует проверку подлинности на основе ключей с частной виртуальной сетью Переключите подключение Поиск с использованием ИИ Azure, чтобы использовать управляемое удостоверение проекта Microsoft Entra (аутентификация без ключей). Проверка подлинности на основе ключей не поддерживается с частными виртуальными сетями. См. раздел "Ограничения".