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 | Propósito |
|---|---|
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 | Propósito |
|---|---|
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 | Propósito |
|---|---|
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()
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. Estos son algunos ejemplos.
Cuando se usa 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);
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.