使用跟踪来评估和提高质量

跟踪不仅仅是用于调试,它们还包含有价值的信息,这些信息可以促进 GenAI 应用程序中的系统质量改进。 本指南介绍如何分析跟踪以识别质量问题、从跟踪数据创建评估数据集、实现有针对性的改进以及衡量更改的影响。

分析踪迹以识别质量问题

跟踪提供有关应用程序如何处理用户请求的详细见解。 通过分析这些跟踪,可以识别质量问题的模式:

定量分析

  1. 使用 MLflow UI 筛选和分组具有类似特征的跟踪:

    • 按特定标记进行筛选(例如) tag.issue_type = "hallucination"
    • 搜索包含特定输入或输出的痕迹
    • 按元数据排序,例如延迟或令牌使用情况
  2. 通过编程方式查询跟踪信息以进行更高级的分析:

import mlflow
import pandas as pd

# Search for traces with potential quality issues
traces_df = mlflow.search_traces(
    filter_string="tag.quality_score < 0.7",
    max_results=100,
    extract_fields=["span.end_time", "span.inputs.messages", "span.outputs.choices", "span.attributes.usage.total_tokens"]
)

# Analyze patterns
# For example, check if quality issues correlate with token usage
correlation = traces_df["span.attributes.usage.total_tokens"].corr(traces_df["tag.quality_score"])
print(f"Correlation between token usage and quality: {correlation}")

定性分析

  1. 查看表示常见故障模式的单条跟踪记录。

    • 检查导致低质量输出的输入
    • 查找应用程序如何处理这些情况的模式
    • 识别缺少的上下文或错误推理
  2. 比较高质量跟踪与低质量跟踪

    • 应用程序处理这些不同输入的方式有何不同?
    • 是否有特定类型的查询持续导致质量问题?

从跟踪数据创建评估数据集

确定具有代表性的跟踪后,可以将其精心整理为评估数据集,以便进行系统测试。

  1. 将跟踪导出到数据集
import mlflow
import pandas as pd

# Query traces that represent important test cases
traces_df = mlflow.search_traces(
    filter_string="trace.timestamp > '2023-07-01'",
    max_results=500,
    extract_fields=["span.inputs.messages", "span.outputs.choices"]
)

# Prepare dataset format
eval_data = []
for _, row in traces_df.iterrows():
    # Extract user query from messages
    messages = row["span.inputs.messages"]
    user_query = next((msg["content"] for msg in messages if msg["role"] == "user"), None)

    # Extract model response
    response = row["span.outputs.choices"][0]["message"]["content"] if row["span.outputs.choices"] else None

    if user_query and response:
        eval_data.append({"input": user_query, "output": response})

# Create evaluation dataset
eval_df = pd.DataFrame(eval_data)
eval_df.to_csv("evaluation_dataset.csv", index=False)
  1. 添加基本事实或预期输出

    • 对于每个跟踪,请添加正确的或预期的输出
    • 包括要评估的质量指标或特定方面
    • 请考虑利用域专家来评审和批注数据集
  2. 将数据集注册到 MLflow

import mlflow

# Log the evaluation dataset
with mlflow.start_run() as run:
    mlflow.log_artifact("evaluation_dataset.csv", "evaluation_datasets")

实现有针对性的改进

通过手头识别的问题和评估数据集,可以进行有针对性的改进:

提示工程

  1. 优化系统提示 以解决特定故障模式:

    • 添加用于处理边缘事例的更明确的准则
    • 包含演示如何处理有问题的输入的示例
    • 调整音调或样式以更好地满足用户期望
  2. 添加防护措施 以防止常见的质量问题:

    • 在应用程序逻辑中实现验证步骤
    • 在向用户显示输出之前添加后处理以检查输出

应用程序体系结构改进

  1. 如果未找到相关文档,则增强检索机制

    • 检查跟踪中的检索范围以查看正在检索的内容
    • 改进嵌入模型或检索算法
    • 如果文档部分欠佳,请考虑使用分块策略
  2. 将推理步骤添加到 复杂的决策过程:

    • 将复杂任务分解为多个步骤或部分
    • 实现思考链或其他推理技术
    • 为关键输出添加验证步骤

衡量质量改进

实现更改后,使用 MLflow 来衡量其影响:

  1. 进行系统评估,使用您的特选数据集:
import mlflow
from mlflow.evaluators import evaluate

# Compare the original and improved models on your dataset
results = mlflow.evaluate(
    data="evaluation_dataset.csv",
    model=improved_model,  # Your improved model/application
    baseline_model=original_model,  # The original version for comparison
    evaluators=["mlflow_model"],
    evaluator_config={
        "custom_metrics": [
            # Define your quality metrics here
        ]
    }
)

# View the results
print(results.metrics)
  1. 部署改进后监控生产跟踪:
    • 设置仪表板以跟踪一段时间内的质量指标
    • 监视退步或意外行为
    • 持续收集新迹象来识别新兴问题

后续步骤

继续您的旅程,并参考这些推荐的行动和教程。

参考指南

浏览本指南中提到的概念和功能的详细文档。

小窍门

质量改进是一个迭代过程。 从最关键的质量问题开始,实施有针对性的改进,衡量其影响并重复。