基准预期
MLflow 预期提供了一种系统性的方法来捕获基准(即 AI 应该产生的正确或期望的输出)。通过建立这些参考点,您可以为 GenAI 应用程序的有意义的评估和持续改进奠定基础。
如需完整的 API 文档和实现详细信息,请参阅 mlflow.log_expectation() 参考。
什么是预期?
预期定义了 AI 在给定特定输入时应产生的“黄金标准”。它们代表了领域专家确定的正确答案、期望行为或理想输出。可以将预期视为衡量实际 AI 性能的标准答案。
与评估已发生情况的反馈不同,预期定义了应该发生什么。预期始终由拥有定义正确结果专业知识的人员创建。
先决条件
在使用 预期 API 之前,请确保您已
- 安装了 MLflow 3.2.0 或更高版本
- 一个活动的 MLflow 跟踪服务器或本地跟踪设置
- 已从 GenAI 应用程序记录到 MLflow 实验的跟踪记录
为何要标注基准?
创建评估基线
为客观准确性测量建立参考点。没有基准,您就无法衡量 AI 在已知正确答案方面的表现。
实现系统化测试
通过构建期望输出的数据集来一致地衡量不同版本和配置下的性能,将临时测试转变为系统化评估。
支持微调和训练
从基准标注创建高质量的训练数据。对于微调模型和训练自动化评估器至关重要。
建立质量标准
将质量要求编码化,并将隐性知识转化为显性的、可衡量的标准,以便每个人都能理解和遵循。
预期的类型
- 事实性
- 结构化
- 行为性
- 跨度级别
事实性预期
对于有明确答案的问题
mlflow.log_expectation(
trace_id=trace_id,
name="expected_answer",
value="The speed of light in vacuum is 299,792,458 meters per second",
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id="physics_expert@university.edu",
),
)
结构化预期
对于包含多个组件的复杂输出
mlflow.log_expectation(
trace_id=trace_id,
name="expected_extraction",
value={
"company": "TechCorp Inc.",
"sentiment": "positive",
"key_topics": ["product_launch", "quarterly_earnings", "market_expansion"],
"action_required": True,
},
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN, source_id="business_analyst@company.com"
),
)
行为性预期
用于定义 AI 的行为方式
mlflow.log_expectation(
trace_id=trace_id,
name="expected_behavior",
value={
"should_escalate": True,
"required_elements": ["empathy", "solution_offer", "follow_up"],
"max_response_length": 150,
"tone": "professional_friendly",
},
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id="customer_success_lead@company.com",
),
)
跨度级别预期
用于 AI 管道中的特定操作
# Expected documents for RAG retrieval
mlflow.log_expectation(
trace_id=trace_id,
span_id=retrieval_span_id,
name="expected_documents",
value=["policy_doc_2024", "faq_section_3", "user_guide_ch5"],
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id="information_architect@company.com",
),
)
分步指南
通过 UI 添加基准标注
MLflow UI 提供了一种直观的方式,可以直接将预期添加到跟踪记录中。这种方法非常适合需要定义基准而无需编写代码的领域专家,以及需要多个利益相关者贡献不同视角的协作标注工作流。
预期将立即附加到跟踪记录中,从而为未来的评估建立基准参考。
通过 API 记录基准
当您需要自动化预期创建、与现有标注工具集成或构建自定义基准收集工作流时,请使用程序化的 mlflow.log_expectation() API。
- 单次标注
- 批量标注
以程序化方式创建预期,用于系统化基准收集
1. 设置您的标注环境
import mlflow
from mlflow.entities import AssessmentSource
from mlflow.entities.assessment_source import AssessmentSourceType
# Define your domain expert source
expert_source = AssessmentSource(
source_type=AssessmentSourceType.HUMAN, source_id="domain_expert@company.com"
)
2. 为不同数据类型创建预期
def log_factual_expectation(trace_id, question, correct_answer):
"""Log expectation for factual questions."""
mlflow.log_expectation(
trace_id=trace_id,
name="expected_factual_answer",
value=correct_answer,
source=expert_source,
metadata={
"question": question,
"expectation_type": "factual",
"confidence": "high",
"verified_by": "subject_matter_expert",
},
)
def log_structured_expectation(trace_id, expected_extraction):
"""Log expectation for structured data extraction."""
mlflow.log_expectation(
trace_id=trace_id,
name="expected_extraction",
value=expected_extraction,
source=expert_source,
metadata={
"expectation_type": "structured",
"schema_version": "v1.0",
"annotation_guidelines": "company_extraction_standards_v2",
},
)
def log_behavioral_expectation(trace_id, expected_behavior):
"""Log expectation for AI behavior patterns."""
mlflow.log_expectation(
trace_id=trace_id,
name="expected_behavior",
value=expected_behavior,
source=expert_source,
metadata={
"expectation_type": "behavioral",
"behavior_category": "customer_service",
"compliance_requirement": "company_policy_v3",
},
)
3. 在您的标注工作流中使用这些函数
# Example: Annotating a customer service interaction
trace_id = "tr-customer-service-001"
# Define what the AI should have said
factual_answer = "Your account balance is $1,234.56 as of today."
log_factual_expectation(trace_id, "What is my account balance?", factual_answer)
# Define expected data extraction
expected_extraction = {
"intent": "account_balance_inquiry",
"account_type": "checking",
"urgency": "low",
"requires_authentication": True,
}
log_structured_expectation(trace_id, expected_extraction)
# Define expected behavior
expected_behavior = {
"should_verify_identity": True,
"tone": "professional_helpful",
"should_offer_additional_help": True,
"escalation_required": False,
}
log_behavioral_expectation(trace_id, expected_behavior)
对于大规模基准收集,请使用批量标注
1. 定义批量标注函数
def annotate_batch_expectations(annotation_data):
"""Annotate multiple traces with ground truth expectations."""
for item in annotation_data:
try:
mlflow.log_expectation(
trace_id=item["trace_id"],
name=item["expectation_name"],
value=item["expected_value"],
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN,
source_id=item["annotator_id"],
),
metadata={
"batch_id": item["batch_id"],
"annotation_session": item["session_id"],
"quality_checked": True,
},
)
print(f"✓ Annotated {item['trace_id']}")
except Exception as e:
print(f"✗ Failed to annotate {item['trace_id']}: {e}")
2. 准备您的标注数据
# Example batch annotation data
batch_data = [
{
"trace_id": "tr-001",
"expectation_name": "expected_answer",
"expected_value": "Paris is the capital of France",
"annotator_id": "expert1@company.com",
"batch_id": "geography_qa_batch_1",
"session_id": "session_2024_01_15",
},
{
"trace_id": "tr-002",
"expectation_name": "expected_answer",
"expected_value": "The speed of light is 299,792,458 m/s",
"annotator_id": "expert2@company.com",
"batch_id": "physics_qa_batch_1",
"session_id": "session_2024_01_15",
},
]
3. 执行批量标注
annotate_batch_expectations(batch_data)
预期标注工作流
AI 开发生命周期的不同阶段需要不同的预期标注方法。以下工作流可帮助您系统地创建和维护与开发过程和质量目标一致的基准预期。
开发阶段
通过识别测试场景、与领域专家一起创建预期、测试 AI 输出并迭代配置直到满足预期来定义成功标准。
生产监控
通过对生产跟踪记录进行采样、添加预期以创建评估数据集以及跟踪性能趋势来启用系统化质量跟踪。
协作标注
使用基于团队的标注,其中领域专家定义初始预期,评审委员会进行验证和完善,并通过达成共识来解决分歧。
最佳实践
具体且可衡量
模糊的预期会导致评估不一致。定义清晰、具体的标准,这些标准可以客观地进行验证。
记录您的推理
使用元数据解释为何某个预期被定义为某种方式
mlflow.log_expectation(
trace_id=trace_id,
name="expected_diagnosis",
value={
"primary": "Type 2 Diabetes",
"risk_factors": ["obesity", "family_history"],
"recommended_tests": ["HbA1c", "fasting_glucose"],
},
metadata={
"guideline_version": "ADA_2024",
"confidence": "high",
"based_on": "clinical_presentation_and_history",
},
source=AssessmentSource(
source_type=AssessmentSourceType.HUMAN, source_id="endocrinologist@hospital.org"
),
)
保持一致性
在您的预期中使用标准化的命名和结构,以实现有意义的分析和比较。
管理预期
定义了跟踪记录的预期后,您可能需要检索、更新或删除它们,以维护准确的基准数据。
检索预期
检索特定预期以分析您的基准数据
# Get a specific expectation by ID
expectation = mlflow.get_assessment(
trace_id="tr-1234567890abcdef", assessment_id="a-0987654321abcdef"
)
# Access expectation details
name = expectation.name
value = expectation.value
source_type = expectation.source.source_type
metadata = expectation.metadata if hasattr(expectation, "metadata") else None
更新预期
在基准需要完善时更新现有预期
from mlflow.entities import Expectation
# Update expectation with corrected information
updated_expectation = Expectation(
name="expected_answer",
value="The capital of France is Paris, located in the Île-de-France region",
)
mlflow.update_assessment(
trace_id="tr-1234567890abcdef",
assessment_id="a-0987654321abcdef",
assessment=updated_expectation,
)
删除预期
删除错误记录的预期
# Delete specific expectation
mlflow.delete_assessment(
trace_id="tr-1234567890abcdef", assessment_id="a-5555666677778888"
)
与评估集成
当预期与系统化评估相结合时,其威力最大
- 针对预期的自动化评分
- 对预期达成的人工反馈
- 预期与实际之间的差距分析
- 基于预期匹配的性能指标