命令注册表

重要

此功能在 Beta 版中。

概述

MLflow 提示注册表是一个集中存储库,用于在其生命周期内管理提示模板。 它使团队能够:

  • 使用 Git 风格的版本控制、提交消息和回滚功能,进行版本控制并跟踪提示
  • 使用可变引用(例如“生产”、“暂存”)通过别名进行安全部署,以进行 A/B 测试和逐步推出
  • 通过允许非工程师通过 UI 修改提示,在没有代码更改的情况下进行协作
  • 与任何框架( 包括 LangChain、LlamaIndex 和其他 GenAI 框架)集成
  • 通过 Unity Catalog 集成,进行访问控制和审计追踪以维护治理。
  • 通过将提示链接到试验和评估结果来跟踪世系

提示注册表遵循类似于 Git 的模型:

  • 提示:Unity Catalog 中的命名实体
  • 版本:包含自动递增编号的不可变快照
  • 别名:指向特定版本的可变指针
  • 标记:特定于版本的键值对

先决条件

  1. 通过 Unity 目录支持安装 MLflow:
    pip install --upgrade "mlflow[databricks]>=3.1.0"
    
  2. 请按照设置环境快速入门创建 MLflow 试验。
  3. 请确保你能够访问具有CREATE FUNCTIONEXECUTEMANAGE权限的 Unity Catalog 架构,以便在提示注册表中查看或创建提示。

快速入门

以下代码显示了使用提示注册表的基本工作流。 请注意模板变量的双大括号语法:

import mlflow

# Register a prompt template
prompt = mlflow.genai.register_prompt(
    name="mycatalog.myschema.customer_support",
    template="You are a helpful assistant. Answer this question: {{question}}",
    commit_message="Initial customer support prompt"
)
print(f"Created version {prompt.version}")  # "Created version 1"

# Set a production alias
mlflow.genai.set_prompt_alias(
    name="mycatalog.myschema.customer_support",
    alias="production",
    version=1
)

# Load and use the prompt in your application
prompt = mlflow.genai.load_prompt(name_or_uri="prompts:/mycatalog.myschema.customer_support@production")
response = llm.invoke(prompt.format(question="How do I reset my password?"))

SDK 概述

下表汇总了 Prompt Registry 提供的六个主要功能。 有关示例,请参阅 提示注册表示例

功能 目的
register_prompt() 创建新提示或添加新版本
load_prompt() 检索特定提示版本或别名
search_prompts() 按名称、标记或元数据查找提示
set_prompt_alias() 创建或更新别名指针
delete_prompt_alias() 删除别名(版本保留)
delete_prompt() 删除整个提示或特定版本

提示模板格式

提示模板可以存储两种格式:简单的提示或对话。 对于这两者,可以使用双大括号语法 "Hello {{name}}"对提示字符串进行模板化。

Format Python 类型 Description Example
简单提示 str 单消息提示模板 "Summarize the content below in {{num_sentences}} sentences. Content: {{content}}"
对话 List[dict] 每个 dict 都是一条消息,其中包含“role”和“content”键 [{"role": "user", "content": "Hello {{name}}"}, ...]

以下示例展示了两种提示:简单提示和对话式提示,并使用模板变量的双大括号格式。

# Simple prompt
simple_prompt = mlflow.genai.register_prompt(
    name="mycatalog.myschema.greeting",
    template="Hello {{name}}, how can I help you today?",
    commit_message="Simple greeting"
)

# Conversation or chat-style prompt
complex_prompt = mlflow.genai.register_prompt(
    name="mycatalog.myschema.analysis",
    template=[
        {"role": "system", "content": "You are a helpful {{style}} assistant."},
        {"role": "user", "content": "{{question}}"},
    ],
    commit_message="Multi-variable analysis template"
)

# Use the prompt
rendered = complex_prompt.format(
    style="edgy",
    question="What is a good costume for a rainy Halloween?"
)

单大括号格式兼容性

LangChain、LlamaIndex 和其他一些库支持提示模板的单大括号语法(Python f 字符串语法): "Hello {name}" 为了兼容,MLflow 支持将提示转换为单大括号格式:

LangChain

from langchain_core.prompts import ChatPromptTemplate

# Load from registry
mlflow_prompt = mlflow.genai.load_prompt("prompts:/mycatalog.myschema.chat@production")

# Convert to LangChain format
langchain_template = mlflow_prompt.to_single_brace_format()
chat_prompt = ChatPromptTemplate.from_template(langchain_template)

# Use in chain
chain = chat_prompt | llm | output_parser

LlamaIndex

from llama_index.core import PromptTemplate

# Load and convert
mlflow_prompt = mlflow.genai.load_prompt("prompts:/mycatalog.myschema.rag@production")
llama_template = PromptTemplate(mlflow_prompt.to_single_brace_format())

# Use in query engine
query_engine.update_prompts({"response_synthesizer:text_qa_template": llama_template})

后续步骤

  • 创建和编辑提示 - 从第一个提示开始
  • 使用在已部署应用中的提示——利用别名将提示部署到生产环境
  • 评估提示 - 系统地比较提示版本