feat: personalize agent interaction with customer name

- Update prompt to use customer name for personalized greetings
- Pass state to tools via agent execution
- schedule_appointment now gets customer_id from state if not provided
This commit is contained in:
2026-03-11 00:21:55 -05:00
parent f90da6a14b
commit e92cb969e9
3 changed files with 17 additions and 4 deletions

View File

@@ -228,7 +228,7 @@ class Agent:
tool_results: list[BaseMessage] = [] tool_results: list[BaseMessage] = []
for tool_call in last_message.tool_calls: for tool_call in last_message.tool_calls:
result = self._execute_tool(tool_call) result = self._execute_tool(tool_call, state)
tool_results.append(result) tool_results.append(result)
if self._post_tool_hook: if self._post_tool_hook:
@@ -236,7 +236,7 @@ class Agent:
return {"messages": state["messages"] + tool_results} return {"messages": state["messages"] + tool_results}
def _execute_tool(self, tool_call: dict) -> ToolMessage: def _execute_tool(self, tool_call: dict, state: MessagesState) -> ToolMessage:
""" """
Ejecuta una herramienta individual con manejo de errores. Ejecuta una herramienta individual con manejo de errores.
""" """
@@ -253,6 +253,7 @@ class Agent:
try: try:
tool = self._tools_by_name[tool_name] tool = self._tools_by_name[tool_name]
tool_args["state"] = state
observation = tool.invoke(tool_args) observation = tool.invoke(tool_args)
return ToolMessage( return ToolMessage(

View File

@@ -6,6 +6,9 @@ prompts:
Presentate como Naliia una asistente que brinda atención al cliente. Presentate como Naliia una asistente que brinda atención al cliente.
Tu tono es cálido, profesional y eficiente — como una recepcionista experta que conoce a los clientes habituales. Tu tono es cálido, profesional y eficiente — como una recepcionista experta que conoce a los clientes habituales.
Cuando te identifiques con el cliente, usa su nombre para saludarlo de manera personalizada.
Si hay un cliente identificado en el estado de la conversación, debes dirigirte a él por su nombre.
</Identidad> </Identidad>
<Reglas de Conversación> <Reglas de Conversación>

View File

@@ -158,8 +158,9 @@ class NaliiaTools:
schedule_time, schedule_time,
description, description,
service_center=11, service_center=11,
customer=4, customer=None,
professional=6, professional=6,
state=None,
) -> bool: ) -> bool:
""" """
Permite agendar una cita para un cliente en un centro de servicio específico. Permite agendar una cita para un cliente en un centro de servicio específico.
@@ -169,7 +170,7 @@ class NaliiaTools:
schedule_time: Hora de la cita en formato HH:MM:SS. schedule_time: Hora de la cita en formato HH:MM:SS.
description (str): Descripción o motivo de la cita. description (str): Descripción o motivo de la cita.
service_center (int, optional): ID del centro de servicio. Por defecto es 11. service_center (int, optional): ID del centro de servicio. Por defecto es 11.
customer (int, optional): ID del cliente. Por defecto es 4. customer (int, optional): ID del cliente. Si no se proporciona, se obtiene del estado.
professional (int, optional): ID del profesional. Por defecto es 6. professional (int, optional): ID del profesional. Por defecto es 6.
Returns: Returns:
@@ -185,6 +186,14 @@ class NaliiaTools:
if not schedule_date and schedule_time: if not schedule_date and schedule_time:
return False return False
if customer is None and state is not None:
customer = state.get("customer_id", 0)
logger.info(f"Customer ID obtained from state: {customer}")
if customer is None or customer == 0:
logger.warning("No se pudo obtener el ID del cliente")
return False
schedule = ( schedule = (
datetime.combine(schedule_date, schedule_time) datetime.combine(schedule_date, schedule_time)
.replace(tzinfo=ZoneInfo(TIMEZONE)) .replace(tzinfo=ZoneInfo(TIMEZONE))