Ragflow_plugs是一个基于RAG(检索增强生成)技术的多模态混合检索系统,支持文本和图像的联合检索,并提供灵活的HTTP API服务。该系统旨在为智能应用提供高效、准确的多模态信息检索能力。
┌───────────────────────────────────────────────────────────────────┐
│ Client Applications │
└───────────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────┐
│ API Layer │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ hybrid_search_http.py │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ hybrid_search_mcp.py │ │
│ └─────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────┐
│ Service Layer │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Agent Module │ │
│ │ ┌───────────────────────────────────────────────────────┐ │ │
│ │ │ test_image_agent.py │ │ │
│ │ └───────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Workflow Module │ │
│ │ ┌───────────────────────────────────────────────────────┐ │ │
│ │ │ image_parsing_workflow.py │ │ │
│ │ └───────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────┐
│ Model Layer │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ multimodal_embedding.py │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ qwen_vl.py │ │
│ └─────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────┐
│ Data Layer │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Parser Module │ │
│ │ ┌───────────────────────────────────────────────────────┐ │ │
│ │ │ pdf_parser │ │ │
│ │ └───────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Utils Module │ │
│ │ ┌───────────────────────────────────────────────────────┐ │ │
│ │ │ http_client.py │ │ │
│ │ └───────────────────────────────────────────────────────┘ │ │
│ │ ┌───────────────────────────────────────────────────────┐ │ │
│ │ │ infinity_util │ │ │
│ │ └───────────────────────────────────────────────────────┘ │ │
│ │ └───────────────────────────────────────────────────────┘ │ │
│ └─────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────┘
│
▼
┌───────────────────────────────────────────────────────────────────┐
│ External Services │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ Infinity Vector DB │ │
│ └─────────────────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────────────────┐ │
│ │ AI Model APIs (DashScope, etc.) │ │
│ └─────────────────────────────────────────────────────────────┘ │
└───────────────────────────────────────────────────────────────────┘
class Embedding:
def __init__(self, model_name: str, api_key: str):
# 初始化嵌入模型
pass
def get_multimodal_embedding(self, text: str, image: Image.Image) -> List[float]:
# 生成多模态嵌入向量
pass
class InfinityVectorDB:
def hybrid_search(self, index_name: str, match_method: str, vector_field: str,
query_vector: List[float], element_type: str, metric_type: str,
topn: int, text_query: str, text_field: str) -> Dict[str, Any]:
# 执行混合检索
pass
def vector_search(self, index_name: str, vector_field: str, vector: List[float],
size: int = 10, filter: Dict[str, Any] = None) -> Dict[str, Any]:
# 执行向量检索
pass
| API路径 | 方法 | 功能 |
|---|---|---|
| /hybrid_search | POST | 执行混合检索 |
| /health | GET | 健康检查 |
class HybridSearchRequest(BaseModel):
text_query: str
image: str
topn: int = 2
class HybridSearchResponse(BaseModel):
success: bool
message: str
output: List[Dict[str, Any]] = []
total: int = 0
class HTTPClient:
def post(self, endpoint: str, data: Optional[Dict] = None,
json_data: Optional[Dict] = None, files: Optional[Dict] = None,
headers: Optional[Dict] = None) -> Dict[str, Any]:
# 发送POST请求
pass
def get(self, endpoint: str, params: Optional[Dict] = None,
headers: Optional[Dict] = None) -> Dict[str, Any]:
# 发送GET请求
pass
def get_json(self, endpoint: str, json_data: Optional[Dict] = None,
headers: Optional[Dict] = None) -> Dict[str, Any]:
# 发送带有JSON数据的GET请求
pass
def put(self, endpoint: str, data: Optional[Dict] = None,
json_data: Optional[Dict] = None, headers: Optional[Dict] = None) -> Dict[str, Any]:
# 发送PUT请求
pass
def delete(self, endpoint: str, data: Optional[Dict] = None,
json_data: Optional[Dict] = None, headers: Optional[Dict] = None) -> Dict[str, Any]:
# 发送DELETE请求
pass
1. 客户端发送检索请求,包括文本查询和图像URL
2. API层接收请求,解析参数
3. 下载图像,转换为Image对象
4. 调用多模态嵌入模块生成嵌入向量
5. 调用混合检索模块执行检索
6. 处理检索结果,转换为统一格式
7. 返回JSON响应给客户端
1. 上传PDF文档
2. 解析PDF,提取文本和图像
3. 生成文档的多模态嵌入
4. 将嵌入向量和元数据存储到向量数据库
5. 建立索引,便于后续检索
├── conf/
│ ├── config.py # 配置管理类
│ ├── infinity_mapping.json # Infinity数据库映射配置
│ └── __init__.py
└── .env # 环境变量配置
class ModelConfig:
@staticmethod
def get_multimodal_embedding_model_name() -> str:
# 获取多模态嵌入模型名称
pass
@staticmethod
def get_dashscope_api_key() -> str:
# 获取DashScope API密钥
pass
# 其他模型配置方法
class VectorDBConfig:
@staticmethod
def get_infinity_database() -> str:
# 获取Infinity数据库名称
pass
@staticmethod
def get_infinity_table_name() -> str:
# 获取Infinity表名称
pass
# 其他向量数据库配置方法
# 模型API配置
DASHSCOPE_API_KEY=your_api_key
SILICONFLOW_API_KEY=your_api_key
# 向量数据库配置
INFINITY_HOST=http://localhost:23820
INFINITY_DATABASE=image_db
# 应用配置
LOG_LEVEL=INFO
| 类别 | 技术/框架 | 用途 |
|---|---|---|
| 编程语言 | Python 3.12 | 主要开发语言 |
| Web框架 | FastAPI | HTTP API服务 |
| HTTP客户端 | Requests | HTTP请求处理 |
| 图像处理 | PIL/Pillow | 图像加载和处理 |
| 向量数据库 | Infinity | 向量存储和检索 |
| LLM集成 | LangChain | 大语言模型集成 |
| AI模型API | DashScope, SiliconFlow | 多模态嵌入和生成 |
| 配置管理 | python-dotenv | 环境变量管理 |
| 测试框架 | pytest | 单元测试和集成测试 |
pip install -r requirements.txt
python -m api.hybrid_search_http
python -m pytest test/
Ragflow_plugs是一个功能强大的多模态混合检索系统,具有良好的架构设计和灵活的扩展能力。该系统支持文本和图像的联合检索,提供高效、准确的检索结果,并通过HTTP API方便外部系统集成。
通过模块化设计和清晰的接口定义,系统具有良好的可维护性和可扩展性。配置驱动的设计使得系统可以轻松适应不同的环境和需求。
该系统可以广泛应用于智能问答、图像搜索、内容推荐等场景,为智能应用提供强大的多模态信息检索能力。