Descripción general de LlamaIndex en Vertex AI para RAG

LlamaIndex es un framework para desarrollar aplicaciones de modelos de lenguaje grandes (LLM) adaptados al contexto. El aumento del contexto se produce cuando se aplica un LLM a tus datos. Esto implemente generación aumentada y de recuperación (RAG).

Un problema común con los LLM es que no comprenden el conocimiento privado, es decir, los datos de tu organización. Con LlamaIndex en Vertex AI para RAG, puedes enriquecer el contexto del LLM con información privada adicional, ya que el modelo puede reducir la alucinación y responder preguntas con mayor precisión.

Cuando se combinan fuentes de conocimiento adicionales con el conocimiento existente que tienen los LLM, se proporciona un mejor contexto. El contexto mejorado junto con la consulta mejora la calidad de la respuesta del LLM.

Los siguientes conceptos son clave para entender LlamaIndex en Vertex AI. Estos conceptos se enumeran en el orden del proceso de generación aumentada y de recuperación (RAG).

  1. Transferencia de datos: Ingresa datos de diferentes fuentes de datos. Por ejemplo, archivos locales, Cloud Storage y Google Drive.

  2. Transformación de datos: Conversión de los datos en preparación para la indexación. Por ejemplo, los datos se dividen en fragmentos.

  3. Embedding: Representaciones numéricas de palabras o fragmentos de texto. Estos números capturan el significado semántico y el contexto del texto. Las palabras o textos similares o relacionados tienden a tener incrustaciones similares, lo que significa que están más cerca unas de otras en el espacio vectorial de alta dimensión.

  4. Indexación de datos: LlamaIndex en Vertex AI para RAG crea un índice llamado un corpus. El índice estructura la base de conocimientos para optimizar la búsqueda. Por ejemplo, el índice es como el índice detallado de un libro de consulta masiva.

  5. Recuperación: Cuando un usuario hace una pregunta o proporciona una instrucción, el componente de recuperación de LlamaIndex en Vertex AI para RAG busca en su base de conocimiento información relevante para la consulta.

  6. Generación: La información recuperada se convierte en el contexto que se agrega a la consulta original del usuario como una guía para que el modelo de IA generativa genere respuestas basadas en los hechos y relevantes.

En esta página, se explica cómo usar LlamaIndex en Vertex AI para RAG y se proporcionan muestras de Python para demostrar cómo usar la API de RAV.

Para obtener información sobre los límites de tamaño de los archivos, consulta Tipos de documentos admitidos. Para obtener información sobre las cuotas relacionadas con LlamaIndex en Vertex AI para RAG, consulta Cuotas de LlamaIndex en Vertex AI para RAG.. Para obtener información sobre la personalización de parámetros, consulte Parámetros de recuperación.

Ejecuta LlamaIndex en Vertex AI para RAG con el SDK de Vertex AI

Para usar LlamaIndex en Vertex AI para RAG, haz lo siguiente:

  1. Instalar el SDK de Vertex AI para Python

  2. Ejecuta este comando en la consola de Google Cloud para configurar tu proyecto.

    gcloud config set {project}

  3. Ejecuta este comando para autorizar el acceso.

    gcloud auth application-default login

  4. Copia y pega este código de muestra en la consola de Google Cloud para ejecutar LlamaIndex en Vertex AI.

Python

Si deseas obtener información para instalar o actualizar el SDK de Vertex AI para Python, consulta Instala el SDK de Vertex AI para Python. Si deseas obtener más información, consulta la documentación de referencia de la API de Python.

from vertexai.preview import rag
from vertexai.preview.generative_models import GenerativeModel, Tool
import vertexai

# Create a RAG Corpus, Import Files, and Generate a response

# TODO(developer): Update and un-comment below lines
# project_id = "PROJECT_ID"
# display_name = "test_corpus"
# paths = ["https://drive.google.com/file/123", "gs://my_bucket/my_files_dir"]  # Supports Google Cloud Storage and Google Drive Links

# Initialize Vertex AI API once per session
vertexai.init(project=project_id, location="us-central1")

# Create RagCorpus
rag_corpus = rag.create_corpus(display_name=display_name)

# Import Files to the RagCorpus
response = rag.import_files(
    rag_corpus.name,
    paths,
    chunk_size=512,  # Optional
    chunk_overlap=100,  # Optional
)

# Direct context retrieval
response = rag.retrieval_query(
    rag_resources=[
        rag.RagResource(
            rag_corpus=rag_corpus.name,
            # Supply IDs from `rag.list_files()`.
            # rag_file_ids=["rag-file-1", "rag-file-2", ...],
        )
    ],
    text="What is RAG and why it is helpful?",
    similarity_top_k=10,  # Optional
    vector_distance_threshold=0.5,  # Optional
)
print(response)

# Enhance generation
# Create a RAG retrieval tool
rag_retrieval_tool = Tool.from_retrieval(
    retrieval=rag.Retrieval(
        source=rag.VertexRagStore(
            rag_resources=[
                rag.RagResource(
                    rag_corpus=rag_corpus.name,  # Currently only 1 corpus is allowed.
                    # Supply IDs from `rag.list_files()`.
                    # rag_file_ids=["rag-file-1", "rag-file-2", ...],
                )
            ],
            similarity_top_k=3,  # Optional
            vector_distance_threshold=0.5,  # Optional
        ),
    )
)
# Create a gemini-pro model instance
rag_model = GenerativeModel(
    model_name="gemini-1.0-pro-002", tools=[rag_retrieval_tool]
)

# Generate response
response = rag_model.generate_content("What is RAG and why it is helpful?")
print(response.text)

Modelos compatibles

Estos son los modelos y versiones compatibles con LlamaIndex en Vertex AI:

Modelo Versión
Gemini 1.5 Flash gemini-1.5-flash-001
Gemini 1.5 Pro gemini-1.5-pro-001
Gemini 1.0 Pro gemini-1.0-pro-001
gemini-1.0-pro-002
Gemini 1.0 Pro Vision gemini-1.0-pro-vision-001
Gemini gemini-experimental

Tipos de documentos compatibles

Se admiten documentos de solo texto, incluidos los siguientes tipos de archivo con sus límites de tamaño:

File type Límite de tamaño de archivo
Documentos de Google 10 MB cuando se exporta desde Google Workspace
Dibujos de Google 10 MB cuando se exporta desde Google Workspace
Presentaciones de Google 10 MB cuando se exporta desde Google Workspace
Archivo HTML 10 MB
Archivo JSON 1 MB
Markdown File 10 MB
Diapositivas de Microsoft PowerPoint (archivo PPTX) 10 MB
Documentos de Microsoft Word (archivo DOCX) 10 MB
Archivo PDF 50 MB
Archivo de texto 10 MB

Es posible usar LlamaIndex en Vertex AI para RAG con otros tipos de documentos, pero puede generar respuestas de menor calidad.

Fuentes de datos compatibles

Se admiten tres fuentes de datos, que incluyen:

  • Una carga de un solo archivo mediante upload_file (hasta 25 MB), que es una llamada síncrona.

  • Importa archivos desde Cloud Storage.

  • Importa un directorio de Google Drive.

    La cuenta de servicio debe tener los permisos correctos para importar archivos. De lo contrario, no se importará ningún archivo y no se mostrará ningún mensaje de error. Para obtener más información sobre los límites de tamaño de archivo, consulta Tipos de documentos admitidos.

    Para autenticar y conceder permisos, haz lo siguiente:

    1. Vete a la página IAM de tu proyecto de Google Cloud.
    2. Selecciona Incluir asignación de rol proporcionada por Google.
    3. Busca la cuenta de servicio del agente de servicio de datos de Vertex AI RAG.
    4. Haz clic en compartir en la carpeta de la unidad, y compartir con la cuenta de servicio.
    5. Otorga permiso Viewer a la cuenta de servicio en tu carpeta o archivo de Google Drive. El ID del recurso de Google Drive se encuentra en la URL web.

Para obtener más información, consulta la referencia de la API de RAG.

Transformaciones de datos admitidas

Después de que se transfiere un documento, LlamaIndex en Vertex AI para RAG ejecuta un conjunto de transformaciones para obtener la mejor calidad, y hay parámetros que los desarrolladores pueden controlar en sus casos de uso.

Estos parámetros incluyen lo siguiente:

Parámetro Descripción
chunk_size Cuando los documentos se transfieren a un índice, se dividen en fragmentos. El parámetro chunk_size (en tokens) especifica el tamaño del fragmento. El tamaño de fragmento predeterminado es de 1,024 tokens.
chunk_overlap De forma predeterminada, los documentos se dividen en fragmentos con cierta superposición para mejorar la relevancia y la calidad de recuperación. La superposición predeterminada de fragmentos es de 200 tokens.

Un tamaño de fragmento más pequeño significa que las incorporaciones son más precisas. Un tamaño de fragmento más grande significa que las incorporaciones pueden ser más generales, pero pueden faltar detalles específicos.

Por ejemplo, si conviertes 200 palabras en lugar de 1,000 palabras en un array de incorporaciones de la misma dimensión, puedes perder detalles. Este también es un buen ejemplo de los casos en que se tiene en cuenta el límite de longitud del contexto del modelo. Es posible que un fragmento grande no quepa en un modelo de ventana pequeña.

Parámetros de recuperación

En la siguiente tabla, se incluyen los parámetros de recuperación:

Parámetro Descripción
similarity_top_k Controla la cantidad máxima de contextos que se recuperan.
vector_distance_threshold Solo se consideran los contextos con una distancia menor que el umbral.

Administración de índices

Un corpus es una colección de documentos o fuente de información. Esa colección también se denomina índice. Luego, el índice se puede consultar para recuperar contextos relevantes para la generación de LLM. Cuando se crea un índice por primera vez, el proceso puede tardar un minuto más. Para más creaciones de índices dentro del mismo proyecto de Google Cloud, el proceso tarda menos tiempo.

Se admiten las siguientes operaciones de índice:

No se admiten operaciones simultáneas en corpus. Para obtener más información, consulta la referencia de la API de RAG.

Administración de archivos

Se admiten las siguientes operaciones con archivos:

Para obtener más información, consulta la referencia de la API de RAG.

¿Qué sigue?