1.修改查询数据集列表接口方法名\n2.实现查询指定数据集下文件列表接口\n3.实现上传文件到ragflow直接上传字节数据版

This commit is contained in:
haotian 2025-09-04 11:36:55 +08:00
parent 724516d5bf
commit 19fed3551e
4 changed files with 89 additions and 10 deletions

View File

@ -13,7 +13,7 @@ from module_admin.service.ragflow_service import RAGFlowService
from utils.log_util import logger
from utils.page_util import PageResponseModel
from utils.response_util import ResponseUtil
from module_admin.entity.vo.ragflow_vo import RagflowListQueryModel
from module_admin.entity.vo.ragflow_vo import RagflowListQueryModel, ListDocumentsQueryModel
# from config.env import RAGFlowConfig
@ -21,19 +21,37 @@ from module_admin.entity.vo.ragflow_vo import RagflowListQueryModel
ragflowController = APIRouter(prefix="/system/ragflow", dependencies=[Depends(LoginService.get_current_user)])
@ragflowController.post("/dataset_list", response_model=PageResponseModel
# 查看数据集列表
@ragflowController.post("/dataset_list"
# , response_model=PageResponseModel
# , dependencies=[Depends(CheckUserInterfaceAuth("system:ragflow:list"))]"
)
async def get_system_ragflow_list(
request: Request,
rage_flow_query: RagflowListQueryModel ,
query_db: AsyncSession = Depends(get_db),
rage_flow_dastset_query: RagflowListQueryModel ,
# query_db: AsyncSession = Depends(get_db),
):
result = await RAGFlowService.get_ragflow_list_services(query_db, rage_flow_query)
result = await RAGFlowService.get_ragflow_dataset_list_services(None, rage_flow_dastset_query)
return ResponseUtil.success(data = result)
# 获取分页数据
# ragflow_list, total = await RagflowService.get_ragflow_list(query_db, ragflow_page_query)
# ragflow_list, total = await RagflowService.get_ragflow_list(query_db, ragflow_page_query)
# 列出数据集中文档列表
@ragflowController.get("/list_documents/{dataset_id}")
async def list_documents_by_dataset_id(
request: Request,
dataset_id: str,
list_documents_query: ListDocumentsQueryModel = Depends(ListDocumentsQueryModel.as_query),
# query_db: AsyncSession = Depends(get_db),
):
"""
列出数据集中文档列表
"""
print(list_documents_query)
result = await RAGFlowService.list_documents(None, dataset_id, list_documents_query)
return ResponseUtil.success(data = result)

View File

@ -13,4 +13,20 @@ class RagflowListQueryModel(BaseModel):
orderby: Optional[str] = Field(default='create_time', description='排序字段')
desc: Optional[str] = Field(default='true', description='排序方式')
name: Optional[str] = Field(default=None, description='名称')
dataset_id: Optional[str] = Field(default=None, description='数据集ID')
dataset_id: Optional[str] = Field(default=None, description='数据集ID')
@as_query
class ListDocumentsQueryModel(BaseModel):
"""
查询文档列表参数模型
"""
model_config = ConfigDict(alias_generator=to_camel, from_attributes=True)
page: int = Field(default=1, description='当前页码')
page_size: int = Field(default=10, description='每页数量')
orderby: Optional[str] = Field(default='create_time', description='排序字段')
desc: Optional[str] = Field(default='true', description='排序方式')
keywords: Optional[str] = Field(default=None, description='关键字')
document_id: Optional[str] = Field(default=None, description='文档ID')
document_name: Optional[str] = Field(default=None, description='文档名称')

View File

@ -1,6 +1,6 @@
from sqlalchemy.ext.asyncio import AsyncSession
from utils.ragflow_asy_util import AsyncRAGFlowClient
from module_admin.entity.vo.ragflow_vo import RagflowListQueryModel
from module_admin.entity.vo.ragflow_vo import RagflowListQueryModel, ListDocumentsQueryModel
from config.env import RAGFlowConfig
class RAGFlowService:
@ -10,7 +10,7 @@ class RAGFlowService:
# 获取数据集列表
@classmethod
async def get_ragflow_list_services(cls, query_db: AsyncSession, rage_flow_query: RagflowListQueryModel):
async def get_ragflow_dataset_list_services(cls, query_db: AsyncSession, rage_flow_query: RagflowListQueryModel):
"""
获取数据集列表
"""
@ -19,4 +19,17 @@ class RAGFlowService:
result = await client.list_datasets(**(rage_flow_query.model_dump()))
# 获取分页数据
return result.get('data', None)
# 获取数据集中文档列表
@classmethod
async def list_documents(
cls,
query_db: AsyncSession,
dataset_id: str,
list_documents_query: ListDocumentsQueryModel,
):
async with AsyncRAGFlowClient(RAGFlowConfig.RAGFLOW_BASE_URL, RAGFlowConfig.RAGFLOW_API_KEY) as client:
result = await client.list_documents(dataset_id=dataset_id, **(list_documents_query.model_dump()))
return result.get('data', None)

View File

@ -291,6 +291,38 @@ class AsyncRAGFlowClient:
except (aiohttp.ContentTypeError, json.JSONDecodeError):
text = await response.text()
raise RAGFlowError(response.status, text)
async def upload_documents_bytes(self, dataset_id: str, file_name, file_bytes: List) -> Dict[str, Any]:
"""
上传文档到数据集
Args:
dataset_id: 数据集ID
file_paths: 文件路径列表
"""
if not self._session:
await self.create_session()
endpoint = f"/api/v1/datasets/{dataset_id}/documents"
url = f"{self.base_url}{endpoint}"
# 准备multipart数据
data = aiohttp.FormData()
for file in file_bytes:
data.add_field('file', file, filename=file_name)
headers = {'Authorization': f'Bearer {self.api_key}'}
async with self._session.post(url, headers=headers, data=data) as response:
try:
result = await response.json()
if result.get('code', 0) != 0:
raise RAGFlowError(result.get('code'), result.get('message'))
return result
except (aiohttp.ContentTypeError, json.JSONDecodeError):
text = await response.text()
raise RAGFlowError(response.status, text)
async def update_document(self, dataset_id: str, document_id: str, name: Optional[str] = None,
meta_fields: Optional[Dict[str, Any]] = None,