Google AI ofrece una gama de modelos de chat avanzados que podemos usar en LangChain, permitiendo el uso de características como invocación de herramientas, streaming de tokens, y mucho más.
En esta clase, aprenderemos a utilizar los modelos de chat de Google AI con LangChain, específicamente los modelos Gemini.
Exploraremos cómo conectarnos a estos modelos, generar respuestas en diálogos, y cómo aprovechar las herramientas de Google para personalizar la seguridad y el rendimiento de nuestras aplicaciones de chat.
Google AI vs Google Cloud Vertex AI
Google ofrece acceso a los modelos Gemini a través de dos plataformas diferentes:
Google AI (Gemini): Requiere solo una cuenta de Google y una clave API. Esta opción es ideal para proyectos rápidos o personales.
Google Cloud Vertex AI: Ofrece características empresariales como claves de encriptación personalizadas y redes privadas. Requiere una cuenta de Google Cloud y facturación activa.
Para esta clase, utilizaremos Google AI, que es más sencillo y rápido de configurar.
Configuración de Google AI en LangChain
Paso 1: Crear una Cuenta en Google y Obtener una API Key
Para utilizar los modelos de Google AI, necesitas obtener una clave API siguiendo estos pasos:
Con la integración instalada y la API key configurada, podemos instanciar un modelo de Google AI y generar una respuesta. Aquí usaremos el modelo Gemini 1.5-pro:
from langchain_google_genai import ChatGoogleGenerativeAI
llm = ChatGoogleGenerativeAI( model="gemini-1.5-pro", temperature=0, max_tokens=None, timeout=None, max_retries=2,# other params...)
messages =[("system","You are a helpful assistant that translates English to French. Translate the user sentence.",),("human","I love programming."),]ai_msg = llm.invoke(messages)ai_msg
print(ai_msg.content)
Encadenar el Modelo con Plantillas de Prompts
Podemos mejorar la funcionalidad del modelo encadenándolo con plantillas de prompts. Esto permite adaptar el comportamiento del modelo de forma dinámica, por ejemplo, para traducciones entre diferentes idiomas.
from langchain_core.prompts import ChatPromptTemplate
# Crear una plantilla de prompt para traduccionesprompt = ChatPromptTemplate.from_messages([("system","Eres un asistente útil que traduce {input_language} a {output_language}.",),("human","{input}"),])# Encadenar la plantilla con el modelo de Google AIchain = prompt | llm
# Invocar la cadena con parámetros específicoschain.invoke({"input_language":"English","output_language":"German","input":"I love programming.",})
La respuesta generada será:
pythonCopiar código
"Ich liebe das Programmieren. \n"
Configuración de Seguridad en los Modelos Gemini
Los modelos Gemini de Google AI tienen configuraciones de seguridad por defecto que ayudan a prevenir la generación de contenido dañino. Sin embargo, estas configuraciones pueden ser ajustadas para adaptarse mejor a las necesidades de tu aplicación.
Por ejemplo, si estás recibiendo muchos "Safety Warnings" en tus respuestas, puedes modificar los umbrales de bloqueo para categorías específicas de contenido:
pythonCopiar código
from langchain_google_genai import( ChatGoogleGenerativeAI, HarmBlockThreshold, HarmCategory,)# Desactivar el bloqueo para contenido peligrosollm = ChatGoogleGenerativeAI( model="gemini-1.5-pro", safety_settings={ HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_NONE,},)
Este código ajusta la configuración de seguridad para permitir contenido que normalmente podría estar bloqueado por defecto.
Conclusión
Los modelos de Google ofrecen una solución robusta para construir aplicaciones de chat avanzadas, desde la configuración básica hasta la generación de respuestas y el uso de plantillas de prompts, hemos explorado cómo ajustar las configuraciones de seguridad para personalizar el comportamiento del modelo según las necesidades de tu aplicación.utilizando los modelos de Google AI con LangChain específicamente con Gemini.
Ejercicio Final:
Configura tu clave API de Google AI y genera una conversación básica con el modelo.
Modifica la configuración de seguridad del modelo para ajustar los umbrales de bloqueo y experimenta con diferentes respuestas.
Reflexiona sobre cómo podrías integrar los modelos de Google AI en un proyecto para mejorar la interacción con los usuarios.
from langchain_google_genai import ChatGoogleGenerativeAI
Si en el modelo les sale error, miren bien que modelo les sale en su curl cuando ingresan para crear la API Key, ya que si en el caso del grupo es con "gemini-1.5-pro" y me fije en el curl que aparece y en mi caso es "gemini-1.5-flash" y funciono bien.
Si al intentar ejecutar la respuesta con Google AI les aparece un mensaje que comienza similar al siguiente:
WARNING:langchain_google_genai.chat_models:Retrying langchain_google_genai.chat_models._chat_with_retry.<locals>._chat_with_retry in 2.0 seconds as it raised ResourceExhausted: 429 You exceeded your current quota, please check your plan and billing details. For more information on this error, head to: . \violations {
quota_metric: "generativelanguage.googleapis.com/generate_content_free_tier_input_token_count"
quota_id: "GenerateContentInputTokensPerModelPerMinute-FreeTier"
A mi también me pasó y lo solucioné revisando el modelo en AI Studio (en donde obtuve mi API Key) [https://aistudio.google.com/apikey, en la guía aparece el modelo correspondiente (En mi caso, fue "gemini-2.0-flash". Lo reemplacé en el valor de "model" al crear la llm. Luego lo volví a ejecutar, y ya funciona!
La configuración de la API de Google AI puede resultar complicada si no se siguen todos los pasos. Asegúrate de haber obtenido correctamente tu clave API y de configurarla como variable de entorno en tu script Python. Utiliza el siguiente código:
import getpass
import os
os.environ["GOOGLE_API_KEY"]= getpass.getpass("Introduce tu clave API de Google AI: ")
También verifica que hayas instalado la integración con el comando:
pip install -qU langchain-google-genai
Si aún tienes problemas, revisa la documentación de LangChain para más detalles sobre la configuración.
Los Output Parsers permiten transformar las respuestas de un modelo de IA en datos estructurados que una aplicación Python pueda procesar.
En lugar de recibir únicamente texto libre, puedes obtener listas, objetos JSON o modelos validados, facilitando la integración de IA con APIs, bases de datos y aplicaciones.
━━━━━━━━━━━━━━━━━━
⚡ RESUMEN ULTRA RÁPIDO
🔵 Un Output Parser convierte la salida del modelo en un formato utilizable por tu código.
🔵 PydanticOutputParser valida los datos generados frente a una estructura definida con Pydantic.
🟢 Define primero qué datos necesitas y después elige el parser adecuado.
🔴 Una respuesta que parece JSON no garantiza que tenga todos los campos ni valores válidos.
━━━━━━━━━━━━━━━━━━
🔑 LO IMPORTANTE
🔵 parse() procesa un texto generado y devuelve el resultado interpretado por el parser.
🔵 get_format_instructions() permite obtener instrucciones de formato para incorporarlas al prompt en parsers que lo admiten.
🟡 JsonOutputParser resulta útil cuando necesitas diccionarios y estructuras JSON.
🟡 PydanticOutputParser añade validación mediante un modelo con campos y tipos definidos.
🟢 Usa Field en Pydantic para documentar los campos y establecer restricciones cuando sea necesario.
🔴 No confíes ciegamente en datos generados por IA, especialmente si contienen importes, fechas o información que terminará en una base de datos.
🟣 La documentación actual de LangChain recomienda aprovechar la salida estructurada nativa del modelo cuando esté disponible; los parsers siguen siendo útiles para transformar o validar resultados.
━━━━━━━━━━━━━━━━━━
🧩 MODELO MENTAL
🔵 Solicitud → Modelo de IA → Texto generado → Parser → Datos estructurados → Aplicación.
🟢 Define la estructura esperada.
🟢 Solicita al modelo una respuesta compatible.
🟢 Convierte la respuesta con el parser.
🟢 Valida los datos antes de utilizarlos en operaciones importantes.
━━━━━━━━━━━━━━━━━━
🚀 ACCIONES PARA HOY
🟢 Instala las dependencias en tu entorno virtual:
pip install -U langchain-core pydantic
🟢 Crea un archivo Python e importa los componentes:
from pydantic import BaseModel, Field
from langchain_core.output_parsers import PydanticOutputParser
🟢 Define una estructura para clasificar gastos personales:
class Gasto(BaseModel):
categoria: str = Field(description="Categoría del gasto")
monto: float = Field(gt=0, description="Importe positivo del gasto")
🟢 Imprime gasto.categoria y gasto.monto para comprobar que tienes un objeto validado.
🟢 Prueba un importe negativo y un JSON mal formado para observar los errores.
🟢 Después, conecta el parser a un modelo de chat y añade sus instrucciones de formato al prompt.
━━━━━━━━━━━━━━━━━━
🟣 VENTAJA PROFESIONAL
🟣 Aporte experto: utiliza Pydantic para validar los datos antes de almacenarlos en PostgreSQL o SQLite.
🟣 En tu aplicación financiera, puedes estructurar respuestas de IA con campos como categoría, descripción y monto.
🟣 Separa la extracción de información, la validación y el almacenamiento en funciones distintas.
🟣 Controla las excepciones de análisis para detectar respuestas inválidas y decidir si debes reintentar o solicitar revisión.
🟣 No permitas que un parser sustituya las reglas de negocio: valida también los permisos, los límites y la coherencia de los datos.
━━━━━━━━━━━━━━━━━━
📝 CIERRE
Un principiante recibe texto de la IA y lo utiliza directamente. Un profesional convierte ese texto en datos estructurados, valida sus restricciones y controla los errores.
🟢 Reto: crea un extractor de gastos que reciba una descripción como «Pagué 15.000 pesos de transporte» y devuelva una categoría y un importe validados.
Por lo que lei en los comentarios toca pagar para generar la API KEY me genera este error
RateLimitError: Error code: 429 - {'error': {'message': 'You exceeded your current quota, please check your plan and billing details. For more information on this error, read the docs: .', 'type': 'insufficient_quota', 'param': None, 'code': 'insufficient_quota'}}
Lo solucioné revisando el modelo. En AI Studio, en donde obtienes tu API Key, aparece el modelo que se ajusta a tu clave. Y eso lo reemplazas en el valor de "model" al crear la llm. Luego lo vuelves a ejecutar, y ya funciona!
Sí, puedes utilizar los modelos de Google AI con LangChain en las aplicaciones que desees, siempre que cumplas con los requisitos de configuración de la API. Esto incluye la obtención de una clave API y la instalación del paquete de integración. La flexibilidad de LangChain permite adaptarlo a diversas necesidades, como automatizar tareas, mejorar la interacción de usuario o realizar análisis de datos.
En la sección encadenar El modelo, para poder obtener la respuesta que se nos muestra es necesario agregar chain.invoke a una variable. en mi caso lo hice con una variable llamada _messages_ y quedó así
# Invocar la cadena con parámetros específicosmessage = chain.invoke( { "input_language": "English", "output_language": "German", "input": "I love programming, though.", })# Visualizar la respuesta del modelo sin toda la información de respuestamessage.content
Y por respuesta obtengo lo que se muestra en el texto de la clase:
'Ich liebe das Programmieren aber. \n'
Si se quisiera obtener el texto solamente sin el utimo par de caracteres, se puede usar la función print:
from langchain_google_genai importGoogleGenerativeAI# Inicializar el modelo de GoogleAIllm =GoogleGenerativeAI( model="gemini-1.5-pro", temperature=0, max_tokens=None, timeout=None, max_retries=2, # otros parámetros según sea necesario...)# Crear los mensajes para la traducción
messages =[("system","You are a helpful assistant that translates English to French. Translate the user sentence.",),("human","I love programming."),]# Invocar el modelo con los mensajes
ai_msg = llm.invoke(messages)# Imprimir el contenido de la respuesta
print(ai_msg)```Asi estructuramos los ejemplo anteriores con google Ai herramienta gratuita
Lo que hace chain = prompt | llm donde tengo entendido agrega como un pipeline para procesar la información, esperaría que igual se pudiera pasar mas template antes de un invoke como chain = promptGenerateContent | promptReviewContent | promptSelect | llm (?)