Cómo utilizar LangChain y GPT para analizar varios documentos
Durante el último año, el universo de los desarrolladores se ha disparado con nuevas herramientas, aplicaciones y procesos ingeniosos para trabajar con grandes modelos de lenguaje e IA generativa.
Un ejemplo particularmente versátil es el proyecto LangChain. El objetivo general consiste en proporcionar integraciones sencillas con varios modelos LLM. Pero el ecosistema LangChain también alberga un número creciente de proyectos (a veces experimentales) que superan los límites del humilde LLM.
Dedique algún tiempo a navegar por el sitio web de LangChain para tener una idea de lo que es posible. Verá cuántas herramientas están diseñadas para ayudarle a crear aplicaciones más potentes.
Pero también puedes usarlo como una alternativa para conectar tu IA favorita a Internet en vivo. Específicamente, esta demostración le mostrará cómo usarlo para acceder, resumir y analizar mediante programación documentos en línea largos y complejos.
Para que todo esto suceda, necesitará un entorno de ejecución de Python (como Jupyter Lab) y una clave API de OpenAI válida.
Prepare su entorno
Un uso popular de LangChain implica cargar varios archivos PDF en paralelo y pedirle a GPT que analice y compare sus contenidos.
Como puede comprobar usted mismo en la documentación de LangChain, los módulos existentes se pueden cargar para permitir el consumo de PDF y el análisis del lenguaje natural. Voy a guiarlo a través de un ejemplo de caso de uso que se basa libremente en el ejemplo de esa documentación. Así es como comienza:
import os
os.environ['OPENAI_API_KEY'] = "sk-xxx"
from pydantic import BaseModel, Field
from langchain.chat_models import ChatOpenAI
from langchain.agents import Tool
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.text_splitter import CharacterTextSplitter
from langchain.vectorstores import FAISS
from langchain.document_loaders import PyPDFLoader
from langchain.chains import RetrievalQA
Ese código construirá su entorno y configurará las herramientas necesarias para:
Habilitación del chat OpenAI (ChatOpenAI)
Comprensión y procesamiento de texto (OpenAIEmbeddings, CharacterTextSplitter, FAISS, RetrievalQA)
Gestionar un agente de IA (herramienta)
A continuación, creará y definirá una clase DocumentInput
y un valor llamado llm
que establece algunos parámetros GPT familiares que se llamarán más adelante:
class DocumentInput(BaseModel):
question: str = Field()
llm = ChatOpenAI(temperature=0, model="gpt-3.5-turbo-0613")
Cargue sus documentos
A continuación, creará un par de matrices. Las tres variables path
en la matriz files
contienen las URL de informes financieros recientes emitidos por tres empresas de software/servicios de TI: Alphabet (Google), Cisco e IBM.
Haremos que GPT profundice en los datos de tres empresas simultáneamente, que la IA compare los resultados y lo haga todo sin tener que tomarse la molestia de descargar archivos PDF a un entorno local.
Por lo general, puede encontrar dichos documentos legales en la sección Relaciones con inversores del sitio web de una empresa.
tools = []
files = [
{
"name": "alphabet-earnings",
"path": "https://abc.xyz/investor/static/pdf/2023Q1\
_alphabet_earnings_release.pdf",
},
{
"name": "Cisco-earnings",
"path": "https://d18rn0p25nwr6d.cloudfront.net/CIK-00\
00858877/5b3c172d-f7a3-4ecb-b141-03ff7af7e068.pdf",
},
{
"name": "IBM-earnings",
"path": "https://www.ibm.com/investor/att/pdf/IBM_\
Annual_Report_2022.pdf",
},
]
Este bucle for
iterará a través de cada valor de la matriz files
que acabo de mostrarle. Para cada iteración, utilizará PyPDFLoader
para cargar el archivo PDF especificado, loader
y CharacterTextSplitter
para analizar el texto y las herramientas restantes para organizar los datos y aplicar las incrustaciones. Luego invocará la clase DocumentInput
que creamos anteriormente:
for file in files:
loader = PyPDFLoader(file["path"])
pages = loader.load_and_split()
text_splitter = CharacterTextSplitter(chunk_size=1000, \
chunk_overlap=0)
docs = text_splitter.split_documents(pages)
embeddings = OpenAIEmbeddings()
retriever = FAISS.from_documents(docs, embeddings).as_retriever()
# Wrap retrievers in a Tool
tools.append(
Tool(
args_schema=DocumentInput,
name=file["name"],
func=RetrievalQA.from_chain_type(llm=llm, \
retriever=retriever),
)
)
Indique a su modelo
En este punto, finalmente estamos listos para crear un agente y enviarle nuestro mensaje como input
.
llm = ChatOpenAI(
temperature=0,
model="gpt-3.5-turbo-0613",
)
agent = initialize_agent(
agent=AgentType.OPENAI_FUNCTIONS,
tools=tools,
llm=llm,
verbose=True,
)
agent({"input": "Based on these SEC filing documents, identify \
which of these three companies - Alphabet, IBM, and Cisco \
has the greatest short-term debt levels and which has the \
highest research and development costs."})
El resultado que obtuve fue breve y directo:
'output': 'Basado en los documentos presentados ante la SEC:\n\n- La empresa con los mayores niveles de deuda a corto plazo es IBM, con un nivel de deuda a corto plazo de 4.760 millones de dólares.\n- La empresa con mayor investigación y los costes de desarrollo son Alphabet, con unos costes de investigación y desarrollo de 11.468 millones de dólares.'
Concluyendo
Como ha visto, LangChain le permite integrar múltiples herramientas en operaciones de IA generativa, lo que permite el acceso programático de múltiples capas a Internet en vivo y indicaciones de LLM más sofisticadas.
Con estas herramientas, podrá automatizar la aplicación del poder de los motores de IA a activos de datos del mundo real en tiempo real. Pruébelo usted mismo.
Este artículo está extraído de mi libro de Manning, La guía completa y obsoleta para la IA generativa. Pero puedes encontrar muchas más bondades tecnológicas en mi sitio web.