mlflow.openai

mlflow.openai 模块提供了一个用于记录和加载 OpenAI 模型的 API。

Databricks 上 OpenAI 的凭据管理

警告

使用 MLFLOW_OPENAI_SECRET_SCOPE 为模型服务指定密钥已被弃用。请改用 基于密钥的环境变量

当此flavor在Databricks上记录模型时,如果设置了 MLFLOW_OPENAI_SECRET_SCOPE 环境变量,它将保存一个具有以下内容的 YAML 文件,名为 openai.yaml

OPENAI_API_BASE: {scope}:openai_api_base
OPENAI_API_KEY: {scope}:openai_api_key
OPENAI_API_KEY_PATH: {scope}:openai_api_key_path
OPENAI_API_TYPE: {scope}:openai_api_type
OPENAI_ORGANIZATION: {scope}:openai_organization
  • {scope}MLFLOW_OPENAI_SECRET_SCOPE 环境变量的值。

  • 这些键是 openai-python 包用于配置 API 客户端的环境变量。

  • 这些值是对存储环境变量值的密钥的引用。

当记录的模型在Databricks上服务时,每个密钥都将被解析并设置为相应的环境变量。有关如何在Databricks上设置密钥的说明,请参阅 https://docs.databricks.com/security/secrets/index.html

mlflow.openai.autolog(disable=False, exclusive=False, disable_for_unsupported_versions=False, silent=False, log_traces=True)[source]

启用(或禁用)和配置从OpenAI到MLflow的自动日志记录。如果OpenAI版本小于1.0,则引发MlflowException

参数
  • disable – 如果为True,则禁用OpenAI自动日志记录集成。如果为False,则启用OpenAI自动日志记录集成。

  • exclusive – 如果为 True,则自动记录的内容不会记录到用户创建的流畅运行中。如果为 False,则自动记录的内容将记录到活动的流畅运行中,该运行可能是用户创建的。

  • disable_for_unsupported_versions – 如果为True,则禁用与此MLflow客户端版本未经测试或不兼容的OpenAI版本的自动日志记录。

  • silent – 如果为True,则在OpenAI自动日志记录期间抑制MLflow的所有事件日志和警告。如果为False,则在OpenAI自动日志记录期间显示所有事件和警告。

  • log_traces – 如果为True,则记录OpenAI模型的跟踪。如果为False,则在推理过程中不收集跟踪。默认为True

mlflow.openai.load_model(model_uri, dst_path=None)[source]

从本地文件或运行加载OpenAI模型。

参数
  • model_uri

    MLflow 模型在 URI 格式中的位置。例如:

    • /Users/me/path/to/local/model

    • relative/path/to/local/model

    • s3://my_bucket/path/to/model

    • runs:/<mlflow_run_id>/run-relative/path/to/model

    有关支持的 URI 方案的更多信息,请参阅 引用 Artifacts

  • dst_path – The local filesystem path to which to download the model artifact. This directory must already exist. If unspecified, a local output path will be created.

返回

表示OpenAI模型的字典。

mlflow.openai.log_model(model, task, artifact_path: str | None = None, conda_env=None, code_paths=None, registered_model_name=None, signature: mlflow.models.signature.ModelSignature = None, input_example: Union[pandas.core.frame.DataFrame, numpy.ndarray, dict, list, csr_matrix, csc_matrix, str, bytes, tuple] = None, await_registration_for=300, pip_requirements=None, extra_pip_requirements=None, metadata=None, prompts: list[str | Prompt] | None = None, name: str | None = None, params: dict[str, typing.Any] | None = None, tags: dict[str, typing.Any] | None = None, model_type: str | None = None, step: int = 0, model_id: str | None = None, **kwargs)[source]

警告

mlflow.openai.model.log_model 自 3.8.0 版本起已弃用。此方法将在未来的版本中删除。请改用 mlflow.genai.register_prompt

将OpenAI模型记录为当前运行的MLflow artifact。

参数
  • model – OpenAI模型名称或实例引用,例如 openai.Model.retrieve("gpt-4o-mini")

  • task – 模型执行的任务,例如 openai.chat.completions'chat.completions'

  • artifact_path – Deprecated. Use name instead.

  • conda_env

    Conda 环境的字典表示形式或 conda 环境 yaml 文件的路径。如果提供,这将描述模型应运行的环境。至少,它应指定 get_default_conda_env() 中包含的依赖项。如果 None,则将一个由 mlflow.models.infer_pip_requirements() 推断的 pip 依赖项列表添加到模型中。如果依赖项推断失败,则回退使用 get_default_pip_requirements。来自 conda_env 的 pip 依赖项将被写入 pip requirements.txt 文件,并且完整的 conda 环境将被写入 conda.yaml。以下是一个 conda 环境的示例字典表示形式

    {
        "name": "mlflow-env",
        "channels": ["conda-forge"],
        "dependencies": [
            "python=3.8.15",
            {
                "pip": [
                    "openai==x.y.z"
                ],
            },
        ],
    }
    

  • code_paths

    A list of local filesystem paths to Python file dependencies (or directories containing file dependencies). These files are prepended to the system path when the model is loaded. Files declared as dependencies for a given model should have relative imports declared from a common root path if multiple files are defined with import dependencies between them to avoid import errors when loading the model.

    For a detailed explanation of code_paths functionality, recommended usage patterns and limitations, see the code_paths usage guide.

  • registered_model_name – 如果提供,则在 registered_model_name 下创建一个模型版本,如果给定名称的注册模型不存在,也会创建该注册模型。

  • signature

    ModelSignature 描述了模型输入和输出 Schema。模型签名可以从具有有效模型输入的​​数据集(例如,省略目标列的训练数据集)和有效模型输出的​​数据集(例如,在训练数据集上生成的模型预测)中推断,例如:

    from mlflow.models import infer_signature
    
    train = df.drop_column("target_label")
    predictions = ...  # compute model predictions
    signature = infer_signature(train, predictions)
    

  • input_example – 一个或多个有效的模型输入实例。输入示例用作要馈送给模型的数据的提示。它将被转换为 Pandas DataFrame,然后使用 Pandas 的面向拆分(split-oriented)格式序列化为 json,或者转换为 numpy 数组,其中示例将通过转换为列表来序列化为 json。字节将进行 base64 编码。当 signature 参数为 None 时,输入示例用于推断模型签名。

  • await_registration_for – 等待模型版本完成创建并处于 READY 状态的秒数。默认情况下,函数等待五分钟。指定 0 或 None 可跳过等待。

  • pip_requirements – pip 依赖项字符串的可迭代对象(例如 ["openai", "-r requirements.txt", "-c constraints.txt"])或本地文件系统上的 pip 依赖项文件的字符串路径(例如 "requirements.txt")。如果提供,这将描述模型应运行的环境。如果为 None,则通过 mlflow.models.infer_pip_requirements() 从当前软件环境中推断一个默认的依赖项列表。如果依赖项推断失败,则回退使用 get_default_pip_requirements。依赖项和约束都会被自动解析并写入模型的一部分 requirements.txtconstraints.txt 文件中,分别存储。依赖项也会被写入模型 conda 环境(conda.yaml)文件的 pip 部分。

  • extra_pip_requirements

    pip 依赖项字符串的可迭代对象(例如 ["pandas", "-r requirements.txt", "-c constraints.txt"])或本地文件系统上的 pip 依赖项文件的字符串路径(例如 "requirements.txt")。如果提供,这将描述附加到根据用户当前软件环境自动生成的默认 pip 依赖项集中的额外 pip 依赖项。依赖项和约束都会被自动解析并写入模型的一部分 requirements.txtconstraints.txt 文件中,分别存储。依赖项也会被写入模型 conda 环境(conda.yaml)文件的 pip 部分。

    警告

    以下参数不能同时指定

    • conda_env

    • pip_requirements

    • extra_pip_requirements

    此示例演示了如何使用 pip_requirementsextra_pip_requirements 指定 pip requirements。

  • metadata – 传递给模型并存储在 MLmodel 文件中的自定义元数据字典。

  • prompts

    与模型关联的 MLflow 提示注册表中已注册的提示 URI 列表。每个提示 URI 格式应为 prompt:/<name>/<version>。应在将提示与模型关联之前在 MLflow 提示注册表中注册这些提示。

    这将创建模型和提示之间的双向链接。关联的提示可以在 MLmodel 文件中存储的模型元数据中看到。从提示注册表 UI,您也可以导航到模型。

    import mlflow
    
    prompt_template = "Hi, {name}! How are you doing today?"
    
    # Register a prompt in the MLflow Prompt Registry
    mlflow.prompts.register_prompt("my_prompt", prompt_template, description="A simple prompt")
    
    # Log a model with the registered prompt
    with mlflow.start_run():
        model_info = mlflow.pyfunc.log_model(
            name=MyModel(),
            name="model",
            prompts=["prompt:/my_prompt/1"]
        )
    
    print(model_info.prompts)
    # Output: ['prompt:/my_prompt/1']
    
    # Load the prompt
    prompt = mlflow.genai.load_prompt(model_info.prompts[0])
    

  • name – 模型名称。

  • params – 要与模型一起记录的参数字典。

  • tags – 要与模型一起记录的标签字典。

  • model_type – 模型的类型。

  • step – 记录模型输出和指标的步骤

  • model_id – 模型的 ID。

  • kwargs – 特定于OpenAI任务的关键字参数,例如 messages(有关此参数的更多详细信息,请参阅 OpenAI 聊天补全任务支持的消息格式)或用于聊天补全的 top_p 值。

返回

一个 ModelInfo 实例,其中包含已记录模型的元数据。

Example
import mlflow
import openai
import pandas as pd

# Chat
with mlflow.start_run():
    info = mlflow.openai.log_model(
        model="gpt-4o-mini",
        task=openai.chat.completions,
        messages=[{"role": "user", "content": "Tell me a joke about {animal}."}],
        name="model",
    )
    model = mlflow.pyfunc.load_model(info.model_uri)
    df = pd.DataFrame({"animal": ["cats", "dogs"]})
    print(model.predict(df))

# Embeddings
with mlflow.start_run():
    info = mlflow.openai.log_model(
        model="text-embedding-ada-002",
        task=openai.embeddings,
        name="embeddings",
    )
    model = mlflow.pyfunc.load_model(info.model_uri)
    print(model.predict(["hello", "world"]))
mlflow.openai.save_model(model, task, path, conda_env=None, code_paths=None, mlflow_model=None, signature: mlflow.models.signature.ModelSignature = None, input_example: Union[pandas.core.frame.DataFrame, numpy.ndarray, dict, list, csr_matrix, csc_matrix, str, bytes, tuple] = None, pip_requirements=None, extra_pip_requirements=None, metadata=None, **kwargs)[source]

警告

mlflow.openai.model.save_model 自 3.8.0 版本起已弃用。此方法将在未来的版本中删除。请改用 mlflow.genai.register_prompt

将OpenAI模型保存到本地文件系统的路径。

参数
  • model – OpenAI模型名称。

  • task – 模型执行的任务,例如 openai.chat.completions'chat.completions'

  • path – 要保存模型的本地路径。

  • conda_env

    Conda 环境的字典表示形式或 conda 环境 yaml 文件的路径。如果提供,这将描述模型应运行的环境。至少,它应指定 get_default_conda_env() 中包含的依赖项。如果 None,则将一个由 mlflow.models.infer_pip_requirements() 推断的 pip 依赖项列表添加到模型中。如果依赖项推断失败,则回退使用 get_default_pip_requirements。来自 conda_env 的 pip 依赖项将被写入 pip requirements.txt 文件,并且完整的 conda 环境将被写入 conda.yaml。以下是一个 conda 环境的示例字典表示形式

    {
        "name": "mlflow-env",
        "channels": ["conda-forge"],
        "dependencies": [
            "python=3.8.15",
            {
                "pip": [
                    "openai==x.y.z"
                ],
            },
        ],
    }
    

  • code_paths

    A list of local filesystem paths to Python file dependencies (or directories containing file dependencies). These files are prepended to the system path when the model is loaded. Files declared as dependencies for a given model should have relative imports declared from a common root path if multiple files are defined with import dependencies between them to avoid import errors when loading the model.

    For a detailed explanation of code_paths functionality, recommended usage patterns and limitations, see the code_paths usage guide.

  • mlflow_model – 要添加此 flavor 的 mlflow.models.Model

  • signature

    ModelSignature 描述了模型输入和输出 Schema。模型签名可以从具有有效模型输入的​​数据集(例如,省略目标列的训练数据集)和有效模型输出的​​数据集(例如,在训练数据集上生成的模型预测)中推断,例如:

    from mlflow.models import infer_signature
    
    train = df.drop_column("target_label")
    predictions = ...  # compute model predictions
    signature = infer_signature(train, predictions)
    

  • input_example – 一个或多个有效的模型输入实例。输入示例用作要馈送给模型的数据的提示。它将被转换为 Pandas DataFrame,然后使用 Pandas 的面向拆分(split-oriented)格式序列化为 json,或者转换为 numpy 数组,其中示例将通过转换为列表来序列化为 json。字节将进行 base64 编码。当 signature 参数为 None 时,输入示例用于推断模型签名。

  • pip_requirements – pip 依赖项字符串的可迭代对象(例如 ["openai", "-r requirements.txt", "-c constraints.txt"])或本地文件系统上的 pip 依赖项文件的字符串路径(例如 "requirements.txt")。如果提供,这将描述模型应运行的环境。如果为 None,则通过 mlflow.models.infer_pip_requirements() 从当前软件环境中推断一个默认的依赖项列表。如果依赖项推断失败,则回退使用 get_default_pip_requirements。依赖项和约束都会被自动解析并写入模型的一部分 requirements.txtconstraints.txt 文件中,分别存储。依赖项也会被写入模型 conda 环境(conda.yaml)文件的 pip 部分。

  • extra_pip_requirements

    pip 依赖项字符串的可迭代对象(例如 ["pandas", "-r requirements.txt", "-c constraints.txt"])或本地文件系统上的 pip 依赖项文件的字符串路径(例如 "requirements.txt")。如果提供,这将描述附加到根据用户当前软件环境自动生成的默认 pip 依赖项集中的额外 pip 依赖项。依赖项和约束都会被自动解析并写入模型的一部分 requirements.txtconstraints.txt 文件中,分别存储。依赖项也会被写入模型 conda 环境(conda.yaml)文件的 pip 部分。

    警告

    以下参数不能同时指定

    • conda_env

    • pip_requirements

    • extra_pip_requirements

    此示例演示了如何使用 pip_requirementsextra_pip_requirements 指定 pip requirements。

  • metadata – 传递给模型并存储在 MLmodel 文件中的自定义元数据字典。

  • kwargs – 特定于OpenAI任务的关键字参数,例如 messages(有关此参数的更多详细信息,请参阅 OpenAI 聊天补全任务支持的消息格式)或用于聊天补全的 top_p 值。

import mlflow
import openai

# Chat
mlflow.openai.save_model(
    model="gpt-4o-mini",
    task=openai.chat.completions,
    messages=[{"role": "user", "content": "Tell me a joke."}],
    path="model",
)

# Completions
mlflow.openai.save_model(
    model="text-davinci-002",
    task=openai.completions,
    prompt="{text}. The general sentiment of the text is",
    path="model",
)

# Embeddings
mlflow.openai.save_model(
    model="text-embedding-ada-002",
    task=openai.embeddings,
    path="model",
)