Creare un agente da un modello di kernel semantico
Avviso
Il framework del kernel semantico dell'agente è in anteprima ed è soggetto a modifiche.
Modelli di prompt nel kernel semantico
Il ruolo di un agente è principalmente modellato dalle istruzioni ricevute, che ne determinano il comportamento e le azioni. Analogamente alla chiamata di un prompt, le istruzioni di un Kernel
agente possono includere parametri basato su modelli, sia valori che funzioni, che vengono sostituiti dinamicamente durante l'esecuzione. Ciò consente risposte flessibili e in grado di supportare il contesto, consentendo all'agente di regolare l'output in base all'input in tempo reale.
Inoltre, un agente può essere configurato direttamente usando una configurazione del modello di richiesta, fornendo agli sviluppatori un modo strutturato e riutilizzabile per definirne il comportamento. Questo approccio offre uno strumento potente per la standardizzazione e la personalizzazione delle istruzioni degli agenti, garantendo la coerenza tra vari casi d'uso mantenendo al tempo stesso l'adattabilità dinamica.
API correlata:
Gli agenti non sono attualmente disponibili in Java.
Istruzioni dell'agente come modello
La creazione di un agente con parametri di modello offre maggiore flessibilità consentendo la personalizzazione delle istruzioni in base a scenari o requisiti diversi. Questo approccio consente di personalizzare il comportamento dell'agente sostituendo valori o funzioni specifici nel modello, rendendolo adattabile a un'ampia gamma di attività o contesti. Sfruttando i parametri del modello, gli sviluppatori possono progettare agenti più versatili che possono essere configurati per soddisfare casi d'uso diversi senza dover modificare la logica di base.
Agente di completamento chat
// Initialize a Kernel with a chat-completion service
Kernel kernel = ...;
ChatCompletionAgent agent =
new()
{
Kernel = kernel,
Name = "StoryTeller",
Instructions = "Tell a story about {{$topic}} that is {{$length}} sentences long.",
Arguments = new KernelArguments()
{
{ "topic", "Dog" },
{ "length", "3" },
}
};
kernel = Kernel()
agent = ChatCompletionAgent(
kernel=kernel,
name="StoryTeller",
instructions="Tell a story about {{$topic}} that is {{$length}} sentences long.",
arguments=KernelArguments(topic="Dog", length="2"),
)
Gli agenti non sono attualmente disponibili in Java.
Aprire l'agente assistente intelligenza artificiale
Le istruzioni basati su modelli sono particolarmente potenti quando si lavora con un agente Open AI Assistant. Con questo approccio, è possibile creare e riutilizzare più volte una singola definizione di assistente, ogni volta con valori di parametro diversi personalizzati per attività o contesti specifici. Ciò consente una configurazione più efficiente, consentendo allo stesso framework assistente di gestire un'ampia gamma di scenari mantenendo al tempo stesso la coerenza nel comportamento principale.
// Retrieve an existing assistant definition by identifier
OpenAIAssistantAgent agent =
await OpenAIAssistantAgent.RetrieveAsync(
this.GetClientProvider(),
"<stored agent-identifier>",
new Kernel(),
new KernelArguments()
{
{ "topic", "Dog" },
{ "length", "3" },
});
agent = await OpenAIAssistantAgent.retrieve(
id=<assistant_id>,
kernel=Kernel(),
arguments=KernelArguments(topic="Dog", length="3"),
)
Gli agenti non sono attualmente disponibili in Java.
Definizione dell'agente da un modello di richiesta
La stessa configurazione del modello di richiesta usata per creare una funzione prompt del kernel può essere usata anche per definire un agente. Ciò consente un approccio unificato nella gestione di richieste e agenti, promuovendo la coerenza e il riutilizzo tra componenti diversi. Esternalizzando le definizioni degli agenti dalla codebase, questo metodo semplifica la gestione di più agenti, semplificando l'aggiornamento e la gestione senza richiedere modifiche alla logica sottostante. Questa separazione migliora anche la flessibilità, consentendo agli sviluppatori di modificare il comportamento dell'agente o introdurre nuovi agenti semplicemente aggiornando la configurazione, invece di modificare il codice stesso.
Modello YAML
name: GenerateStory
template: |
Tell a story about {{$topic}} that is {{$length}} sentences long.
template_format: semantic-kernel
description: A function that generates a story about a topic.
input_variables:
- name: topic
description: The topic of the story.
is_required: true
- name: length
description: The number of sentences in the story.
is_required: true
Inizializzazione agente
// Read YAML resource
string generateStoryYaml = File.ReadAllText("./GenerateStory.yaml");
// Convert to a prompt template config
PromptTemplateConfig templateConfig = KernelFunctionYaml.ToPromptTemplateConfig(generateStoryYaml);
// Create agent with Instructions, Name and Description
// provided by the template config.
ChatCompletionAgent agent =
new(templateConfig)
{
Kernel = this.CreateKernelWithChatCompletion(),
// Provide default values for template parameters
Arguments = new KernelArguments()
{
{ "topic", "Dog" },
{ "length", "3" },
}
};
import yaml
# Read the YAML file
with open("./GenerateStory.yaml", "r", encoding="utf-8") as file:
generate_story_yaml = file.read()
# Parse the YAML content
data = yaml.safe_load(generate_story_yaml)
# Use the parsed data to create a PromptTemplateConfig object
prompt_template_config = PromptTemplateConfig(**data)
agent = ChatCompletionAgent(
kernel=_create_kernel_with_chat_completion(),
prompt_template_config=prompt_template_config,
arguments=KernelArguments(topic="Dog", length="3"),
)
Gli agenti non sono attualmente disponibili in Java.
Override dei valori del modello per la chiamata diretta
Quando si richiama direttamente un agente, senza usare Agent Chat, i parametri dell'agente possono essere sottoposti a override in base alle esigenze. Ciò consente un maggiore controllo e personalizzazione del comportamento dell'agente durante attività specifiche, consentendo di modificarne le istruzioni o le impostazioni in tempo reale in base a requisiti specifici.
// Initialize a Kernel with a chat-completion service
Kernel kernel = ...;
ChatCompletionAgent agent =
new()
{
Kernel = kernel,
Name = "StoryTeller",
Instructions = "Tell a story about {{$topic}} that is {{$length}} sentences long.",
Arguments = new KernelArguments()
{
{ "topic", "Dog" },
{ "length", "3" },
}
};
// Create a ChatHistory object to maintain the conversation state.
ChatHistory chat = [];
KernelArguments overrideArguments =
new()
{
{ "topic", "Cat" },
{ "length", "3" },
});
// Generate the agent response(s)
await foreach (ChatMessageContent response in agent.InvokeAsync(chat, overrideArguments))
{
// Process agent response(s)...
}
kernel = Kernel()
agent = ChatCompletionAgent(
kernel=kernel,
name="StoryTeller",
instructions="Tell a story about {{$topic}} that is {{$length}} sentences long.",
arguments=KernelArguments(topic="Dog", length="2"),
)
# Create a chat history to maintain the conversation state
chat = ChatHistory()
override_arguments = KernelArguments(topic="Cat", length="3")
async for response in agent.invoke(chat, arguments=override_arguments):
# process agent response(s)...
Gli agenti non sono attualmente disponibili in Java.
Procedure
Per un esempio end-to-end per la creazione di un agente da un modello pmompt, vedere: