Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build AI applications using Azure AI Projects SDK for JavaScript (@azure/ai-projects). Use when working with Foundry project clients, agents, connections, deployments, datasets, indexes, evaluations, or getting OpenAI clients.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | -15% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 110% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 47% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 40% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 2% | 0% |
High-level SDK for Azure AI Foundry projects with agents, connections, deployments, and evaluations.
bashnpm install @azure/ai-projects @azure/identity
For tracing:
bashnpm install @azure/monitor-opentelemetry @opentelemetry/api
bashAZURE_AI_PROJECT_ENDPOINT=https://<resource>.services.ai.azure.com/api/projects/<project> MODEL_DEPLOYMENT_NAME=gpt-4o AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production
typescriptimport { AIProjectClient } from "@azure/ai-projects"; import { DefaultAzureCredential, ManagedIdentityCredential } from "@azure/identity"; // Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential> const credential = new DefaultAzureCredential({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]}); // Or use a specific credential directly in production: // See 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 );
| Group | Purpose | |-------|---------| | client.agents | Create and manage AI agents | | client.connections | List connected Azure resources | | client.deployments | List model deployments | | client.datasets | Upload and manage datasets | | client.indexes | Create and manage search indexes | | client.evaluators | Manage evaluation metrics | | client.memoryStores | Manage agent memory |
typescriptconst openAIClient = await client.getOpenAIClient(); // Use for responses const response = await openAIClient.responses.create({ model: "gpt-4o", input: "What is the capital of France?" }); // Use for conversations const conversation = await openAIClient.conversations.create({ items: [{ type: "message", role: "user", content: "Hello!" }] });
typescriptconst agent = await client.agents.createVersion("my-agent", { kind: "prompt", model: "gpt-4o", instructions: "You are a helpful assistant." });
typescript// 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" }] });
typescriptconst openAIClient = await client.getOpenAIClient(); // Create conversation const conversation = await openAIClient.conversations.create({ items: [{ type: "message", role: "user", content: "Hello!" }] }); // Generate response using agent const response = await openAIClient.responses.create( { conversation: conversation.id }, { body: { agent: { name: agent.name, type: "agent_reference" } } } ); // Cleanup await openAIClient.conversations.delete(conversation.id); await client.agents.deleteVersion(agent.name, agent.version);
typescript// List all connections for await (const conn of client.connections.list()) { console.log(conn.name, conn.type); } // Get connection by name const conn = await client.connections.get("my-connection"); // Get connection with credentials const connWithCreds = await client.connections.getWithCredentials("my-connection"); // Get default connection by type const defaultAzureOpenAI = await client.connections.getDefault("AzureOpenAI", true);
typescript// List all deployments for await (const deployment of client.deployments.list()) { if (deployment.type === "ModelDeployment") { console.log(deployment.name, deployment.modelName); } } // Filter by publisher for await (const d of client.deployments.list({ modelPublisher: "OpenAI" })) { console.log(d.name); } // Get specific deployment const deployment = await client.deployments.get("gpt-4o");
typescript// Upload single file const dataset = await client.datasets.uploadFile( "my-dataset", "1.0", "./data/training.jsonl" ); // Upload folder const dataset = await client.datasets.uploadFolder( "my-dataset", "2.0", "./data/documents/" ); // Get dataset const ds = await client.datasets.get("my-dataset", "1.0"); // List versions for await (const version of client.datasets.listVersions("my-dataset")) { console.log(version); } // Delete await client.datasets.delete("my-dataset", "1.0");
typescriptimport { AzureAISearchIndex } from "@azure/ai-projects"; const indexConfig: AzureAISearchIndex = { name: "my-index", type: "AzureSearch", version: "1", indexName: "my-index", connectionName: "search-connection" }; // Create index const index = await client.indexes.createOrUpdate("my-index", "1", indexConfig); // List indexes for await (const idx of client.indexes.list()) { console.log(idx.name); } // Delete await client.indexes.delete("my-index", "1");
typescriptimport { AIProjectClient, AIProjectClientOptionalParams, Connection, ModelDeployment, DatasetVersionUnion, AzureAISearchIndex } from "@azure/ai-projects";
createVersion for reproducible agent definitionsmodelPublisher filter to find specific modelsOther measured skills in the registry, with their headline benchmark lift.