Danh sách các Rest API của EzyVector
Back to ezyvectorEzyVector cung cấp REST API để tạo collection, lưu vector point và tìm kiếm các vector gần nhất. API chạy trên Web Server của EzyPlatform; dữ liệu được lưu đồng thời trong cơ sở dữ liệu, file vector và chỉ mục HNSW.
Danh sách REST API
Base path:
/ezyvector/collections
| Method | Endpoint | Chức năng |
|---|---|---|
PUT | /ezyvector/collections/{collectionName} | Tạo collection nếu chưa tồn tại |
GET | /ezyvector/collections/{collectionName} | Lấy cấu hình collection |
PUT | /ezyvector/collections/{collectionName}/points | Thêm mới hoặc cập nhật các vector point |
POST | /ezyvector/collections/{collectionName}/points/search | Tìm các vector gần nhất |
Các URL trong tài liệu là đường dẫn tương đối. Ví dụ, nếu Web Server chạy tại
http://localhost:8080, endpoint tạo collection sẽ là:http://localhost:8080/ezyvector/collections/products
Xác thực
Tất cả REST API của EzyVector đều yêu cầu API key. Có thể truyền API key theo một trong các cách sau:
Authorization: Bearer <api-key>
hoặc:
x-api-key: <api-key>
API key cũng có thể được truyền qua request parameter với một trong các tên:
api-key api_key apikey
Nên ưu tiên header
Authorization hoặc x-api-key để tránh API key xuất hiện trong URL và access log.Ngoài API key, EzyVector có thể giới hạn địa chỉ IP được phép truy cập. Danh sách cho phép hỗ trợ:
- Một địa chỉ IPv4 cụ thể, ví dụ
192.168.1.10. - Một CIDR, ví dụ
192.168.1.0/24. - Một khoảng IP, ví dụ
192.168.1.10-192.168.1.30. - Nhiều quy tắc, phân tách bằng dấu phẩy hoặc khoảng trắng.
Nếu danh sách IP để trống, bước kiểm tra IP được bỏ qua.
Tạo collection
PUT /ezyvector/collections/{collectionName}
API tạo collection nếu collection chưa tồn tại. Nếu collection đã tồn tại, API giữ nguyên cấu hình hiện tại, không cập nhật lại kích thước vector hoặc distance.
Ví dụ:
curl -X PUT \ 'http://localhost:8080/ezyvector/collections/products' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "vectors": { "size": 384, "distance": "cosine" } }'
Request body:
| Thuộc tính | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
vectors | object | Có | Cấu hình vector của collection |
vectors.size | integer | Có | Số chiều của vector, phải lớn hơn 0 |
vectors.distance | string | Có | Phương pháp tính độ tương đồng; hiện hỗ trợ cosine |
Response thành công:
{
"result": true,
"status": "ok"
}
Khi tạo collection, hệ thống:
- Ghi metadata collection vào cơ sở dữ liệu nếu chưa tồn tại.
- Khởi tạo segment có thể ghi cho collection.
- Kiểm tra và khởi động backfill vector nếu cần.
- Nạp hoặc khởi tạo quá trình xây dựng chỉ mục HNSW.
Lấy thông tin collection
GET /ezyvector/collections/{collectionName}
Ví dụ:
curl \ 'http://localhost:8080/ezyvector/collections/products' \ -H 'x-api-key: YOUR_API_KEY'
Response:
{
"result": {
"config": {
"params": {
"vectors": {
"size": 384
}
}
}
},
"status": "ok"
}
API hiện trả về kích thước vector của collection. Nếu collection không tồn tại, server trả về
404 Not Found.Thêm hoặc cập nhật vector point
PUT /ezyvector/collections/{collectionName}/points
Một point gồm:
| Thuộc tính | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
id | integer | Có | Định danh point do client cung cấp |
vector | array of number | Có | Vector của point |
payload | object | Không | Metadata tùy ý gắn với point |
Ví dụ:
curl -X PUT \ 'http://localhost:8080/ezyvector/collections/products/points' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "points": [ { "id": 1001, "vector": [0.12, 0.45, 0.78], "payload": { "name": "Laptop", "category": "electronics" } }, { "id": 1002, "vector": [0.21, 0.51, 0.68], "payload": { "name": "Desktop computer", "category": "electronics" } } ] }'
Response:
{
"result": true,
"status": "ok"
}
Nếu point có cùng
id đã tồn tại trong collection, dữ liệu của point được cập nhật.Độ dài của mỗi vector phải bằng
vectors.size của collection. EzyVector không tự cắt, nối hoặc thay đổi kích thước vector.Tìm kiếm vector
POST /ezyvector/collections/{collectionName}/points/search
Request body:
| Thuộc tính | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
vector | array of number | Có | Vector dùng làm truy vấn |
limit | integer | Có | Số kết quả tối đa, phải lớn hơn 0 |
with_payload | boolean | Không | Trường tương thích của request |
Ví dụ:
curl -X POST \ 'http://localhost:8080/ezyvector/collections/products/points/search' \ -H 'Authorization: Bearer YOUR_API_KEY' \ -H 'Content-Type: application/json' \ -d '{ "vector": [0.14, 0.48, 0.73], "limit": 10, "with_payload": true }'
Response:
{
"result": [
{
"id": 1001,
"score": 0.9984,
"payload": {
"name": "Laptop",
"category": "electronics"
}
},
{
"id": 1002,
"score": 0.9721,
"payload": {
"name": "Desktop computer",
"category": "electronics"
}
}
],
"status": "ok"
}
Kết quả được sắp xếp theo
score giảm dần. Với cosine similarity, score càng lớn thì vector càng giống truy vấn.Ở phiên bản hiện tại,
with_payload đã có trong request model nhưng chưa điều khiển việc loại bỏ payload; response tìm kiếm vẫn có trường payload.Luồng dữ liệu tổng quát
flowchart LR
Client[Ứng dụng khách]
API[REST API EzyVector]
Auth[Xác thực API key và IP]
Validator[Kiểm tra request]
Service[Dịch vụ vector]
DB[(Cơ sở dữ liệu)]
Raw[(Vector file store)]
Memory[HNSW trong bộ nhớ]
HNSW[(HNSW store)]
Response[JSON response]
Client --> API
API --> Auth
Auth --> Validator
Validator --> Service
Service --> DB
Service --> Raw
Service --> Memory
Memory --> HNSW
DB --> Service
Raw --> Service
HNSW --> Memory
Service --> Response
Response --> Client
Cơ sở dữ liệu là nguồn dữ liệu bền vững, lưu collection, vector point, payload và trạng thái segment. File store chứa vector đã chuẩn hóa để phục vụ exact search và backfill. HNSW tồn tại trong bộ nhớ để tìm kiếm nhanh, đồng thời được lưu xuống file để có thể nạp lại.
Luồng tạo collection
sequenceDiagram
participant C as Client
participant A as REST API
participant S as Vector service
participant DB as Cơ sở dữ liệu
participant FS as Vector file store
participant H as HNSW store
C->>A: PUT /collections/{name}
A->>A: Kiểm tra API key, IP và request
A->>S: Tạo collection nếu chưa tồn tại
S->>DB: Tìm collection theo tên
alt Collection chưa tồn tại
S->>DB: Lưu metadata collection
else Collection đã tồn tại
S-->>S: Giữ nguyên cấu hình hiện tại
end
S->>DB: Đảm bảo có mutable segment
S->>FS: Kiểm tra tiến độ backfill
S->>H: Nạp hoặc khởi động build HNSW
S-->>A: Hoàn tất
A-->>C: result=true, status=ok
Việc backfill và xây dựng HNSW có thể chạy bất đồng bộ sau khi API trả response.
Luồng upsert point
sequenceDiagram
participant C as Client
participant A as REST API
participant S as Vector service
participant DB as Cơ sở dữ liệu
participant FS as Vector file store
participant H as HNSW trong bộ nhớ
participant HF as HNSW store
C->>A: PUT /collections/{name}/points
A->>A: Xác thực và kiểm tra danh sách point
A->>S: Upsert points
S->>DB: Lấy collection và kích thước vector
loop Với từng point
S->>DB: Tìm point theo collectionId và pointId
alt Point chưa tồn tại
S->>DB: Tạo point
else Point đã tồn tại
S->>DB: Cập nhật vector và payload
end
end
S->>FS: Chuẩn hóa và ghi vector
S->>H: Thêm hoặc thay thế node
opt HNSW đã sẵn sàng
H->>HF: Lưu lại chỉ mục
end
S-->>A: Hoàn tất
A-->>C: result=true, status=ok
Vector được ghi vào database dưới dạng dữ liệu nguồn. Khi ghi vào file store và HNSW, vector được chuẩn hóa L2 để phục vụ cosine similarity.
Luồng tìm kiếm
flowchart TD
Request[POST points/search]
Auth[Kiểm tra API key và IP]
Validate[Kiểm tra vector và limit]
Collection[Đọc collection từ database]
Ready{HNSW đã sẵn sàng?}
HnswSearch[Tìm kiếm gần đúng bằng HNSW]
ExactSearch[Exact search trên vector file store]
Metadata[Đọc point và payload từ database]
Result[Trả id, score và payload]
Request --> Auth
Auth --> Validate
Validate --> Collection
Collection --> Ready
Ready -->|Có| HnswSearch
Ready -->|Chưa| ExactSearch
HnswSearch --> Metadata
ExactSearch --> Metadata
Metadata --> Result
Nếu HNSW đã được nạp hoặc xây dựng xong, hệ thống sử dụng approximate nearest-neighbor search. Nếu HNSW chưa sẵn sàng, hệ thống fallback sang exact search trên file vector; request không phải chờ quá trình build hoàn tất.
Sau khi tìm được các point gần nhất, EzyVector đọc lại metadata và payload từ cơ sở dữ liệu để tạo response.
Mã lỗi
| HTTP status | Trường hợp |
|---|---|
400 Bad Request | Thiếu vector, limit không hợp lệ, thiếu cấu hình collection hoặc distance không được hỗ trợ |
401 Unauthorized | API key không đúng hoặc địa chỉ IP không nằm trong danh sách cho phép |
404 Not Found | Collection được yêu cầu không tồn tại |
500 Internal Server Error | Lỗi lưu trữ hoặc dữ liệu không phù hợp với cấu hình collection |
Response lỗi validation thường chứa tên trường và nguyên nhân, ví dụ:
{
"vector": "required",
"limit": "invalid"
}
Xem Swagger trong EzyPlatform Admin
Swagger của EzyVector được tổng hợp từ các REST controller đang hoạt động. Để mở giao diện này, cần cài và kích hoạt plugin GraphQL của EzyPlatform. Plugin GraphQL ở đây cung cấp trang quản trị và bộ sinh tài liệu REST/OpenAPI; các REST API EzyVector không bị chuyển thành GraphQL và không cần gọi qua GraphQL.
Cài đặt bằng giao diện admin:
- Đăng nhập EzyPlatform Admin, mặc định thường là
http://localhost:9090. - Mở
Plugins → Admin. - Nhấn
Add New. - Tìm plugin
GraphQLvà cài đặt. - Kích hoạt ít nhất Admin Plugin; để thu thập tài liệu API phía Web, hãy kích hoạt cả Web Plugin.
- Chọn
Active & Restartnếu hệ điều hành và cách chạy server hỗ trợ. Nếu không, kích hoạt plugin rồi khởi động lại Admin và Web Server. Đây cũng là quy trình cài và kích hoạt plugin được mô tả trong tài liệu EzyPlatform.
Có thể cài bằng CLI:
bash cli.sh "install graphql" bash cli.sh "activate all graphql" bash cli.sh restart
CLI tải plugin từ marketplace; plugin cần được kích hoạt và server cần được khởi động lại để áp dụng thay đổi, theo hướng dẫn EzyPlatform CLI.
Sau khi GraphQL plugin hoạt động:
- Đăng nhập lại EzyPlatform Admin.
- Mở menu
GraphQL. - Chọn
API Types. - Trong phần
Web, nhấnSwagger. - Swagger UI sẽ mở trong tab mới và hiển thị các REST API của Web Server, bao gồm EzyVector.
Đường dẫn trực tiếp trong Admin:
/api-types
Trang Swagger cho Web:
/graphql/rest/swagger/web
OpenAPI YAML của Web có thể được lấy tại:
/graphql/api/v1/rest/web/swagger.yaml
Các đường dẫn trên thuộc Admin Server. Với cấu hình mặc định, có thể truy cập:
http://localhost:9090/api-types http://localhost:9090/graphql/rest/swagger/web http://localhost:9090/graphql/api/v1/rest/web/swagger.yaml
Nếu không thấy API EzyVector trong Swagger, hãy kiểm tra:
- EzyVector Web Plugin đã được cài đặt và kích hoạt.
- GraphQL Admin Plugin và Web Plugin đã được kích hoạt.
- Cả Admin Server và Web Server đã được khởi động lại sau khi kích hoạt plugin.
- Web Server đang chạy và Admin Server có thể truy cập endpoint quản lý của Web Server.