开发应用

比如说,您可以使用 LangChain on Vertex AI 创建一个小型应用来返回指定日期两种货币之间的汇率。以下步骤演示了如何创建此应用:

  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. (可选)您可以指定以下模型参数。

    • 温度
    • 输出词元数上限
    • TopP
    • TopK
    • 安全设置(您必须首先按照上一步创建安全设置)。

    如需详细了解 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 编排模板

编排框架会将应用代码整理为一个或多个函数,用于指定应用配置参数、应用初始化逻辑和运行时逻辑。

您可以定义自己的 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."}

后续步骤