在已部署应用程序中使用提示

重要

此功能在 Beta 版中。

本指南介绍如何在生产环境的 GenAI 应用程序中使用 MLflow 提示注册表中的提示。

部署 GenAI 应用程序时,请将其配置为使用别名而不是硬编码版本从 MLflow 提示注册表加载提示。 此方法支持动态更新,而无需重新部署。

先决条件

  1. 安装 MLflow 和所需包

    pip install --upgrade "mlflow[databricks]>=3.1.0"
    
  2. 请按照 设置环境快速指南 创建 MLflow 试验。

  3. 访问 Unity 目录中的 CREATE FUNCTION

    • 为什么? 提示以函数的形式存储在 UC 中

步骤 1. 创建新提示

可以使用 Python SDK 以编程方式创建提示。

使用 mlflow.genai.register_prompt(). 以编程方式创建提示。 提示对模板变量使用双大括号语法 ({{variable}})。

import mlflow

# Replace with a Unity Catalog schema where you have CREATE FUNCTION permission
uc_schema = "workspace.default"
# This table will be created in the above UC schema
prompt_name = "summarization_prompt"

# Define the prompt template with variables
initial_template = """\
Summarize content you are provided with in {{num_sentences}} sentences.

Content: {{content}}
"""

# Register a new prompt
prompt = mlflow.genai.register_prompt(
    name=f"{uc_schema}.{prompt_name}",
    template=initial_template,
    # all parameters below are optional
    commit_message="Initial version of summarization prompt",
    version_metadata={
        "author": "data-science-team@company.com",
        "use_case": "document_summarization"
    },
    tags={
        "task": "summarization",
        "language": "en",
        "model_compatibility": "gpt-4"
    }
)

print(f"Created prompt '{prompt.name}' (version {prompt.version})")

步骤 2. 向提示版本添加别名

别名允许将静态字符串标记分配给特定的提示版本,从而更轻松地在生产应用程序中引用提示。 可以使用有意义的别名(例如 productionstagingdevelopment)而不是硬编码版本号。 需要更新生产提示时,只需重新分配 production 别名以指向较新版本,而无需更改或重新部署应用程序代码。

import mlflow
mlflow.genai.set_prompt_alias(
    name=f"{uc_schema}.{prompt_name}",
    alias="production",
    version=1
)

步骤 3:在应用中引用提示

注册提示并分配别名后,可以使用提示 URI 格式在已部署的应用程序中引用它。 建议的方法是使用环境变量使应用程序变得灵活,并避免硬编码提示引用。

提示 URI 格式为: prompts:/{catalog}.{schema}.{prompt_name}@{alias}

使用我们在步骤 1 中注册的提示,URI 将为:

  • prompts://workspace.default.summarization_prompt@production

下面介绍如何在应用程序中引用提示:

import mlflow
import os
from typing import Optional

class ProductionApp:
    def __init__(self):
        # Use environment variable for flexibility
        self.prompt_alias = os.getenv("PROMPT_ALIAS", "production")
        self.prompt_name = os.getenv("PROMPT_URI", "workspace.default.summarization_prompt")

    def get_prompt(self) -> str:
        """Load prompt from registry using alias."""
        uri = f"prompts:/{self.prompt_name}@{self.prompt_alias}"
        prompt = mlflow.genai.load_prompt(uri)
        return prompt

    # Rest of your application's code

# Example usage
app = ProductionApp()
prompt = app.get_prompt()
print(f"Loaded prompt: {prompt}")

后续步骤