Desarrollar una aplicación

Un ejemplo de una aplicación pequeña que puedes crear con LangChain en Vertex AI es un ejemplo que muestra la tasa de cambio entre dos monedas en una fecha específica. En los siguientes pasos, se muestra cómo crear esta aplicación:

  1. Define y configura un modelo
  2. Define una función
  3. Usa un agente LangChain para conectar el modelo a la función
  4. Prueba la aplicación

Antes de comenzar

Antes de ejecutar este instructivo, asegúrate de que tu entorno esté configurado mediante los pasos que se indican en Configura tu entorno.

Paso 1: Define y configura el modelo

Ejecuta los siguientes pasos para definir y configurar tu modelo:

  1. Para crear tu aplicación, debes definir el modelo que deseas usar. Para obtener más información, consulta Versiones de modelo y ciclo de vida. Ejecuta el siguiente comando para usar el modelo multimodal de Gemini 1.0 Pro Vision.

    model = "gemini-1.0-pro"
    
  2. Puedes establecer la configuración de seguridad del modelo (opcional). Si quieres obtener más información sobre las opciones disponibles para establecer los parámetros de seguridad en Gemini, consulta Configura los atributos de seguridad.

    A continuación, se muestra un ejemplo de cómo puedes configurar las opciones de seguridad:

    from langchain_google_vertexai import HarmBlockThreshold, HarmCategory
    
    safety_settings = {
        HarmCategory.HARM_CATEGORY_UNSPECIFIED: HarmBlockThreshold.BLOCK_NONE,
        HarmCategory.HARM_CATEGORY_DANGEROUS_CONTENT: HarmBlockThreshold.BLOCK_MEDIUM_AND_ABOVE,
        HarmCategory.HARM_CATEGORY_HATE_SPEECH: HarmBlockThreshold.BLOCK_ONLY_HIGH,
        HarmCategory.HARM_CATEGORY_HARASSMENT: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,
        HarmCategory.HARM_CATEGORY_SEXUALLY_EXPLICIT: HarmBlockThreshold.BLOCK_NONE,
    }
    
  3. Puedes especificar los siguientes parámetros del modelo (opcional).

    • Temperatura
    • Cantidad máxima de tokens de salida
    • TopP
    • TopK
    • Configuración de seguridad (primero debes crear la configuración de seguridad con el paso anterior).

    Si deseas obtener más información sobre las opciones disponibles para la configuración de los parámetros del modelo en Gemini, consulta Establece los parámetros del modelo. A continuación, se muestra un ejemplo de cómo puedes especificar parámetros del modelo:

model_kwargs = {
    # temperature (float): The sampling temperature controls the degree of
    # randomness in token selection.
    "temperature": 0.28,
    # max_output_tokens (int): The token limit determines the maximum amount of
    # text output from one prompt.
    "max_output_tokens": 1000,
    # top_p (float): Tokens are selected from most probable to least until
    # the sum of their probabilities equals the top-p value.
    "top_p": 0.95,
    # top_k (int): The next token is selected from among the top-k most
    # probable tokens.
    "top_k": 40,
    # safety_settings (Dict[HarmCategory, HarmBlockThreshold]): The safety
    # settings to use for generating content.
    "safety_settings": safety_settings,
}

Paso 2: Define una función de Python

Después de definir el modelo, el siguiente paso es definir las herramientas que usa para el razonamiento. Una herramienta puede ser una herramienta de LangChain o una de Python. También puedes convertir una función de Python definida en una herramienta LangChain. Esta aplicación usa una definición de función.

Cuando definas tu función, es importante incluir comentarios que describan de manera completa y clara los parámetros de la función, lo que hace y lo que muestra. El modelo usa esta información para determinar qué función usar. También debes probar la función de forma local para confirmar que funciona.

Usa el siguiente código para definir una función que muestre un tipo de cambio:

def get_exchange_rate(
    currency_from: str = "USD",
    currency_to: str = "EUR",
    currency_date: str = "latest",
):
    """Retrieves the exchange rate between two currencies on a specified date.

    Uses the Frankfurter API (https://api.frankfurter.app/) to obtain
    exchange rate data.

    Args:
        currency_from: The base currency (3-letter currency code).
            Defaults to "USD" (US Dollar).
        currency_to: The target currency (3-letter currency code).
            Defaults to "EUR" (Euro).
        currency_date: The date for which to retrieve the exchange rate.
            Defaults to "latest" for the most recent exchange rate data.
            Can be specified in YYYY-MM-DD format for historical rates.

    Returns:
        dict: A dictionary containing the exchange rate information.
            Example: {"amount": 1.0, "base": "USD", "date": "2023-11-24",
                "rates": {"EUR": 0.95534}}
    """
    import requests
    response = requests.get(
        f"https://api.frankfurter.app/{currency_date}",
        params={"from": currency_from, "to": currency_to},
    )
    return response.json()

Para probar la función antes de usarla en tu aplicación, ejecuta el siguiente comando:

get_exchange_rate(currency_from="USD", currency_to="SEK")

La respuesta podría ser similar a la siguiente:

{'amount': 1.0, 'base': 'USD', 'date': '2024-02-22', 'rates': {'SEK': 10.3043}}

Paso 3: Usa una plantilla de organización de LangChain

Un framework de organización organiza el código de la aplicación en una o más funciones que especifican parámetros de configuración de la aplicación, lógica de inicialización de la aplicación y lógica del entorno de ejecución.

Puedes definir tu propia clase de Python (consulta Personaliza una plantilla de aplicación) o puedes usar la clase LangchainAgent en el SDK de Vertex AI para Python para tu agente.

Para usar la clase LangchainAgent, especifica tu modelo, la función definida y los parámetros del modelo a fin de crear una instancia de un objeto LangchainAgent:

agent = reasoning_engines.LangchainAgent(
    model=model,  # Required.
    tools=[get_exchange_rate],  # Optional.
    model_kwargs=model_kwargs,  # Optional.
)

Paso 4: Prueba la aplicación

Ahora que creaste tu aplicación, es momento de probarla. Para probar la aplicación, realiza consultas de prueba en ella. Ejecuta el siguiente comando para probar la aplicación con dólares estadounidenses y corona sueca:

response = agent.query(
    input="What is the exchange rate from US dollars to Swedish currency?"
)

La respuesta es un diccionario similar al siguiente:

{"input": "What is the exchange rate from US dollars to Swedish currency?",
 # ...
 "output": "For 1 US dollar you will get 10.7345 Swedish Krona."}

¿Qué sigue?