En el dinámico mundo de los negocios modernos, donde la comunicación y los flujos de trabajo eficientes son cruciales para el éxito, las soluciones impulsadas por IA se han convertido en una ventaja competitiva.
Los agentes de IA, basados en modelos de lenguaje grande (LLM) de vanguardia y potenciados por NVIDIA NIM, brindan una manera sencilla de mejorar la productividad y el flujo de información. NIM, parte de NVIDIA AI Enterprise , es un conjunto de microservicios fáciles de usar diseñados para una implementación segura y confiable de inferencia de modelos de IA de alto rendimiento en nubes, centros de datos y estaciones de trabajo.
Al aprovechar el poder de los microservicios NIM, las empresas pueden aprovechar los modelos del Catálogo de API y crear rápidamente Slackbots inteligentes que van mucho más allá de la simple automatización. Esto sugiere que el Catálogo de API se puede utilizar para implementaciones de producción. Estos Slackbots se convierten en valiosos asistentes virtuales, capaces de manejar una amplia gama de tareas, desde responder consultas básicas hasta resolver problemas complejos e incluso generar contenido creativo. Esto no solo ahorra tiempo y recursos, sino que también fomenta un entorno de trabajo más colaborativo y productivo.
En esta publicación, lo guío paso a paso a través del proceso de creación de un agente de Slackbot personalizado adaptado a casos de uso específicos utilizando NVIDIA NIM y LangChain.
Capacidades y arquitectura de Slackbot
La implementación inicial de Slackbot admite interacciones a través de canales de Slack , hilos y mensajes personales del chatbot. El modelo principal que admite esta interacción es llama-3_1-405b-instruct , que puede acceder a herramientas externas para obtener respuestas mejoradas. Estas herramientas implican la llamada y el preprocesamiento de puntos finales externos.
Las características principales de Slackbot incluyen las siguientes:
- Soporte multicanal: Slackbot puede ser invitado a cualquier canal y responder consultas relevantes al contexto de ese canal.
- Interacción mediante etiquetado : para iniciar una conversación, los usuarios etiquetan al bot y formulan una pregunta detallada. El bot responde en un hilo y etiqueta al usuario en el mismo canal.
- Respuestas personalizables : Slackbot puede hacer un seguimiento con una pregunta aclaratoria o usar herramientas externas para generar respuestas. También admite mensajes privados.
Para la arquitectura (Figura 1), se utiliza Amazon EC2 como host principal del proyecto y Amazon Aurora PostgreSQL como base de datos para realizar el seguimiento de las interacciones entre humanos e IA en Slack. Se pueden utilizar otros proveedores de nube como Microsoft Azure o Google Cloud como alternativas.
Para la gestión de la memoria, DynamoDB se combina con DynamoDBChatMessageHistory de LangChain para realizar un seguimiento de las interacciones anteriores del usuario.
Guía paso a paso para crear un agente de Slackbot
Estos son los pasos para implementar Slackbot en AWS:
- Instalar las bibliotecas necesarias
- Definir el agente principal
- Configurar DynamoDB para la gestión de memoria
- Configurar la memoria conversacional
- Definir el uso de herramientas basadas en palabras clave
- Finalizar el agente
- Guardar interacciones en Amazon Aurora PostgreSQL
Prerrequisitos
Antes de comenzar a construir Slackbot, asegúrese de lo siguiente:
- Configurar Slack .
- Familiarícese con LangChain y los agentes
Las bibliotecas necesarias para la instalación incluyen las siguientes:
openai boto3 slack_bolt slack - sdk langchain python - dotenv langchain - community langchain - nvidia - ai - endpoints python - dotenv langchainhub |
También necesitarás los siguientes recursos:
- Una clave API del catálogo de API de NVIDIA
- Cuenta de AWS (para Amazon EC2, Amazon Aurora, Amazon DynamoDB, Amazon ElastiCache, etc.) o servicios de nube similares
- Cuaderno de laboratorio de Jupyter para pruebas iniciales
Instalar las bibliotecas necesarias
Antes de configurar el agente, asegúrese de que estén instaladas las bibliotecas necesarias, como LangChain, puntos finales LangChain NVIDIA AI , Slack SDK, etc.:
pip install openai boto3 slack_bolt slack - sdk langchain python - dotenv langchain - community langchain - nvidia - ai - endpoints langchainhub |
Definir el agente principal
A continuación, defina las funciones principales de Slack para la interacción del usuario e integre el modelo NIM como agente principal :
from slack_bolt import App from slack_bolt.adapter.socket_mode import SocketModeHandler from dotenv import load_dotenv from langchain.agents import AgentExecutor, create_react_agent from langchain.memory import ConversationBufferWindowMemory from langchain_core.prompts import PromptTemplate from langchain_nvidia_ai_endpoints import ChatNVIDIA def agent(user_id, thread_id, channel_name, message_text): try : llm = ChatNVIDIA( model = "meta/llama-3.1-405b-instruct" , temperature = 0.1 , top_p = 1 , max_tokens = 2000 , ) |
Utilice el modelo Llama-3 de Meta, que brinda soporte para las tareas del agente. En la misma función, declare las herramientas del agente , que son recursos externos que los agentes de IA utilizan para completar tareas que van más allá de sus capacidades inherentes. Las herramientas pueden tener cualquier alcance, siempre que tengan un punto final de API en funcionamiento:
tools = [ CalculatorTool(), CopilotTool(), BrowsingTool(), ... #Other Tools ] |
Configurar DynamoDB para la gestión de memoria
Para realizar un seguimiento de las interacciones del agente, inicialice la tabla DynamoDB y configure la memoria de la sesión:
# Specify the region where the table is created boto3.setup_default_session(region_name = 'us-east-2' ) # Initialize DynamoDBChatMessageHistory session_id = channel_name # Use channel_name as session ID history = DynamoDBChatMessageHistory(table_name = "SessionTable" , session_id = session_id) |
Configurar la memoria conversacional
Integrar el historial de mensajes de chat en la memoria conversacional del agente:
conversational_memory = ConversationBufferWindowMemory( memory_key = 'chat_history' , k = 10 , return_messages = True , input_key = 'input' , output_key = 'output' , chat_memory = history ) |
Definir el uso de herramientas basadas en palabras clave
Puede agregar activadores basados en palabras clave para solicitarle al bot que use herramientas específicas:
# Check for specific hashtags and use the corresponding tool if "%intro" in message_text.lower(): result = INTRO_MESSAGE elif "%gtc24" in message_text.lower(): selected_tool = GTCFAQTool() result = selected_tool._run(message_text) ... else : # Read the template from prompt.txt file with open ( 'prompt.txt' , 'r' ) as file : template = file .read() prompt = PromptTemplate.from_template(template) |
Para conocer su caso de uso específico, consulte LangChain Hub .
Finalizar el agente
ReACT es un marco en el que los LLM combinan razonamiento con acciones. Úselo para resolver tareas en función de los ejemplos proporcionados. Cree el agente ReACT y el ejecutor del agente con las variables predefinidas:
# LLM is the NIM agent, with ReACT prompt and defined tools react_agent = create_react_agent( llm = llm, tools = tools, prompt = prompt ) # Connect to DB for memory, add react agent and suitable exec for Slack agent_executor = AgentExecutor( agent = react_agent, tools = tools, verbose = True , handle_parsing_errors = True , return_intermediate_steps = True , memory = conversational_memory ) |
Guardar interacciones en Amazon Aurora PostgreSQL
Guarde la interacción en una función predefinida para la base de datos PostgreSQL de Amazon Aurora:
save_conversation(user_id, thread_id, channel_name, message_text, result) return result |
Hay varios mecanismos de manejo de errores que puedes agregar al flujo del agente según el caso de uso dado:
- Agregue un controlador de excepciones para un mensaje personalizado cuando las herramientas fallan
- Mensaje de tiempo de espera para cuando la herramienta tarda demasiado
- Mensaje de error que permite al usuario saber que la herramienta está fallando
Configurar interacciones de Slack
Después de configurar los permisos e instalar las bibliotecas necesarias, cargue las variables de entorno e inicialice la aplicación Slack:
# Load environment variables load_dotenv( ".env" ) # Initialize Slack app app = App(token = os.getenv( 'SLACK_BOT_TOKEN' )) |
Para configurar mensajes predefinidos, constantes y avisos largos, agregue los archivos en formato de texto e invóquelos por separado:
# Constant examples MAX_BLOCK_CHARS = 3000 #Slack char limit MESSAGE_FOLDER = "messages" def load_message(file_name): file_path = os.path.join(MESSAGE_FOLDER, file_name) with open (file_path, 'r' ) as file : return file .read() #Example loading automatic message INTRO_MESSAGE = load_message( 'greeting_message.txt' ) |
Hay varias formas de gestionar la comunicación, incluidos eventos personalizados para mencionar aplicaciones, publicar y enviar mensajes a Slack y dividir mensajes en varios bloques si exceden el límite de caracteres.
Para permitir que el agente maneje mensajes directos, configure un detector de eventos:
# Add event listener for direct messages @app .event( "message" ) def handle_direct_message_events(body, say, logger): event = body[ 'event' ] if event.get( 'channel_type' ) = = 'im' : user_id = event[ 'user' ] thread_id = event.get( 'ts' ) channel_name = event[ 'channel' ] # Use the user ID as channel_name text = event[ 'text' ].strip() response = agent_with_timeout(user_id, thread_id, channel_name, text) if response is not None : post_message_to_slack(channel_name, response, thread_id, user_id) |
Creación de herramientas personalizadas para el agente
Para agregar herramientas personalizadas, amplíe la BaseTool
clase LangChain proporcionando un nombre claro y una descripción detallada para cada herramienta:
class CustomTool(BaseTool): name = "Custom Tool" description = """ Tool used to fetch information ... """ |
Asegúrese de que la descripción sea completa e incluya un ejemplo para su uso en las indicaciones. Luego, agregue la herramienta al conjunto de herramientas del agente.
También puede personalizar el comportamiento de la herramienta para diversos escenarios, como usar patrones de expresiones regulares para que coincidan con el diseño de la interfaz de Slack para los bloques de codificación.
Este enfoque garantiza que cada herramienta se adapte a las necesidades específicas y mejora la versatilidad del agente.
Gestión de interacciones y memoria de agentes
Para almacenar las interacciones entre el agente y el usuario, conéctese a la instancia de base de datos PostgreSQL de Amazon Aurora:
DB_NAME = os.getenv( 'DB_NAME' ) DB_USER = os.getenv( 'DB_USER' ) DB_PASSWORD = os.getenv( 'DB_PASSWORD' ) DB_HOST = os.getenv( 'DB_HOST' ) DB_PORT = os.getenv( 'DB_PORT' ) |
Varias funciones básicas ayudan a administrar la funcionalidad de la base de datos. Puede crear una base de datos manualmente o automatizar el proceso mediante un script. El siguiente ejemplo de código muestra una función que guarda las conversaciones entre el agente y el humano:
# Function to save a conversation def save_conversation(user_id, thread_id, channel_name, message_text, response): try : conn = psycopg2.connect( dbname = DB_NAME, user = DB_USER, password = DB_PASSWORD, host = DB_HOST, port = DB_PORT ) c = conn.cursor() c.execute( """INSERT INTO history (user_id, thread_id, channel_name, message_text, response) VALUES (%s, %s, %s, %s, %s)""" , (user_id, thread_id, channel_name, message_text, response)) conn.commit() conn.close() print ( "Conversation saved successfully" ) except psycopg2.Error as e: print ( "Error saving conversation:" , e) |
En esta función, los detalles de interacción clave (como ID de usuario, nombres de canales y mensajes) se almacenan en la base de datos para referencia futura.
Para la gestión de la memoria, utilice DynamoDB para rastrear las sesiones de conversación y mantener el contexto:
# Initialize the DynamoDB resource using the IAM role credentials in the Ohio region dynamodb = boto3.resource( 'dynamodb' , region_name = 'us-east-2' ) # Create the DynamoDB table table = dynamodb.create_table( TableName = 'SessionTable' , KeySchema = [ { 'AttributeName' : 'SessionId' , 'KeyType' : 'HASH' # Partition key } ], AttributeDefinitions = [ { 'AttributeName' : 'SessionId' , 'AttributeType' : 'S' } ], BillingMode = 'PAY_PER_REQUEST' ) |
Próximos pasos y mejoras
Para optimizar aún más Slackbot, considere las siguientes mejoras:
- Agregue seguridad : obtenga mayor seguridad y control con NVIDIA NeMo Guardrails .
- Descargue e implemente NIM: use una guía sencilla para implementar IA generativa con NVIDIA NIM .
- Supervise el rendimiento del agente : supervise el rendimiento del agente integrando pgAdmin y conectándose con herramientas de visualización de datos como Tableau o PowerBI .
- Amplíe las capacidades de Slackbot: agregue herramientas y fuentes de datos adicionales, como preguntas frecuentes o foros.
- Incorporar almacenamiento en caché: utilice ElastiCache para mejorar los tiempos de respuesta y la eficiencia.
- Agregue registro y seguimiento: use Amazon CloudWatch o LangSmith para mejorar la supervisión y la depuración.
Sigue explorando más allá de los Slackbots personalizados
Los agentes de IA están transformando las aplicaciones empresariales al automatizar tareas, optimizar procesos y aumentar la productividad. Los microservicios NVIDIA NIM ofrecen una manera sencilla de integrar múltiples agentes y herramientas, lo que permite a las empresas crear soluciones personalizadas impulsadas por IA.
En esta publicación, demostré cómo usar los puntos finales de NIM AI para crear un agente de Slackbot de extremo a extremo con herramientas personalizadas. Esta solución mejora una interfaz de Slack simple, lo que le permite manejar tareas más complejas y resolver desafíos únicos.
Para ver más ejemplos, explora el repositorio oficial de GitHub /NVIDIA/GenerativeAIExamples . Para obtener más información sobre cómo crear con microservicios NIM y LangChain, consulta Puntos de conexión de LangChain con NVIDIA AI .
Recursos relacionados
- Sesión de GTC: Hable con sus datos en su idioma nativo
- Contenedores NGC: rag-application-text-chatbot-langchain
- Contenedores NGC: aplicación de trapo, chatbot multivuelta
- Contenedores NGC: aplicación de trapo, chatbot multimodal
- SDK: Llama3 8B Instruir NIM
- SDK: microservicio de inferencia de NeMo
nvidia Blog. X. S. Traducido al español