0 / 0

Codificación de un experimento RAG AutoAI con un almacén de vectores

Última actualización: 09 jun 2025
Codificación de un experimento RAG AutoAI con un almacén de vectores

Revise las directrices y los ejemplos de código para aprender a codificar un experimento RAG AutoAI con una base de datos distribuida de almacenamiento de vectores. Puede utilizar los siguientes pasos y ejemplos de código con un almacén de vectores Milvus o Elasticsearch.

Para una solución RAG empresarial o de producción con un almacén de vectores Milvus, configure una base de datos de vectores con Milvus. El contenido vectorizado persiste para futuros patrones e integraciones. Para más detalles, consulte Trabajar con Milvus.

Para obtener más información y ejemplos de código sobre la codificación de un experimento RAG AutoAI con un almacén de vectores Milvus, consulte el cuaderno Automatización del patrón RAG con la base de datos Milvus.

El cuaderno utiliza la biblioteca cliente watsonx.ai Python (versión 1.3.17 o posterior).

Siga estos pasos para codificar un experimento AutoAI RAG para su caso de uso.

  1. Prepare los requisitos previos para preparar los datos y configurar el experimento
  2. Configura el experimento RAG
  3. Ejecute el experimento
  4. Revisa los patrones y selecciona el mejor
  5. Desplegar el patrón
  6. Limpieza (opcional)

Paso 1: Preparar los requisitos previos para preparar los datos y poner en marcha el experimento

Prepare los requisitos previos para el experimento.

  • Instale e importe los módulos y dependencias necesarios. Por ejemplo:
pip install 'ibm-watsonx-ai[rag]>=1.3.17'
pip install langchain-community==0.2.4
from ibm_watsonx_ai import APIClient, Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.mydomain.com",
                   api_key = "***********"
                  )

client = APIClient(credentials)
client.set.default_project("<Project ID>")
client.set.default_space("<Space GUID>")
  • Preparar los documentos de puesta a tierra
  • Preparar los datos de evaluación

Documentos de puesta a tierra

Prepare y conecte a tierra los documentos que utilizará para realizar el experimento RAG. Para obtener más información, consulte Obtención y preparación de datos en un proyecto.

  • Formatos admitidos: PDF, HTML, DOCX, Markdown, texto sin formato
  • Conéctese a los datos de un Cloud Object Storage bucket, una carpeta de un bucket o especifique hasta 20 archivos.
  • AutoAI muestra la documentación para realizar el experimento

Por ejemplo, para crear una conexión de datos cuando los documentos se almacenan en un bucket Cloud Object Storage:

from ibm_watsonx_ai.helpers import DataConnection, S3Location

datasource_name = 'bluemixcloudobjectstorage'

conn_meta_props= {
    client.connections.ConfigurationMetaNames.NAME: f"Connection to input data - {datasource_name} ",
    client.connections.ConfigurationMetaNames.DATASOURCE_TYPE: client.connections.get_datasource_type_id_by_name(datasource_name),
    client.connections.ConfigurationMetaNames.DESCRIPTION: "ibm-watsonx-ai SDK documentation",
    client.connections.ConfigurationMetaNames.PROPERTIES: {
        'bucket': <BUCKET_NAME>,
        'access_key': <ACCESS_KEY>,
        'secret_key': <SECRET_ACCESS_KEY>,
        'iam_url': 'https://iam.cloud.ibm.com/identity/token',
        'url': <ENDPOINT_URL>
    }
}

conn_details = client.connections.create(meta_props=conn_meta_props)
cos_connection_id = client.connections.get_id(conn_details)

input_data_references = [
    DataConnection(
        connection_asset_id=cos_connection_id,
        location=S3Location(
            bucket=<BUCKET_NAME>,
            path=<BUCKET_PATH>
        )
    )
]

El siguiente ejemplo muestra cómo utilizar el activo de datos creado en el proyecto (o promovido al espacio):

Nota:

core_api.html es un ejemplo de archivo de documento de base utilizado en los cuadernos de muestra.

import os, wget
from ibm_watsonx_ai.helpers import DataConnection

input_data_filename = "core_api.html"
input_data_path = f"https://ibm.github.io/watsonx-ai-python-sdk/{input_data_filename}"

if not os.path.isfile(input_data_filename): 
    wget.download(input_data_path, out=input_data_filename)
    
asset_details = client.data_assets.create(input_data_filename, input_data_filename)
asset_id = client.data_assets.get_id(asset_details)

input_data_references = [DataConnection(data_asset_id=asset_id)]
Consejo:

input_data_references admite hasta 20 DataConnection instancias.

Datos de evaluación

Los datos de evaluación deben estar en formato JSON con un esquema fijo con estos campos: question, correct_answer, correct_answer_document_ids

Por ejemplo:

[
    {
        "question": "What is the purpose of get_token()?",
        "correct_answer": "get_token() is used to retrieve an authentication token for secure API access.",
        "correct_answer_document_ids": [
            "core_api.html"
        ]
    },
    {
        "question": "How does the delete_model() function operate?",
        "correct_answer": "delete_model() method allows users to delete models they've created or managed.",
        "correct_answer_document_ids": [
            "core_api.html"
        ]
    }
]

Preparar los datos de la evaluación:

import os, wget
from ibm_watsonx_ai.helpers import DataConnection

test_data_filename = "benchmarking_data_core_api.json"
test_data_path = f"https://github.com/IBM/watsonx-ai-samples/tree/master/cloud/data/autoai_rag{test_data_filename}"

if not os.path.isfile(test_data_filename): 
    wget.download(test_data_path, out=test_data_filename)

test_asset_details = client.data_assets.create(name=test_data_filename, file_path=test_data_filename)
test_asset_id = client.data_assets.get_id(test_asset_details)

test_data_references = [DataConnection(data_asset_id=test_asset_id)]

Conexión a una base de datos de vectores Milvus

Si utiliza la base de datos de vectores Milvus, cree una conexión con el almacén de vectores.

Nota: Si ya dispone de una conexión Milvus, no es necesario crearla.
from ibm_watsonx_ai.helpers import DataConnection

milvus_data_source_type_id = client.connections.get_datasource_type_uid_by_name("milvus")
details = client.connections.create(
    {
        client.connections.ConfigurationMetaNames.NAME: "Milvus Connection",
        client.connections.ConfigurationMetaNames.DATASOURCE_TYPE: milvus_data_source_type_id,
        client.connections.ConfigurationMetaNames.PROPERTIES: {
            "host": <PASTE MILVUS HOST HERE>,
            "port": <PASTE MILVUS PORT HERE>,
            "username": <PASTE MILVUS USERNAME HERE>,
            "password": <PASTE MILVUS PASSWORD HERE>,
            "ssl": True,
        },
    }
)

milvus_connection_id = client.connections.get_id(details)
vector_store_references = [DataConnection(connection_asset_id=milvus_connection_id)]

Paso 2: Configurar el optimizador RAG

El objeto rag_optimizer proporciona un conjunto de métodos para trabajar con el experimento AutoAI RAG. En este paso, introduzca los detalles para definir el experimento. Para conocer las opciones de configuración disponibles, consulte Parámetros de configuración para los ajustes del experimento.

El siguiente código de ejemplo muestra las opciones de configuración para ejecutar el experimento con la documentación ibm-watsonx-ai SDK:

from ibm_watsonx_ai.experiment import AutoAI

experiment = AutoAI(credentials, project_id=project_id)

rag_optimizer = experiment.rag_optimizer(
    name='DEMO - AutoAI RAG ibm-watsonx-ai SDK documentation',
    description="AutoAI RAG experiment grounded with the ibm-watsonx-ai SDK documentation",
    max_number_of_rag_patterns=5,
    optimization_metrics=[AutoAI.RAGMetrics.ANSWER_CORRECTNESS]
)
Consejo: Puede modificar la configuración utilizando los valores admitidos proporcionados en [Parámetros de configuración para los ajustes del experimento]( autoai-rag-settings.html #parameters).
from ibm_watsonx_ai.foundation_models.schema import (
    AutoAIRAGModelConfig,
    AutoAIRAGModelParams,
)

parameters = AutoAIRAGModelParams(max_sequence_length=32_000)

foundation_model = AutoAIRAGModelConfig(
    model_id="ibm/granite-13b-instruct-v2",
    parameters=parameters,
    prompt_template_text="Answer my question {question} related to these documents {reference_documents}.",
    context_template_text="My document {document}",
    word_to_token_ratio=1.5,
)

chunking_config = {
    "method": "recursive",
    "chunk_size": 256,
    "chunk_overlap": 128,
}

rag_optimizer = experiment.rag_optimizer(
    name="DEMO - AutoAI RAG ibm-watsonx-ai SDK documentation",
    description="AutoAI RAG experiment grounded with the ibm-watsonx-ai SDK documentation",
    embedding_models=["ibm/slate-125m-english-rtrvr"],
    foundation_models=[
        "mistralai/mixtral-8x7b-instruct-v01",
        foundation_model,
    ],
    chunking=[chunking_config],
    max_number_of_rag_patterns=5,
    optimization_metrics=[AutoAI.RAGMetrics.ANSWER_CORRECTNESS]
)

Paso 3: Ejecutar el experimento

Ejecute el optimizador para crear los patrones RAG utilizando las opciones de configuración especificadas. En este ejemplo de código, la tarea se ejecuta en modo interactivo. Puedes ejecutar la tarea en segundo plano cambiando el background_mode a True.

run_details = rag_optimizer.run(
    input_data_references=input_data_references,
    test_data_references=test_data_references,
    vector_store_references=vector_store_references,
    background_mode=False
)

Paso 4: Revisar los patrones y seleccionar el mejor

Una vez finalizado con éxito el experimento RAG AutoAI, puede revisar los patrones. Utilice el método ' summary ' para listar los patrones completados y la información de las métricas de evaluación en forma de un Pandas DataFrame para que pueda revisar los patrones, clasificados según su rendimiento frente a la métrica optimizada.

summary = rag_optimizer.summary()
summary

Por ejemplo, los resultados del patrón se muestran así:

Patrón media_corrección_respuesta fidelidad_media media_correccion_contexto chunking.chunk_size embeddings.model_id vector_store.distance_metric retrieval.method retrieval.number_of_chunks generation.model_id
Pattern1 0.6802 0.5407 1.0000 512 ibm/slate-125m-english-rtrvr euclidiano ventana 5 meta-llama/llama-3-70b-instruct
Pattern2 0.7172 0.5950 1.0000 1024 intfloat/multilingual-e5-large euclidiano ventana 5 ibm/granite-13b-chat-v2
Pattern3 0.6543 0.5144 1.0000 1024 intfloat/multilingual-e5-large euclidiano sencillo 5 ibm/granite-13b-chat-v2
Pattern4 0.6216 0.5030 1.0000 1024 intfloat/multilingual-e5-large coseno ventana 5 meta-llama/llama-3-70b-instruct
Pattern5 0.7369 0.5630 1.0000 1024 intfloat/multilingual-e5-large coseno ventana 3 mistralai/mixtral-8x7b-instruct-v01

Seleccione un patrón para probarlo localmente

El siguiente paso es seleccionar un patrón y probarlo localmente.

best_pattern = rag_optimizer.get_pattern()
from ibm_watsonx_ai.deployments import RuntimeContext

runtime_context = RuntimeContext(api_client=client)
inference_service = best_pattern.inference_service(runtime_context)[0]
question = "How to use new approach of providing credentials to APIClient?"

context = RuntimeContext(
    api_client=client,
    request_payload_json={"messages": [{"role": "user", "content": question}]},
)
print(inference_service(context)["body"]["choices"][0]["message"]["content"])

Respuesta de la modelo:

According to the document, the new approach to provide credentials to APIClient is by using the Credentials class. Here's an example:


from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai import Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.ibm.com",
                   token = "***********",
                  )

client = APIClient(credentials)


This replaces the old approach of passing a dictionary with credentials to the APIClient constructor.

Consejo:

Para recuperar un patrón específico, pase el nombre del patrón a rag_optimizer.get_pattern().

Paso 5: Despliegue de un patrón

Después de probar un patrón localmente, puede desplegar el patrón para obtener el punto final e incluirlo en las aplicaciones. El despliegue se realiza almacenando la función GAR definida y, a continuación, creando un activo desplegado. Para obtener más información sobre los despliegues, consulte Despliegue y gestión de activos de IA y Despliegues en línea.

Para crear el despliegue:

deployment_details = best_pattern.inference_service.deploy(
    name="AutoAI RAG deployment - ibm_watsonx_ai documentation",
    space_id=space_id,
    deploy_params={"tags": ["wx-autoai-rag"]}
)

Recupera el ID de despliegue del activo desplegado.

deployment_id = client.deployments.get_id(deployment_details)

El servicio RAG ya está desplegado en un espacio y disponible para pruebas.

Comprobación del patrón desplegado

Este ejemplo de código muestra cómo probar la solución desplegada. Introduzca las preguntas de la prueba en la carga útil, utilizando el siguiente formato:

payload = {
    "messages": [{"role": "user", "content": "How to use new approach of providing credentials to APIClient?"}]
}

score_response = client.deployments.run_ai_service(deployment_id, payload)
answer = score_response["choices"][0]["message"]["content"]
print(answer)

Respuesta de la modelo:

According to the document, the new approach to provide credentials to APIClient is by using the Credentials class. Here's an example:


from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai import Credentials

credentials = Credentials(
                   url = "https://us-south.ml.cloud.ibm.com",
                   token = "***********",
                  )

client = APIClient(credentials)


This replaces the old approach of passing a dictionary with credentials to the APIClient constructor.

Revisión de resultados de experimentos en Cloud Object Storage.

Si el estado final del experimento es fallido o error, utilice rag_optimizer.get_logs() o consulte los resultados del experimento para comprender qué ha ido mal. Los resultados de los experimentos y los registros se almacenan en la instancia predeterminada Cloud Object Storage vinculada a su cuenta. De forma predeterminada, los resultados se guardan por ID de formación del experimento en el directorio default_autoai_rag_out .

Los resultados se organizan por patrones. Por ejemplo:

|-- Pattern1
|      | -- evaluation_results.json
|      | -- indexing_notebook.ipynb (Milvus)
|      | -- inference_notebook.ipynb (Milvus)
|-- Pattern2
|    ...
|-- training_status.json

Cada patrón contiene estos resultados:

  • El archivo evaluation_results.json contiene los resultados de la evaluación para cada pregunta de referencia.
  • El indexing_notebook.ipynb contiene el código python para construir un índice de base de datos vectorial. Introduce comandos para la recuperación de datos, el chunking y la creación de embeddings.
  • El cuaderno inference_notebook.ipynb se centra en recuperar pasajes relevantes de una base de conocimientos para las consultas de los usuarios y generar respuestas alimentando los pasajes recuperados en un gran modelo lingüístico.

Puedes revisar los cuadernos o ejecutarlos añadiendo credenciales de autenticación.

Nota:

El cuaderno de resultados indexing_notebook.ipynb contiene el código para incrustar e indexar los documentos. Puede acelerar la tarea de indexación de documentos cambiando vector_store.add_documents() por vector_store.add_documents_async().

Obtener cuadernos de inferencia e indexación

Para descargar del Servicio el cuaderno de inferencia especificado, utilice get_inference_notebook(). Si deja pattern_name vacío, el método descarga el cuaderno del patrón mejor clasificado.

rag_optimizer.get_inference_notebook(pattern_name='Pattern3')

Paso 6: Limpieza (opcional)

Si desea eliminar su colección de la base de datos de vectores Milvus, utilice el SDK de python para Milvus.

Para encontrar el nombre de la colección, vaya a Detalles del patrón y vea Nombre del índice del almacén vectorial.

Por ejemplo:

from pymilvus import MilvusClient

password = "<YOUR APIKEY>"
user = "ibmlhapikey"
uri = f"https://<HOST>:<PORT_NUMBER>"

collection_name = "autoai_rag_5c74df6a_20250319124623"   

client = MilvusClient(uri=uri, password=password, user=milvus_credentials["username"])

client.drop_collection(collection_name=collection_name)

Próximos pasos

  • Ejecute el cuaderno de inferencias con nuevas preguntas para utilizar el patrón GAR seleccionado.
  • Utilice los documentos indexados de este experimento en la página Prompt Lab para fundamentar las indicaciones de un modelo de fundación. Consulte Uso de un índice AutoAI Rag para chatear con documentos.

Tema principal: Automatización de un patrón RAG con el SDK AutoAI