重要
此功能在 Beta 版中。
概述
MLflow 提示注册表是一个集中存储库,用于在其生命周期内管理提示模板。 它使团队能够:
- 使用 Git 风格的版本控制、提交消息和回滚功能,进行版本控制并跟踪提示
- 使用可变引用(例如“生产”、“暂存”)通过别名进行安全部署,以进行 A/B 测试和逐步推出
- 通过允许非工程师通过 UI 修改提示,在没有代码更改的情况下进行协作
- 与任何框架( 包括 LangChain、LlamaIndex 和其他 GenAI 框架)集成
- 通过 Unity Catalog 集成,进行访问控制和审计追踪以维护治理。
- 通过将提示链接到试验和评估结果来跟踪世系
提示注册表遵循类似于 Git 的模型:
- 提示:Unity Catalog 中的命名实体
- 版本:包含自动递增编号的不可变快照
- 别名:指向特定版本的可变指针
- 标记:特定于版本的键值对
先决条件
- 通过 Unity 目录支持安装 MLflow:
pip install --upgrade "mlflow[databricks]>=3.1.0" - 请按照设置环境快速入门创建 MLflow 试验。
- 请确保你能够访问具有
CREATE FUNCTION、EXECUTE和MANAGE权限的 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})