Tải lên tệp vào Lưu Trữ Vector

Tải nội dung tệp lên Vector Store với các thao tác theo lô

Tải tệp lên một Vector Store

post

Upload files to a vector store.

Path parameters
vector-store-idstringRequired

The ID of the vector store.

Header parameters
x-api-keystringRequired

The API key for authentication.

Body
filesstring · binary[]Optional

The files to upload.

Responses
201
Files uploaded successfully.
application/json
post
POST /api/v1/vector-stores/{vector-store-id}/documents/upload HTTP/1.1
Host: api.rememberizer.ai
x-api-key: text
Content-Type: multipart/form-data
Accept: */*
Content-Length: 20

{
  "files": [
    "binary"
  ]
}
{
  "documents": [
    {
      "id": 1,
      "name": "text"
    }
  ],
  "errors": [
    {
      "file": "text",
      "error": "text"
    }
  ]
}

Ví dụ Yêu cầu

curl -X POST \
  https://api.rememberizer.ai/api/v1/vector-stores/vs_abc123/documents/upload \
  -H "x-api-key: YOUR_API_KEY" \
  -F "files=@/path/to/document1.pdf" \
  -F "files=@/path/to/document2.docx"

Thay thế YOUR_API_KEY bằng khóa API Vector Store thực tế của bạn, vs_abc123 bằng ID Vector Store của bạn, và cung cấp đường dẫn đến các tệp cục bộ của bạn.

Phương thức trợ giúp để xác định loại nội dung

def get_content_type(filename) ext = File.extname(filename).downcase case ext when '.pdf' then 'application/pdf' when '.doc' then 'application/msword' when '.docx' then 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' when '.txt' then 'text/plain' when '.md' then 'text/markdown' when '.json' then 'application/json' else 'application/octet-stream' end end

Ví dụ sử dụng

result = upload_files('vs_abc123', ['/path/to/document1.pdf', '/path/to/document2.docx']) puts result


<div data-gb-custom-block data-tag="hint" data-style='info'>

Thay thế `YOUR_API_KEY` bằng khóa API Vector Store thực tế của bạn, `vs_abc123` bằng ID Vector Store của bạn, và cung cấp các đường dẫn đến các tệp cục bộ của bạn.

</div>

</div>

</div>

## Tham số Đường dẫn

| Tham số           | Loại   | Mô tả                                                        |
|-------------------|--------|-------------------------------------------------------------|
| vector-store-id   | chuỗi | **Bắt buộc.** ID của kho vector để tải lên tệp.            |

## Thân Request

Điểm cuối này chấp nhận một yêu cầu `multipart/form-data` với một hoặc nhiều tệp trong trường `files`.

## Định dạng Phản hồi

```json
{
  "documents": [
    {
      "id": 1234,
      "name": "document1.pdf",
      "type": "application/pdf",
      "size": 250000,
      "status": "đang xử lý",
      "created": "2023-06-15T10:15:00Z",
      "vector_store": "vs_abc123"
    },
    {
      "id": 1235,
      "name": "document2.docx",
      "type": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
      "size": 180000,
      "status": "đang xử lý",
      "created": "2023-06-15T10:15:00Z",
      "vector_store": "vs_abc123"
    }
  ],
  "errors": []
}

Nếu một số tệp không tải lên được, chúng sẽ được liệt kê trong mảng errors:

{
  "documents": [
    {
      "id": 1234,
      "name": "document1.pdf",
      "type": "application/pdf",
      "size": 250000,
      "status": "đang xử lý",
      "created": "2023-06-15T10:15:00Z",
      "vector_store": "vs_abc123"
    }
  ],
  "errors": [
    {
      "file": "document2.docx",
      "error": "Định dạng tệp không được hỗ trợ"
    }
  ]
}

Xác thực

Điểm cuối này yêu cầu xác thực bằng cách sử dụng khóa API trong tiêu đề x-api-key.

Các định dạng tệp được hỗ trợ

  • PDF (.pdf)

  • Microsoft Word (.doc, .docx)

  • Microsoft Excel (.xls, .xlsx)

  • Microsoft PowerPoint (.ppt, .pptx)

  • Tệp văn bản (.txt)

  • Markdown (.md)

  • JSON (.json)

  • HTML (.html, .htm)

Giới Hạn Kích Thước Tệp

  • Giới hạn kích thước tệp cá nhân: 50MB

  • Giới hạn kích thước yêu cầu tổng: 100MB

  • Số lượng tệp tối đa mỗi yêu cầu: 20

Phản hồi Lỗi

Mã Trạng Thái
Mô Tả

400

Yêu Cầu Không Hợp Lệ - Không có tệp nào được cung cấp hoặc định dạng yêu cầu không hợp lệ

401

Không Được Ủy Quyền - Khóa API không hợp lệ hoặc bị thiếu

404

Không Tìm Thấy - Không tìm thấy Vector Store

413

Tải Lượng Quá Lớn - Các tệp vượt quá giới hạn kích thước

415

Loại Phương Tiện Không Hỗ Trợ - Định dạng tệp không được hỗ trợ

500

Lỗi Máy Chủ Nội Bộ

207

Đa Trạng Thái - Một số tệp đã được tải lên thành công, nhưng một số khác đã thất bại

Trạng Thái Xử Lý

Các tệp được chấp nhận ban đầu với trạng thái processing. Bạn có thể kiểm tra trạng thái xử lý của các tài liệu bằng cách sử dụng điểm cuối Lấy Danh Sách Tài Liệu Trong Một Vector Store. Trạng thái cuối cùng sẽ là một trong các trạng thái sau:

  • done: Tài liệu đã được xử lý thành công

  • error: Đã xảy ra lỗi trong quá trình xử lý

  • processing: Tài liệu vẫn đang được xử lý

Thời gian xử lý phụ thuộc vào kích thước và độ phức tạp của tệp. Thời gian xử lý điển hình là từ 30 giây đến 5 phút cho mỗi tài liệu.

Các hoạt động theo lô

Để tải lên nhiều tệp đến Vector Store của bạn một cách hiệu quả, Rememberizer hỗ trợ các hoạt động theo lô. Cách tiếp cận này giúp tối ưu hóa hiệu suất khi xử lý một số lượng lớn tài liệu.

Triển Khai Tải Lên Theo Lô

import os
import requests
import time
import concurrent.futures
from pathlib import Path

def batch_upload_to_vector_store(vector_store_id, folder_path, batch_size=5, file_types=None):
    """
    Tải tất cả các tệp từ một thư mục lên một Vector Store theo lô
    
    Args:
        vector_store_id: ID của vector store
        folder_path: Đường dẫn đến thư mục chứa các tệp để tải lên
        batch_size: Số lượng tệp để tải lên trong mỗi lô
        file_types: Danh sách tùy chọn các phần mở rộng tệp để lọc (ví dụ: ['.pdf', '.docx'])
        
    Returns:
        Danh sách kết quả tải lên
    """
    api_key = "YOUR_API_KEY"
    headers = {"x-api-key": api_key}
    
    # Lấy danh sách các tệp trong thư mục
    files = []
    for entry in os.scandir(folder_path):
        if entry.is_file():
            file_path = Path(entry.path)
            # Lọc theo phần mở rộng tệp nếu được chỉ định
            if file_types is None or file_path.suffix.lower() in file_types:
                files.append(file_path)
    
    print(f"Đã tìm thấy {len(files)} tệp để tải lên")
    results = []
    
    # Xử lý các tệp theo lô
    for i in range(0, len(files), batch_size):
        batch = files[i:i+batch_size]
        print(f"Đang xử lý lô {i//batch_size + 1}/{(len(files) + batch_size - 1)//batch_size}: {len(batch)} tệp")
        
        # Tải lên lô
        upload_files = []
        for file_path in batch:
            upload_files.append(('files', (file_path.name, open(file_path, 'rb'))))
        
        try:
            response = requests.post(
                f"https://api.rememberizer.ai/api/v1/vector-stores/{vector_store_id}/documents/upload",
                headers=headers,
                files=upload_files
            )
            
            # Đóng tất cả các tay cầm tệp
            for _, (_, file_obj) in upload_files:
                file_obj.close()
            
            if response.status_code in (200, 201, 207):
                batch_result = response.json()
                results.append(batch_result)
                print(f"Đã tải lên thành công lô - {len(batch_result.get('documents', []))} tài liệu đã được xử lý")
                
                # Kiểm tra lỗi
                if batch_result.get('errors') and len(batch_result['errors']) > 0:
                    print(f"Đã gặp lỗi: {len(batch_result['errors'])}")
                    for error in batch_result['errors']:
                        print(f"- {error['file']}: {error['error']}")
            else:
                print(f"Tải lên lô thất bại với mã trạng thái {response.status_code}: {response.text}")
                results.append({"error": f"Tải lên lô thất bại: {response.text}"})
                
        except Exception as e:
            print(f"Đã xảy ra ngoại lệ trong quá trình tải lên lô: {str(e)}")
            results.append({"error": str(e)})
            
            # Đóng bất kỳ tay cầm tệp nào còn lại trong trường hợp có ngoại lệ
            for _, (_, file_obj) in upload_files:
                try:
                    file_obj.close()
                except:
                    pass
        
        # Giới hạn tốc độ - tạm dừng giữa các lô
        if i + batch_size < len(files):
            print("Tạm dừng trước lô tiếp theo...")
            time.sleep(2)
    
    return results

# Ví dụ sử dụng
results = batch_upload_to_vector_store(
    'vs_abc123',
    '/path/to/documents/folder',
    batch_size=5,
    file_types=['.pdf', '.docx', '.txt']
)

Thực Hành Tải Lên Theo Lô Tốt Nhất

Để tối ưu hóa hiệu suất và độ tin cậy khi tải lên khối lượng lớn tệp:

  1. Quản Lý Kích Thước Lô: Giữ kích thước lô từ 5-10 tệp để đạt hiệu suất tối ưu. Quá nhiều tệp trong một yêu cầu duy nhất làm tăng nguy cơ bị hết thời gian chờ.

  2. Thực Hiện Giới Hạn Tốc Độ: Thêm độ trễ giữa các lô (khuyến nghị 2-3 giây) để tránh chạm vào giới hạn tốc độ API.

  3. Thêm Logic Thử Lại Lỗi: Đối với các hệ thống sản xuất, triển khai logic thử lại cho các tải lên thất bại với phương pháp tăng dần.

  4. Xác Thực Loại Tệp: Lọc trước các tệp để đảm bảo chúng là loại được hỗ trợ trước khi cố gắng tải lên.

  5. Giám Sát Tiến Trình Lô: Đối với các ứng dụng hướng tới người dùng, cung cấp phản hồi tiến trình về các hoạt động lô.

  6. Xử Lý Thành Công Một Phần: API có thể trả về mã trạng thái 207 cho thành công một phần. Luôn kiểm tra trạng thái từng tài liệu.

  7. Dọn Dẹp Tài Nguyên: Đảm bảo tất cả các tay cầm tệp được đóng đúng cách, đặc biệt khi xảy ra lỗi.

  8. Tối Ưu Hóa Song Song: Đối với các tải lên rất lớn (nghìn tệp), xem xét nhiều quy trình lô đồng thời nhắm đến các kho vector khác nhau, sau đó kết hợp kết quả sau nếu cần.

  9. Triển Khai Kiểm Tra Tính Toàn Vẹn: Đối với dữ liệu quan trọng, xác minh tính toàn vẹn của tệp trước và sau khi tải lên bằng cách sử dụng kiểm tra tính toàn vẹn.

  10. Ghi Nhận Kết Quả Toàn Diện: Duy trì nhật ký chi tiết của tất cả các hoạt động tải lên để khắc phục sự cố.

Bằng cách tuân theo những thực hành tốt nhất này, bạn có thể quản lý hiệu quả việc tiếp nhận tài liệu quy mô lớn vào các kho vector của mình.

Last updated