SDK Azure AI Projects pour TypeScript
SDK haut niveau pour les projets Azure AI Foundry avec agents, connexions, déploiements et évaluations.
Installation
npm install @azure/ai-projects @azure/identity
Pour le tracing :
npm install @azure/monitor-opentelemetry @opentelemetry/api
Variables d'environnement
AZURE_AI_PROJECT_ENDPOINT=https://<resource>.services.ai.azure.com/api/projects/<project>
MODEL_DEPLOYMENT_NAME=gpt-4o
AZURE_TOKEN_CREDENTIALS=prod # Requis uniquement si DefaultAzureCredential est utilisé en production
Authentification
import { AIProjectClient } from "@azure/ai-projects";
import { DefaultAzureCredential, ManagedIdentityCredential } from "@azure/identity";
// Dev local : DefaultAzureCredential. Production : définir AZURE_TOKEN_CREDENTIALS=prod ou AZURE_TOKEN_CREDENTIALS=<specific_credential>
const credential = new DefaultAzureCredential({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]});
// Ou utiliser des identifiants spécifiques directement en production :
// Voir https://learn.microsoft.com/javascript/api/overview/azure/identity-readme?view=azure-node-latest#credential-classes
// const credential = new ManagedIdentityCredential();
const client = new AIProjectClient(
process.env.AZURE_AI_PROJECT_ENDPOINT!,
credential
);
Groupes d'opérations
| Groupe | Objectif |
|---|---|
client.agents |
Créer et gérer des agents IA |
client.connections |
Lister les ressources Azure connectées |
client.deployments |
Lister les déploiements de modèles |
client.datasets |
Télécharger et gérer les datasets |
client.indexes |
Créer et gérer les indexes de recherche |
client.evaluators |
Gérer les métriques d'évaluation |
client.memoryStores |
Gérer la mémoire de l'agent |
Obtenir le client OpenAI
const openAIClient = await client.getOpenAIClient();
// Utiliser pour les réponses
const response = await openAIClient.responses.create({
model: "gpt-4o",
input: "What is the capital of France?"
});
// Utiliser pour les conversations
const conversation = await openAIClient.conversations.create({
items: [{ type: "message", role: "user", content: "Hello!" }]
});
Agents
Créer un agent
const agent = await client.agents.createVersion("my-agent", {
kind: "prompt",
model: "gpt-4o",
instructions: "You are a helpful assistant."
});
Agent avec outils
// Code Interpreter
const agent = await client.agents.createVersion("code-agent", {
kind: "prompt",
model: "gpt-4o",
instructions: "You can execute code.",
tools: [{ type: "code_interpreter", container: { type: "auto" } }]
});
// File Search
const agent = await client.agents.createVersion("search-agent", {
kind: "prompt",
model: "gpt-4o",
tools: [{ type: "file_search", vector_store_ids: [vectorStoreId] }]
});
// Web Search
const agent = await client.agents.createVersion("web-agent", {
kind: "prompt",
model: "gpt-4o",
tools: [{
type: "web_search_preview",
user_location: { type: "approximate", country: "US", city: "Seattle" }
}]
});
// Azure AI Search
const agent = await client.agents.createVersion("aisearch-agent", {
kind: "prompt",
model: "gpt-4o",
tools: [{
type: "azure_ai_search",
azure_ai_search: {
indexes: [{
project_connection_id: connectionId,
index_name: "my-index",
query_type: "simple"
}]
}
}]
});
// Function Tool
const agent = await client.agents.createVersion("func-agent", {
kind: "prompt",
model: "gpt-4o",
tools: [{
type: "function",
function: {
name: "get_weather",
description: "Get weather for a location",
strict: true,
parameters: {
type: "object",
properties: { location: { type: "string" } },
required: ["location"]
}
}
}]
});
// MCP Tool
const agent = await client.agents.createVersion("mcp-agent", {
kind: "prompt",
model: "gpt-4o",
tools: [{
type: "mcp",
server_label: "my-mcp",
server_url: "https://mcp-server.example.com",
require_approval: "always"
}]
});
Exécuter un agent
const openAIClient = await client.getOpenAIClient();
// Créer une conversation
const conversation = await openAIClient.conversations.create({
items: [{ type: "message", role: "user", content: "Hello!" }]
});
// Générer une réponse avec l'agent
const response = await openAIClient.responses.create(
{ conversation: conversation.id },
{ body: { agent: { name: agent.name, type: "agent_reference" } } }
);
// Nettoyage
await openAIClient.conversations.delete(conversation.id);
await client.agents.deleteVersion(agent.name, agent.version);
Connexions
// Lister toutes les connexions
for await (const conn of client.connections.list()) {
console.log(conn.name, conn.type);
}
// Obtenir une connexion par nom
const conn = await client.connections.get("my-connection");
// Obtenir une connexion avec identifiants
const connWithCreds = await client.connections.getWithCredentials("my-connection");
// Obtenir la connexion par défaut par type
const defaultAzureOpenAI = await client.connections.getDefault("AzureOpenAI", true);
Déploiements
// Lister tous les déploiements
for await (const deployment of client.deployments.list()) {
if (deployment.type === "ModelDeployment") {
console.log(deployment.name, deployment.modelName);
}
}
// Filtrer par éditeur
for await (const d of client.deployments.list({ modelPublisher: "OpenAI" })) {
console.log(d.name);
}
// Obtenir un déploiement spécifique
const deployment = await client.deployments.get("gpt-4o");
Datasets
// Télécharger un fichier unique
const dataset = await client.datasets.uploadFile(
"my-dataset",
"1.0",
"./data/training.jsonl"
);
// Télécharger un dossier
const dataset = await client.datasets.uploadFolder(
"my-dataset",
"2.0",
"./data/documents/"
);
// Obtenir un dataset
const ds = await client.datasets.get("my-dataset", "1.0");
// Lister les versions
for await (const version of client.datasets.listVersions("my-dataset")) {
console.log(version);
}
// Supprimer
await client.datasets.delete("my-dataset", "1.0");
Indexes
import { AzureAISearchIndex } from "@azure/ai-projects";
const indexConfig: AzureAISearchIndex = {
name: "my-index",
type: "AzureSearch",
version: "1",
indexName: "my-index",
connectionName: "search-connection"
};
// Créer un index
const index = await client.indexes.createOrUpdate("my-index", "1", indexConfig);
// Lister les indexes
for await (const idx of client.indexes.list()) {
console.log(idx.name);
}
// Supprimer
await client.indexes.delete("my-index", "1");
Types clés
import {
AIProjectClient,
AIProjectClientOptionalParams,
Connection,
ModelDeployment,
DatasetVersionUnion,
AzureAISearchIndex
} from "@azure/ai-projects";
Bonnes pratiques
- Utiliser getOpenAIClient() - Pour les réponses, conversations, fichiers et vector stores
- Versionner vos agents - Utiliser
createVersionpour des définitions d'agent reproductibles - Nettoyer les ressources - Supprimer les agents et conversations quand vous avez terminé
- Utiliser les connexions - Obtenir les identifiants à partir des connexions du projet, ne pas les coder en dur
- Filtrer les déploiements - Utiliser le filtre
modelPublisherpour trouver des modèles spécifiques