零丢失!DeepEval评测数据持久化全攻略:从缓存到备份的完整方案

零丢失!DeepEval评测数据持久化全攻略:从缓存到备份的完整方案

【免费下载链接】deepeval The Evaluation Framework for LLMs 【免费下载链接】deepeval 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval

你是否曾因意外中断丢失数小时的LLM评测结果?是否在多设备协作时难以同步测试数据?DeepEval作为LLM评测框架(Evaluation Framework for LLMs),提供了完善的数据持久化机制,确保你的评测工作万无一失。本文将系统讲解DeepEval的数据备份策略,从缓存机制到手动备份,帮你构建可靠的数据安全网。

评测数据为什么会丢失?

在LLM评测过程中,数据丢失可能来自多种场景:

  • 程序意外崩溃或强制退出
  • 缓存文件被误删或损坏
  • 多轮测试中的临时数据未及时保存
  • 环境变量配置错误导致持久化失败

DeepEval的持久化方案通过三级防护机制解决这些问题:内存缓存→临时文件→持久化存储,形成完整的数据安全闭环。

缓存机制:自动保护的第一道防线

DeepEval的缓存系统自动保存评测中间结果,避免重复计算。核心实现位于deepeval/test_run/cache.py,采用双文件缓存策略:

CACHE_FILE_NAME = f"{HIDDEN_DIR}/.deepeval-cache.json"  # 主缓存文件
TEMP_CACHE_FILE_NAME = f"{HIDDEN_DIR}/.temp-deepeval-cache.json"  # 临时缓存

缓存工作原理

  1. 写入流程

    • 测试运行时数据先写入临时缓存(.temp-deepeval-cache.json)
    • 测试完成后合并到主缓存(.deepeval-cache.json)
    • 使用文件锁确保并发安全(portalocker库实现)
  2. 缓存内容

    • 测试用例参数(输入、输出、上下文等)
    • 评测指标配置(阈值、模型、严格模式等)
    • 计算结果(分数、通过状态、耗时等)
  3. 缓存键生成

    cache_dict = {
        LLMTestCaseParams.INPUT.value: test_case.input,
        LLMTestCaseParams.ACTUAL_OUTPUT.value: test_case.actual_output,
        # 其他参数...
        "hyperparameters": hyperparameters,
    }
    test_case_cache_key = serialize(cache_dict)  # 生成唯一键
    

缓存配置与控制

通过环境变量或配置文件调整缓存行为:

# 在.env文件中配置
ENABLE_DEEPEVAL_CACHE=False  # 禁用缓存
DEEPEVAL_DEFAULT_SAVE=dotenv:/path/to/custom.env  # 自定义缓存路径

缓存管理接口允许高级操作:

from deepeval.test_run.cache import global_test_run_cache_manager

# 清除所有缓存
global_test_run_cache_manager.wrap_up_cached_test_run()

# 禁用缓存写入
global_test_run_cache_manager.disable_write_cache = True

结果持久化:主动备份策略

缓存主要用于临时存储,DeepEval还提供了多种主动持久化方案,确保重要评测数据长期保存。

结果文件夹配置

通过设置DEEPEVAL_RESULTS_FOLDER指定评测结果存储目录,系统会自动生成时间戳命名的JSON文件:

# deepeval/config/settings.py 中的配置
class Settings(BaseSettings):
    # 当设置此参数时,DeepEval会将最新测试运行的带时间戳JSON导出到此目录
    DEEPEVAL_RESULTS_FOLDER: Optional[Path] = None

配置方法(三选一):

  1. 环境变量:export DEEPEVAL_RESULTS_FOLDER=./evaluation_results
  2. .env文件:DEEPEVAL_RESULTS_FOLDER=./evaluation_results
  3. 代码设置:
    from deepeval.config import get_settings
    
    with get_settings().edit() as settings:
        settings.DEEPEVAL_RESULTS_FOLDER = "./evaluation_results"
    

数据集导入导出

DeepEval支持将测试数据集导出为JSON/CSV文件,实现人工备份和共享:

# 导出数据集示例 (deepeval/dataset/dataset.py)
dataset = EvaluationDataset(goldens=your_goldens)

# 保存为JSON
with open("evaluation_dataset.json", "w") as f:
    json.dump([g.dict() for g in dataset.goldens], f, indent=2)

# 从JSON加载
with open("evaluation_dataset.json", "r") as f:
    goldens = [Golden(**item) for item in json.load(f)]
dataset = EvaluationDataset(goldens=goldens)

批量导入方法:

# 从CSV文件导入测试用例
dataset.add_test_cases_from_csv_file(
    file_path="test_cases.csv",
    input_col_name="query",
    actual_output_col_name="response",
    expected_output_col_name="expected_response",
    context_col_name="context"
)

最佳备份实践

推荐的评测数据备份策略:

  1. 实时缓存:默认启用,保护单次测试过程
  2. 定期导出:关键节点调用save()方法保存完整结果
  3. 版本控制:将重要数据集纳入Git管理(排除缓存文件)
  4. 异地备份:定期将结果文件夹同步到云存储

自动化备份脚本示例:

#!/bin/bash
# backup_evaluation.sh
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
BACKUP_DIR="./backups/$TIMESTAMP"

# 创建备份目录
mkdir -p $BACKUP_DIR

# 复制结果文件
cp -r ${DEEPEVAL_RESULTS_FOLDER:-./results} $BACKUP_DIR

# 导出当前数据集
python -c "from your_script import dataset; dataset.export('$BACKUP_DIR/dataset.json')"

# 压缩备份
tar -czf $BACKUP_DIR.tar.gz $BACKUP_DIR
rm -rf $BACKUP_DIR

echo "Backup completed: $BACKUP_DIR.tar.gz"

配置持久化:环境与参数的安全存储

DeepEval使用dotenv管理环境变量,确保配置的持久化和版本隔离。核心实现位于deepeval/config/settings.py

配置文件加载顺序

DeepEval按以下优先级加载配置(高优先级覆盖低优先级):

  1. 系统环境变量
  2. .env.local(本地覆盖,不纳入版本控制)
  3. .env.{APP_ENV}(环境特定配置,如.env.production)
  4. .env(基础配置,可提交到版本控制)

加载逻辑:

def autoload_dotenv() -> None:
    """
    加载.env文件中的环境变量,不覆盖现有进程环境变量
    优先级(从低到高):.env -> .env.{APP_ENV} -> .env.local
    进程环境变量始终优先于文件值
    """
    if parse_bool(os.getenv("DEEPEVAL_DISABLE_DOTENV"), default=False):
        return
    # 加载逻辑实现...

配置持久化方法

使用edit()上下文管理器安全修改和保存配置:

from deepeval.config import get_settings

with get_settings().edit(save="dotenv") as settings:
    settings.OPENAI_API_KEY = "sk-..."  # 会自动保存到.env文件
    settings.DEEPEVAL_RESULTS_FOLDER = "./evaluation_results"
    settings.LOG_LEVEL = "DEBUG"

修改会同时更新:

  • 内存中的配置对象
  • .env文件(非敏感配置)
  • 密钥文件(仅敏感配置,如API密钥)

故障恢复:当数据丢失发生时

即使有完善的预防措施,数据丢失仍可能发生。DeepEval提供了多种恢复机制:

从缓存文件恢复

如果主缓存文件损坏或丢失,尝试从临时缓存恢复:

from deepeval.test_run.cache import global_test_run_cache_manager

# 加载临时缓存
global_test_run_cache_manager.get_cached_test_run(from_temp=True)

# 保存为正式缓存
global_test_run_cache_manager.save_cached_test_run(to_temp=False)

结果文件恢复

如果配置了DEEPEVAL_RESULTS_FOLDER,可以直接加载历史结果文件:

from deepeval.dataset.dataset import EvaluationDataset

# 从结果文件加载测试用例
with open("./results/20231115_143022_test_results.json", "r") as f:
    results = json.load(f)

dataset = EvaluationDataset()
for test_case_data in results["test_cases"]:
    test_case = LLMTestCase(**test_case_data)
    dataset.add_test_case(test_case)

数据恢复工具

DeepEval CLI提供了数据恢复命令(开发中):

# 列出所有可恢复的缓存和结果文件
deepeval recovery list

# 恢复最近的测试数据
deepeval recovery restore --latest

# 恢复指定日期的结果
deepeval recovery restore --date 2023-11-15

完整备份方案总结

为确保LLM评测数据安全,建议实施以下综合策略:

基础配置(必选)

1.** 启用结果持久化 **:

echo "DEEPEVAL_RESULTS_FOLDER=./deepeval_results" >> .env

2.** 配置版本控制 **:

# .gitignore配置
echo ".env.local" >> .gitignore
echo ".deepeval/" >> .gitignore  # 排除缓存目录
echo "!/.env" >> .gitignore  # 但保留基础.env文件

进阶保护(推荐)

1.** 定期自动备份**:设置crontab任务执行备份脚本 2.** 多环境隔离 :为开发/测试/生产环境使用不同配置文件 3. 关键数据加密 **:对包含敏感信息的评测结果进行加密存储

数据安全检查表

在部署评测系统前,确认以下事项:

  •  已配置DEEPEVAL_RESULTS_FOLDER持久化结果
  •  缓存文件位于安全位置且定期清理
  •  敏感配置使用.env.local并排除在Git外
  •  定期测试数据恢复流程
  •  备份文件有明确的命名规范(包含时间戳)

通过实施这些策略,你可以确保LLM评测数据的完整性和可用性,为模型迭代和优化提供可靠的数据支持。DeepEval的缓存、配置和结果持久化机制共同构成了一个健壮的数据安全体系,让你专注于评测本身而非数据管理。

评测数据流程

上图:DeepEval评测数据流程示意图,展示了从测试执行到结果持久化的完整路径(图片来源:docs/assets/dashboard-screenshot.png

完整的备份策略不仅保护你的工作成果,还能实现评测过程的可追溯性和可复现性,这对于LLM模型的持续优化至关重要。通过本文介绍的方法,你可以构建一个既自动化又可靠的数据持久化系统。

【免费下载链接】deepeval The Evaluation Framework for LLMs 【免费下载链接】deepeval 项目地址: https://gitcode.com/GitHub_Trending/de/deepeval

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值