Con una pequeña cantidad de código y algunas bibliotecas útiles, puede crear esta poderosa herramienta de análisis de documentos.

Extraer conocimientos de documentos y datos es crucial para tomar decisiones informadas. Sin embargo, surgen preocupaciones sobre la privacidad cuando se trata de información confidencial. LangChain, en combinación con la API OpenAI, le permite analizar sus documentos locales sin la necesidad de cargarlos en línea.

Lo logran manteniendo sus datos localmente, utilizando incrustaciones y vectorización para el análisis y ejecutando procesos dentro de su entorno. OpenAI no utiliza datos enviados por los clientes a través de su API para entrenar sus modelos o mejorar sus servicios.

Configurando su entorno

Crear un nuevo entorno virtual Python. Esto garantizará que no haya conflictos de versiones de la biblioteca. Luego ejecute el siguiente comando de terminal para instalar las bibliotecas necesarias.

pip install langchain openai tiktoken faiss-cpu pypdf

A continuación se muestra un desglose de cómo utilizará cada biblioteca:

instagram viewer
  • LangChain: Lo utilizará para crear y gestionar cadenas lingüísticas para el procesamiento y análisis de texto. Proporcionará módulos para carga de documentos, división de texto, incrustaciones y almacenamiento de vectores.
  • AbiertoAI: Lo utilizará para ejecutar consultas y obtener resultados de un modelo de lenguaje.
  • tik token: Lo usará para contar la cantidad de tokens (unidades de texto) en un texto determinado. Esto es para realizar un seguimiento del recuento de tokens al interactuar con la API de OpenAI, que cobra según la cantidad de tokens que utiliza.
  • FAISS: lo utilizará para crear y administrar un almacén de vectores, lo que permitirá una recuperación rápida de vectores similares en función de sus incrustaciones.
  • PyPDF: esta biblioteca extrae texto de archivos PDF. Ayuda a cargar archivos PDF y extrae su texto para su posterior procesamiento.

Una vez instaladas todas las bibliotecas, su entorno ya estará listo.

Obtener una clave API de OpenAI

Cuando realiza solicitudes a la API de OpenAI, debe incluir una clave API como parte de la solicitud. Esta clave permite al proveedor de API verificar que las solicitudes provienen de una fuente legítima y que usted tiene los permisos necesarios para acceder a sus funciones.

Para obtener una clave API de OpenAI, vaya al Plataforma abierta AI.

Luego, debajo del perfil de su cuenta en la esquina superior derecha, haga clic en Ver claves API. El Claves API Aparecerá la página.

Clickea en el Crear nuevo secretollave botón. Asigne un nombre a su clave y haga clic en Crear nueva clave secreta. OpenAI generará su clave API que deberá copiar y guardar en un lugar seguro. Por razones de seguridad, no podrás volver a verlo a través de tu cuenta OpenAI. Si pierde esta clave secreta, deberá generar una nueva.

El código fuente completo está disponible en un repositorio de GitHub.

Importar las bibliotecas necesarias

Para poder utilizar las bibliotecas instaladas en su entorno virtual, debe importarlas.

from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

Observe que importa las bibliotecas de dependencia desde LangChain. Esto le permite utilizar funciones específicas del marco LangChain.

Cargando el documento para análisis

Comience creando una variable que contenga su clave API. Utilizará esta variable más adelante en el código para la autenticación.

# Hardcoded API key
openai_api_key = "Your API key"

No se recomienda codificar su clave API si planea compartir su código con terceros. Para el código de producción que desea distribuir, use una variable de entorno en su lugar.

A continuación, cree una función que cargue un documento. La función debería cargar un PDF o un archivo de texto. Si el documento no es ninguno de los dos, la función debería generar un Error de valor.

defload_document(filename):
if filename.endswith(".pdf"):
loader = PyPDFLoader(filename)
documents = loader.load()
elif filename.endswith(".txt"):
loader = TextLoader(filename)
documents = loader.load()
else:
raise ValueError("Invalid file type")

Después de cargar los documentos, cree un Divisor De Texto De Carácter. Este divisor dividirá los documentos cargados en partes más pequeñas según los caracteres.

 text_splitter = CharacterTextSplitter(chunk_size=1000, 
chunk_overlap=30, separator="\n")

return text_splitter.split_documents(documents=documents)

Dividir el documento garantiza que los fragmentos tengan un tamaño manejable y sigan conectados con algún contexto superpuesto. Esto es útil para tareas como análisis de texto y recuperación de información.

Consultando el documento

Necesita una forma de consultar el documento cargado para obtener información a partir de él. Para hacerlo, cree una función que tome un consulta cuerda y un perdiguero como entrada. Luego crea un RecuperaciónQA instancia utilizando el perdiguero y una instancia del modelo de lenguaje OpenAI.

defquery_pdf(query, retriever):
qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=openai_api_key),
chain_type="stuff", retriever=retriever)
result = qa.run(query)
print(result)

Esta función utiliza la instancia de control de calidad creada para ejecutar la consulta e imprimir el resultado.

Creando la función principal

La función principal controlará el flujo general del programa. Tomará la entrada del usuario para el nombre de archivo de un documento y cargará ese documento. Luego crea un Incrustaciones de OpenAI ejemplo para incrustaciones y construir un tienda de vectores basado en los documentos cargados y incrustaciones. Guarde este almacén de vectores en un archivo local.

A continuación, cargue el almacén de vectores persistentes desde el archivo local. Luego ingrese a un bucle donde el usuario puede ingresar consultas. El principal La función pasa estas consultas al consulta_pdf funciona junto con el recuperador del almacén de vectores persistentes. El bucle continuará hasta que el usuario ingrese "salir".

defmain():
filename = input("Enter the name of the document (.pdf or .txt):\n")
docs = load_document(filename)
embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
vectorstore = FAISS.from_documents(docs, embeddings)
vectorstore.save_local("faiss_index_constitution")
persisted_vectorstore = FAISS.load_local("faiss_index_constitution", embeddings)
query = input("Type in your query (type 'exit' to quit):\n")

while query != "exit":
query_pdf(query, persisted_vectorstore.as_retriever())
query = input("Type in your query (type 'exit' to quit):\n")

Las incrustaciones capturan relaciones semánticas entre palabras. Los vectores son una forma en la que puedes representar fragmentos de texto.

Este código convierte los datos de texto del documento en vectores utilizando las incrustaciones generadas por Incrustaciones de OpenAI. Luego indexa estos vectores usando FAISS, para una recuperación y comparación eficiente de vectores similares. Esto es lo que permite el análisis del documento subido.

Finalmente, use la construcción __name__ == "__main__" para llamar a la función principal si un usuario ejecuta el programa de forma independiente:

if __name__ == "__main__":
main()

Esta aplicación es una aplicación de línea de comandos. Como extensión, puedes use Streamlit para agregar una interfaz web a la aplicación.

Realizar análisis de documentos

Para realizar un análisis de documentos, almacene el documento que desea analizar en la misma carpeta que su proyecto y luego ejecute el programa. Te pedirá el nombre del documento que deseas analizar. Ingrese su nombre completo, luego ingrese consultas para que el programa las analice.

La siguiente captura de pantalla muestra los resultados del análisis de un PDF.

El siguiente resultado muestra los resultados del análisis de un archivo de texto que contiene código fuente.

Asegúrese de que los archivos que desea analizar estén en formato PDF o texto. Si sus documentos están en otros formatos, puede convertirlos a formato PDF usando herramientas en línea.

Comprender la tecnología detrás de los grandes modelos de lenguaje

LangChain simplifica la creación de aplicaciones utilizando grandes modelos de lenguaje. Esto también significa que abstrae lo que sucede detrás de escena. Para comprender exactamente cómo funciona la aplicación que está creando, debe familiarizarse con la tecnología detrás de los grandes modelos de lenguaje.