MemAlign 优化器(实验性功能)
实验性功能
MemAlign 是一个实验性优化器。其 API 在未来版本中可能会发生变化。
MemAlign 是一款实验性优化器,它利用受人类认知启发的双重记忆系统来学习自然语言反馈。与传统的提示词优化器相比,它在速度和成本方面具有显著优势。
快速对齐
比 SIMBA 等传统提示词优化器快 100 倍,可实现对评判质量的快速迭代。
更低成本
与传统提示词优化器相比,每个对齐周期的成本显著降低。
小样本学习
仅需少量示例即可看到明显的改进——无需预先投入大量的人工标注工作。
双重记忆系统
将可泛化的准则(语义记忆)与具体示例(情景记忆)相结合,实现稳健的对齐。
要求
为了使对齐生效
- 追踪记录必须包含与评判器名称相同名称的人工评估(标签)。
- 强烈推荐使用**自然语言反馈**(理由)以获得更好的对齐效果
- 推荐使用正面和负面标签的混合。
MemAlign 的工作原理
MemAlign 维护两种类型的记忆:
-
语义记忆:存储从反馈中提取出的提炼准则。当专家解释其决策时,MemAlign 会提取出诸如“始终根据意图而非仅仅根据语言来评估安全性”之类的可泛化规则。
-
情景记忆:存储具体示例,特别是评判器出错的边缘案例。这些示例作为难以轻易泛化的情况的具体锚点。
在评估新输入时,MemAlign 通过收集语义记忆中的所有原则并从情景记忆中检索最相关的示例来构建动态上下文——这类似于人类评判员参考规则手册和过往案例的方式。
安装
MemAlign 需要额外的依赖项。
bash
pip install mlflow dspy jinja2 tqdm
基本用法
有关创建评判器的详细信息,请参阅 make_judge 文档。
python
import mlflow
from mlflow.genai.judges import make_judge
from mlflow.genai.judges.optimizers import MemAlignOptimizer
# Create a judge
judge = make_judge(
name="politeness",
instructions=(
"Given a user question, evaluate if the chatbot's response is polite and respectful. "
"Consider the tone, language, and context of the response.\n\n"
"Question: {{ inputs }}\n"
"Response: {{ outputs }}"
),
feedback_value_type=bool,
model="openai:/gpt-5-mini",
)
# Create the MemAlign optimizer
optimizer = MemAlignOptimizer(
reflection_lm="openai:/gpt-5-mini",
)
# Retrieve traces with human feedback
all_traces = mlflow.search_traces(return_type="list")
alignment_traces = [
trace
for trace in all_traces
if any(
feedback.name == "politeness"
for feedback in trace.info.assessments
# feedback name must match the judge name for alignment to work
)
]
# Align the judge
aligned_judge = judge.align(traces=alignment_traces, optimizer=optimizer)
参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
reflection_lm | str | 请参阅 支持的评判模型。 | 用于从反馈中提取准则的模型。请参阅 支持的评判模型 部分以了解支持的模型。 |
retrieval_k | int | 5 | 推理过程中从情景记忆中检索的相关示例数量。 |
embedding_model | str | "openai:/text-embedding-3-small" | 用于情景记忆检索的模型。必须采用 <provider>:/<model-name> 格式。 |
在准则提炼期间,LLM 调用的并行线程数可以通过 MLFLOW_GENAI_OPTIMIZE_MAX_WORKERS 环境变量进行配置(默认值为 8)。
检查习得的知识
对齐完成后,您可以通过查看更新后的指令来检查评判器所学到的内容。
python
# View the updated instructions with distilled guidelines
print(aligned_judge.instructions)
# Output includes appended guidelines like:
# "Distilled Guidelines (7):
# - Responses must be factually accurate...
# - Use neutral, descriptive language..."
移除反馈(取消对齐)
如果需求发生变更或反馈有误,您可以有选择地移除已习得的知识。
python
import mlflow
# Retrieve traces with outdated or incorrect feedback
traces_to_forget: list[mlflow.entities.Trace] = mlflow.search_traces(
filter_string="tag.outdated = 'true'",
return_type="list",
)
# Remove knowledge derived from those traces
updated_judge = aligned_judge.unalign(traces=traces_to_forget)
调试
要调试优化过程,请启用 DEBUG 日志记录
python
import logging
logging.getLogger("mlflow.genai.judges.optimizers.memalign").setLevel(logging.DEBUG)
aligned_judge = judge.align(traces=traces, optimizer=optimizer)