Desarrolle una aplicación basada en trapo utilizando Amazon Aurora con Amazon Kendra

IA generativa Y los grandes modelos de idiomas (LLM) están revolucionando a las organizaciones en diversos sectores para mejorar la experiencia del cliente, lo que tradicionalmente llevaría años para avanzar. Cada organización tiene datos almacenados en tiendas de datos, ya sea en premisas o en proveedores de nubes.

Puede adoptar la IA generativa y mejorar la experiencia del cliente al convertir sus datos existentes en un índice sobre el cual la IA generativa puede buscar. Cuando hace una pregunta a un LLM de código abierto, obtiene información pública disponible como respuesta. Aunque esto es útil, la IA generativa puede ayudarlo a comprender sus datos junto con el contexto adicional de LLMS. Esto se logra a través de la generación de recuperación aumentada (RAG).

Rag recupera datos de una base de conocimiento preexistente (sus datos), lo combina con el conocimiento de la LLM y genera respuestas con un lenguaje más humano. Sin embargo, para que la IA generativa comprenda sus datos, se requiere cierta cantidad de preparación de datos, lo que implica una gran curva de aprendizaje.

Amazon Aurora es una base de datos relacional compatible con MySQL y PostgreSQL construida para la nube. Aurora combina el rendimiento y la disponibilidad de las bases de datos empresariales tradicionales con la simplicidad y la rentabilidad de las bases de datos de código abierto.

En esta publicación, lo guiamos a través de cómo convertir sus datos de aurora existentes en un índice sin necesidad de preparación de datos para Amazon Kendra Para realizar la búsqueda de datos e implementar el trapo que combine sus datos junto con el conocimiento de LLM para producir respuestas precisas.

Descripción general de la solución

En esta solución, use sus datos existentes como fuente de datos (Aurora), cree un servicio de búsqueda inteligente conectando y sincronizando su fuente de datos a Amazon Kendra Search y realice una búsqueda generativa de datos de IA, que utiliza RAG para producir respuestas precisas combinando su datos junto con el conocimiento de la LLM. Para esta publicación, usamos el Claude de Anthrope en Roca madre de Amazon como nuestro LLM.

Los siguientes son los pasos de alto nivel para la solución:

El siguiente diagrama ilustra la arquitectura de la solución.

Requisitos previos

Para seguir esta publicación, se requieren los siguientes requisitos previos:

Crea un clúster de Aurora PostgreSQL

Ejecute los siguientes comandos AWS CLI para crear un clúster V2 sin servidor Aurora PostgreSQL:

aws rds create-db-cluster \
--engine aurora-postgresql \
--engine-version 15.4 \
--db-cluster-identifier genai-kendra-ragdb \
--master-username postgres \
--master-user-password XXXXX \
--db-subnet-group-name dbsubnet \
--vpc-security-group-ids "sg-XXXXX" \
--serverless-v2-scaling-configuration "MinCapacity=2,MaxCapacity=64" \
--enable-http-endpoint \
--region us-east-2

aws rds create-db-instance \
--db-cluster-identifier genai-kendra-ragdb \
--db-instance-identifier genai-kendra-ragdb-instance \
--db-instance-class db.serverless \
--engine aurora-postgresql

La siguiente captura de pantalla muestra la instancia creada.

ML-16454-Aurora_instance

Ingerir datos a Aurora PostgreSQL-Compatible

Conéctese a la instancia de Aurora usando la herramienta PGADmin. Referirse a Conectarse a una instancia de DB que ejecuta el motor de la base de datos PostgreSQL Para más información. Para ingerir sus datos, complete los siguientes pasos:

  1. Ejecute las siguientes declaraciones de PostgreSQL en PGADmin para crear la base de datos, el esquema y la tabla:
    CREATE DATABASE genai;
    CREATE SCHEMA 'employees';
    
    CREATE DATABASE genai;
    SET SCHEMA 'employees';
    
    CREATE TABLE employees.amazon_review(
    pk int GENERATED ALWAYS AS IDENTITY NOT NULL,
    id varchar(50) NOT NULL,
    name varchar(300) NULL,
    asins Text NULL,
    brand Text NULL,
    categories Text NULL,
    keys Text NULL,
    manufacturer Text NULL,
    reviews_date Text NULL,
    reviews_dateAdded Text NULL,
    reviews_dateSeen Text NULL,
    reviews_didPurchase Text NULL,
    reviews_doRecommend varchar(100) NULL,
    reviews_id varchar(150) NULL,
    reviews_numHelpful varchar(150) NULL,
    reviews_rating varchar(150) NULL,
    reviews_sourceURLs Text NULL,
    reviews_text Text NULL,
    reviews_title Text NULL,
    reviews_userCity varchar(100) NULL,
    reviews_userProvince varchar(100) NULL,
    reviews_username Text NULL,
    PRIMARY KEY
    (
    pk
    )
    ) ;

  2. En su conexión PostgreRora de Pgadmin Aurora, navegue a Bases de datos, genai, Esquema, empleados, Mesas.
  3. Elija (haga clic con el botón derecho) Mesas y elegir Herramienta PSQL Para abrir una conexión de cliente PSQL.
    ML-16454_PSQL_TOOL
  4. Coloque el archivo CSV en su ubicación PGADmin y ejecute el siguiente comando:
    \copy employees.amazon_review (id, name, asins, brand, categories, keys, manufacturer, reviews_date, reviews_dateadded, reviews_dateseen, reviews_didpurchase, reviews_dorecommend, reviews_id, reviews_numhelpful, reviews_rating, reviews_sour
    ceurls, reviews_text, reviews_title, reviews_usercity, reviews_userprovince, reviews_username) FROM 'C:\Program Files\pgAdmin 4\runtime\amazon_review.csv' DELIMITER ',' CSV HEADER ENCODING 'utf8';

  5. Ejecute la siguiente consulta de PSQL para verificar el número de registros copiados:
    Select count (*) from employees.amazon_review;

Crear un índice de Amazon Kendra

El Índice de Amazon Kendra mantiene el contenido de sus documentos y está estructurado de una manera de hacer que los documentos sean buscando. Tiene tres tipos de índice:

  • Índice generativo de edición empresarial de IA – Ofrece la mayor precisión para la operación de API de recuperación y para los casos de uso de trapo (recomendado)
  • Índice de edición empresarial -Proporciona capacidades de búsqueda semántica y ofrece un servicio de alta disponibilidad que es adecuado para cargas de trabajo de producción
  • Índice de edición de desarrollador – Proporciona capacidades de búsqueda semántica para que pueda probar sus casos de uso

Para crear un índice de Amazon Kendra, complete los siguientes pasos:

  1. En la consola de Amazon Kendra, elija Índices En el panel de navegación.
  2. Elegir Crear un índice.
  3. En el Especificar detalles del índice Página, proporcione la siguiente información:
    • Para Nombre del índiceingrese un nombre (por ejemplo, genai-kendra-index).
    • Para Papel de iamelegir Crear un nuevo rol (recomendado).
    • Para Nombre de rolingrese un nombre de rol de IAM (por ejemplo, genai-kendra). Su nombre de rol tendrá prefijo AmazonKendra-<region>- (Por ejemplo, AmazonKendra-us-east-2-genai-kendra).
  4. Elegir Próximo.
    ML-16454 Especify-Index-Details
  5. En el Agregar capacidad adicional Página, seleccione Edición de desarrollador (para esta demostración) y elija Próximo.
    ML-16454-capacidad adicional
  6. En el Configurar el control de acceso al usuario Página, proporcione la siguiente información:
    • Bajo Configuración de control de accesoseleccionar No.
    • Bajo Expansión del grupo de usuariosseleccionar Ninguno.
  7. Elegir Próximo.
    ML-16454-Configuración-User-Access-Control
  8. En el Revisar y crear página, verificar los detalles y elegir Crear.
    ML-16454-revisión y creación

Puede tomar algún tiempo para que el índice cree. Verifique la lista de índices para ver el progreso de la creación de su índice. Cuando el estado del índice es ACTIVOsu índice está listo para usar.
ML-16454-Genai-Kendra-índice

Configurar el conector PostgreSQL de Amazon Kendra Aurora

Complete los siguientes pasos para configurar su conector de fuente de datos:

  1. En la consola de Amazon Kendra, elija Fuentes de datos En el panel de navegación.
  2. Elegir Agregar fuente de datos.
  3. Elegir Conector de postgresql aurora Como tipo de fuente de datos.
    ML-16454 Postgresql-Connector
  4. En el Especificar detalles de la fuente de datos Página, proporcione la siguiente información:
    • Para Nombre de fuente de datosingrese un nombre (por ejemplo, data_source_genai_kendra_postgresql).
    • Para Lenguaje predeterminadoelegir Inglés (es).
    • Elegir Próximo.
  5. En el Definir acceso y seguridad página, debajo Fuenteproporcione la siguiente información:
    • Para Anfitrióningrese el nombre de host de la instancia de PostgreSQL (cvgupdj47zsh.us-east-2.rds.amazonaws.com).
    • Para Puertoingrese el número de puerto de la instancia de PostgreSQL (5432).
    • Para Instanciaingrese el nombre de la base de datos de la instancia de PostgreSQL (genai).
  6. Bajo Autenticaciónsi ya tiene credenciales almacenadas en AWS Secrets Managerelige en el menú desplegable de lo contrario, elija Crear y agregar un nuevo secreto.
  7. En el Crear un secreto de AWS Secrets Manager ventana emergente, proporcione la siguiente información:
    • Para Nombre secretoingrese un nombre (por ejemplo, AmazonKendra-Aurora-PostgreSQL-genai-kendra-secret).
    • Para Nombre de usuario base de datosingrese el nombre del usuario de su base de datos.
    • Para Contraseña¸ Ingrese la contraseña del usuario.
  8. Elegir Agregar secreto.
    Ml-16454-create-aws-saprets-ganager
  9. Bajo Configurar VPC y grupo de seguridadproporcione la siguiente información:
    • Para Nube privada virtualelija su nube privada virtual (VPC).
    • Para Subredelija su subred.
    • Para Grupos de seguridad de VPCelija el grupo de seguridad VPC para permitir el acceso a su fuente de datos.
  10. Bajo Papel de iam¸ Si tiene un rol existente, elija en el menú desplegable. De lo contrario, elija Crear un nuevo rol.
    Ml-16454-create_a_new_iam_role
  11. En el Configurar configuraciones de sincronización página, debajo Alcance de sincronizaciónproporcione la siguiente información:
    • Para Consulta SQLingrese la consulta SQL y los valores de la columna de la siguiente manera: select * from employees.amazon_review.
    • Para Clave principalingrese la columna de clave principal (pk).
    • Para Títuloingrese la columna de título que proporciona el nombre del título del documento dentro de la tabla de su base de datos (reviews_title).
    • Para Cuerpoingrese a la columna del cuerpo en la que ocurrirá su búsqueda de Amazon Kendra (reviews_text).
  12. Bajo Nodo de sincronizaciónseleccionar Sincronización completa Para convertir los datos completos de la tabla en un índice de búsqueda.

Después de que la sincronización se complete con éxito, su índice de Amazon Kendra contendrá los datos de la tabla Aurora PostgreSQL especificada. Luego puede usar este índice para aplicaciones inteligentes de búsqueda y trapo.

  1. Bajo Horario de ejecución de sincronizaciónelegir Ejecutar.
  2. Elegir Próximo.
  3. En el Establecer mapeos de campo página, deje la configuración predeterminada y elija Próximo.
  4. Revise su configuración y elija Agregar fuente de datos.

Su fuente de datos aparecerá en el Fuentes de datos página después de que la fuente de datos se haya creado con éxito.

Ml-16454-data-fuente-creación

Invocar la aplicación RAG

La sincronización del índice de Amazon Kendra puede llevar minutos a horas dependiendo del volumen de sus datos. Cuando la sincronización se completa sin error, está listo para desarrollar su solución RAG en su IDE preferido. Complete los siguientes pasos:

  1. Configure sus credenciales de AWS para permitir que Boto3 interactúe con los servicios de AWS. Puedes hacer esto configurando el AWS_ACCESS_KEY_ID y AWS_SECRET_ACCESS_KEY Variables de entorno o utilizando el ~/.aws/credentials archivo:
    import boto3
      pip install langchain
    
    # Create a Boto3 session
    
    session = boto3.Session(
       aws_access_key_id='YOUR_AWS_ACCESS_KEY_ID',
       aws_secret_access_key='YOUR_AWS_SECRET_ACCESS_KEY',
       region_name="YOUR_AWS_REGION"
    )

  2. Importar langchain y los componentes necesarios:
    from langchain_community.llms import Bedrock
    from langchain_community.retrievers import AmazonKendraRetriever
    from langchain.chains import RetrievalQA

  3. Cree una instancia del LLM (Claude de Anthrope):
    llm = Bedrock(
    region_name = "bedrock_region_name",
    model_kwargs = {
    "max_tokens_to_sample":300,
    "temperature":1,
    "top_k":250,
    "top_p":0.999,
    "anthropic_version":"bedrock-2023-05-31"
    },
    model_id = "anthropic.claude-v2"
    )

  4. Cree su plantilla de aviso, que proporciona instrucciones para el LLM:
    from langchain_core.prompts import PromptTemplate
    
    prompt_template = """
    You are a <persona>Product Review Specialist</persona>, and you provide detail product review insights.
    You have access to the product reviews in the <context> XML tags below and nothing else.
    
    <context>
    {context}
    </context>
    
    <question>
    {question}
    </question>
    """
    
    prompt = PromptTemplate(template=prompt_template, input_variables=["context", "question"])

  5. Inicializar el KendraRetriever con su ID de índice de Amazon Kendra reemplazando el Kendra_index_id que creaste anteriormente y el cliente de Amazon Kendra:
    session = boto3.Session(region_name="Kendra_region_name")
    kendra_client = session.client('kendra')
    # Create an instance of AmazonKendraRetriever
    kendra_retriever = AmazonKendraRetriever(
    kendra_client=kendra_client,
    index_id="Kendra_Index_ID"
    )

  6. Combine Claude de Anthrope y el Amazon Kendra Retriever en una cadena de recuperación:
    qa = RetrievalQA.from_chain_type(
    llm=llm,
    chain_type="stuff",
    retriever=kendra_retriever,
    return_source_documents=True,
    chain_type_kwargs={"prompt": prompt},
    )

  7. Invoca la cadena con su propia consulta:
    query = "What are some products that has bad quality reviews, summarize the reviews"
    result_ = qa.invoke(
    query
    )
    result_

    ML-16454-RAG-Output

Limpiar

Para evitar incurrir en cargos futuros, elimine los recursos que creó como parte de esta publicación:

  1. Eliminar el clúster DB de Aurora y la instancia de DB.
  2. Eliminar el índice de Amazon Kendra.

Conclusión

En esta publicación, discutimos cómo convertir sus datos de Aurora existentes en un índice de Amazon Kendra e implementar una solución basada en RAG para la búsqueda de datos. Esta solución reduce drásticamente la necesidad de preparación de datos para la búsqueda de Amazon Kendra. También aumenta la velocidad del desarrollo generativo de aplicaciones de IA al reducir la curva de aprendizaje detrás de la preparación de datos.

Pruebe la solución, y si tiene algún comentario o pregunta, déjelos en la sección de comentarios.


Sobre los autores

Aravind hariharaputran es consultor de datos del equipo de servicios profesionales en Amazon Web Services. Le apasiona datos y AIML en general con una amplia experiencia en la gestión de tecnologías de bases de datos. Ayuda a los clientes a transformar la base de datos y aplicaciones heredadas en plataformas de datos modernas y aplicaciones generativas de IA. Le gusta pasar tiempo con la familia y jugar al cricket.

Ivan Cui Es un líder de ciencia de datos con AWS Professional Services, donde ayuda a los clientes a construir e implementar soluciones utilizando ML y IA generativa en AWS. Ha trabajado con clientes en diversas industrias, incluidos software, finanzas, farmacéutica, atención médica, IoT y entretenimiento y medios de comunicación. En su tiempo libre, le gusta leer, pasar tiempo con su familia y viajar.