From e92cb969e9bd72f749dafeb9d3bda976348801c9 Mon Sep 17 00:00:00 2001 From: aserrador Date: Wed, 11 Mar 2026 00:21:55 -0500 Subject: [PATCH] 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 --- src/naliiabot/bot/agent/agent.py | 5 +++-- .../bot/prompts/prompts/prompts_template.yaml | 3 +++ src/naliiabot/bot/tools/naliia_tools.py | 13 +++++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/naliiabot/bot/agent/agent.py b/src/naliiabot/bot/agent/agent.py index 9542ed3..dddb0ec 100644 --- a/src/naliiabot/bot/agent/agent.py +++ b/src/naliiabot/bot/agent/agent.py @@ -228,7 +228,7 @@ class Agent: tool_results: list[BaseMessage] = [] 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) if self._post_tool_hook: @@ -236,7 +236,7 @@ class Agent: 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. """ @@ -253,6 +253,7 @@ class Agent: try: tool = self._tools_by_name[tool_name] + tool_args["state"] = state observation = tool.invoke(tool_args) return ToolMessage( diff --git a/src/naliiabot/bot/prompts/prompts/prompts_template.yaml b/src/naliiabot/bot/prompts/prompts/prompts_template.yaml index 005b588..17da636 100644 --- a/src/naliiabot/bot/prompts/prompts/prompts_template.yaml +++ b/src/naliiabot/bot/prompts/prompts/prompts_template.yaml @@ -6,6 +6,9 @@ prompts: 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. + 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. + diff --git a/src/naliiabot/bot/tools/naliia_tools.py b/src/naliiabot/bot/tools/naliia_tools.py index 554d8e9..28c6ea4 100644 --- a/src/naliiabot/bot/tools/naliia_tools.py +++ b/src/naliiabot/bot/tools/naliia_tools.py @@ -158,8 +158,9 @@ class NaliiaTools: schedule_time, description, service_center=11, - customer=4, + customer=None, professional=6, + state=None, ) -> bool: """ 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. description (str): Descripción o motivo de la cita. 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. Returns: @@ -185,6 +186,14 @@ class NaliiaTools: if not schedule_date and schedule_time: 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 = ( datetime.combine(schedule_date, schedule_time) .replace(tzinfo=ZoneInfo(TIMEZONE))