Codificação de um experimento AutoAI RAG com extração de texto
Analise as diretrizes e os exemplos de código para saber como codificar um experimento AutoAI RAG usando a extração de texto watsonx para processar documentos de entrada.
Você pode usar a extração de texto para processar documentos de entrada para um experimento AutoAI RAG. A extração de texto transforma documentos comerciais de alta qualidade com tabelas, imagens e diagramas em formato markdown. Os arquivos de marcação resultantes podem então ser usados em um experimento AutoAI RAG para melhorar a qualidade dos padrões gerados.
O serviço de extração de texto usa a biblioteca do cliente watsonx.ai Python (versão 1.3.17 ou posterior). Para obter mais informações sobre como usar a extração de texto do watsonx.ai Python SDK, consulte Extrações de texto.
Siga estas etapas para usar a extração de texto em seu experimento AutoAI RAG.
- Preparar os pré-requisitos para preparar os dados e montar o experimento
- Processar documentos de entrada com extração de texto
- Configurar o otimizador RAG
- Execute o experimento
- Analise os padrões e selecione o melhor
Etapa 1: Prepare os pré-requisitos para preparar os dados e configurar o experimento
Prepare os pré-requisitos para o experimento.
Antes de usar o código de amostra, você deve executar a seguinte tarefa de configuração:
- Entre em contato com o administrador do site Cloud Pak for Data e solicite as credenciais da sua conta
Instale e importe os módulos e dependências necessários. Por exemplo:
pip install 'ibm-watsonx-ai[rag]>=1.3.17'Conecte-se a Watson Machine Learning.
Autenticar o serviço Watson Machine Learning em IBM Cloud Pak for Data. Você precisa fornecer a plataforma
url, seuusernamee seuapi_key.username = 'PASTE YOUR USERNAME HERE' api_key = 'PASTE YOUR API_KEY HERE' url = 'PASTE THE PLATFORM URL HERE'Use-os para inicializar o cliente. Por exemplo:
from ibm_watsonx_ai import APIClient, Credentials credentials = Credentials( username = "username", api_key = "***********", url = "url", instance_id = "openshift" ) client = APIClient(credentials)Como alternativa, você pode usar seus endereços
usernameepasswordpara autenticar os serviços Watson Machine Learning.credentials = Credentials( username=***, password=***, url=***, instance_id="openshift" ) client = APIClient(credentials)Crie um espaço para seu trabalho. Consulte Criação de um espaço.
Defina um espaço padrão. Por exemplo:
client.set.default_space("<Space GUID>")Prepare os documentos de aterramento.
Preparar os dados de avaliação.
Documentos de base
Prepare e conecte-se aos documentos de aterramento que você usará para executar o experimento AutoAI RAG com o serviço de extração de texto.
Crie uma conexão com Cloud Object Storage e obtenha o ID.
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)Prepare dois ativos de conexão, um para a entrada e outro para a saída do serviço de extração de texto.
text_extraction_input_filename = <TEXT EXTRACTION INPUT FILENAME> text_extraction_result_filename = <TEXT EXTRACTION RESULT FILENAME>from ibm_watsonx_ai.helpers import DataConnection, S3Location input_data_reference = DataConnection( connection_asset_id=cos_connection_id, location=S3Location( bucket=<BUCKET_NAME>, path=text_extraction_input_filename ), ) input_data_reference.set_client(client) result_data_reference = DataConnection( connection_asset_id=cos_connection_id, location=S3Location( bucket=<BUCKET_NAME>, path=text_extraction_result_filename ) ) result_data_reference.set_client(client)
Dados de avaliação
Para entrada de dados de avaliação:
- Os dados devem estar no formato JSON com um esquema fixo com estes campos:
question,correct_answer,correct_answer_document_ids correct_answer_document_idsdeve se referir ao arquivo de saída do serviço de extração de texto
benchmarking_data = [
{
"question": "What are the two main variants of Granite Code models?",
"correct_answer": "The two main variants are Granite Code Base and Granite Code Instruct.",
"correct_answer_document_ids": [text_extraction_result_filename],
},
{
"question": "What is the purpose of Granite Code Instruct models?",
"correct_answer": "Granite Code Instruct models are finetuned for instruction-following tasks using datasets like CommitPack, OASST, HelpSteer, and synthetic code instruction datasets, aiming to improve reasoning and instruction-following capabilities.",
"correct_answer_document_ids": [text_extraction_result_filename],
},
{
"question": "What is the licensing model for Granite Code models?",
"correct_answer": "Granite Code models are released under the Apache 2.0 license, ensuring permissive and enterprise-friendly usage.",
"correct_answer_document_ids": [text_extraction_result_filename],
},
]
import os, json
test_filename = "benchmark.json"
if not os.path.isfile(test_filename):
with open(test_filename, "w") as json_file:
json.dump(benchmarking_data, json_file, indent=4)
test_data_reference = DataConnection(
connection_asset_id=cos_connection_id,
location=S3Location(bucket=<BUCKET_NAME>, path=test_filename),
)
test_data_reference.set_client(client)
# Upload file to the COS bucket
test_data_reference.write(test_filename)
test_data_references = [test_data_reference]
Etapa 2: Processar documentos de entrada com extração de texto
Inicialize o serviço de extração de texto.
from ibm_watsonx_ai.foundation_models.extractions import TextExtractionsV2 extraction = TextExtractionsV2(api_client=client)Execute o trabalho de extração de texto.
from ibm_watsonx_ai.metanames import TextExtractionsV2ParametersMetaNames from ibm_watsonx_ai.foundation_models.extractions import TextExtractionsV2ResultFormats response = extraction.run_job( document_reference=input_data_reference, results_reference=result_data_reference, parameters={ TextExtractionsV2ParametersMetaNames.OCR_MODE: "enabled", TextExtractionsV2ParametersMetaNames.LANGUAGES: ["en"] }, result_formats=TextExtractionsV2ResultFormats.MARKDOWN, ) job_id = response['metadata']['id']Obter detalhes do trabalho.
extraction.get_job_details(job_id)Quando o status for
completed, passe para a próxima etapa.
Etapa 3: Configurar o otimizador RAG
O objeto rag_optimizer fornece um conjunto de métodos para trabalhar com o experimento AutoAI RAG. Nessa etapa, insira os detalhes para definir o experimento. Para ver as opções de configuração disponíveis, consulte Parâmetros de configuração para as definições do experimento.
Este código de amostra mostra as opções de configuração para executar o experimento com a documentação do SDK do ibm- watsonx -ai:
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]
)
Etapa 4: Execute o experimento
Execute o otimizador para criar os padrões RAG usando as opções de configuração especificadas. Use o resultado da extração de texto como entrada em seu experimento AutoAI RAG.
Neste exemplo de código para executar um experimento Chroma, a tarefa é executada no modo interativo. Você pode executar a tarefa em segundo plano alterando o endereço background_mode para True.
input_data_references = [result_data_reference]
rag_optimizer.run(
input_data_references=input_data_references,
test_data_references=test_data_references,
background_mode=False
)
Etapa 5: Analise os padrões e selecione o melhor
Após a conclusão bem-sucedida do experimento AutoAI RAG, você poderá analisar os padrões. Use o método summary para listar padrões concluídos e informações de métricas de avaliação na forma de um Pandas DataFrame para que você possa analisar os padrões, classificados de acordo com o desempenho em relação à métrica otimizada.
summary = rag_optimizer.summary()
summary
Por exemplo, os resultados do padrão são exibidos da seguinte forma:
| Padrão | correção_de_resposta_média | fidelidade média | correção_do_contexto_médio | 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 | janela | 5 | meta-llama/llama-3-70b-instruct |
| Pattern2 | 0.7172 | 0.5950 | 1.0000 | 1024 | intfloat/multilingual-e5-large | euclidiano | janela | 5 | ibm/granite-13b-chat-v2 |
| Pattern3 | 0.6543 | 0.5144 | 1.0000 | 1024 | intfloat/multilingual-e5-large | euclidiano | simples | 5 | ibm/granite-13b-chat-v2 |
| Pattern4 | 0.6216 | 0.5030 | 1.0000 | 1024 | intfloat/multilingual-e5-large | cosseno | janela | 5 | meta-llama/llama-3-70b-instruct |
| Pattern5 | 0.7369 | 0.5630 | 1.0000 | 1024 | intfloat/multilingual-e5-large | cosseno | janela | 3 | mistralai/mixtral-8x7b-instruct-v01 |
Selecione um padrão para testar localmente
A próxima etapa é selecionar um padrão e testá-lo localmente.
best_pattern = rag_optimizer.get_pattern()
Consultar o padrão RAG localmente.
from ibm_watsonx_ai.deployments import RuntimeContext
runtime_context = RuntimeContext(api_client=client)
inference_service_function = 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_function(context)["body"]["choices"][0]["message"]["content"])
A resposta do modelo é semelhante a esta:
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.
Para recuperar um padrão específico, passe o número do padrão para rag_optimizer.get_pattern().
Obter um notebook de inferência e indexação
Para fazer download de um notebook de inferência específico, use o endereço get_inference_notebook(). Se você deixar o endereço pattern_name vazio, o método fará o download do notebook do melhor padrão calculado.
rag_optimizer.get_inference_notebook(pattern_name='Pattern3')
Para obter mais informações e exemplos de código, consulte o notebook de serviço AutoAI RAG with watsonx Text Extraction.