アプリケーションを開発する

Vertex AI で LangChain を使用して作成できる小さなアプリケーションの例として、指定した日付の 2 つの通貨間の為替レートを返すアプリケーションを作成してみましょう。このアプリケーションを作成する手順は次のとおりです。

  1. モデルを定義して構成する
  2. 関数を定義する
  3. LangChain エージェントを使用してモデルを関数に接続する
  4. アプリケーションをテストする

始める前に

このチュートリアルを実行する前に、環境の設定の手順に沿って環境が設定されていることを確認してください。

ステップ 1. モデルを定義して構成する

モデルを定義して構成する手順は次のとおりです。

  1. アプリケーションを作成するには、使用するモデルを定義する必要があります。詳細については、モデルのバージョンとライフサイクルをご覧ください。次のコマンドを実行して、Gemini 1.0 Pro Vision マルチモーダル モデルを使用します。

    model = "gemini-1.0-pro"
    
  2. (省略可)モデルの安全性設定を構成できます。Gemini で安全性設定を構成するために使用できるオプションの詳細については、安全性属性を構成するをご覧ください。

    安全設定を構成する方法の例を次に示します。

    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. (省略可)次のモデル パラメータを指定できます。

    • 温度
    • 最大出力トークン
    • トップ P
    • トップ K
    • 安全設定(前の手順で安全設定を作成する必要があります)。

    Gemini でモデル パラメータの設定に使用できるオプションの詳細については、モデル パラメータを設定するをご覧ください。モデル パラメータを指定する方法の例を次に示します。

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,
}

ステップ 2. Python 関数を定義する

モデルを定義したら、次は、モデルが推論に使用するツールを定義します。ツールは、LangChain ツールまたは Python 関数にすることができます。定義済みの Python 関数を LangChain ツールに変換することもできます。このアプリケーションは関数定義を使用します。

関数を定義するときは、関数のパラメータ、関数の動作、関数の戻り値を明確に記述したコメントを含めることが重要です。この情報は、モデルが使用する関数を決定する際に使用されます。また、関数が正常に動作することを確認するために、ローカルでテストする必要があります。

次のコードを使用して、為替レートを返す関数を定義します。

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()

アプリケーションで使用する前に関数をテストするには、次のコマンドを実行します。

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

レスポンスの例を以下に示します。

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

ステップ 3. LangChain のオーケストレーション テンプレートを使用する

オーケストレーション フレームワークでは、アプリケーション構成パラメータ、アプリケーション初期化ロジック、ランタイム ロジックを指定する 1 つ以上の関数にアプリケーション コードを編成します。

独自の Python クラスを定義することも(アプリケーション テンプレートをカスタマイズするを参照)、Vertex AI SDK for Python の LangchainAgent クラスをエージェントに使用することもできます。

LangchainAgent クラスを使用するには、モデル、定義済み関数、モデル パラメータを指定して、LangchainAgent オブジェクトをインスタンス化します。

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

ステップ 4. アプリケーションをテストする

作成したアプリケーションのテストを行いましょう。アプリケーションに対してテストクエリを実行することで、アプリケーションをテストできます。米ドルとスウェーデン クローナを使用してアプリケーションをテストします。次のコマンドを実行します。

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

レスポンスは、次のようなディクショナリ形式になります。

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

次のステップ