Desenvolver um aplicativo

Um exemplo de aplicativo pequeno que pode ser criado usando o LangChain na Vertex Generative AI é aquele que retorna a taxa de câmbio entre duas moedas em uma data especificada. As etapas abaixo mostram como criar esse aplicativo:

  1. Definir e configurar um modelo
  2. Definir uma função
  3. Usar um agente do LangChain para conectar o modelo à função
  4. teste o aplicativo

Antes de começar

Antes de executar este tutorial, verifique se o ambiente está configurado seguindo as etapas em Configurar o ambiente.

Etapa 1: Definir e configurar o modelo

Execute as etapas a seguir para definir e configurar seu modelo:

  1. Para criar o aplicativo, defina o modelo que você quer usar. Para saber mais, consulte Versões e ciclo de vida do modelo. Execute o comando a seguir para usar o modelo multimodal do Gemini 1.0 Pro Vision.

    model = "gemini-1.0-pro"
    
  2. (Opcional) Você pode definir as configurações de segurança do modelo. Para saber mais sobre as opções disponíveis para definir as configurações de segurança no Gemini, consulte Definir atributos de segurança.

    Confira a seguir um exemplo de como definir as configurações de segurança:

    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. (Opcional) É possível especificar os parâmetros do modelo a seguir.

    • Temperatura
    • Máximo de tokens de saída
    • TopP
    • TopK
    • Configurações de segurança (crie suas configurações de segurança usando a etapa anterior).

    Para saber mais sobre as opções disponíveis para as configurações de parâmetros de modelo no Gemini, consulte Definir parâmetros de modelo. Confira a seguir um exemplo de como especificar parâmetros de 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,
}

Etapa 2: Definir uma função do Python

Depois de definir o modelo, a próxima etapa é definir as ferramentas que o modelo usa para raciocínio. Ela pode ser uma ferramenta LangChain ou uma função Python. Você também pode converter uma função definida do Python em uma ferramenta LangChain. Este aplicativo usa uma definição de função.

Ao definir a função, é importante incluir comentários que descrevam completa e claramente os parâmetros da função, o que ela faz e o que ela retorna. Essas informações são usadas pelo modelo para determinar qual função usar. Você também precisa testar a função localmente para confirmar se ela funciona.

Use o código a seguir para definir uma função que retorna uma taxa de câmbio:

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 testar a função antes de usá-la no aplicativo, execute o seguinte:

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

A resposta será semelhante a esta:

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

Etapa 3. Usar um modelo de orquestração do LangChain

Um framework de orquestração organiza o código do aplicativo em uma ou mais funções que especificam os parâmetros de configuração do aplicativo, a lógica de inicialização do aplicativo e a lógica do ambiente de execução.

É possível definir sua própria classe Python (consulte Personalizar um modelo de aplicativo) ou usar a classe LangchainAgent no SDK da Vertex AI para Python para seu agente.

Para usar a classe LangchainAgent, especifique o modelo, a função definida e os parâmetros de modelo para instanciar um objeto LangchainAgent:

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

Etapa 4. teste o aplicativo

Agora que você criou o aplicativo, é hora de testá-lo. Você pode testar o aplicativo executando consultas de teste nele. Execute o comando a seguir para testar o aplicativo usando dólares americanos e coroas suecas:

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

A resposta é um dicionário semelhante a este:

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

A seguir