logo
0
0
WeChat Login

图片RAG系统

基于LangChain构建的图片检索增强生成系统,能够将图片描述向量化,并在回答问题时调用相关图片。

功能特点

  • 🖼️ 图片向量化: 将图片描述、角色信息、生物学概念等转换为向量表示
  • 🔍 智能检索: 基于语义相似度检索相关图片
  • 💬 问答系统: 支持自然语言问答,自动调用相关图片
  • 🧬 专业领域: 专门针对生物学、医学等专业领域优化
  • 🌐 多语言支持: 支持中文和英文查询

系统架构

图片数据集 (JSONL) 
    ↓
数据预处理
    ↓
向量化 (HuggingFace Embeddings)
    ↓
向量数据库 (ChromaDB)
    ↓
检索器 (Similarity Search)
    ↓
问答链 (LLM + RAG)
    ↓
回答 + 相关图片

环境安装

方法1: 使用Conda (推荐)

# 自动安装脚本 (Linux/macOS)
./install.sh

# 或Windows
install.bat

# 或手动安装
conda env create -f environment.yml
conda activate image-rag-system

方法2: 使用pip

pip install -r requirements.txt

环境变量设置

OpenAI API (必需)

export OPENAI_API_KEY="your-openai-api-key"

SiliconFlow API (可选)

export SILICONFLOW_API_KEY="your-siliconflow-api-key"

使用方法

1. 环境激活

# 激活conda环境
conda activate image-rag-system

# 或使用激活脚本
./activate_env.sh  # Linux/macOS
activate_env.bat   # Windows

2. 启动主程序 (推荐)

# 启动统一主程序
python main.py

# 或使用启动脚本
python start.py

主程序提供以下功能:

  • 🔍 测试嵌入模型
  • 📊 向量化数据
  • 🤖 启动RAG问答系统
  • 🚀 快速演示
  • ⚙️ 系统配置
  • 📈 查看数据统计
  • 🧹 清理缓存

3. 基本使用

from image_rag_system import ImageRAGSystem

# 创建RAG系统
rag_system = ImageRAGSystem(
    data_path="path/to/your/data.jsonl",
    vector_db_path="./vector_db"
)

# 初始化系统
rag_system.setup()

# 查询
result = rag_system.query("什么是中性粒细胞?")
print(result['answer'])
print(f"相关图片: {len(result['related_images'])} 张")

3. 交互式使用

python simple_example.py

4. 完整演示

python image_rag_system.py

5. SiliconFlow嵌入模型

# 使用SiliconFlow API
python siliconflow_example.py

6. 快速启动

# 使用SiliconFlow (需要设置API密钥)
python run_siliconflow.py

数据格式

系统支持JSONL格式的图片数据,每条记录包含:

{
    "image_url": "图片URL",
    "scene_description": "场景描述",
    "characters_in_frame": [
        {
            "character_name": "角色名称",
            "biological_entity": "生物学实体",
            "confidence": "置信度"
        }
    ],
    "biological_processes_or_concepts": [
        {
            "name": "生物学概念名称",
            "explanation": "详细解释",
            "scene_relevance": "场景相关性"
        }
    ],
    "keywords": ["关键词1", "关键词2"],
    "quality_assessment": {
        "technical_quality_score": 0.95
    },
    "content_assessment": {
        "suitability_score": 1.0
    }
}

配置选项

嵌入模型

  • 本地模型:
    • sentence-transformers/paraphrase-multilingual-MiniLM-L12-v2 (默认,支持中英文)
    • sentence-transformers/all-MiniLM-L6-v2 (英文优化)
    • 其他HuggingFace嵌入模型
  • SiliconFlow API:
    • BAAI/bge-large-zh-v1.5 (中文大模型,推荐)
    • BAAI/bge-base-zh-v1.5 (中文基础模型)
    • BAAI/bge-large-en-v1.5 (英文大模型)
    • text-embedding-ada-002 (OpenAI兼容)

大语言模型

  • gpt-3.5-turbo (默认)
  • gpt-4
  • 其他OpenAI模型

检索参数

  • k: 检索返回的文档数量 (默认: 5)
  • search_type: 检索类型 ("similarity", "mmr", "similarity_score_threshold")

API参考

ImageRAGSystem类

初始化参数

  • data_path: JSONL数据文件路径
  • vector_db_path: 向量数据库存储路径
  • embedding_model: 嵌入模型名称
  • llm_model: 大语言模型名称

主要方法

  • setup(force_recreate=False): 初始化整个RAG系统
  • query(question): 查询系统并返回回答和相关图片
  • get_similar_images(query, k=5): 获取相似图片
  • load_data(): 加载数据文件
  • create_documents(): 创建文档对象

示例查询

  • "什么是中性粒细胞?它的主要功能是什么?"
  • "红细胞是如何运输氧气的?"
  • "血小板在止血过程中起什么作用?"
  • "巨噬细胞有什么功能?"
  • "肺炎链球菌感染会有什么症状?"

注意事项

  1. 环境变量: 使用OpenAI模型时需要设置 OPENAI_API_KEY 环境变量
  2. 内存使用: 大型数据集可能需要较多内存,建议分批处理
  3. 向量数据库: 首次运行会创建向量数据库,后续运行会直接加载
  4. 网络连接: 嵌入模型首次下载需要网络连接

故障排除

常见问题

  1. 导入错误: 确保所有依赖包已正确安装
  2. 内存不足: 尝试使用更小的嵌入模型或减少批处理大小
  3. API密钥错误: 检查OpenAI API密钥是否正确设置
  4. 数据格式错误: 确保JSONL文件格式正确

日志调试

系统使用Python logging模块,可以通过以下方式启用详细日志:

import logging
logging.basicConfig(level=logging.DEBUG)

扩展功能

系统设计为可扩展的,可以轻松添加:

  • 新的嵌入模型支持 (已支持SiliconFlow API)
  • 不同的向量数据库后端
  • 自定义检索策略
  • 图片内容分析
  • 多模态检索

SiliconFlow集成

系统已集成SiliconFlow嵌入API,提供以下优势:

  • 高质量嵌入: 使用BGE等先进模型
  • 中文优化: 专门针对中文文本优化
  • API服务: 无需本地部署模型
  • 成本效益: 按需付费,成本可控

SiliconFlow使用示例

from image_rag_system import ImageRAGSystem

# 使用SiliconFlow API
rag_system = ImageRAGSystem(
    data_path="path/to/data.jsonl",
    use_siliconflow=True,
    siliconflow_api_key="your-api-key",
    siliconflow_model="BAAI/bge-large-zh-v1.5"
)

rag_system.setup()
result = rag_system.query("什么是中性粒细胞?")

许可证

MIT License

About

No description, topics, or website provided.
Language
Python92.4%
Shell7.6%