Instalar langchain
pip install langchain
Configuración del entorno
pip install openai
Establecer la variable de entorno en la terminal.
Nuestro codigo API de Openai
import os
os.environ["OPENAI_API_KEY"] = "sk-okub3Ff5EzY3L9kUuqyyT33434FJqSehMIcEDU6MzJPFyyk1"
Construcción de una aplicación de Modelo de Lenguaje: LLMs
El bloque básico más importante de LangChain es llamar a un LLM en alguna entrada. Veamos un ejemplo sencillo de cómo hacerlo. Para este propósito, fingamos que estamos construyendo un servicio que genera un nombre de empresa basado en lo que la empresa produce.
Para hacer esto, primero necesitamos importar el envoltorio del LLM.
from langchain.llms import OpenAI
llm = OpenAI(temperature=0.9)
text = "¿Cuál sería un buen nombre de empresa para una compañía que produce calcetines coloridos?"
print(llm(text))
Calcetines Coloridos S.A.
Plantillas de solicitud (Prompt templates).
Llamar a un LLM es un gran primer paso, pero es solo el comienzo. Normalmente, cuando se utiliza un LLM en una aplicación, no se envía la entrada del usuario directamente al LLM. En su lugar, es probable que tome la entrada del usuario y construya una solicitud, y luego envíe eso a LLM.
Por ejemplo, en el ejemplo previo, el texto que pasamos estaba codificado para solicitar un nombre para una empresa que fabricara calcetines de colores. En este servicio imaginario, lo que queremos hacer es tomar solo la entrada del usuario que describe lo que hace la empresa y luego formatear la solicitud con esa información.
from langchain.prompts import PromptTemplate
prompt = PromptTemplate(
input_variables=["producto"],
template="¿Cuál es un buen nombre para una empresa que fabrica {producto}?",
)
¡Veamos cómo funciona esto! Podemos llamar al método .format para darle formato.
print(prompt.format(producto="Calcetines Coloridos"))
¿Cuál es un buen nombre para una empresa que fabrica Calcetines Coloridos?
Cadenas: combinando LLMs y solicitudes en flujos de trabajo de múltiples pasos
Hasta ahora, hemos trabajado con las plantillas de solicitud (PromptTemplate) y los primitivos LLM por separado. Pero por supuesto, una aplicación real no es solo un primitivo, sino una combinación de ellos.
Una cadena (chain) en LangChain está formada por enlaces (links), que pueden ser primitivos como LLMs u otras cadenas.
El tipo más básico de cadena es una LLMChain, que consta de una plantilla de solicitud (PromptTemplate) y un LLM.
Extendiendo el ejemplo anterior, podemos construir una LLMChain que tome la entrada del usuario, la formatee con una plantilla de solicitud (PromptTemplate) y luego pase la respuesta formateada a un LLM.
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
llm = OpenAI(temperature=0.9)
prompt = PromptTemplate(
input_variables=["producto"],
template="¿Cuál es un buen nombre para una empresa que fabrica {producto}?",
)
Ahora podemos crear una cadena (chain) muy simple que tomará la entrada del usuario, dará formato a la solicitud (prompt) con ella y luego la enviará al LLM:
from langchain.chains import LLMChain
chain = LLMChain(llm=llm, prompt=prompt)
¡Ahora podemos ejecutar esa cadena (chain) solo especificando el producto!
chain.run("Calcetines Coloridos")
'\n\nCalcetines Surtidos.'
Agentes: Llamada dinámica a cadenas (chains) basado en la entrada del usuario.
Hasta ahora, las cadenas (chains) que hemos visto se ejecutan en un orden predeterminado.
Los agentes ya no lo hacen: usan un LLM para determinar qué acciones tomar y en qué orden. Una acción puede ser usar una herramienta y observar su salida o regresar al usuario.
Cuando se usan correctamente, los agentes pueden ser extremadamente poderosos. En este tutorial, te mostramos cómo utilizar fácilmente los agentes a través de la API más sencilla y básica.
Para cargar agentes, debes entender los siguientes conceptos:
Herramienta (Tool): Una función que realiza una tarea específica. Puede ser cosas como: búsqueda de Google, búsqueda en una base de datos, REPL de Python, otras cadenas. La interfaz para una herramienta es actualmente una función que se espera que tenga una cadena como entrada y una cadena como salida.
LLM: El modelo de lenguaje que impulsa al agente.
Agente (Agent): El agente a utilizar. Esto debe ser una cadena que se refiera a una clase de agente de soporte. Debido a que este cuaderno se enfoca en la API más sencilla y básica, solo cubre el uso de los agentes compatibles estándar. Si quieres implementar un agente personalizado, consulta la documentación de agentes personalizados (próximamente).
Agentes: Para obtener una lista de agentes compatibles y sus especificaciones, consulta aquí (en inglés).
Herramientas (Tools): Para obtener una lista de herramientas predefinidas y sus especificaciones, consulta aquí (en inglés).
Para este ejemplo, también deberás instalar el paquete de Python SerpAPI.
pip install google-search-results
Y establecer las variables de entorno apropiadas.
import os
os.environ["SERPAPI_API_KEY"] = "6b692dfe18a5ff4fedf12186183454454f6cff0ac630ce99f1eb4db51373df6168"
¡Ahora podemos comenzar!
El siguiente código importa algunas funciones de LangChain en la primera línea y luego inicializa un agente para responder preguntas sobre el clima y realizar algunas operaciones matemáticas utilizando la herramienta de lenguaje natural (LLM) de OpenAI.
from langchain.agents import load_tools
from langchain.agents import initialize_agent
from langchain.agents import AgentType
from langchain.llms import OpenAI
# Primero, cargamos el modelo de lenguaje que vamos a utilizar para controlar al agente.
llm = OpenAI(temperature=0)
# A continuación, cargamos algunas herramientas para usar. Tenga en cuenta que la herramienta 'llm-math' utiliza un LLM, por lo que debemos pasarlo.
tools = load_tools(["serpapi", "llm-math"], llm=llm)
# Finalmente, inicializamos un agente con las herramientas, el modelo de lenguaje y el tipo de agente que queremos utilizar.
agente = initialize_agent(tools, llm, agent=AgentType.ZERO_SHOT_REACT_DESCRIPTION, verbose=True)
# ¡Ahora probémoslo!
agente.run("¿Cuál fue la temperatura máxima en San Francisco ayer en Farenheit? ¿A qué número equivale elevado a la potencia de 0,023?")
> Entering new AgentExecutor chain... I need to find the temperature in San Francisco yesterday and then convert it to a power of 0.023 Action: Search Action Input: "San Francisco temperature yesterday" Observation: High: 55.94ºf @12:56 AM Low: 53.6ºf @3:10 AM Approx. Precipitation / Rain Total: in. Time (PDT), Temp. (ºf), Humidity (%), Dew Point ( ... Thought: I need to convert the temperature to a power of 0.023 Action: Calculator Action Input: 55.94^0.023 Observation: Answer: 1.096977239159825 Thought: I now know the final answer Final Answer: 1.096977239159825 > Finished chain.
'1.096977239159825'
La primera línea importa tres funciones de langchain.agents
: load_tools
, initialize_agent
e AgentType
. La segunda línea importa la clase OpenAI
del módulo langchain.llms
.
Luego, se crea un objeto LLM llm
de la clase OpenAI
con una temperatura de 0. La temperatura influye en la aleatoriedad de las predicciones del LLM.
Después, se carga una lista de herramientas ["serpapi", "llm-math"]
utilizando load_tools
, y se pasan al LLM llm
.
Finalmente, se inicializa un agente llamado `