Partager via


Utiliser un index AI Search existant avec l'outil Azure AI Search

Utiliser un index Azure AI Search existant avec l'outil Azure AI Search de l’agent.

Remarque

Les index Azure AI Search doivent respecter les critères suivants :

  • L'index doit contenir au moins un champ de texte consultable et récupérable (type Edm.String)
  • L'index doit contenir au moins un champ vectoriel consultable (type Collection(Edm.Single))
  • L'index doit utiliser un profil vectoriel ou une vectorisation intégrée

Rechercher dans les types

Index sans configuration sémantique

  • Par défaut, l'outil Azure AI Search exécute une recherche hybride (mot-clé + vecteur) sur tous les champs de texte.

Index avec configuration sémantique

  • Par défaut, l'outil Azure AI Search exécute une recherche hybride et sémantique sur tous les champs de texte.

Prise en charge de l’utilisation

Prise en charge d’Azure AI Foundry Kit de développement logiciel (SDK) Python Kit de développement logiciel (SDK) C# Kit de développement logiciel (SDK) JavaScript API REST Configuration d’agent de base Configuration d’agent standard
✔️ ✔️ ✔️ ✔️ ✔️ ✔️ ✔️

Configuration : créez un agent qui peut utiliser un index Azure AI Search existant

Prérequis : disposer d'un index Azure AI Search existant

Pour utiliser l'outil Azure AI Search, il faut disposer d'un index Azure AI Search existant. Si vous n'avez pas d'index existant, vous pouvez en créer un dans le Portail Microsoft Azure à l'aide de l'assistant d'importation et de vectorisation des données.

Créez une connexion de projet à la ressource Azure AI Search avec l'index que vous souhaitez utiliser

Une fois la configuration de l'agent terminée, vous devez créer une connexion de projet à la ressource Azure AI Search qui contient l'index que vous souhaitez utiliser.

Si vous avez déjà connecté à votre projet la ressource AI Search qui contient l'index que vous souhaitez utiliser, ignorez cette étape.

Obtenez votre clé de connexion à la ressource Azure AI Search et votre point de terminaison
  1. Accédez à votre ressource Recherche Azure AI.

    • Dans le Portail Microsoft Azure, accédez à la ressource AI Search qui contient l’index à utiliser.
  2. Copiez le point de terminaison de connexion.

    • Dans l'onglet Aperçu, copiez l'URL de votre ressource. L’URL doit être au format https://<your-resource-name>.search.windows.net/. Capture d'écran de l'onglet Aperçu d'une ressource AI Search dans le Portail Microsoft Azure.
  3. Vérifiez que le contrôle d'accès à l'API est défini sur Les deux et copiez l'une des clés sous Gérer les clés d'administration.

    • Dans la barre de navigation de gauche, descendez jusqu'à la section Paramètres et sélectionnez Clés.
    • Dans la section Contrôle d'accès à l'API, assurez-vous que l'option Les deux pour Contrôle d'accès basé sur la clé API et sur le rôle est sélectionnée.
    • Si vous souhaitez que la connexion utilise des clés API pour l'authentification, copiez l'une des clés sous Gérer les clés d’administration. Capture d'écran de l'onglet Clés d'une ressource AI Search dans le Portail Microsoft Azure.
Créer une connexion de projet Recherche Azure AI

Si vous utilisez Microsoft Entra ID pour le type d'authentification de la connexion, vous devez attribuer manuellement à l'identité gérée par le projet les rôles Search Index Data Contributor et Search Service Contributor à la ressource Azure AI Search.

Créez le fichier connections.yml suivant

Vous pouvez utiliser une clé API ou un fichier de configuration YAML sans informations d’identification. Remplacez les caractères de remplacement pour name, endpoint et api_key par les valeurs de votre ressource Azure AI Search. Pour plus d’informations sur le fichier de configuration YAML, consultez le Schéma YAML des connexions Azure AI Search.

  • Exemple de clé API :

    name: my_project_acs_connection_keys
    type: azure_ai_search
    endpoint: https://contoso.search.windows.net/
    api_key: XXXXXXXXXXXXXXX
    
  • Sans information d’identification

    name: my_project_acs_connection_credentialless
    type: azure_ai_search
    endpoint: https://contoso.search.windows.net/
    

Exécutez ensuite la commande suivante :

Remplacez my_resource et my_project_name par votre groupe de ressources et votre nom de projet créés dans la configuration de l'agent.

az ml connection create --file {connection.yml} --resource-group {my_resource_group} --workspace-name {my_project_name}

Maintenant que vous avez créé une connexion de projet à votre ressource Azure AI Search, vous pouvez configurer et commencer à utiliser l'outil Azure AI Search avec le SDK. Voir l'onglet des exemples de code pour commencer.

Ajouter l’outil Recherche Azure AI à un agent

Vous pouvez ajouter l’outil Recherche Azure AI à un agent de façon programmatique à l’aide des exemples de code répertoriés en haut de cet article ou proposés dans le portail Azure AI Foundry. Si vous souhaitez utiliser le portail :

  1. Dans l’écran Créer et déboguer de votre agent, faites défiler vers le bas le volet Configuration à droite jusqu’à connaissance. Sélectionnez ensuite Ajouter.

    Capture d’écran montrant les catégories d’outils disponibles dans le portail Azure AI Foundry.

  2. Sélectionnez Recherche Azure AI et suivez les invites pour ajouter l’outil.

    Capture d’écran montrant les outils de connaissance disponibles dans le portail Azure AI Foundry.

Démarrage rapide : utiliser un index Azure AI Search existant avec l'outil Azure AI Search

Ce démarrage rapide montre comment utiliser un index Azure AI Search existant avec l'outil Azure AI Search.

Prérequis

Complétez la configuration de l'outil Azure AI Search.

Étape 1 : création d’un client Azure AI

Tout d'abord, créez un client Azure AI en utilisant la chaîne de connexion de votre projet.

import os
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
from azure.ai.projects.models import AzureAISearchTool

# 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;my-subscription-id;my-resource-group;my-hub-name

connection_string = os.environ["PROJECT_CONNECTION_STRING"] 

project_client = AIProjectClient.from_connection_string(
    credential=DefaultAzureCredential(),
    conn_str=connection_string,
)

Étape 2 : obtenir l'identifiant de connexion pour la ressource Azure AI Search

Obtenir l'identifiant de la connexion Azure AI Search dans le projet. Vous pouvez utiliser l'extrait de code pour imprimer l'ID de connexion de toutes les connexions Azure AI Search dans le projet.

# AI Search resource connection ID
# This code looks for the AI Search Connection ID and saves it as variable conn_id

# If you have more than one AI search connection, try to establish the value in your .env file.
# Extract the connection list.
conn_list = project_client.connections._list_connections()["value"]
conn_id = ""

# Search in the metadata field of each connection in the list for the azure_ai_search type and get the id value to establish the variable
for conn in conn_list:
    metadata = conn["properties"].get("metadata", {})
    if metadata.get("type", "").upper() == "AZURE_AI_SEARCH":
        conn_id = conn["id"]
        break

La deuxième façon d'obtenir l'identifiant de connexion est de naviguer vers le projet dans Azure AI Foundry et de cliquer sur l'onglet Ressources connectées, puis de sélectionner votre ressource Azure AI Search. Capture d'écran d'une page de connexion à une ressource AI Search dans Azure AI Foundry. Dans l'URL, vous voyez le wsid=/subscription/your-subscription-id..., c'est l'identifiant de connexion que vous devez utiliser. Copiez tout ce qui vient après wsid=. Capture d'écran d'une connexion de ressource AI Search et copie de l'identifiant de connexion.

Étape 3 : configurer l’outil Recherche Azure AI

À l'aide de l'identifiant de connexion obtenu à l'étape précédente, vous pouvez maintenant configurer l'outil Azure AI Search pour qu'il utilise votre index Azure AI Search.

# TO DO: replace this value with the connection ID of the search index
conn_id =  "/subscriptions/<your-subscription-id>/resourceGroups/<your-resource-group>/providers/Microsoft.MachineLearningServices/workspaces/<your-project-name>/connections/<your-azure-ai-search-connection-name>"

# Initialize agent AI search tool and add the search index connection ID and index name
# TO DO: replace <your-index-name> with the name of the index you want to use
ai_search = AzureAISearchTool(index_connection_id=conn_id, index_name="<your-index-name>")

Étape 4 : créer un agent avec l'outil Azure AI Search activé

Changez le modèle pour celui déployé dans votre projet. Vous trouverez le nom du modèle dans Azure AI Foundry sous l'onglet Modèles. Vous pouvez également modifier le nom et les instructions de l'agent en fonction de vos besoins.

agent = project_client.agents.create_agent(
    model="gpt-4o-mini",
    name="my-assistant",
    instructions="You are a helpful assistant",
    tools=ai_search.definitions,
    tool_resources = ai_search.resources,
)
print(f"Created agent, ID: {agent.id}")

Étape 5 : poser à l'agent des questions sur les données contenues dans l'index

Maintenant que l'agent est créé, posez-lui des questions sur les données de votre index Azure AI Search. L'exemple suppose que votre index Azure AI Search contient des informations sur les régimes de soins de santé.

# 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="what are my health insurance plan coverage types?",
)
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}")
    
assistant_message = ""
for message in messages.data:
    if message["role"] == "assistant":
        assistant_message = message["content"][0]["text"]["value"]

# Get the last message from the sender
print(f"Assistant response: {assistant_message}")