Skip to content

jiyu1994/ecommerce_rag

Repository files navigation

电商RAG问答系统

基于LangChain和FAISS构建的电商商品问答系统,用sentence-transformers做语义检索,通义千问做答案生成。

为什么做这个项目

最近在学RAG相关技术,看到很多教程都是简单的文档问答,想试试在电商场景下效果怎么样。选择电商主要是因为商品信息比较结构化,而且查询场景比较明确(找商品、比较价格之类的)。

技术选择

  • LangChain: 主要是方便集成各种组件,虽然有点重但是省事
  • FAISS: 向量检索比较快,CPU版本就够用
  • sentence-transformers: all-MiniLM-L6-v2模型,384维向量,中英文都还行
  • 通义千问: 用的turbo版本,便宜而且中文支持好

数据来源

使用Kaggle上的Amazon Products Dataset 2023,包含140万条真实Amazon商品数据。支持灵活的数据规模和采样方法,可以根据硬件配置调整处理的数据量。

怎么运行

环境准备

# Python 3.11,避免依赖冲突
conda create -n rag_py311 python=3.11
conda activate rag_py311
pip install -r requirements.txt

API配置

需要在根目录创建.env文件:

DASHSCOPE_API_KEY=your_key_here

去阿里云DashScope申请,很快就能通过。

使用方法

项目提供三个核心脚本:

# 重要:必须先激活正确的环境
conda activate rag_py311

# 脚本1:下载Kaggle数据集(可选)
python download_kaggle.py

# 脚本2:Kaggle真实数据测试
python test_kaggle.py --size 10000 --sampling random

# 脚本3:生成随机数据测试(快速验证)
python test_generated.py --size 5000

参数说明:

  • --size N: 数据规模(推荐范围:5000-20000)
  • --sampling: 采样方法
    • random: 随机采样(推荐,数据分布均匀)
    • stratified: 分层采样(按类别平衡采样)
    • sequential: 顺序采样(可能分布不均)

推荐用法:

# 快速验证功能
python test_generated.py --size 3000

# 真实数据测试(推荐规模)
python test_kaggle.py --size 10000 --sampling stratified

# 大规模测试(需要16GB+内存)
python test_kaggle.py --size 50000 --sampling random

系统架构

设计了两套模式:

  1. ADVANCED模式: LangChain + FAISS + sentence-transformers,功能全但是依赖多
  2. SIMPLE模式: TF-IDF + 直接API调用,作为降级方案

系统会自动检测依赖,如果ADVANCED模式初始化失败会自动切换到SIMPLE模式。

性能表现

不同规模测试结果:

数据规模 向量构建速度 平均响应时间 内存使用 推荐配置
5,000条 76向量/秒 0.88秒 4GB 快速测试
10,000条 65向量/秒 0.95秒 6GB 日常测试
20,000条 55向量/秒 1.2秒 10GB 中等规模
50,000条 40向量/秒 0.97秒 16GB 大规模测试

解决的问题

  1. Python版本兼容性: 升级到Python 3.11解决pydantic冲突
  2. 内存管理: 分批处理避免大规模数据OOM
  3. FAISS稳定性: 优化向量构建过程,避免segmentation fault
  4. 数据分布: 支持分层采样确保类别平衡
  5. 价格过滤: 智能识别价格条件,精确过滤结果

效果展示

支持多种查询类型:

价格条件查询

问:"200美元以下的商品有哪些?"
答:推荐了符合价格条件的商品,不会显示超出预算的商品

类别推荐查询

问:"推荐一些电子产品"
答:根据数据中的实际类别匹配相关商品

综合条件查询

问:"有什么高评分的便宜商品?"
答:结合评分和价格进行智能推荐

技术特点

  • 智能列匹配: 自动识别不同数据源的列名格式
  • 分批处理: 避免大规模数据的内存问题
  • 价格解析: 支持多种价格格式和货币符号
  • 容错降级: 高级模式失败时自动切换到简单模式
  • 灵活采样: 支持随机、分层、顺序三种采样方法

依赖说明

主要依赖在requirements.txt里,注意numpy版本锁定在<2.0避免兼容性问题。建议使用conda环境管理依赖。

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages