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:
@@ -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(
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
@@ -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))
|
||||||
|
|||||||
Reference in New Issue
Block a user