Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo descrive i passaggi per la creazione di Agent Launchers e i componenti di un'app del provider di Agent Launcher. Gli strumenti di avvio agente in Windows consentono a un'app di Windows di implementare e registrare agenti in modo che altre app ed esperienze possano richiamarle. Per ulteriori informazioni, vedere Panoramica su Agent Launchers in Windows.
Implementare un provider di azioni
Gli avviatori di agenti si basano su un'implementazione specializzata di un'app Azioni app in un'app provider per Windows. Per questa esercitazione, iniziare implementando un provider di azioni seguendo le indicazioni riportate in Introduzione ad Azioni app in Windows. Il resto di questo articolo illustra le aggiunte e le modifiche necessarie per eseguire l'azione dell'app per registrarla e chiamarla come Utilità di avvio agente. Illustra come registrare l'agente sia in modo statico (registrato in fase di installazione) sia in modo dinamico per poter aggiungere e rimuovere Agent Launchers secondo la logica dell'applicazione.
Modificare il fornitore di azioni per supportare le entità di input necessarie
Affinché un'azione dell'app venga richiamata come lanciatore agente, deve soddisfare i requisiti seguenti per le entità di input:
Un input deve essere TextActionEntity con il nome
agentName.Un input deve essere TextActionEntity con il nome
prompt.Tutte le combinazioni di input per l'azione devono accettare sia le
agentNameentità cheprompt.Richiamare l'azione dell'app deve aprire un'applicazione in cui l'utente può interagire attivamente con l'agente, non solo completare il lavoro in background.
using Microsoft.AI.Actions.Annotations;
using System.Threading.Tasks;
using Windows.AI.Actions;
namespace ZavaAgentProvider
{
[ActionProvider]
public sealed class ZavaAgentActionsProvider
{
[WindowsAction(
Id = "ZavaAgentAction",
Description = "Start an agent for Zava",
Icon = "ms-resource://Files/Assets/ZavaLogo.png",
UsesGenerativeAI = true
)]
[WindowsActionInputCombination(
Inputs = ["agentName", "prompt"],
Description = "Start Zava Agent with '${agentName.Text}'."
)]
[WindowsActionInputCombination(
Inputs = ["agentName", "prompt", "attachedFile"],
Description = "Start Zava Agent with '${agentName.Text}' and additional context."
)]
public async Task StartZavaAgent(
[Entity(Name = "agentName")] string agentName,
[Entity(Name = "prompt")] string prompt,
[Entity(Name = "attachedFile")] FileActionEntity? attachedFile,
InvocationContext context)
{
// Your agent invocation logic here
await InvokeAgentAsync(agentName, prompt, attachedFile);
}
public async Task InvokeAgentAsync(string agentName, string prompt, FileActionEntity? attachedFile)
{
// Process the agent invocation with the provided inputs
if (attachedFile != null)
{
await Task.Run(() => $"Starting agent '{agentName}' with prompt '{prompt}' and file context");
}
else
{
await Task.Run(() => $"Starting agent '{agentName}' with prompt '{prompt}'");
}
}
}
}
Nell'esempio seguente viene illustrato il file di definizione dell'azione generato dalla definizione della classe del provider di azioni illustrata nell'esempio precedente.
{
"version": 3,
"actions": [
{
"id": "ZavaAgentAction",
"description": "Start an agent for Zava",
"icon": "ms-resource://Files/Assets/ZavaLogo.png",
"usesGenerativeAI": true,
"allowedAppInvokers": ["*"],
"inputs": [
{
"name": "agentName", "kind": "Text"
},
{
"name": "prompt", "kind": "Text"
},
{
"name": "attachedFile", "kind": "File"
}
],
"inputCombinations": [
// If we don't always expect attachedFile to be present, we can
// declare two different inputCombinations
{
"inputs": [ "agentName", "prompt" ],
"description": "Start Zava Agent with '${agentName.Text}'."
},
{
"inputs": [ "agentName", "prompt", "attachedFile" ],
"description": "Start Zava Agent with '${agentName.Text}' and additional context."
}
],
"outputs": [],
"invocation": {
"type": "Uri",
// Example of a valid launch URI using the inputs defined above
"uri": "zavaLaunch:invokeAgent?agentName=${agentName.Text}&prompt=${prompt.Text}&context=${attachedFile.Path}"
}
}
]
}
Testare l'azione dell'app
Prima di registrare l'azione come Agent Launcher, verificare che l'App Action funzioni correttamente. Seguire le indicazioni per i test nell'articolo Introduzione alle azioni dell'app in Windows per assicurarsi che l'azione sia:
- Registrazione avvenuta con successo - verificare che l'azione venga visualizzata nel catalogo delle azioni.
-
Accetta gli input necessari : verificare che l'azione possa ricevere le
agentNameentità di testo eprompt. - Richiama correttamente : verificare che la logica di azione venga eseguita quando viene richiamata.
-
Gestisce gli input facoltativi : se sono disponibili input facoltativi, ad esempio
attachedFile, eseguire il test sia con che senza di essi.
È possibile testare l'azione dell'app usando le API Windows.AI.Actions o l'app App Actions Testing Playground. Dopo aver confermato che l'Azione dell'App funziona come previsto, è possibile procedere con la registrazione come lanciatore dell'agente.
Creare un file JSON di definizione dell'agente
Creare un nuovo file JSON nella cartella del Assets progetto (o nel percorso preferito) per definire la registrazione dell'agente. La definizione dell'agente collega l'agente all'azione dell'app creata nel passaggio precedente.
Il valore del campo action_id nel manifesto della definizione dell'agente deve corrispondere al campo ID specificato nel manifesto della definizione dell'azione per un'azione inclusa nello stesso pacchetto dell'app.
{
"manifest_version": "0.1.0",
"version": "1.0.0",
"name": "Zava.ZavaAgent",
"display_name": "ms-resource://zavaAgentDisplayName",
"description": "ms-resource://zavaAgentDescription",
"placeholder_text": "ms-resource://zavaAgentPlaceHolderText",
"icon": "ms-resource://Files/Assets/ZavaLogo.png",
"action_id": "ZavaAgentAction"
}
Impostare il file JSON su Copia nella cartella di output nelle proprietà del progetto.
- Per i progetti C#: fare clic con il pulsante destro del mouse sul file JSON in Esplora soluzioni, selezionare Proprietà e impostare Copia nella directory di output su Copia se più recente o Copia sempre.
- Per i progetti C++: aggiungere il codice seguente al file di progetto:
<Content Include="Assets\agentRegistration.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</Content>
Registrazione statica tramite il manifesto del pacchetto applicativo
I launcher degli agenti possono essere registrati in modo statico (in fase di installazione) o in modo dinamico (in fase di esecuzione). Questa sezione illustra la registrazione statica.
Il file Package.appxmanifest fornisce i dettagli del pacchetto MSIX per un'app. Se hai seguito l'esercitazione introduttiva per le azioni dell'app, hai già aggiunto un elemento uap3:Extension per registrare l'azione impostando l'attributo Nome dell'estensione su com.microsoft.windows.ai.actions. Per registrare l'azione come Avvio agente, è necessario aggiungere un'altra estensione dell'app con il Nome impostato su com.microsoft.windows.ai.agentInfo. Nell'elemento Properties dell'elemento dell'estensione dell'app è necessario specificare un elemento Registration che specifica il percorso del file JSON di definizione dell'agente.
Annotazioni
Ogni Agent Launcher registrato in modo statico deve avere il proprio elemento AppExtension.
<uap3:Extension Category="windows.appExtension">
<uap3:AppExtension
Name="com.microsoft.windows.ai.agentInfo"
Id="ZavaAgent"
DisplayName="Zava Agent"
PublicFolder="Assets">
<uap3:Properties>
<Registration>agentRegistration.json</Registration>
</uap3:Properties>
</uap3:AppExtension>
</uap3:Extension>
Registrazione dinamica tramite Registro Dispositivo (ODR)
Oltre alla registrazione statica, è possibile registrare i Launcher Agente in modo dinamico durante l'esecuzione utilizzando il Registro Windows On Device (ODR). Questo metodo è utile quando è necessario aggiungere o rimuovere agenti in base alla logica dell'applicazione.
Aggiungere un launcher agente in modo dinamico
Usare il odr agent-info add comando per registrare dinamicamente un Avviatore di Agenti. Questo comando prende il percorso del file JSON per la registrazione dell'agente.
using System.Diagnostics;
// Create process start info
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "odr.exe",
Arguments = $"agent-info add \"<path to agentDefinition.json>\"",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
};
// Start the ODR process
using Process process = new Process { StartInfo = startInfo };
process.Start();
// Read the output
string output = await process.StandardOutput.ReadToEndAsync();
string error = await process.StandardError.ReadToEndAsync();
await process.WaitForExitAsync();
Il comando restituisce una risposta JSON con la struttura seguente:
{
"agent_id": "ZavaAgent_cw5n1h2txyewy_Zava.ZavaAgent",
"extended_error": 0
}
Rimuovere un lanciatore di agenti in modo dinamico
Usare il comando odr agent-info remove per rimuovere un launcher agente dinamicamente registrato. È possibile rimuovere solo gli agenti aggiunti dinamicamente dallo stesso pacchetto.
using System.Diagnostics;
// Create process start info
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = "odr.exe",
Arguments = $"agent-info remove \"<path to agentDefinition.json>\"",
UseShellExecute = false,
RedirectStandardOutput = true,
RedirectStandardError = true,
CreateNoWindow = true
};
// Start the ODR process
using Process process = new Process { StartInfo = startInfo };
process.Start();
// Read the output
string output = await process.StandardOutput.ReadToEndAsync();
string error = await process.StandardError.ReadToEndAsync();
await process.WaitForExitAsync();
Il comando restituisce:
{
"extended_error": 0
}
Importante
A causa dei requisiti di identità dei pacchetti, non è possibile usare agent-info add e agent-info remove da un'app non in pacchetto. È necessario eseguire questi comandi dall'interno di un'applicazione in pacchetto che contiene anche l'azione app associata.
Elenca i lanciatori di agenti disponibili
Per individuare tutti i launcher di agenti registrati nel sistema, utilizzare il comando odr agent-info list. Questo comando restituisce tutti i lanciatori di agenti che puoi invocare.
odr agent-info list
Questo comando restituisce una matrice JSON di definizioni dell'agente:
{
[
{
"package_family_name": "ZavaPackageFamilyName",
"action_id": "ZavaAgentAction",
"placeholder_text": "What can you help me with?",
"version": "1.0.0",
"id": "ZavaAgent_cw5n1h2txyewy_Zava.ZavaAgent",
"name": "Zava.ZavaAgent",
"display_name": "Zava Agent",
"description": "Description for Zava agent.",
"icons": [
{
"src": "C:\\Users\\[user name]\\AppData\\Local\\ZavaAgent\\Assets\\AgentIcon.png"
}
]
}
]
}
Usare i package_family_name campi e action_id insieme per identificare e richiamare l'azione dell'app associata.
Qualificatori delle icone di fornitura
Quando si eseguono query per gli Avviatori di Agente disponibili tramite odr agent-info list, è possibile fornire uno o più argomenti aggiuntivi per specificare un qualificatore per le risorse dell'icona restituite nell'output del comando. Nella tabella seguente sono elencati i qualificatori di icona che possono essere usati quando si elencano gli Avviatori di Agente.
| Qualificatori | Descrizione |
|---|---|
| Contrasto | Controlla la selezione della modalità a contrasto elevato. Valori validi: standard, high, black, white |
| language | Specifica la lingua preferita dall'utente usata per risolvere le risorse localizzate, ad esempio "en-US". È possibile specificare solo un singolo valore. |
| scale | Indica il fattore di scala di visualizzazione usato per scegliere gli asset di dimensioni corrette, ad esempio 100, 200, 400 |
| destinazioni | Specifica la lunghezza laterale pixel per le icone, ad esempio 16, 24. Viene usato principalmente per le icone di tipo file o protocollo. |
| tema | Determina l'influenza del tema dell'app, ad esempio , lightdark. Il sistema deduce automaticamente il valore del tema, a meno che non venga sostituito specificando il qualificatore. |
È possibile specificare più qualificatori in una chiamata a odr agent-info list. È possibile specificare più valori per ogni qualificatore usando una virgola come delimitatore. Se nella query sono presenti qualificatori in formato non valido, il sistema cercherà di restituire i risultati in base ai qualificatori ben formati. Se il sistema non riesce a risolvere le icone, l'elenco delle icone restituite sarà vuoto.
Nell'esempio seguente viene illustrata una chiamata a odr agent-info list, specificando qualificatori per un singolo scale valore e più theme valori.
odr agent-info list --theme dark,light --scale 200
Questo comando restituisce il payload JSON seguente, che include la icons matrice delle icone disponibili che corrispondono ai qualificatori di icona specificati.
{
[
{
"package_family_name": "ZavaPackageFamilyName",
"action_id": "ZavaAgentAction",
"placeholder_text": "What can you help me with?",
"version": "1.0.0",
"id": "ZavaAgent_cw5n1h2txyewy_Zava.ZavaAgent",
"name": "Zava.ZavaAgent",
"display_name": "Zava Agent",
"description": "Description for Zava agent.",
"icons": [
{
"src": "C:\\Users\\[user name]\\AppData\\Local\\ZavaAgent\\Assets\\AgentIcon.scale-200_theme-dark.png",
"theme": "dark",
"scale": "200"
},
{
"src": "C:\\Users\\[user name]\\AppData\\Local\\ZavaAgent\\Assets\\AgentIcon.scale-200_theme-light.png",
"theme": "light",
"scale": "200"
}
]
}
]
}
Invocare un launcher agente
Per richiamare un launcher dell'agente, seguire i seguenti passaggi:
- Chiamare
odr agent-info listper ottenere tutti gli strumenti di avvio dell'agente disponibili. - Selezionare l'agente che si vuole richiamare in base alla logica dell'applicazione, ad esempio l'interazione dell'utente.
- Usare le API Windows.AI.Actions per richiamare l'azione app associata dell'agente
Ecco un esempio di invocazione di un Agent Launcher utilizzando le API Windows.AI.Actions.
using Windows.AI.Actions;
using System.Threading.Tasks;
public async Task InvokeAgentLauncherAsync(string packageFamilyName, string actionId, string agentName, string prompt)
{
// Get the action catalog
var catalog = ActionCatalog.GetDefault();
// Get all actions for the package
var actions = await catalog.GetAllActionsAsync();
// Find the specific action by package family name and action ID
var targetAction = actions.FirstOrDefault(a =>
a.PackageFamilyName == packageFamilyName &&
a.Id == actionId);
if (targetAction != null)
{
// Create the input entities
var entityFactory = new ActionEntityFactory();
var agentNameEntity = entityFactory.CreateTextEntity(agentName);
var promptEntity = entityFactory.CreateTextEntity(prompt);
// Create input dictionary
var inputs = new Dictionary<string, ActionEntity>
{
{ "agentName", agentNameEntity },
{ "prompt", promptEntity }
};
// Invoke the action
await targetAction.InvokeAsync(inputs);
}
}
Testare il launcher dell'agente
Dopo aver verificato la funzionalità dell'azione dell'applicazione, testare la registrazione e la chiamata del Launcher dell'agente.
Testare la registrazione statica
Crea e distribuisci la tua applicazione impacchettata con l'estensione agente nel file manifest.
Aprire un terminale ed eseguire:
odr agent-info listVerificare che l'Agent Launcher sia visualizzato nell'output con il valore corretto
package_family_nameeaction_id.
Testare la registrazione dinamica
Eseguire il
odr agent-info addcomando dall'interno dell'applicazione in pacchetto, come illustrato nella sezione registrazione dinamica.Controllare l'output del comando per confermare la corretta registrazione.
Verificare la registrazione eseguendo:
odr agent-info listVerifica che l'agente compaia nell'elenco.
Testare la rimozione eseguendo il
odr agent-info removecomando con l'ID dell'agente.Confermare la rimozione eseguendo
odr agent-info listdi nuovo e verificando che l'agente non venga più visualizzato.
Esecuzione del Test Agent Launcher
Dopo aver registrato l'Agent Launcher, testare l'invocazione end-to-end:
- Eseguire
odr agent-info listper ottenere i valori dipackage_family_nameeaction_iddell'agente. - Usa l'approccio di test delle App Actions descritto nell'articolo Introduzione alle azioni dell'app oppure lo strumento di test per attivare l'azione con gli input richiesti
agentNameeprompt. - Verificare che l'app riceva correttamente gli input e che la logica dell'agente venga eseguita come previsto.
- Testare gli input facoltativi, ad esempio
attachedFilese l'azione li supporta.
Gestire gli errori
Lo stato di esito positivo dei odr agent-info comandi viene restituito nell'output JSON nel extended_error campo . Un valore pari a zero indica l'esito positivo e un valore diverso da zero è un codice di errore esteso che specifica il tipo di errore che si è verificato. Il message campo contiene una stringa leggibile che descrive l'errore. Il message campo è incluso solo nell'output per i comandi con esito negativo.
Di seguito è riportato l'output di esempio di una chiamata a odr agent-info remove dove l'operazione non è riuscita perché l'agente specificato non è stato trovato.
{
"extended_error": -2147023728,
"message": "E_NOTFOUND Agent not found: ZavaAgent_cw5n1h2txyewy_Zava.ZavaAgent"
}
I codici di errore che possono essere restituiti dai odr agent-info comandi includono quanto segue.
| Codice di errore | Valore | Descrizione |
|---|---|---|
| S_OK | 0x00000000 | Successo. |
| E_FAIL | 0x80004005 | Errore generico. |
| E_INVALIDARG | 0x80070057 | Argomento non valido. Gli esempi includono il percorso JSON non valido passato come input per la registrazione o il tentativo di registrare un agente già registrato. |
| E_ACCESSDENIED | 0x8007000 | Accesso negato. |
| E_NOTFOUND | 0x80070490 | L'agente che non è registrato non si trova nel Registro di sistema. |
| E_ABORT | 0x80004004 | La chiamata è stata annullata prima del completamento dell'operazione. |