基准真相期望
MLflow 期望提供了一种系统化的方法来捕获基准真相——即你的 AI 应该产生的正确或期望的输出。通过建立这些参考点,你为有意义的评估和持续改进你的 GenAI 应用程序奠定了基础。
有关完整的 API 文档和实现细节,请参阅 mlflow.log_expectation()
参考。
什么是期望?
期望 定义了你的 AI 在给定特定输入时应产生的“黄金标准”。它们代表了由领域专家确定的正确答案、期望行为或理想输出。可以将期望看作是衡量实际 AI 性能的答案钥匙。
与评估已发生事件的反馈不同,期望确定的是应该发生什么。它们总是由具备定义正确结果专业知识的人类创建的。
先决条件
在使用 Expectations API 之前,请确保你已:
- 安装 MLflow 3.2.0 或更高版本
- 有一个活动的 MLflow 跟踪服务器或本地跟踪设置
- 已将你的 GenAI 应用程序的跟踪记录到 MLflow 实验中
为什么要标注基准真相?
创建评估基线
为客观的准确性测量建立参考点。没有基准真相,你就无法衡量你的 AI 相对于已知正确答案的表现如何。
实现系统化测试
通过构建期望输出的数据集,将临时测试转变为系统化评估,以在不同版本和配置之间持续衡量性能。
支持微调和训练
从基准真相标注中创建高质量的训练数据。这对于微调模型和训练自动化评估器至关重要。
建立质量标准
将质量要求编码化,并将隐性知识转化为每个人都能理解和遵循的明确、可衡量的标准。
期望的类型
- 事实型
- 结构化
- 行为型
- Span 级别
事实型期望
针对有确定答案的问题
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",
),
)
Span 级别期望
针对你的 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"
)
与评估集成
当与系统化评估相结合时,期望的功能最为强大
- 针对期望的自动评分
- 关于期望达成情况的人工反馈
- 期望与实际之间的差距分析
- 基于期望匹配的性能指标