Timescale/pgai项目:使用Vectorizer和LiteLLM评估嵌入模型的完整指南

Timescale/pgai项目:使用Vectorizer和LiteLLM评估嵌入模型的完整指南

pgai Helper functions for AI workflows pgai 项目地址: https://gitcode.com/gh_mirrors/pg/pgai

概述

在现代AI应用中,嵌入模型(Embedding Models)扮演着至关重要的角色,它们能够将文本转换为向量表示,从而支持语义搜索、推荐系统等多种应用场景。本文将详细介绍如何在Timescale/pgai项目中,利用其Vectorizer功能和LiteLLM集成来评估不同嵌入模型的性能表现。

技术背景

pgai是PostgreSQL的一个扩展,提供了强大的AI功能集成。其中,Vectorizer是一个关键组件,它能够:

  1. 自动处理文本数据的分块(chunking)
  2. 调用各种嵌入模型生成向量表示
  3. 将结果存储在数据库表中
  4. 支持多种模型的无缝切换

LiteLLM则是一个统一的API接口,允许开发者通过单一接口访问多种大语言模型服务,包括Cohere、Mistral、OpenAI等。

评估方案设计

本评估方案采用了Paul Graham的散文集作为测试数据集,通过生成多种类型的问题来全面测试不同嵌入模型的检索能力。评估的核心思路是:

  1. 从文本中随机选取多个片段(chunks)
  2. 为每个片段生成不同类型的问题
  3. 使用各嵌入模型检索最相关的文本片段
  4. 比较检索结果与原始片段的匹配程度

准备工作

环境配置

  1. 确保已安装Docker和Docker Compose
  2. 准备PostgreSQL数据库并安装pgai扩展
  3. 获取Paul Graham散文集数据集
  4. 准备各模型API密钥:
    • Cohere API密钥
    • Mistral API密钥
    • OpenAI API密钥
    • HuggingFace API密钥

关键参数配置

NUM_CHUNKS = 20               # 评估的随机文本块数量
NUM_QUESTIONS_PER_CHUNK = 20  # 每个文本块生成的问题总数
TOP_K = 10                    # 检索的最相似文本块数量
QUESTION_DISTRIBUTION = {     # 问题类型分布
    'short': 4,    # 简短问题(少于10个词)
    'long': 4,     # 需要详细回答的长问题
    'direct': 4,   # 关于明确信息的问题
    'implied': 4,  # 需要上下文理解的问题
    'unclear': 4   # 模糊或模棱两可的问题
}

实施步骤详解

1. 数据库环境搭建

使用提供的Docker Compose文件快速搭建环境,确保在配置文件中正确设置所有API密钥。

2. 初始化pgai扩展

连接到数据库后,执行以下SQL命令启用pgai扩展:

CREATE EXTENSION IF NOT EXISTS ai CASCADE;

3. 加载数据集

将Paul Graham的散文集加载到数据库中:

SELECT ai.load_dataset('sgoel9/paul_graham_essays');

4. 创建Vectorizer

为每个嵌入模型创建Vectorizer:

Cohere模型
SELECT ai.create_vectorizer(
    'paul_graham_essays'::regclass,
    destination => ai.destination_table('essays_cohere_embeddings'),
    embedding => ai.embedding_litellm(
        'cohere/embed-english-v3.0',
        1024,
        api_key_name => 'COHERE_API_KEY'
    ),
    chunking => ai.chunking_recursive_character_text_splitter('text', 512, 50)
);
Mistral模型
SELECT ai.create_vectorizer(
    'paul_graham_essays'::regclass,
    destination => ai.destination_table('essays_mistral_embeddings'),
    embedding => ai.embedding_litellm(
        'mistral/mistral-embed',
        1024,
        api_key_name => 'MISTRAL_API_KEY'
    ),
    chunking => ai.chunking_recursive_character_text_splitter('text', 512, 50)
);
OpenAI模型
SELECT ai.create_vectorizer(
    'paul_graham_essays'::regclass,
    destination => ai.destination_table('essays_openai_small_embeddings'),
    embedding => ai.embedding_openai(
        'text-embedding-3-small', 
        1024, 
        api_key_name => 'OPENAI_API_KEY'
    ),
    chunking => ai.chunking_recursive_character_text_splitter('text', 512, 50)
);

5. 监控处理状态

使用以下命令检查Vectorizer处理状态:

SELECT * FROM ai.vectorizer_status;

查看可能的错误信息:

SELECT * FROM ai.vectorizer_errors;

评估执行流程

  1. 随机选择文本块:从已向量化的表中随机选取指定数量的文本块
  2. 生成评估问题:使用GPT-4o-mini为每个文本块生成不同类型的问题
  3. 模型评估:对每个嵌入模型执行以下操作:
    • 将问题转换为向量
    • 在向量空间中搜索最相似的文本块
    • 记录检索结果与原始文本块的匹配程度

评估结果分析

评估完成后,系统会生成多个输出文件:

  1. chunks.csv:包含随机选择的原始文本块
  2. questions.csv:为每个文本块生成的问题列表
  3. results.csv:各模型的整体性能指标
  4. detailed_results.csv:每个问题的详细评估结果

通过这些数据,可以分析:

  • 不同模型在各种问题类型上的表现差异
  • 模型对明确信息与隐含信息的理解能力
  • 模型处理模糊问题的能力
  • 各模型在检索准确率和召回率上的表现

技术要点解析

  1. 文本分块策略:使用递归字符文本分割器(recursive character text splitter)将长文本分割为512字符的块,重叠50字符

  2. 向量维度:所有模型统一使用1024维向量,确保比较的公平性

  3. 问题多样性:通过设计不同类型的问题,全面评估模型能力:

    • 简短问题测试模型的精确匹配能力
    • 长问题测试模型的上下文理解能力
    • 直接问题测试事实检索能力
    • 隐含问题测试语义理解能力
    • 模糊问题测试模型的鲁棒性

实际应用建议

  1. 模型选择:根据评估结果选择最适合特定应用场景的模型
  2. 参数调优:可以调整分块大小、重叠区域等参数优化性能
  3. 扩展评估:可以添加更多模型或使用自定义数据集进行评估
  4. 生产部署:评估完成后,可以选择表现最佳的模型用于生产环境

总结

通过pgai的Vectorizer和LiteLLM集成,开发者可以轻松地在PostgreSQL环境中评估不同嵌入模型的性能。这种评估方法不仅系统全面,而且完全基于SQL接口,大大降低了AI模型评估的技术门槛。无论是研究还是生产环境,这套方案都能为嵌入模型的选择提供可靠的数据支持。

pgai Helper functions for AI workflows pgai 项目地址: https://gitcode.com/gh_mirrors/pg/pgai

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晏其潇Aileen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

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

抵扣说明:

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

余额充值