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.
AgentSession es el contenedor de estado de conversación que se usa en las ejecuciones del agente.
¿Qué contiene AgentSession?
| Campo | Purpose |
|---|---|
StateBag |
Contenedor de estado arbitrario para esta sesión |
C# AgentSession es una clase base abstracta. Las implementaciones concretas (creadas a través de CreateSessionAsync()) pueden agregar estado adicional, por ejemplo, un identificador para el almacenamiento del historial de chat remoto, cuando se utiliza el historial administrado por el servicio.
| Campo | Purpose |
|---|---|
session_id |
Identificador único local para esta sesión |
service_session_id |
Identificador de sesión del servicio remoto, como un ID de conversación o de respuesta, cuando se usa el historial gestionado por el servicio |
state |
Diccionario mutable compartido con proveedores de contexto o historial |
| Campo | Purpose |
|---|---|
agent.Session |
Contenedor de estado clave-valor vinculado a una conversación |
Las sesiones proporcionan almacenamiento tipado de pares clave-valor:
type UserPrefs struct {
Theme string `json:"theme"`
Language string `json:"language"`
}
session.Set("user_prefs", UserPrefs{Theme: "dark", Language: "en"})
var prefs UserPrefs
session.Get("user_prefs", &prefs)
session.Delete("user_prefs")
Ámbito del identificador de sesión de servicio
Cuando se usa el historial administrado por el servicio, una sesión puede contener un identificador de sesión emitido por el servicio. Por ejemplo, las respuestas de OpenAI pueden usar un resp_* identificador de respuesta como previous_response_idy la API de conversaciones de OpenAI puede usar un conv_* identificador de conversación como conversación.
OpenAI limita estos identificadores a la clave de API de respaldo o al proyecto de forma predeterminada. Esto suele ser suficiente cuando esa clave o proyecto ya coincide con el perímetro de la aplicación, como en una aplicación de un solo usuario o con una clave o un proyecto independiente por inquilino. El patrón de alojamiento arriesgado consiste en usar una única clave subyacente o un único proyecto para varios usuarios finales, devolver a los clientes ID sin procesar del servicio y aceptar de nuevo esos ID sin verificar su titularidad. En las aplicaciones hospedadas o multiusuario que reutilizan una clave de respaldo o proyecto, no traten service_session_id, previous_response_ido conversation/conversation_id como límites de autorización del usuario final. Almacene los identificadores del lado del servicio en el almacenamiento de aplicaciones de confianza, asigne identificadores de sesión visibles para el cliente a esos identificadores del lado del servicio y compruebe el usuario o inquilino autenticado antes de reanudar una conversación.
Patrón de uso integrado
AgentSession session = await agent.CreateSessionAsync();
var first = await agent.RunAsync("My name is Alice.", session);
var second = await agent.RunAsync("What is my name?", session);
session = agent.create_session()
first = await agent.run("My name is Alice.", session=session)
second = await agent.run("What is my name?", session=session)
session, err := a.CreateSession(ctx)
if err != nil {
panic(err)
}
resp, _ := a.RunText(ctx, "Hello!", agent.WithSession(session)).Collect()
resp, _ = a.RunText(ctx, "Follow-up question.", agent.WithSession(session)).Collect()
Uso de sesiones con el agente de Harness
Harness Agent usa el mismo AgentSession ciclo de vida descrito anteriormente. Vuelva a usar una sesión a través de turnos para que el historial de chat y las características de arnés con respaldo de sesión, como todos, el modo operativo, la memoria de archivo, las aprobaciones de herramientas y el estado de tarea en segundo plano, permanezcan conectados. Serialice la sesión cuando ese estado deba sobrevivir a un reinicio del proceso.
HarnessAgent se establece de forma predeterminada en InMemoryChatHistoryProvider. Reemplácelo a través de HarnessAgentOptions.ChatHistoryProvider cuando el historial debe usar otro almacén.
AsHarnessAgent(options) es una abreviatura para construir new HarnessAgent(chatClient, options).
HarnessAgent agent = chatClient.AsHarnessAgent();
AgentSession session = await agent.CreateSessionAsync();
await agent.RunAsync("Plan the migration.", session);
await agent.RunAsync("Continue with the next step.", session);
var serialized = await agent.SerializeSessionAsync(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
El arnés conserva el historial de chat local después de cada llamada de modelo dentro de un bucle de llamada a herramientas, no solo después de la ejecución del agente externo. Continúe pasando la misma sesión para conservar ese historial en bucle y el estado de los proveedores de contexto predeterminados.
create_harness_agent el valor predeterminado es history_providerInMemoryHistoryProvider(). Pase un personalizado HistoryProvider a través history_provider= de cuando el historial debe usar otro almacén.
agent = create_harness_agent(client)
session = agent.create_session()
await agent.run("Plan the migration.", session=session)
await agent.run("Continue with the next step.", session=session)
serialized = session.to_dict()
resumed = AgentSession.from_dict(serialized)
El arnés requiere persistencia del historial de llamadas por servicio, por lo que el proveedor de historial configurado guarda cada llamada de modelo dentro de un bucle de herramientas. El middleware predeterminado de aprobación de herramientas también requiere una sesión; reutilice y restáurelo para conservar el estado de aprobación y proveedor de contexto.
El agente de Harness no está disponible actualmente en el SDK de Go. Use el patrón de sesión normal mostrado anteriormente.
Creación de una sesión a partir de un identificador de conversación de servicio existente
Crear una nueva sesión a partir de un identificador de conversación existente varía según el tipo de agente. A continuación, encontrará algunos ejemplos.
Al usar ChatClientAgent
AgentSession session = await chatClientAgent.CreateSessionAsync(conversationId);
Cuando se usa un A2AAgent
AgentSession session = await a2aAgent.CreateSessionAsync(contextId, taskId);
Úselo cuando el servicio de respaldo ya tenga el estado de conversación.
session = agent.get_session(service_session_id="<service-conversation-id>")
response = await agent.run("Continue this conversation.", session=session)
En las aplicaciones hospedadas, resuelva <service-conversation-id> desde el almacenamiento propiedad de la aplicación después de comprobar el usuario o inquilino actual. Evite aceptar IDs en bruto del lado del servicio procedentes de un cliente, a menos que primero compruebe que quien realiza la llamada es propietario de la conversación.
Serialización y restauración
var serialized = agent.SerializeSession(session);
AgentSession resumed = await agent.DeserializeSessionAsync(serialized);
En una aplicación autohospedada, puede AgentSessionStore cargar y guardar sesiones mediante un identificador de continuación como parte del procesamiento de solicitudes. Esto es distinto de conservar manualmente una sesión y de configurar un proveedor de historial. Consulte Aplicaciones de Marco de agente autohospedado.
serialized = session.to_dict()
resumed = AgentSession.from_dict(serialized)
data, err := json.Marshal(session)
if err != nil {
panic(err)
}
// Save to disk, database, etc.
if err := os.WriteFile("session.json", data, 0o644); err != nil {
panic(err)
}
// Later, restore the session.
loaded, err := os.ReadFile("session.json")
if err != nil {
panic(err)
}
var resumedSession agent.Session
if err := json.Unmarshal(loaded, &resumedSession); err != nil {
panic(err)
}
resp, _ := a.RunText(ctx, "Continue from where we left off.", agent.WithSession(&resumedSession)).Collect()
Tip
Consulte el ejemplo de conversación persistente para obtener un ejemplo completo.
Importante
Las sesiones son específicas del agente o servicio. La reutilización de una sesión con una configuración o proveedor de agente diferente puede provocar un contexto no válido. Si la sesión serializada contiene un identificador de sesión del lado del servicio, restáurelo solo para el usuario de la aplicación o el inquilino que posee ese identificador.