Note
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier les répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de changer de répertoire.
La bibliothèque cliente AI Projects permet d’accéder facilement aux ressources de votre projet Azure AI Foundry. Utilisez-le pour :
-
Créez et exécutez des agents à l’aide de la
.agentspropriété sur le client. -
Obtenez un client AzureOpenAI à l’aide de cette
.inference.azureOpenAIméthode. -
Énumérez les modèles d’IA déployés dans votre projet de fonderie à l’aide des
.deploymentsopérations. -
Énumérez les ressources Azure connectées dans votre projet Foundry à l’aide des
.connectionsopérations. -
Téléchargez des documents et créez des jeux de données pour les référencer à l’aide des
.datasetsopérations. -
Créez et énumérez des index de recherche à l’aide des
.indexesopérations. -
Activez le suivi OpenTelemetry à l’aide de la
enable_telemetryfonction.
Documentation | du produitÉchantillons | Paquet (npm) | Documentation de référence sur l’API | Code source du SDK
Table des matières
Mise en route
Prérequis
- Versions LTS de Node.js
- Un abonnement Azure.
- Un projet dans Azure AI Foundry.
Autorisation
-
L’Entra ID est nécessaire pour authentifier le client. Votre application a besoin d’un objet qui implémente l’interface TokenCredential. Les exemples de code ici utilisent DefaultAzureCredential. Pour travailler, vous aurez besoin des éléments suivants :
- Rôle
Contributor. Le rôle attribué peut être effectué via l’onglet « Contrôle d’accès (IAM) » de votre ressource Azure AI Project dans le portail Azure. Pour en savoir plus sur l’attribution des rôles , cliquez ici. - azure CLI installé.
- Vous êtes connecté à votre compte Azure en exécutant
az login. - Notez que si vous avez plusieurs abonnements Azure, l’abonnement qui contient votre ressource Azure AI Project doit être votre abonnement par défaut. Exécutez
az account list --output tablepour répertorier l’ensemble de votre abonnement et voir lequel est la valeur par défaut. Exécutezaz account set --subscription "Your Subscription ID or Name"pour modifier votre abonnement par défaut.
- Rôle
Installer le package
npm install @azure/ai-projects @azure/identity
Concepts clés
Créer et authentifier le client
Pour construire un AIProjectsClient, le endpoint peut être récupéré à partir du point de terminaison. Ci-dessous, nous supposerons que la variable AZURE_AI_PROJECT_ENDPOINT_STRING d’environnement a été définie pour contenir cette valeur :
import { AIProjectClient } from "@azure/ai-projects";
import { DefaultAzureCredential } from "@azure/identity";
const endpoint = process.env["AZURE_AI_PROJECT_ENDPOINT_STRING"] || "<project endpoint string>";
const client = new AIProjectClient(endpoint, new DefaultAzureCredential());
Le client utilise la version de v1l’API, reportez-vous à la documentation de l’API pour en savoir plus sur les fonctionnalités prises en charge.
Exemples
Exécution d’opérations de l’Agent
La .agents propriété sur le AIProjectClient vous donne accès à un authentifié AgentsClient à partir du azure-ai-agents package. Ci-dessous, nous montrons comment créer un agent et le supprimer. Pour voir ce que vous pouvez faire avec le agent que vous avez créé, consultez les nombreux exemples associés au azure-ai-agents package.
const agent = await project.agents.createAgent("gpt-4o", {
name: "my-agent",
instructions: "You are a helpful agent",
});
console.log(`Created agent, agent ID : ${agent.id}`);
// Do something with your Agent!
// See samples here https://github.com/Azure/azure-sdk-for-js/tree/@azure/ai-projects_1.0.1/sdk/ai/ai-agents/samples
await project.agents.deleteAgent(agent.id);
console.log(`Deleted agent, agent ID: ${agent.id}`);
Obtenir un client AzureOpenAI authentifié
Votre projet Azure AI Foundry peut avoir un ou plusieurs modèles OpenAI déployés qui prennent en charge l’achèvement des conversations. Utilisez le code ci-dessous pour obtenir un AzureOpenAI authentifié à partir du package openai et exécuter un appel de complétion de conversation.
Exécutez le code ci-dessous. Ici, nous supposons que deploymentName (str) est défini. Il s’agit du nom de déploiement d’un modèle d’IA dans votre projet Foundry. Comme indiqué dans l’onglet « Modèles + points de terminaison », sous la colonne « Nom ».
Mettez à jour la api_version valeur avec celle qui se trouve dans la ligne « Plan de données - inférence » de cette table.
Vous avez également la possibilité (non illustrée) de spécifier explicitement le nom de la connexion Azure OpenAI dans votre projet AI Foundry, que la inference.azureOpenAI méthode utilisera pour obtenir le point de terminaison d’inférence et les informations d’identification d’authentification. S’il n’est pas présent, la connexion Azure OpenAI par défaut sera utilisée.
const client = await project.inference.azureOpenAI({
// The API version should match the version of the Azure OpenAI resource.
apiVersion: "2024-10-21",
});
const response = await client.chat.completions.create({
model: deploymentName,
messages: [{ role: "user", content: "How many feet are in a mile?" }],
});
console.log("response = ", JSON.stringify(response, null, 2));
Pour obtenir des exemples supplémentaires, reportez-vous au dossier « inference » dans les exemples de package .
Opérations de déploiements
Le code ci-dessous montre certaines opérations de déploiement, qui vous permettent d’énumérer les modèles d’IA déployés dans vos projets AI Foundry. Ces modèles peuvent être consultés dans l’onglet « Modèles + points de terminaison » de votre projet AI Foundry. Les exemples complets se trouvent dans le dossier « deployment » des exemples de packages.
import { ModelDeployment } from "@azure/ai-projects";
const modelPublisher = process.env["MODEL_PUBLISHER"] || "<model publisher>";
console.log("List all deployments:");
const deployments: ModelDeployment[] = [];
const properties: Array<Record<string, string>> = [];
for await (const deployment of project.deployments.list()) {
// Check if this is a ModelDeployment (has the required properties)
if (
deployment.type === "ModelDeployment" &&
"modelName" in deployment &&
"modelPublisher" in deployment &&
"modelVersion" in deployment
) {
deployments.push(deployment);
properties.push({
name: deployment.name,
modelPublisher: deployment.modelPublisher,
modelName: deployment.modelName,
});
}
}
console.log(`Retrieved deployments: ${JSON.stringify(properties, null, 2)}`);
// List all deployments by a specific model publisher (assuming we have one from the list)
console.log(`List all deployments by the model publisher '${modelPublisher}':`);
const filteredDeployments: ModelDeployment[] = [];
for await (const deployment of project.deployments.list({
modelPublisher,
})) {
// Check if this is a ModelDeployment
if (
deployment.type === "ModelDeployment" &&
"modelName" in deployment &&
"modelPublisher" in deployment &&
"modelVersion" in deployment
) {
filteredDeployments.push(deployment);
}
}
console.log(
`Retrieved ${filteredDeployments.length} deployments from model publisher '${modelPublisher}'`,
);
// Get a single deployment by name
if (deployments.length > 0) {
const deploymentName = deployments[0].name;
console.log(`Get a single deployment named '${deploymentName}':`);
const singleDeployment = await project.deployments.get(deploymentName);
console.log(`Retrieved deployment: ${JSON.stringify(singleDeployment, null, 2)}`);
}
Opérations de connexions
Le code ci-dessous montre quelques opérations de connexion, qui vous permettent d’énumérer les ressources Azure connectées à vos projets AI Foundry. Ces connexions sont visibles dans le « Centre de gestion », dans l’onglet « Ressources connectées » de votre projet de fonderie d’IA. Vous trouverez des exemples complets sous le dossier « connexions » dans les exemples de package.
import { Connection } from "@azure/ai-projects";
// List the details of all the connections
const connections: Connection[] = [];
const connectionNames: string[] = [];
for await (const connection of project.connections.list()) {
connections.push(connection);
connectionNames.push(connection.name);
}
console.log(`Retrieved connections: ${connectionNames}`);
// Get the details of a connection, without credentials
const connectionName = connections[0].name;
const connection = await project.connections.get(connectionName);
console.log(`Retrieved connection ${JSON.stringify(connection, null, 2)}`);
const connectionWithCredentials = await project.connections.getWithCredentials(connectionName);
console.log(
`Retrieved connection with credentials ${JSON.stringify(connectionWithCredentials, null, 2)}`,
);
// List all connections of a specific type
const azureAIConnections: Connection[] = [];
for await (const azureOpenAIConnection of project.connections.list({
connectionType: "AzureOpenAI",
defaultConnection: true,
})) {
azureAIConnections.push(azureOpenAIConnection);
}
console.log(`Retrieved ${azureAIConnections.length} Azure OpenAI connections`);
// Get the details of a default connection
const defaultConnection = await project.connections.getDefault("AzureOpenAI", true);
console.log(`Retrieved default connection ${JSON.stringify(defaultConnection, null, 2)}`);
Opérations sur les ensembles de données
Le code ci-dessous montre certaines opérations de jeu de données. Les échantillons complets se trouvent dans le dossier « datasets » dans les exemples de package.
import { DatasetVersionUnion } from "@azure/ai-projects";
const VERSION1 = "1.0";
const VERSION2 = "2.0";
const VERSION3 = "3.0";
// sample files to use in the demonstration
const sampleFolder = "sample_folder";
// Create a unique dataset name for this sample run
const datasetName = `sample-dataset-basic`;
console.log("Upload a single file and create a new Dataset to reference the file.");
console.log("Here we explicitly specify the dataset version.");
const dataset1 = await project.datasets.uploadFile(
datasetName,
VERSION1,
path.join(__dirname, sampleFolder, "sample_file1.txt"),
);
console.log("Dataset1 created:", JSON.stringify(dataset1, null, 2));
const credential = project.datasets.getCredentials(dataset1.name, dataset1.version, {});
console.log("Credential for the dataset:", credential);
console.log(
"Upload all files in a folder (including subfolders) to the existing Dataset to reference the folder.",
);
console.log("Here again we explicitly specify a new dataset version");
const dataset2 = await project.datasets.uploadFolder(
datasetName,
VERSION2,
path.join(__dirname, sampleFolder),
);
console.log("Dataset2 created:", JSON.stringify(dataset2, null, 2));
console.log(
"Upload a single file to the existing dataset, while letting the service increment the version",
);
const dataset3 = await project.datasets.uploadFile(
datasetName,
VERSION3,
path.join(__dirname, sampleFolder, "sample_file2.txt"),
);
console.log("Dataset3 created:", JSON.stringify(dataset3, null, 2));
console.log("Get an existing Dataset version `1`:");
const datasetVersion1 = await project.datasets.get(datasetName, VERSION1);
console.log("Dataset version 1:", JSON.stringify(datasetVersion1, null, 2));
console.log(`Listing all versions of the Dataset named '${datasetName}':`);
const datasetVersions = await project.datasets.listVersions(datasetName);
for await (const version of datasetVersions) {
console.log("List versions:", version);
}
console.log("List latest versions of all Datasets:");
const latestDatasets = project.datasets.list();
for await (const dataset of latestDatasets) {
console.log("List datasets:", dataset);
}
// List the details of all the datasets
const datasets = project.datasets.listVersions(datasetName);
const allDatasets: DatasetVersionUnion[] = [];
for await (const dataset of datasets) {
allDatasets.push(dataset);
}
console.log(`Retrieved ${allDatasets.length} datasets`);
console.log("Delete all Datasets created above:");
await project.datasets.delete(datasetName, VERSION1);
await project.datasets.delete(datasetName, VERSION2);
await project.datasets.delete(datasetName, dataset3.version);
console.log("All specified Datasets have been deleted.");
Opérations d’indexation
Le code ci-dessous montre quelques opérations d’index. Les échantillons complets se trouvent dans le dossier « indexes » dans les exemples de packages.
import { AzureAISearchIndex } from "@azure/ai-projects";
const indexName = "sample-index";
const version = "1";
const azureAIConnectionConfig: AzureAISearchIndex = {
name: indexName,
type: "AzureSearch",
version,
indexName,
connectionName: "sample-connection",
};
// Create a new Index
const newIndex = await project.indexes.createOrUpdate(indexName, version, azureAIConnectionConfig);
console.log("Created a new Index:", newIndex);
console.log(`Get an existing Index version '${version}':`);
const index = await project.indexes.get(indexName, version);
console.log(index);
console.log(`Listing all versions of the Index named '${indexName}':`);
const indexVersions = project.indexes.listVersions(indexName);
for await (const indexVersion of indexVersions) {
console.log(indexVersion);
}
console.log("List all Indexes:");
const allIndexes = project.indexes.list();
for await (const i of allIndexes) {
console.log("Index:", i);
}
console.log("Delete the Index versions created above:");
await project.indexes.delete(indexName, version);
Résolution des problèmes
Exceptions
Les méthodes clientes qui effectuent des appels de service déclenchent une RestError pour une réponse de code d’état HTTP non réussie du service. La code de l’exception contiendra le code d’état de la réponse HTTP. Le error.message de l’exception contient un message détaillé qui peut être utile pour diagnostiquer le problème :
import { isRestError } from "@azure/core-rest-pipeline";
try {
const result = await project.connections.list();
} catch (e) {
if (isRestError(e)) {
console.log(`Status code: ${e.code}`);
console.log(e.message);
} else {
console.error(e);
}
}
Par exemple, lorsque vous fournissez des informations d’identification incorrectes :
Status code: 401 (Unauthorized)
Operation returned an invalid status 'Unauthorized'
Signaler des problèmes
Pour signaler des problèmes avec la bibliothèque cliente ou demander des fonctionnalités supplémentaires, ouvrez un problème GitHub ici
Étapes suivantes
Examinez le dossier d’exemples de package contenant du code entièrement exécutable.
Contribuer
Ce projet accueille les contributions et suggestions. La plupart des contributions vous obligent à accepter un contrat de licence contributeur (CLA) déclarant que vous avez le droit, et en fait, de nous accorder les droits d’utilisation de votre contribution. Pour plus d’informations, visitez https://cla.microsoft.com.
Lorsque vous envoyez une demande de tirage( pull request), un bot CLA détermine automatiquement si vous devez fournir un CLA et décorer correctement la demande de tirage (par exemple, étiquette, commentaire). Suivez simplement les instructions fournies par le bot. Vous n’aurez besoin de le faire qu’une seule fois sur tous les dépôts à l’aide de notre CLA.
Ce projet a adopté le Code de conduite Open Source Microsoft. Pour plus d’informations, consultez la FAQ sur le code de conduite ou contactez opencode@microsoft.com avec toutes les questions ou commentaires supplémentaires.
Azure SDK for JavaScript