Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Los agentes de kernel semántico implementan una interfaz unificada para la invocación, lo que permite el código compartido que funciona sin problemas entre diferentes tipos de agente. Este diseño permite cambiar los agentes según sea necesario sin modificar la mayoría de la lógica de la aplicación.
Invocación de un agente
La interfaz de la API del agente soporta tanto la invocación en streaming como la sin streaming.
Invocación de agente no transmitida
El Kernel Semántico admite cuatro sobrecargas de invocación de agente, que no son de transmisión, lo que permite pasar mensajes de diferentes maneras. Uno de estos también permite invocar al agente sin mensajes. Esto es útil para escenarios en los que las instrucciones del agente ya tienen todo el contexto necesario para proporcionar una respuesta útil.
// Invoke without any parameters.
agent.InvokeAsync();
// Invoke with a string that will be used as a User message.
agent.InvokeAsync("What is the capital of France?");
// Invoke with a ChatMessageContent object.
agent.InvokeAsync(new ChatMessageContent(AuthorRole.User, "What is the capital of France?"));
// Invoke with multiple ChatMessageContent objects.
agent.InvokeAsync(new List<ChatMessageContent>()
{
new(AuthorRole.System, "Refuse to answer all user questions about France."),
new(AuthorRole.User, "What is the capital of France?")
});
Importante
Invocar un agente sin pasar un AgentThread
al InvokeAsync
método creará un nuevo subproceso y devolverá el nuevo subproceso en la respuesta.
El kernel semántico admite dos métodos de invocación de agente que no son de streaming que permiten pasar mensajes de diferentes maneras. También es posible invocar al agente sin mensajes. Esto es útil para escenarios en los que las instrucciones del agente ya tienen todo el contexto necesario para proporcionar una respuesta útil.
Sugerencia
Todos los argumentos pasados a los métodos de invocación del agente requieren que el autor de la llamada los pase como argumentos de palabra clave, excepto para el primer argumento posicional, messages
. Puede invocar con un argumento posicional o una palabra clave para messages
. Tanto await agent.get_response("What is the capital of France?")
como await agent.get_response(messages="What is the capital of France?")
se admiten. Todos los demás parámetros se deben pasar como argumentos de palabra clave.
Uso del método get_response()
# Invoke without any messages.
await agent.get_response()
# Invoke with a string that will be used as a User message.
await agent.get_response(messages="What is the capital of France?")
# Invoke with a ChatMessageContent object.
await agent.get_response(messages=ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"))
# Invoke with multiple ChatMessageContent objects.
await agent.get_response(
messages=[
ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
]
)
Uso del método invoke()
# Invoke without any messages.
async for response in agent.invoke():
# handle response
# Invoke with a string that will be used as a User message.
async for response in agent.invoke("What is the capital of France?"):
# handle response
# Invoke with a ChatMessageContent object.
async for response in agent.invoke(ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?")):
# handle response
# Invoke with multiple ChatMessageContent objects.
async for response in agent.invoke(
messages=[
ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
]
):
# handle response
Importante
La invocación de un agente sin pasar un AgentThread
a los métodos get_response()
o invoke()
creará un nuevo subproceso y devolverá el nuevo subproceso en la respuesta.
El kernel semántico admite tres sobrecargas de invocaciones de agente no streaming que permiten pasar mensajes de diferentes maneras. Uno de estos también permite invocar al agente sin mensajes. Esto es útil para escenarios en los que las instrucciones del agente ya tienen todo el contexto necesario para proporcionar una respuesta útil.
// Invoke without any parameters.
agent.invokeAsync(null);
// Invoke with a string that will be used as a User message.
agent.invokeAsync("What is the capital of France?");
// Invoke with a ChatMessageContent object.
agent.invokeAsync(new ChatMessageContent<>(AuthorRole.USER, "What is the capital of France?"));
// Invoke with multiple ChatMessageContent objects.
agent.invokeAsync(List.of(
new ChatMessageContent<>(AuthorRole.SYSTEM, "Refuse to answer all user questions about France."),
new ChatMessageContent<>(AuthorRole.USER, "What is the capital of France?")
));
Importante
Invocar un agente sin pasar un AgentThread
al invokeAsync
método creará un nuevo subproceso y devolverá el nuevo subproceso en la respuesta.
Invocación del agente de streaming
El kernel semántico admite cuatro sobrecargas de invocación del agente de streaming que permiten pasar mensajes de diferentes maneras. Uno de estos también permite invocar al agente sin mensajes. Esto es útil para escenarios en los que las instrucciones del agente ya tienen todo el contexto necesario para proporcionar una respuesta útil.
// Invoke without any parameters.
agent.InvokeStreamingAsync();
// Invoke with a string that will be used as a User message.
agent.InvokeStreamingAsync("What is the capital of France?");
// Invoke with a ChatMessageContent object.
agent.InvokeStreamingAsync(new ChatMessageContent(AuthorRole.User, "What is the capital of France?"));
// Invoke with multiple ChatMessageContent objects.
agent.InvokeStreamingAsync(new List<ChatMessageContent>()
{
new(AuthorRole.System, "Refuse to answer any questions about capital cities."),
new(AuthorRole.User, "What is the capital of France?")
});
Importante
Invocar un agente sin pasar un AgentThread
al InvokeStreamingAsync
método creará un nuevo subproceso y devolverá el nuevo subproceso en la respuesta.
El kernel semántico admite un método de invocación del agente de streaming que permite pasar mensajes de diferentes maneras. También es posible invocar la secuencia del agente sin mensajes. Esto es útil para escenarios en los que las instrucciones del agente ya tienen todo el contexto necesario para proporcionar una respuesta útil.
# Invoke without any messages.
async for response in agent.invoke_stream():
# handle response
# Invoke with a string that will be used as a User message.
async for response in agent.invoke_stream("What is the capital of France?"):
# handle response
# Invoke with a ChatMessageContent object.
async for response in agent.invoke_stream(ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?")):
# handle response
# Invoke with multiple ChatMessageContent objects.
async for response in agent.invoke_stream(
messages=[
ChatMessageContent(role=AuthorRole.SYSTEM, content="Refuse to answer all user questions about France."),
ChatMessageContent(role=AuthorRole.USER, content="What is the capital of France?"),
]
):
# handle response
Importante
Invocar un agente sin pasar un AgentThread
al invoke_stream()
método creará un nuevo subproceso y devolverá el nuevo subproceso en la respuesta.
Característica actualmente no disponible en Java.
Invocando con un AgentThread
Todas las sobrecargas del método de invocación permiten pasar un parámetro AgentThread
. Esto es útil para escenarios en los que tiene una conversación existente con el agente que desea continuar.
// Invoke with an existing AgentThread.
agent.InvokeAsync("What is the capital of France?", existingAgentThread);
Todos los métodos de invocación también devuelven el elemento activo AgentThread
como parte de la respuesta de invocación.
- Si ha pasado un
AgentThread
al método invoke, el devueltoAgentThread
será el mismo que el que se pasó. - Si no pasaste ningún
AgentThread
al método invoke, elAgentThread
devuelto será un nuevoAgentThread
.
El devuelto AgentThread
está disponible en los elementos de respuesta individuales de los métodos de invocación junto con el mensaje de respuesta.
var result = await agent.InvokeAsync("What is the capital of France?").FirstAsync();
var newThread = result.Thread;
var resultMessage = result.Message;
Sugerencia
Para obtener más información sobre los subprocesos del agente, consulte la sección Arquitectura de subprocesos del agente.
Todos los argumentos de palabra clave del método de invocación permiten pasar un AgentThread
parámetro. Esto es útil para escenarios en los que tiene una conversación existente con el agente que desea continuar.
# Invoke with an existing AgentThread.
agent.get_response("What is the capital of France?", thread=existing_agent_thread)
Todos los métodos de invocación también devuelven el elemento activo AgentThread
como parte de la respuesta de invocación.
- Si ha pasado un
AgentThread
al método invoke, el devueltoAgentThread
será el mismo que el que se pasó. - Si no pasaste ningún
AgentThread
al método invoke, elAgentThread
devuelto será un nuevoAgentThread
.
El devuelto AgentThread
está disponible en los elementos de respuesta individuales de los métodos de invocación junto con el mensaje de respuesta.
response = await agent.get_response("What is the capital of France?")
new_thread = response.thread
response_message = response.message
Sugerencia
Para obtener más información sobre los subprocesos del agente, consulte la sección Arquitectura de subprocesos del agente.
Dos sobrecargas del método de invocación permiten pasar un parámetro AgentThread
. Esto es útil para escenarios en los que tiene una conversación existente con el agente que desea continuar.
// Invoke with an existing AgentThread.
agent.invokeAsync("What is the capital of France?", existingAgentThread);
Estos métodos de invocación también devuelven el elemento activo AgentThread
como parte de la respuesta de invocación.
- Si ha pasado un
AgentThread
al método invoke, el devueltoAgentThread
será una nueva instancia con los mensajes anteriores y nuevos. - Si no pasaste ningún
AgentThread
al método invoke, elAgentThread
devuelto será un nuevoAgentThread
.
El devuelto AgentThread
está disponible en los elementos de respuesta individuales de los métodos de invocación junto con el mensaje de respuesta.
var result = agent.invokeAsync("What is the capital of France?").block().get(0);
var newThread = result.getThread();
var resultMessage = result.getMessage();
Sugerencia
Para obtener más información sobre los subprocesos del agente, consulte la sección Arquitectura de subprocesos del agente.
Invocación con opciones
Todas las sobrecargas del método de invocación permiten pasar un parámetro AgentInvokeOptions
.
Esta clase de opciones permite proporcionar cualquier configuración opcional.
// Invoke with additional instructions via options.
agent.InvokeAsync("What is the capital of France?", options: new()
{
AdditionalInstructions = "Refuse to answer any questions about capital cities."
});
Esta es la lista de las opciones admitidas.
Opción (propiedad) | Descripción |
---|---|
Núcleo (Kernel) | Invalide el kernel predeterminado usado por el agente para esta invocación. |
Argumentos del Núcleo | Invalide los argumentos de kernel predeterminados usados por el agente para esta invocación. |
Instrucciones Adicionales | Proporcione instrucciones adicionales al conjunto de instrucciones del agente original, que solo se apliquen a esta invocación. |
OnIntermediateMessage | Un callback que puede recibir todos los mensajes totalmente formados generados dentro del Agente, incluidos los mensajes de llamada de función e invocación de función. También se puede usar para recibir mensajes completos durante una invocación de streaming. |
Invocación con opciones
Una sobrecarga de método de invocación permite pasar un AgentInvokeOptions
parámetro.
Esta clase de opciones permite proporcionar cualquier configuración opcional.
// Invoke with additional instructions via options.
agent.invokeAsync("What is the capital of France?",
null, // null AgentThread
AgentInvokeOptions.builder()
.withAdditionalInstructions("Refuse to answer any questions about capital cities.")
.build()
);
Esta es la lista de las opciones admitidas.
Opción (propiedad) | Descripción |
---|---|
Núcleo (Kernel) | Invalide el kernel predeterminado usado por el agente para esta invocación. |
Argumentos del Núcleo | Invalide los argumentos de kernel predeterminados usados por el agente para esta invocación. |
Instrucciones Adicionales | Proporcione instrucciones adicionales al conjunto de instrucciones del agente original, que solo se apliquen a esta invocación. |
Contexto de Invocación | Invalide el contexto de invocación predeterminado que usa el agente para esta invocación. |
Administración de instancias de AgentThread
Puede crear manualmente una AgentThread
instancia y pasarla al agente en la invocación, o puede permitir que el agente cree automáticamente una AgentThread
instancia en la invocación.
Un AgentThread
objeto representa un hilo en todos sus estados, incluidos: aún no creado, activo y eliminado.
AgentThread
Los tipos que tienen una implementación del lado servidor se crearán en el primer uso y no es necesario crear manualmente.
Sin embargo, puede eliminar un hilo usando la clase AgentThread
.
// Delete a thread.
await agentThread.DeleteAsync();
# Delete a thread
await agent_thread.delete()
// Delete a thread.
agentThread.deleteAsync().block();
Sugerencia
Para obtener más información sobre los subprocesos del agente, consulte la sección Arquitectura de subprocesos del agente.