这是一个基于 LangChain、ARK Multimodal API 和 Datalayers 的 RAG (Retrieval-Augmented Generation) 演示项目,支持统一的多模态向量检索。
- 🚀 统一多模态 Embedding: 使用 ARK Multimodal API 统一处理文本和图片的向量化
- 📝 文本 RAG: 使用 LangChain 对文本进行智能分块,支持中英文文档
- 🖼️ 图片 RAG: 支持图片内容的语义检索,可通过文本描述搜索图片
- 🔍 多种搜索模式:
- 文本到文本搜索
- 文本到图片搜索
- 图片到图片搜索
- 混合内容搜索
- 🌐 RESTful API: 提供完整的 HTTP API 接口
- 💻 Web UI: 友好的网页界面,支持实时搜索和展示
- 🗄️ DataLayers 向量功能: 高性能向量存储和检索
- 🤖 智能对话: 集成 OpenAI Chat API,支持基于检索内容的智能问答
- Python 3.11+
- uv 包管理器
- ARK API Key(用于多模态 embedding)
- OpenAI API Key(用于聊天功能)
- Datalayers 数据库实例
编辑 .env 文件,填入你的配置:
# OpenAI API Configuration (用于聊天功能)
OPENAI_API_KEY=your_openai_api_key_here
OPENAI_BASE_URL=https://your-openai-endpoint/v1
CHAT_MODEL=gpt-4o
# ARK Multimodal API Configuration (用于统一embedding)
ARK_API_KEY=your_ark_api_key_here
# Image Processing Configuration
USE_MULTIMODAL_EMBEDDING=true
INCLUDE_IMAGE_DESCRIPTION=true
# FlightSQL Database Configuration
FLIGHTSQL_HOST=your_datalayers_host
FLIGHTSQL_PORT=8360
FLIGHTSQL_USERNAME=admin
FLIGHTSQL_PASSWORD=your_password
FLIGHTSQL_DATABASE=your_databaseuv run python http_server.py --host 0.0.0.0 --port 8000然后访问 http://localhost:8000 使用 Web 界面。
# 处理并索引文本和图片数据
uv run python process_embeddings.py# 验证 ARK multimodal API 功能
uv run python test_unified_embedding.pyGET /: Web UI 主界面GET /api: API 信息和端点列表POST /search/text: 文本到文本搜索POST /search/text-to-image: 文本到图片搜索POST /search/image-to-image: 图片到图片搜索GET /search/hybrid: 混合内容搜索POST /chat: 智能对话接口(支持 RAG 增强)GET /health: 健康检查端点
curl -X POST http://localhost:8000/search/text \
-H "Content-Type: application/json" \
-d '{
"query": "向量数据库",
"limit": 5,
"similarity_threshold": 0.1
}'curl -X POST http://localhost:8000/search/text-to-image \
-F "query=风景图片" \
-F "limit=10"curl -X POST http://localhost:8000/chat \
-H "Content-Type: application/json" \
-d '{
"message": "什么是向量数据库?",
"use_rag": true,
"limit": 5
}'rag-demo/
├── src/rag_demo/
│ ├── __init__.py
│ ├── config.py # 配置管理
│ ├── database.py # Datalayers 连接
│ ├── text_processor.py # 文本处理和向量化
│ ├── image_processor.py # 图片处理和向量化
│ ├── unified_processor.py # 统一的多模态处理器
│ ├── vector_search.py # 向量相似度搜索
│ └── rag_system.py # RAG 系统核心
├── data/ # 数据目录
│ ├── text/ # 文本数据
│ │ └── datalayers-docs/ # DataLayers 产品文档(中英文)
│ └── images/ # 图片数据
│ └── RP2K.zip # RP2K 图片数据集
├── static/ # 静态资源文件
├── templates/ # HTML 模板
├── http_server.py # HTTP 服务器和 API
├── process_embeddings.py # 数据处理和索引脚本
├── test_unified_embedding.py # 测试脚本
├── .env # 环境配置
└── README.md # 使用说明
- 使用 ARK Multimodal API 统一处理文本和图片
- 文本和图片在同一向量空间中表示
- 支持跨模态的语义检索
- 基于 FlightSQL 的分布式向量存储
- 支持余弦相似度计算
- 可扩展的向量索引架构
- 使用 LangChain 进行智能文本分块
- 保留文档结构和上下文信息
- 支持多种文档格式(PDF、Markdown、纯文本等)
- FastAPI 提供高性能 RESTful API
- 响应式 Web UI 设计
- 支持实时搜索和结果展示
在使用项目之前,需要手动下载以下数据集:
- DataLayers 文档:需要手动下载 DataLayers 产品文档
- 放置位置:
data/text/datalayers-docs/ - 格式:Markdown 文件
- 包含内容:
- 产品介绍和架构说明
- 安装和配置指南
- SQL 参考文档
- 开发指南和API文档
- 集成示例和最佳实践
- RP2K 数据集:需要手动下载 RP2K (Rich Picture 2K) 数据集
- 下载后放置位置:
data/images/RP2K.zip - 格式:JPEG 图片文件压缩包
- 内容:包含多样化的图片内容,适合测试图片检索功能
- 处理:解压后会在
data/images/all/目录下生成训练和测试图片
注意: 这两个数据集需要手动下载并放置到指定目录,项目仓库中不包含这些大型数据文件。
- API 配额: 注意 ARK API 和 OpenAI API 的使用配额
- 数据隐私: 确保敏感数据不被上传到未知外部 API
- 向量维度: ARK Multimodal API 生成的向量维度可能较大,注意存储空间
- 中文支持: 系统完全支持中文内容的处理和检索
- 包管理: uv
- Web 框架: FastAPI
- 文本处理: LangChain
- 向量化: ARK Multimodal API
- AI 对话: OpenAI Chat API
- 向量数据库: Datalayers + FilghtSQL + PyArrow
- 前端: HTML + JavaScript + CSS