跳到主要内容

MLflow Prompt 数据模型

MLflow 的 Prompt 注册表通过版本化、可重用的 Prompt 实体,为 GenAI 应用程序提供了结构化的 Prompt 模板管理方法。Prompt 数据模型实现了跨组织的系统化 Prompt 工程、版本控制和部署管理。

概述

MLflow Prompt 数据模型围绕着 Prompt 实体展开,它代表了一个版本化的模板,具有全面的元数据和生命周期管理能力。

作为版本化实体的 Prompt

集中式模板管理

Prompt 实体为模板定义提供了单一的事实来源,可以在多个应用程序和团队之间实现一致的重用,同时维护版本历史和变更跟踪。

Git 风格的版本控制

Prompt 版本控制遵循类似 Git 的原则,具有连续的版本号、描述更改的提交消息以及确保可重现性和回滚能力的不可变版本。

动态变量支持

模板支持使用双大括号语法({{variable}})进行变量插值,从而在保持模板结构和可重用性的同时,实现灵活的内容生成。

Prompt 核心属性

身份与内容

每个 Prompt 都具有基本的识别和内容属性

模板结构

Prompt 模板支持复杂的变量插值

# Example text template with variables
template = """
You are an expert {{ role }}. Analyze the following {{ content_type }} and provide {{ num_points }} key insights.

Content: {{ content }}

Requirements:
- Focus on {{ focus_area }}
- Use {{ tone }} tone
- Limit response to {{ max_length }} words
"""

# Variables automatically extracted: role, content_type, num_points, content, focus_area, tone, max_length


# Example chat template with multiple messages
chat_template = [
{
"role": "system",
"content": "You are an expert {{ role }}. Analyze the following {{ content_type }} and provide {{ num_points }} key insights.",
},
{
"role": "user",
"content": " Content: {{ content }}\n\nRequirements:\n- Focus on {{ focus_area }}\n- Use {{ tone }} tone\n- Limit response to {{ max_length }} words",
},
]

# Variables automatically extracted: role, content_type, num_points, content, focus_area, tone, max_length

标签

使用 tags 存储版本特定信息,例如更改的作者。

# Register prompt with comprehensive tags
prompt = mlflow.genai.register_prompt(
name="content-analyzer",
template=template,
commit_message="Added tone and length controls",
tags={
"author": "ai-team@company.com",
"purpose": "Content analysis with customizable output",
"model": "gpt-4",
"performance_score": "0.92",
"review_status": "approved",
},
)

响应格式

响应格式定义了结构化生成所需的预期输出结构

from pydantic import BaseModel


class AnalysisResponse(BaseModel):
summary: str
key_points: list[str]
confidence_score: float


# Register prompt with response format
prompt = mlflow.genai.register_prompt(
name="content-analyzer",
template=template,
response_format=AnalysisResponse,
commit_message="Added structured response format",
)

# Or use dictionary format
prompt = mlflow.genai.register_prompt(
name="qa-prompt",
template="Answer: {{ question }}",
response_format={
"type": "object",
"properties": {
"answer": {"type": "string"},
"confidence": {"type": "number"},
"sources": {"type": "array", "items": {"type": "string"}},
},
},
)

Prompt 生命周期管理

创建与版本控制

Prompt 遵循系统的生命周期,具有清晰的创建和更新模式

别名管理

别名提供对 Prompt 版本的可变引用,以实现灵活部署

Prompt 使用模式

加载与格式化

Prompt 通过系统模式加载和使用

# Load specific version
prompt = mlflow.genai.load_prompt("prompts:/summarization-prompt/2")

# Format with variables
formatted_text = prompt.format(
num_sentences=3, content="Your content here...", tone="professional"
)

框架集成

Prompt 与流行的 GenAI 框架无缝集成

# Integration with LangChain
from langchain.prompts import PromptTemplate

# Load from MLflow and convert format
mlflow_prompt = mlflow.genai.load_prompt("prompts:/qa-prompt/1")
langchain_prompt = PromptTemplate.from_template(mlflow_prompt.to_single_brace_format())

# Integration with OpenAI
import openai

client = openai.OpenAI()
response = client.chat.completions.create(
messages=[
{"role": "user", "content": mlflow_prompt.format(question="What is MLflow?")}
],
model="gpt-4",
)

Prompt 比较与演进

版本比较

MLflow 为 Prompt 演进提供了内置的比较功能

以 Prompt 为中心的组织的好处

集中管理

Prompt 注册表提供了统一的模板存储,消除了应用程序中分散的 Prompt 定义;版本控制,维护完整的变更历史和回滚能力;协作开发,实现团队共享和评审流程;以及一致性强制,确保项目间 Prompt 使用的标准化。

开发效率

Prompt 实体通过以下方式实现:在多个应用程序中共享模板实现可重用性;通过版本比较和性能跟踪实现系统化测试;使用别名进行特定环境部署实现部署灵活性;以及与任何 GenAI 库或服务进行框架无关的集成。

质量保证

结构化方法支持:通过详细的提交消息和元数据进行变更跟踪;通过集成指标和反馈进行性能监控;通过共享访问和版本比较进行协作评审;以及通过不可变版本和别名管理进行回滚安全性

Prompt 管理最佳实践

命名与组织

描述性命名应使用清晰、一致的名称,反映 Prompt 的目的和领域。逻辑分组可以利用标签进行功能和组织分类。版本策略需要有意义的提交消息,记录更改和改进。别名策略应建立清晰的别名用途,例如生产、预发布和开发。

模板设计

变量设计应使用描述性变量名,清楚地指示预期内容。文档必须包含内联注释和全面的元数据,以说明模板用法。模块化应尽可能将复杂的 Prompt 分解为可重用的组件。测试需要在不同输入场景和边缘情况下进行系统验证。

生命周期管理

版本规划应建立明确的标准,以区分创建新版本和进行小版本更新。性能跟踪需要监控 Prompt 的有效性和用户满意度指标。部署协调需要在不同环境之间同步更新别名。归档管理应建立管理旧版本和清理程序的策略。

Prompt 注册表入门

创建和管理 Prompt 涉及几个关键步骤

使用 mlflow.genai.register_prompt() 注册您的第一个 Prompt,并附带全面的元数据和清晰的提交消息。通过为重大更改创建新版本并使用描述性提交消息来建立版本工作流。通过为不同环境和用例设置别名来实施别名策略。通过 mlflow.genai.load_prompt() 加载 Prompt 并使用动态变量进行格式化,从而与应用程序集成

# Complete workflow example
import mlflow
from pydantic import BaseModel


class SupportResponse(BaseModel):
response: str
confidence: float
suggested_actions: list[str]


# 1. Register initial text prompt
text_prompt = mlflow.genai.register_prompt(
name="customer-support",
template="You are a helpful {{ role }}. Please {{ action }} for: {{ query }}",
response_format=SupportResponse,
commit_message="Initial customer support template",
tags={"domain": "support", "language": "en"},
)

# 2. Create production alias
mlflow.set_prompt_alias("customer-support", "production", 1)

# 3. Load and use in application
production_prompt = mlflow.genai.load_prompt("prompts:/customer-support@production")
formatted = production_prompt.format(
role="customer service agent",
action="provide assistance",
query="How do I reset my password?",
)

后续步骤

Prompt 管理指南提供了关于有效创建、版本化和管理 Prompt 的全面指导。MLflow UI 导航帮助您掌握用于探索和管理 Prompt 的界面。

MLflow Prompt 注册表为系统化的 Prompt 工程提供了基本框架,使团队能够自信地协作构建、版本化和部署高质量的 Prompt 模板。