Thư viện kỹ năng (Skill Library) là nơi lưu và chia sẻ các kỹ năng viết
bằng Markdown, ví dụ hướng dẫn cho AI agent, quy trình làm việc, mẫu prompt.
Kỹ năng trong thư viện được quản lý ở trang quản trị và có thể công khai ra
website để mọi người xem, sao chép hoặc tải về dưới dạng file .md.
Thư viện kỹ năng khác với kỹ năng AI:
Thư viện kỹ năngKỹ năng AI
Màn hình/ezyai/skill-library/ezyai/ai-skills
Mục đíchLưu trữ, chia sẻ, công khai ra webGắn vào chat profile để điều khiển AI
Nội dungMarkdown, tối đa 30000 ký tựChỉ dẫn hệ thống + tool được phép
Phân loạiTheo danh mụcKhông có
Post typeSKILL_LIBRARYAI_SKILL

Tổng quan

flowchart LR
    A["Admin<br/>/ezyai/skill-library"] -->|thêm, sửa| S["Kỹ năng<br/>(post SKILL_LIBRARY)"]
    S -->|thuộc| C["Danh mục<br/>(term SKILL_CATEGORY)"]
    S --> ST{"Trạng thái"}
    ST -->|DRAFT| D["Chỉ admin thấy"]
    ST -->|INTERNAL_PUBLISHED| I["Dùng nội bộ,<br/>không hiện trên web"]
    ST -->|PUBLISHED| P["Hiện trên web<br/>/ezyai/skill-library"]
    P --> U["Người xem:<br/>xem, sao chép Markdown,<br/>tải file .md"]

Màn hình thư viện kỹ năng

Vào trang quản trị, mở menu EzyAI → Thư viện kỹ năng
(/ezyai/skill-library). Màn hình gồm hai phần.

Danh sách kỹ năng

Bảng hiển thị các kỹ năng với các cột ID, Tiêu đề, Slug,
Danh mục kỹ năng, Mô tả, Trạng thái, Cập nhật lúc và
Hành động.
  • Lọc theo Trạng thái (để trống là tất cả, trừ các kỹ năng đã vào thùng
    rác), Danh mục kỹ năng và Từ khoá (tìm theo phần đầu tiêu đề).
  • Chọn Số lượng mỗi trang: 30, 50, 100, 200, 500.
  • Bấm vào slug để sao chép.
  • Cột hành động có xem, sửa, xuất bản, xuất bản nội bộ, huỷ xuất bản và
    xoá.

Danh mục kỹ năng

Bảng danh mục hiển thị ID, Tên, Trạng thái, Cập nhật lúc.
Bấm vào tên danh mục để lọc danh sách kỹ năng theo danh mục đó.
Danh mục được tạo tự động khi thêm hoặc sửa kỹ năng với một tên danh mục
mới, không cần tạo trước.

Thêm kỹ năng vào thư viện

Ở màn hình thư viện, bấm Thêm để mở form /ezyai/skill-library/add.
TrườngBắt buộcMô tả
Tiêu đềCóTên ngắn gọn, rõ ràng, tối đa 300 ký tự, không trùng với kỹ năng khác
Mô tảKhôngMô tả ngắn giúp người đọc biết kỹ năng dùng để làm gì
Danh mục kỹ năngKhôngChọn danh mục có sẵn hoặc nhập tên mới để tạo, tối đa 256 ký tự; để trống nếu không phân loại
Nội dungCóNội dung kỹ năng viết bằng Markdown, tối đa 30000 ký tự
Form có ba nút lưu, mỗi nút lưu với một trạng thái:
NútTrạng tháiÝ nghĩa
LưuDRAFTBản nháp, chỉ thấy ở trang quản trị
Xuất bản nội bộINTERNAL_PUBLISHEDDùng trong nội bộ, xem được ở trang quản trị nhưng không hiển thị công khai trên web
Xuất bảnPUBLISHEDCông khai, ai cũng xem được trên web
Lưu thành công sẽ chuyển sang trang chi tiết của kỹ năng vừa tạo.

Lỗi thường gặp khi lưu

LỗiNguyên nhân
title: requiredChưa nhập tiêu đề
title: overLengthTiêu đề dài hơn 300 ký tự
title: duplicatedĐã có kỹ năng khác (chưa vào thùng rác) có cùng slug, tức tiêu đề giống hoặc gần giống
categoryName: overLengthTên danh mục dài hơn 256 ký tự
content: requiredChưa nhập nội dung
content: overLengthNội dung dài hơn 30000 ký tự
status: invalidTrạng thái không phải DRAFT, INTERNAL_PUBLISHED, PUBLISHED
Tiêu đề được dùng để sinh slug, slug cũng là tên file khi người xem tải kỹ
năng về ([slug].md). Vì vậy nên đặt tiêu đề ngắn, rõ ràng, không trùng.

Điều gì xảy ra khi lưu

sequenceDiagram
    participant A as Admin
    participant API as Admin API
    participant T as TermService
    participant P as PostService

    A->>API: POST /ezyai/api/v1/skill-library/add
    API->>API: Kiểm tra tiêu đề, danh mục, nội dung, trạng thái
    API->>T: Tạo danh mục SKILL_CATEGORY nếu chưa có
    T-->>API: categoryId
    API->>P: Thêm bài viết SKILL_LIBRARY<br/>(nội dung Markdown, gắn danh mục)
    P-->>API: createdId
    API-->>A: Chuyển sang trang chi tiết
Kỹ năng được lưu như một bài viết của ezyarticle với type = SKILL_LIBRARY,
kiểu nội dung MARKDOWN, tắt bình luận: tiêu đề là tiêu đề bài viết, mô tả
là phần tóm tắt, danh mục là term SKILL_CATEGORY.

Viết nội dung kỹ năng

Một số gợi ý:
  • Bắt đầu bằng một đoạn ngắn nói kỹ năng giải quyết việc gì, dùng khi nào.
  • Chia thành các mục rõ ràng: điều kiện, các bước, ví dụ, lưu ý.
  • Dùng code block cho lệnh, đoạn mã, mẫu prompt để người xem sao chép đúng.
  • Không đưa thông tin nhạy cảm (api key, mật khẩu, token, dữ liệu cá nhân),
    nhất là với kỹ năng sẽ xuất bản công khai.
Ví dụ:
Kỹ năng này giúp AI viết release notes từ danh sách commit.

## Khi nào dùng

Khi cần tổng hợp thay đổi của một phiên bản để gửi cho người dùng.

## Các bước

1. Nhóm commit theo loại: tính năng mới, sửa lỗi, cải tiến.
2. Viết mỗi thay đổi thành một dòng, tập trung vào lợi ích cho người dùng.
3. Bỏ qua các commit chỉ sửa nội bộ (refactor, test, CI).

## Mẫu

```text
## Phiên bản x.y.z

### Tính năng mới
- ...
```

Xem, sửa và đổi trạng thái

Trang chi tiết (/ezyai/skill-library/{skillId}) hiển thị tiêu đề, mô tả,
danh mục, trạng thái và nội dung của kỹ năng, kèm các nút:
  • Sửa: mở form /ezyai/skill-library/{skillId}/edit, các trường giống
    form thêm. Khi sửa, tiêu đề không bị kiểm tra trùng.
  • Mở trình soạn thảo bài viết: mở kỹ năng trong trình soạn thảo bài
    viết của ezyarticle (/ezyarticle/posts/{skillId}/edit), dùng khi cần
    các tính năng soạn thảo đầy đủ hơn.
  • Xuất bản, Xuất bản nội bộ, Huỷ xuất bản: đổi trạng thái kỹ
    năng mà không cần mở form sửa.
  • Xoá: chuyển kỹ năng vào thùng rác sau khi xác nhận. Kỹ năng trong
    thùng rác không còn hiện trong danh sách mặc định và không chặn việc tạo
    kỹ năng mới cùng tiêu đề.
stateDiagram-v2
    [*] --> DRAFT: Lưu
    [*] --> INTERNAL_PUBLISHED: Xuất bản nội bộ
    [*] --> PUBLISHED: Xuất bản
    DRAFT --> PUBLISHED: Xuất bản
    DRAFT --> INTERNAL_PUBLISHED: Xuất bản nội bộ
    INTERNAL_PUBLISHED --> PUBLISHED: Xuất bản
    PUBLISHED --> INTERNAL_PUBLISHED: Xuất bản nội bộ
    PUBLISHED --> DRAFT: Huỷ xuất bản
    INTERNAL_PUBLISHED --> DRAFT: Huỷ xuất bản
    DRAFT --> TRASH: Xoá
    INTERNAL_PUBLISHED --> TRASH: Xoá
    PUBLISHED --> TRASH: Xoá

Thư viện kỹ năng trên website

Khi ezyai-web-plugin được cài, website có trang công khai
/ezyai/skill-library:
  • Chỉ hiển thị kỹ năng ở trạng thái PUBLISHED và danh mục đang
    ACTIVATED.
  • Người xem lọc theo danh mục, tìm theo từ khoá, phân trang.
  • Mở một kỹ năng để xem nội dung, Sao chép Markdown hoặc Tải về
    dưới dạng file [slug].md.
  • Có thể dẫn link trực tiếp tới một danh mục hoặc kết quả tìm kiếm, ví dụ
    /ezyai/skill-library?categoryId=1&keyword=release.
Trang web lấy dữ liệu từ hai API công khai:
MethodĐường dẫnMô tả
GET/api/v1/skill-library/categoriesDanh mục đang ACTIVATED, lọc theo keyword, mặc định 12 mục mỗi trang
GET/api/v1/skill-library/skillsKỹ năng PUBLISHED, lọc theo categoryId, keyword, mặc định 12 mục mỗi trang

API quản trị

Tất cả nằm dưới tiền tố /ezyai/api/v1 của admin, yêu cầu đăng nhập và
quyền tính năng skill_library_management.
MethodĐường dẫnMô tả
GET/skill-libraryDanh sách kỹ năng, lọc theo status, categoryId, keyword, phân trang
GET/skill-library/categoriesDanh sách danh mục, lọc theo status, keyword
GET/skill-library/{skillId}Chi tiết kỹ năng
POST/skill-library/addThêm kỹ năng, trả về createdId
PUT/skill-library/{skillId}Sửa kỹ năng
PUT/skill-library/{skillId}/publishXuất bản
PUT/skill-library/{skillId}/internal-publishXuất bản nội bộ
PUT/skill-library/{skillId}/unpublishHuỷ xuất bản
DELETE/skill-library/{skillId}Chuyển vào thùng rác
Ví dụ body khi thêm kỹ năng:
{
  "title": "Viết release notes",
  "description": "Tổng hợp commit thành release notes cho người dùng",
  "categoryName": "Viết tài liệu",
  "content": "Kỹ năng này giúp AI viết release notes từ danh sách commit...",
  "status": "PUBLISHED"
}