El Portal de las Tecnologías para la Innovación

Cree un agente LLM de Slackbot personalizado con NVIDIA NIM y LangChain

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:

Las bibliotecas necesarias para la instalación incluyen las siguientes:

openaiboto3slack_boltslack-sdklangchainpython-dotenvlangchain-communitylangchain-nvidia-ai-endpointspython-dotenvlangchainhub

También necesitarás los siguientes recursos:

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 :

fromslack_bolt importAppfromslack_bolt.adapter.socket_mode importSocketModeHandlerfromdotenv importload_dotenvfromlangchain.agents importAgentExecutor, create_react_agentfromlangchain.memory importConversationBufferWindowMemoryfromlangchain_core.prompts importPromptTemplatefromlangchain_nvidia_ai_endpoints importChatNVIDIAdefagent(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 createdboto3.setup_default_session(region_name='us-east-2')# Initialize DynamoDBChatMessageHistorysession_id =channel_name  # Use channel_name as session IDhistory =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 toolif"%intro"inmessage_text.lower():    result =INTRO_MESSAGE elif"%gtc24"inmessage_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 toolsreact_agent =create_react_agent(       llm=llm,       tools=tools,       prompt=prompt)# Connect to DB for memory, add react agent and suitable exec for Slackagent_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)returnresult

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 variablesload_dotenv(".env")# Initialize Slack appapp =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 examplesMAX_BLOCK_CHARS =3000#Slack char limitMESSAGE_FOLDER ="messages"defload_message(file_name):    file_path =os.path.join(MESSAGE_FOLDER, file_name)    with open(file_path, 'r') as file:        returnfile.read()#Example loading automatic messageINTRO_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")defhandle_direct_message_events(body, say, logger):    event =body['event']    ifevent.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)            ifresponse isnotNone:            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 BaseToolclase LangChain proporcionando un nombre claro y una descripción detallada para cada herramienta:

classCustomTool(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 conversationdefsave_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")    exceptpsycopg2.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 regiondynamodb =boto3.resource('dynamodb', region_name='us-east-2')# Create the DynamoDB tabletable =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

nvidia Blog. X. S. Traducido al español

Artículos relacionados

Scroll al inicio