El tema de esta entrada del blog en particular no es original. Ya hay muchos vídeos de YouTube, artículos publicados e hilos de Twitter que describen esta idea de hablar con PDFs. Hay plugins de ChatGPT que pueden hacer esto, y hay Langchain, una biblioteca que te permite hacer esto también. Esa es exactamente la biblioteca que vamos a utilizar hoy.

Pero creo que valdrá la pena describir una vez más esta metodología y este enfoque también teniendo en cuenta que para resolver el problema de chatear con tus PDFs correctamente no es suficiente con hacer el prompting y preguntar. Hay un par de pasos intermedios importantes que te pueden ayudar mucho a que tu solución sea mucho mejor y esto es algo en lo que nos podemos centrar hoy en este blog:

Tabla de contenidos

El reto: leer las propuestas de seguros

Elegir el plan de seguros adecuado para tu equipo significa revisar innumerables PDF, organizar la información y, en última instancia, tomar una decisión informada. Es una tarea que lleva mucho tiempo y que implica consultar docenas (y a veces cientos) de páginas y documentos. He aquí la gran pregunta: ¿Podemos automatizar esta carga de trabajo? Claro que sí. Pero, por desgracia, no basta con enviar miles de documentos a ChatGPT. Al menos no hoy.

Los pasos intermedios son clave

Hacer preguntas y dar indicaciones es importante, pero no basta para descifrar el código de este reto. Tenemos que añadir algunos pasos adicionales para superarlo de verdad. Un paso que a menudo se pasa por alto es generar un resumen intermedio antes de formular la pregunta final. ¿Por qué? Imaginemos que tenemos que trabajar con toneladas de documentos. Será difícil para cualquier algoritmo mantener el contexto con precisión durante todo el proceso.

Y no nos olvidemos de los límites de herramientas como Langchain, que tienen que lidiar con los límites de los tokens en esos LLM. Para hacer frente a estos obstáculos, podemos elaborar de forma proactiva respuestas a preguntas específicas relacionadas con los documentos de seguros. Al unir estas respuestas, creamos un resumen que captura la esencia de miles de documentos. Y el tutorial de Langchain (nivel 4 aquí) lo recomienda.

Conjunto de herramientas estándar: LLMs + Langchain

  1. Vectorización. Para simplificar las cosas, utilizaremos el modelo GPT de OpenAI, combinado con la biblioteca Langchain. Estas potentes herramientas nos permiten aprovechar el enorme potencial de los modelos lingüísticos y, al mismo tiempo, sacar el máximo partido de las capacidades de contexto ampliadas de Langchain. Al vectorizar esos PDF con un toque de superposición, nos aseguramos de no perder ningún contexto importante por el camino:

class DatasetVectorizer:
«»»
A class for vectorizing datasets.
«»»
def vectorize(self, text_file_paths, chunk_size=1000, chunk_overlap=500, openai_key=»»):
documents = []
for text_file_path in text_file_paths:
doc_loader = TextLoader(text_file_path)
documents.extend(doc_loader.load())
text_splitter = RecursiveCharacterTextSplitter(chunk_overlap=chunk_overlap, chunk_size=chunk_size)
texts = text_splitter.split_documents(documents)
embeddings = OpenAIEmbeddings(openai_api_key=openai_key)
docsearch = Chroma.from_documents(texts, embeddings)
return documents, texts, docsearch

  1. Resumen hecho a mano. Hablemos ahora del resumen intermedio. Para hacerlo bien, prepararemos una serie de preguntas generales que se centrarán en los documentos del seguro. Las preguntas importantes se refieren a las franquicias, los detalles de la cobertura, los importes de indemnización, las opciones de hospital, la cobertura familiar, la cobertura internacional, los cuidados dentales, etcétera. Respondiendo a estas preguntas y uniendo las respuestas, crearemos un resumen de primera calidad que capte la esencia de cada documento.

QUESTIONS = [
‘How good are the deductibles?’,
«How is the preventive care coverage?»,
‘How this plan fits for remote workers in the US and abroad?’,
‘What is the maximum money amount that can be compensated?’,
‘Can I go to any hospital of my choice?’,
‘Are there any limitations that won\’t allow to use the insurance?’,
‘Does it cover the family members of the applicant?’,
‘What are the healthcare procedures that are not covered by the insurance?’,
‘Can I use the insurance for the dental care?’,
‘Can I use the insurance in other countries?’
]

  1. Formular la pregunta final. Con el resumen intermedio en el bolsillo, es hora de sumergirnos en el proceso de toma de decisiones. Aquí es donde por fin resolvemos lo que queremos. Ya podemos lanzar un conjunto específico de preguntas basadas en nuestros criterios de selección de propuestas de seguros. Comparemos esas propuestas en función de la cobertura, las franquicias, los requisitos específicos, etc. Planteando estas preguntas al resumen, extraeremos la información más jugosa y tomaremos decisiones como estrellas del rock.

template = «»»
I want you to act as an expert in insurance policies. I have asked two companies about their insurance policies and here are their answers:
{summary_of_answers}
I am looking for insurance for a full-remote consulting company with 100 employees. I want you to tell me which company is better and why.
Give me a rating (x out of 10) for the following categories for each company separately with a short explanation (10 words max) for each category:
1. Coverage of different health procedures
2. Flexibility for remote workers abroad
3. Price and compensation
Your answer:
«»»
prompt = PromptTemplate(
input_variables=[«summary_of_answers»],
template=template,
)

Aplicación Streamlit para hacerlo más sencillo

Langchain

Ahora, aquí está la guinda del pastel. He preparado una interfaz fácil de usar utilizando la biblioteca Streamlit. Incluso si no eres un mago de la tecnología, puedes navegar sin esfuerzo por la aplicación e introducir tus preguntas y criterios más candentes.

Conclusiones

Hemos revisado las capacidades de modelos lingüísticos como OpenAI GPT y Langchain, para generar resúmenes exhaustivos y tomar decisiones bien informadas basadas en nuestros criterios. La inclusión de pasos intermedios, la utilización de la aplicación Streamlit y la introducción de la automatización agilizan todo el proceso, haciéndolo accesible y eficiente para todas las partes implicadas. ¡Ahora te toca a ti crear tu propia aplicación sobre él! Avísame si necesitas alguna pregunta o apoyo en el desarrollo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *