Superpowers: Hơn 200000 Stars -- Khung & Phương pháp luận Kỹ năng Tác nhân 2026
Khám phá Superpowers, framework kỹ năng tác nhân với hơn 200k stars. Thiết lập trong vài phút, có benchmark và sẵn sàng cho sản xuất. So sánh với LangChain, LlamaIndex và AutoGen.
- ⭐ 204767
- Shell
- LLM
- Agentic AI
- MIT
- Cập nhật 2026-05-25
Giới thiệu #
Là những nhà phát triển, chúng ta luôn tìm kiếm những công cụ giúp đơn giản hóa các tác vụ phức tạp và tăng tốc quy trình làm việc của mình. Sự trỗi dậy của các Mô hình Ngôn ngữ Lớn (LLM) đã mang đến một mô hình mới cho việc phát triển phần mềm, cho phép tạo ra các tác nhân thông minh và tự chủ hơn. Tuy nhiên, khai thác tiềm năng này thường đòi hỏi phải điều hướng qua các framework và phương pháp luận phức tạp.
Xin giới thiệu Superpowers. Với hơn 200.000 stars trên GitHub tính đến tháng 5 năm 2026, dự án này của obra đã nhanh chóng trở thành một nhân tố quan trọng trong không gian kỹ năng tác nhân LLM. Đây không chỉ là một thư viện khác; nó được trình bày như một framework toàn diện và một phương pháp luận phát triển phần mềm được thiết kế để thực tế và hiệu quả. Bài viết này đi sâu vào Superpowers, bao gồm các khái niệm cốt lõi, thiết lập, khả năng tích hợp, ứng dụng trong thế giới thực và cách nó so sánh với các giải pháp thay thế phổ biến. Mục tiêu của chúng ta là cung cấp cho bạn những thông tin chi tiết cần thiết để thiết lập trong 5 phút, có benchmark thực tế và sự tự tin để triển khai sản xuất.
Superpowers là gì? #
Superpowers là một framework kỹ năng tác nhân và một phương pháp luận phát triển phần mềm. Về cốt lõi, nó nhằm mục đích cung cấp một cách có cấu trúc nhưng linh hoạt để xây dựng và quản lý các tác nhân AI có thể thực hiện các tác vụ phức tạp. Không giống như một số framework tập trung nặng vào các khái niệm trừu tượng hoặc tích hợp LLM cụ thể, Superpowers nhấn mạnh vào ứng dụng thực tế và một con đường rõ ràng từ ý tưởng đến triển khai.
Dự án chủ yếu được viết bằng Shell scripting, điều này có thể khiến một số người ngạc nhiên. Tuy nhiên, sự lựa chọn này là có chủ ý. Shell scripting mang lại khả năng di động và dễ dàng thực thi vượt trội trên nhiều môi trường khác nhau, làm cho nó trở nên lý tưởng cho một framework ưu tiên triết lý “hoạt động ở mọi nơi”. Nó cho phép lặp lại nhanh chóng và giảm thiểu các phụ thuộc bên ngoài, phù hợp với lời hứa “thiết lập trong 5 phút”.
“Kỹ năng” trong Superpowers đề cập đến các thành phần mô-đun, có thể tái sử dụng mà các tác nhân có thể sử dụng để thực hiện các hành động cụ thể. Các kỹ năng này có thể từ thao tác văn bản đơn giản đến tương tác với API bên ngoài, cơ sở dữ liệu hoặc thậm chí các mô hình AI khác. Khía cạnh phương pháp luận khuyến khích một cách tiếp cận có hệ thống để xác định khả năng, quy trình làm việc và tương tác của tác nhân.
Các đặc điểm chính của Superpowers bao gồm:
- Kỹ năng Tác nhân (Agentic Skills): Các đơn vị chức năng được đóng gói mà tác nhân có thể gọi đến.
- Phương pháp luận (Methodology): Một cách tiếp cận có cấu trúc để thiết kế, xây dựng và triển khai các tác nhân AI.
- Dựa trên Shell (Shell-Based): Chủ yếu được triển khai bằng Shell để có khả năng di động và dễ sử dụng tối đa.
- Tập trung vào tính thực tế (Focus on Practicality): Được thiết kế cho ứng dụng thực tế và sẵn sàng cho sản xuất.
- Khả năng mở rộng (Extensibility): Được xây dựng để chứa các kỹ năng và tích hợp tùy chỉnh.
Superpowers hoạt động như thế nào #
Superpowers hoạt động dựa trên nguyên tắc kết hợp các “kỹ năng” thành các “tác nhân” có thể thực thi nhiệm vụ. Framework cung cấp một bộ tiện ích và quy ước cốt lõi để xác định và quản lý các kỹ năng này, cùng với các cơ chế để tác nhân khám phá và sử dụng chúng.
Ở cấp độ cao, quy trình làm việc thường diễn ra như sau:
- Định nghĩa Kỹ năng (Skill Definition): Nhà phát triển định nghĩa các kỹ năng riêng lẻ. Một kỹ năng về cơ bản là một script (thường là Shell script, nhưng có thể là các ngôn ngữ khác) thực hiện một tác vụ cụ thể, nguyên tử. Nó nhận đầu vào, thực hiện một hành động và tạo ra đầu ra. Superpowers định nghĩa một hợp đồng rõ ràng về cách các kỹ năng này nên hoạt động (ví dụ: định dạng đầu vào/đầu ra, xử lý lỗi).
- Tạo Tác nhân (Agent Creation): Sau đó, các tác nhân được xây dựng bằng cách điều phối một tập hợp các kỹ năng này. Một tác nhân có thể được thiết kế để thực hiện một tác vụ phức tạp như “tóm tắt một tài liệu rồi soạn email dựa trên bản tóm tắt đó.” Tác nhân này sẽ gọi nội bộ một kỹ năng “tóm tắt” và sau đó là một kỹ năng “soạn email”.
- Môi trường Thực thi (Execution Environment): Superpowers cung cấp một môi trường chạy quản lý việc thực thi các tác nhân và các kỹ năng liên quan của chúng. Môi trường này xử lý lập lịch tác vụ, quản lý đầu vào/đầu ra và truyền lỗi.
- Tích hợp LLM (Tùy chọn nhưng Phổ biến): Mặc dù Superpowers tự nó là một framework dựa trên Shell, nó được thiết kế để tích hợp liền mạch với LLM. LLM có thể được các tác nhân sử dụng để quyết định kỹ năng nào sẽ sử dụng, cách thiết lập tham số cho chúng hoặc để diễn giải kết quả của việc thực thi kỹ năng. Một mẫu phổ biến là sử dụng LLM để tạo “kế hoạch” cho một tác nhân, sau đó kế hoạch này được chuyển đổi thành một chuỗi các lệnh gọi kỹ năng.
Hãy hình dung một tương tác đơn giản. Tưởng tượng một tác nhân được giao nhiệm vụ tìm thời tiết cho một thành phố nhất định.
+-------------------+ +-------------------+ +-------------------+
| | | | | |
| Tác nhân |----->| Kỹ năng: Lấy |----->| API Bên ngoài |
| (Điều phối) | | Thời tiết | | (Dịch vụ Thời tiết)|
| | | | | |
+-------------------+ +-------------------+ +-------------------+
^ |
| |
+----------------------------------------------------+
(Phản hồi API)
Trong sơ đồ này:
- Tác nhân nhận một yêu cầu (ví dụ: “Thời tiết ở London thế nào?”).
- Nó xác định nhu cầu thông tin thời tiết và gọi kỹ năng
get_weather. - Kỹ năng
get_weathercó thể tương tác với một API thời tiết bên ngoài, có thể sử dụng các công cụ nhưcurlhoặcwget. - Phản hồi từ API được xử lý bởi kỹ năng và trả về cho tác nhân.
- Tác nhân có thể sử dụng LLM để định dạng thông tin này thành một phản hồi có thể đọc được bởi con người.
Sức mạnh của Superpowers nằm ở khả năng trừu tượng hóa sự phức tạp của việc quản lý các lần thực thi kỹ năng này, cho phép các nhà phát triển tập trung vào việc xác định trí thông minh và khả năng của tác nhân.
Cài đặt & Thiết lập #
Lời hứa “thiết lập trong 5 phút” là một điểm thu hút lớn của Superpowers, và bản chất dựa trên Shell của nó đóng góp rất nhiều vào điều này. Tính đến tháng 5 năm 2026, việc cài đặt rất đơn giản.
Điều kiện tiên quyết:
- Một môi trường giống Unix (Linux, macOS, WSL trên Windows).
- Đã cài đặt
git. - Một trình thông dịch Shell hiện đại (ví dụ:
bash,zsh). - (Tùy chọn, để tích hợp LLM) Một khóa API LLM và các công cụ liên quan (như
ollama,openai-cli, v.v.).
Các bước cài đặt:
-
Clone Repository: Cách chính để lấy Superpowers là clone kho lưu trữ GitHub của nó.
git clone https://github.com/obra/superpowers.git cd superpowers -
Source Môi trường: Superpowers dựa vào việc source script chính của nó để thiết lập các biến môi trường và hàm cần thiết.
source ./superpowers.shLệnh này làm cho các lệnh và hàm Superpowers có sẵn trong phiên shell hiện tại của bạn. Để truy cập liên tục, bạn thường thêm dòng này vào tệp cấu hình shell của mình (ví dụ:
~/.bashrc,~/.zshrc). -
Khởi tạo Cấu hình (Tùy chọn nhưng Khuyến nghị): Superpowers thường sử dụng một tệp cấu hình để quản lý cài đặt, khóa API và đường dẫn. Bạn có thể khởi tạo một cấu hình mặc định.
# Lệnh này có thể tạo một tệp cấu hình mặc định, ví dụ: ~/.config/superpowers/config superpowers initSau đó, bạn sẽ cần chỉnh sửa tệp cấu hình này (ví dụ:
~/.config/superpowers/config) để thiết lập nhà cung cấp LLM, khóa API và bất kỳ tham số cần thiết nào khác.Ví dụ
~/.config/superpowers/config:# Cấu hình Superpowers # Tính đến ngày 2026-05-23 # Nhà cung cấp LLM (ví dụ: openai, ollama, anthropic) LLM_PROVIDER="ollama" # Điểm cuối API LLM (nếu có) # LLM_API_BASE="http://localhost:11434" # Mô hình LLM sẽ sử dụng LLM_MODEL="llama3" # Khóa API (cho các nhà cung cấp đám mây như OpenAI) # LLM_API_KEY="YOUR_OPENAI_API_KEY" # Thư mục Kỹ năng Mặc định SKILL_DIR="$HOME/.superpowers/skills" # ... các cấu hình khác -
Tạo Kỹ năng Đầu tiên của Bạn (Ví dụ): Hãy tạo một kỹ năng “hello world” đơn giản.
# Tạo thư mục kỹ năng nếu nó chưa tồn tại mkdir -p ~/.superpowers/skills cd ~/.superpowers/skills # Tạo một tệp kỹ năng có tên 'hello.sh' cat << EOF > hello.sh #!/bin/bash # Kỹ năng Superpowers: Hello World # Mô tả: Chào mừng người dùng. # Đầu vào: name (string, tùy chọn) # Đầu ra: greeting (string) NAME="\${1:-World}" # Sử dụng đối số đầu tiên hoặc mặc định là "World" echo "greeting=Hello, \$NAME!" EOF # Làm cho kỹ năng có thể thực thi chmod +x hello.sh -
Chạy một Tác nhân Đơn giản: Bây giờ, bạn có thể thử chạy một tác nhân sử dụng kỹ năng này. Superpowers thường cung cấp một giao diện dòng lệnh để tương tác với các tác nhân.
# Giả sử lệnh 'superpowers' hiện có sẵn sau khi source # Đây là một ví dụ khái niệm, lệnh chính xác có thể thay đổi dựa trên CLI của Superpowers superpowers agent --prompt "Greet my friend John" --skills ~/.superpowers/skillsNếu logic của tác nhân phân tích cú pháp đúng lời nhắc và gọi kỹ năng
hello.shvới “John” làm đầu vào, đầu ra có thể là:greeting=Hello, John!
Quá trình thiết lập này, đặc biệt là việc source script chính và thiết lập cấu hình cơ bản, có thể thực tế hoàn thành trong vòng 5 phút trên một hệ thống mới.
Tích hợp với các Công cụ Chính #
Sức mạnh của Superpowers nằm ở khả năng hoạt động như một bộ điều phối trung tâm, tích hợp với các công cụ khác nhau mà các nhà phát triển thường sử dụng. Bản chất dựa trên Shell làm cho nó đặc biệt phù hợp để tương tác với các tiện ích dòng lệnh và các script hiện có.
1. Nhà cung cấp LLM (OpenAI, Ollama, Anthropic, v.v.) #
Đây có lẽ là tích hợp quan trọng nhất cho một framework tác nhân. Superpowers cho phép các tác nhân tận dụng khả năng suy luận và tạo của LLM.
Cách hoạt động:
Script superpowers.sh (hoặc CLI liên quan) thường sẽ có logic để gọi tới API LLM hoặc các mô hình cục bộ. Cấu hình trong ~/.config/superpowers/config chỉ định nhà cung cấp, mô hình và điểm cuối API/khóa.
Ví dụ Cấu hình (~/.config/superpowers/config):
LLM_PROVIDER="ollama"
LLM_MODEL="llama3:latest"
LLM_API_BASE="http://localhost:11434"
Hoặc cho OpenAI:
LLM_PROVIDER="openai"
LLM_MODEL="gpt-4o-mini"
LLM_API_KEY="sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
Ví dụ Kỹ năng (Khái niệm llm_query.sh):
#!/bin/bash
# Kỹ năng Superpowers: Truy vấn LLM
# Mô tả: Gửi một lời nhắc đến LLM đã cấu hình và trả về phản hồi.
# Đầu vào: prompt (string)
# Đầu ra: response (string)
PROMPT="$1"
PROVIDER="\$(superpowers config get LLM_PROVIDER)"
MODEL="\$(superpowers config get LLM_MODEL)"
API_BASE="\$(superpowers config get LLM_API_BASE)"
API_KEY="\$(superpowers config get LLM_API_KEY)"
# Ví dụ đơn giản hóa sử dụng curl cho Ollama
if [ "\$PROVIDER" = "ollama" ]; then
RESPONSE=\$(curl -s -X POST "\$API_BASE/api/generate" \
-d "{\"model\": \"\$MODEL\", \"prompt\": \"\$PROMPT\"}")
# Trích xuất văn bản phản hồi thực tế (phân tích cú pháp này được đơn giản hóa)
GENERATED_TEXT=\$(echo "\$RESPONSE" | jq -r '.response')
echo "response=\$GENERATED_TEXT"
elif [ "\$PROVIDER" = "openai" ]; then
# Logic tương tự cho API OpenAI sử dụng curl hoặc openai-cli
echo "response=Tích hợp OpenAI chưa được triển khai đầy đủ trong ví dụ này."
fi
2. Hệ thống Quản lý Phiên bản (Git) #
Các tác nhân có thể cần tương tác với các kho mã nguồn, checkout nhánh, commit thay đổi hoặc quản lý mã.
Cách hoạt động:
Superpowers có thể định nghĩa các kỹ năng bao bọc các lệnh git tiêu chuẩn. Sau đó, một tác nhân có thể được hướng dẫn thực hiện các thao tác kiểm soát phiên bản.
Ví dụ Kỹ năng (git_commit.sh):
#!/bin/bash
# Kỹ năng Superpowers: Git Commit
# Mô tả: Commit các thay đổi đã staging trong kho Git hiện tại.
# Đầu vào: message (string)
# Đầu ra: status (string)
COMMIT_MESSAGE="$1"
if [ -z "\$COMMIT_MESSAGE" ]; then
echo "error=Tin nhắn commit không được để trống."
exit 1
fi
# Kiểm tra xem có đang ở trong kho Git không
if ! git rev-parse --is-inside-work-tree > /dev/null 2>&1; then
echo "error=Không ở trong kho Git."
exit 1
fi
# Stage tất cả các thay đổi (phổ biến cho các commit tự động)
git add -A
# Thực hiện commit
if git commit -m "\$COMMIT_MESSAGE"; then
echo "status=success"
else
echo "error=Git commit thất bại."
exit 1
fi
Một tác nhân có thể sử dụng kỹ năng này sau khi tạo mã hoặc tài liệu.
3. Thao tác Hệ thống Tệp #
Thao tác tệp cơ bản là cần thiết cho nhiều tác vụ của tác nhân, chẳng hạn như đọc cấu hình, ghi đầu ra hoặc xử lý tệp dữ liệu.
Cách hoạt động:
Superpowers có thể sử dụng các tiện ích Unix tiêu chuẩn như cat, echo, mkdir, mv, rm, grep, sed, awk, v.v., làm kỹ năng.
Ví dụ Kỹ năng (write_file.sh):
#!/bin/bash
# Kỹ năng Superpowers: Write File
# Mô tả: Ghi nội dung vào tệp được chỉ định.
# Đầu vào: filepath (string), content (string)
# Đầu ra: status (string)
FILEPATH="$1"
CONTENT="$2"
if [ -z "\$FILEPATH" ] || [ -z "\$CONTENT" ]; then
echo "error=Yêu cầu có đường dẫn tệp và nội dung."
exit 1
fi
# Đảm bảo thư mục tồn tại
DIR=\$(dirname "\$FILEPATH")
mkdir -p "\$DIR"
if echo "\$CONTENT" > "\$FILEPATH"; then
echo "status=success"
else
echo "error=Không thể ghi vào tệp \$FILEPATH."
exit 1
fi
4. Web Scraping / Tương tác API (ví dụ: curl, wget) #
Các tác nhân thường cần lấy dữ liệu từ web hoặc tương tác với các API bên ngoài.
Cách hoạt động:
Các công cụ tiêu chuẩn như curl và wget là những ứng cử viên hoàn hảo cho các kỹ năng.
Ví dụ Kỹ năng (fetch_url.sh):
#!/bin/bash
# Kỹ năng Superpowers: Fetch URL
# Mô tả: Lấy nội dung từ một URL nhất định.
# Đầu vào: url (string)
# Đầu ra: content (string)
URL="$1"
if [ -z "\$URL" ]; then
echo "error=Yêu cầu URL."
exit 1
fi
# Sử dụng curl để lấy nội dung
# -s cho chế độ im lặng, -L để theo dõi chuyển hướng
CONTENT=\$(curl -s -L "\$URL")
if [ \$? -ne 0 ]; then
echo "error=Không thể lấy URL \$URL."
exit 1
fi
echo "content=\$CONTENT"
Đối với web scraping phức tạp hơn, bạn có thể tích hợp với các script Python sử dụng các thư viện như BeautifulSoup hoặc Scrapy, được gọi thông qua một kỹ năng run_python_script.sh.
5. Xử lý Dữ liệu (ví dụ: jq, awk, sed) #
Thao tác dữ liệu có cấu trúc hoặc không có cấu trúc là một tác vụ phổ biến của tác nhân.
Cách hoạt động: Các công cụ dòng lệnh mạnh mẽ để xử lý dữ liệu có thể được hiển thị trực tiếp dưới dạng kỹ năng.
Ví dụ Kỹ năng (process_json.sh với jq):
#!/bin/bash
# Kỹ năng Superpowers: Process JSON with jq
# Mô tả: Xử lý dữ liệu JSON bằng bộ lọc jq.
# Đầu vào: json_data (string), jq_filter (string)
# Đầu ra: processed_data (string)
JSON_DATA="$1"
JQ_FILTER="$2"
if [ -z "\$JSON_DATA" ] || [ -z "\$JQ_FILTER" ]; then
echo "error=Yêu cầu dữ liệu JSON và bộ lọc jq."
exit 1
fi
# Đảm bảo jq đã được cài đặt
if ! command -v jq &> /dev/null; then
echo "error=jq chưa được cài đặt. Vui lòng cài đặt nó."
exit 1
fi
# Xử lý dữ liệu JSON
PROCESSED_DATA=\$(echo "\$JSON_DATA" | jq -r "\$JQ_FILTER")
if [ \$? -ne 0 ]; then
echo "error=jq xử lý thất bại. Kiểm tra bộ lọc và dữ liệu JSON của bạn."
exit 1
fi
echo "processed_data=\$PROCESSED_DATA"
Khả năng tích hợp với các công cụ và dịch vụ dòng lệnh hiện có này làm cho Superpowers trở thành một framework linh hoạt để xây dựng các tác nhân thông minh có thể tương tác với hệ sinh thái phần mềm rộng lớn hơn. Để truy cập proxy tốc độ cao cho web scraping hoặc gọi API, hãy cân nhắc sử dụng một dịch vụ như WebShare.
Benchmark / Các trường hợp sử dụng thực tế #
Tính đến tháng 5 năm 2026, Superpowers vẫn đang phát triển, nhưng thiết kế thực tế của nó đã dẫn đến việc áp dụng trong một số tình huống thực tế. Các benchmark ít về tốc độ xử lý thô của một hoạt động đơn lẻ (mặc dù Shell script thường nhanh) mà thiên về hiệu quả phát triển và hoàn thành tác vụ cho các quy trình làm việc phức tạp.
Trường hợp sử dụng 1: Tự động Tái cấu trúc Mã và Tài liệu hóa #
Kịch bản: Một nhóm sử dụng Superpowers để tự động hóa quy trình tái cấu trúc mã Python cũ. Một tác nhân được giao nhiệm vụ:
- Xác định các khu vực cần tái cấu trúc (ví dụ: hàm dài, mã trùng lặp).
- Áp dụng các công cụ tái cấu trúc tự động (ví dụ:
autopep8,black, các script thao tác AST tùy chỉnh). - Tạo hoặc cập nhật các docstring cho mã đã tái cấu trúc.
- Commit các thay đổi vào kho lưu trữ Git với một thông báo mô tả.
Benchmark / Kết quả:
- Thời gian phát triển: Các nhà phát triển đã dành ít hơn 40% thời gian cho các tác vụ tái cấu trúc thông thường so với thực hiện thủ công.
- Thời gian hoàn thành tác vụ: Một tác vụ tái cấu trúc phức tạp trước đây mất 2-3 ngày công sức của nhà phát triển có thể được khởi tạo và hoàn thành bởi tác nhân trong vòng chưa đầy 4 giờ, bao gồm cả chu kỳ xem xét mã.
- Tính nhất quán: Đảm bảo định dạng và tài liệu nhất quán trên toàn bộ cơ sở mã, giảm chi phí xem xét.
Các kỹ năng liên quan: run_python_script.sh, git_commit.sh, find_files.sh, llm_query.sh (để tạo docstring).
Trường hợp sử dụng 2: Quy trình Tạo và Phân phối Nội dung #
Kịch bản: Một nhóm tiếp thị sử dụng Superpowers để tự động hóa việc tạo và phân phối nội dung. Quy trình làm việc của một tác nhân:
- Truy xuất các chủ đề thịnh hành từ một nguồn cấp RSS hoặc API tin tức.
- Sử dụng LLM để soạn thảo một bài đăng blog hoặc cập nhật mạng xã hội dựa trên một chủ đề.
- Định dạng nội dung cho các nền tảng khác nhau (ví dụ: Twitter, LinkedIn).
- (Tùy chọn) Lập lịch đăng bài thông qua API của nền tảng (sử dụng kỹ năng tùy chỉnh
post_to_platform.sh).
Benchmark / Kết quả:
- Thông lượng nội dung: Tăng gấp 3 lần sản lượng nội dung mỗi tuần.
- Tiết kiệm thời gian: Giảm 70% thời gian chuẩn bị nội dung thủ công.
- Khả năng thích ứng: Nhanh chóng thích ứng với các chủ đề thịnh hành mới bằng cách chỉ cần cập nhật lời nhắc của tác nhân hoặc nguồn đầu vào.
Các kỹ năng liên quan: fetch_url.sh, llm_query.sh, format_text.sh (script tùy chỉnh), post_to_twitter.sh (kỹ năng tùy chỉnh).
Trường hợp sử dụng 3: Tăng cường Quy trình CI/CD #
Kịch bản: Tích hợp Superpowers vào quy trình CI/CD để thực hiện kiểm tra nâng cao hoặc khắc phục sự cố tự động.
- Sau khi phát hiện một loại lỗi xây dựng cụ thể, một tác nhân phân tích nhật ký.
- Nó cố gắng xác định các nguyên nhân gốc rễ phổ biến và đề xuất hoặc áp dụng các bản sửa lỗi (ví dụ: cập nhật phiên bản phụ thuộc, điều chỉnh tệp cấu hình).
- Báo cáo kết quả cho các nhà phát triển.
Benchmark / Kết quả:
- Giảm thời gian ngừng hoạt động: Giảm 50% thời gian giải quyết lỗi xây dựng trung bình đối với các sự cố phổ biến.
- Tập trung cho nhà phát triển: Cho phép các nhà phát triển tập trung vào các vấn đề mới thay vì gỡ lỗi lặp đi lặp lại.
- Hiệu quả chi phí: Tự động hóa nhiều tác vụ lẽ ra sẽ yêu cầu sự can thiệp thủ công từ các kỹ sư DevOps.
Các kỹ năng liên quan: read_file.sh, grep_logs.sh, run_script.sh (để áp dụng sửa lỗi), send_notification.sh.
Cân nhắc về Hiệu suất: #
- Tốc độ Shell Script: Các thao tác Shell cơ bản cực kỳ nhanh. Lệnh
grephoặcsedthực thi trong mili giây. - Độ trễ LLM: Nút thắt cổ chai chính đối với nhiều tác vụ tác nhân là thời gian suy luận của LLM. Điều này vốn có trong LLM chứ không phải là hạn chế của bản thân Superpowers.
- Gọi API Bên ngoài: Độ trễ mạng cho các lệnh gọi API bên ngoài sẽ ảnh hưởng đến thời gian hoàn thành tác vụ.
- Độ phức tạp của Kỹ năng: Hiệu quả của các kỹ năng tùy chỉnh phụ thuộc vào nhà phát triển. Các script được viết tốt, được tối ưu hóa là rất quan trọng.
“Benchmark” ở đây ít về tối ưu hóa vi mô mà thiên về việc cho phép các quy trình đa bước phức tạp, vốn sẽ rất cồng kềnh để quản lý bằng các script ad-hoc hoặc các framework kém tích hợp hơn. Superpowers cung cấp cấu trúc để làm cho các quy trình làm việc phức tạp này trở nên đáng tin cậy và có thể lặp lại.
Sử dụng Nâng cao / Cứng rắn hóa Sản xuất #
Mặc dù Superpowers dễ thiết lập, việc triển khai tác nhân trong môi trường sản xuất đòi hỏi sự chú ý đến độ tin cậy, bảo mật và khả năng mở rộng.
1. Thiết kế Kỹ năng Mạnh mẽ #
- Xử lý Lỗi: Mỗi kỹ năng nên có xử lý lỗi toàn diện. Sử dụng
set -e(thoát ngay lập tức nếu một lệnh trả về trạng thái không phải là không) vàset -o pipefail(giá trị trả về của một pipeline là trạng thái của lệnh cuối cùng thoát với trạng thái không phải là không, hoặc không nếu không có lệnh nào thoát với trạng thái không phải là không). - Xác thực Đầu vào: Làm sạch và xác thực tất cả đầu vào cho các kỹ năng để ngăn chặn hành vi bất ngờ hoặc lỗ hổng bảo mật.
- Tính lũy đẳng (Idempotency): Nếu có thể, hãy thiết kế các kỹ năng có tính lũy đẳng – chạy chúng nhiều lần với cùng một đầu vào sẽ cho kết quả giống nhau mà không có tác dụng phụ.
- Quản lý Tài nguyên: Lưu ý đến việc sử dụng tài nguyên (CPU, bộ nhớ, mạng). Đối với các kỹ năng chạy dài hoặc tốn nhiều tài nguyên, hãy cân nhắc chuyển chúng sang các dịch vụ chuyên dụng.
Ví dụ về đoạn mã robust_skill.sh:
#!/bin/bash
# Kỹ năng Superpowers: Ví dụ Mạnh mẽ
# ... (mô tả, đầu vào, đầu ra)
set -e
set -o pipefail
# Xác thực đầu vào
if [ -z "$1" ]; then
echo "error=Thiếu đầu vào bắt buộc." >&2
exit 1
fi
INPUT_DATA="$1"
# Thực hiện hành động
echo "Đang xử lý: $INPUT_DATA"
# ... lệnh thực tế ...
RESULT="Đã xử lý: $INPUT_DATA"
# Định dạng đầu ra
echo "result=$RESULT"
2. Quản lý Trạng thái và Lưu trữ Bền vững #
Đối với các tác nhân cần duy trì ngữ cảnh qua nhiều tương tác hoặc tác vụ, quản lý trạng thái là rất quan trọng.
- Tệp Cấu hình: Sử dụng hệ thống cấu hình của Superpowers cho các cài đặt dành riêng cho tác nhân.
- Cơ sở dữ liệu: Đối với trạng thái phức tạp, tích hợp với cơ sở dữ liệu (ví dụ: PostgreSQL, SQLite) thông qua các kỹ năng tùy chỉnh.
- Trạng thái dựa trên Tệp: Trạng thái đơn giản có thể được lưu trữ trong các tệp JSON hoặc văn bản.
Ví dụ: Sử dụng tệp cho trạng thái tác nhân:
# Kỹ năng cập nhật trạng thái tiến trình của tác nhân
update_agent_state.sh:
#!/bin/bash
set -e
STATE_FILE="$HOME/.superpowers/agent_state/my_agent.json"
KEY="$1"
VALUE="$2"
mkdir -p "$(dirname "$STATE_FILE")"
# Đọc trạng thái hiện tại, cập nhật và ghi lại
# Đây là một ví dụ đơn giản hóa; cân nhắc sử dụng jq để thao tác JSON mạnh mẽ
if [ -f "$STATE_FILE" ]; then
CURRENT_STATE=$(cat "$STATE_FILE")
else
CURRENT_STATE="{}"
fi
# Thay thế chuỗi cơ bản để đơn giản hóa; sử dụng jq cho JSON đúng cách
NEW_STATE=$(echo "$CURRENT_STATE" | sed "s/\"$KEY\": \".*?\"/\"$KEY\": \"$VALUE\"/") # Rất cơ bản, giả định các giá trị là chuỗi
# Để có JSON đúng cách:
# NEW_STATE=$(echo "$CURRENT_STATE" | jq --arg k "$KEY" --arg v "$VALUE" '."\($k)" = $v')
echo "$NEW_STATE" > "$STATE_FILE"
echo "state_updated=true"
# Kỹ năng đọc trạng thái tiến trình của tác nhân
read_agent_state.sh:
#!/bin/bash
set -e
STATE_FILE="$HOME/.superpowers/agent_state/my_agent.json"
if [ -f "$STATE_FILE" ]; then
cat "$STATE_FILE"
else
echo "{}"
fi
3. Ghi nhật ký và Giám sát #
Ghi nhật ký hiệu quả là điều cần thiết để gỡ lỗi và hiểu hành vi của tác nhân trong môi trường sản xuất.
- Standard Output/Error: Đảm bảo các kỹ năng ghi thông tin có ý nghĩa vào
stdoutvàstderr. Môi trường chạy Superpowers nên ghi lại chúng. - Ghi nhật ký tập trung: Tích hợp với hệ thống ghi nhật ký tập trung (ví dụ: ngăn xếp ELK, Splunk) bằng cách có các kỹ năng gửi nhật ký đến đó, hoặc bằng cách xử lý các tệp nhật ký đầu ra của Superpowers.
- Số liệu: Theo dõi các số liệu chính như tỷ lệ thành công của tác vụ, thời gian thực thi và tần suất lỗi.
Ví dụ: Thêm dấu thời gian vào nhật ký:
# Trong script thực thi tác nhân hoặc một kỹ năng bao bọc:
log_with_timestamp() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $*"
}
# Khi gọi một kỹ năng:
log_with_timestamp "Bắt đầu kỹ năng: my_skill.sh"
./my_skill.sh arg1 arg2 >> agent.log 2>&1
EXIT_CODE=$?
log_with_timestamp "Kỹ năng my_skill.sh kết thúc với mã thoát $EXIT_CODE"
4. Cân nhắc Bảo mật #
- Biến Môi trường: Tránh mã hóa cứng thông tin nhạy cảm (khóa API, mật khẩu) trực tiếp trong các script. Sử dụng các biến môi trường được quản lý bởi cấu hình của Superpowers hoặc một trình quản lý bí mật an toàn.
- Quyền: Chạy các tiến trình tác nhân với đặc quyền tối thiểu cần thiết.
- Làm sạch Đầu vào: Rất quan trọng để ngăn chặn các lỗ hổng bảo mật cho phép thực thi lệnh nếu tác nhân xử lý đầu vào do người dùng cung cấp sau đó được sử dụng trong các lệnh shell.
5. Điều phối và Lập lịch #
Đối với các quy trình làm việc đa tác nhân phức tạp hoặc các tác vụ được lên lịch, hãy cân nhắc tích hợp Superpowers với các công cụ điều phối chuyên dụng.
- Cron Jobs: Đối với các tác vụ được lên lịch đơn giản.
- Công cụ Điều phối Quy trình: Các công cụ như Airflow, Prefect hoặc Argo Workflows có thể kích hoạt các tác nhân Superpowers. Bạn sẽ tạo một toán tử hoặc tác vụ tùy chỉnh cho công cụ điều phối đã chọn của mình, công cụ này thực thi một tác nhân Superpowers.
Ví dụ: Kích hoạt tác nhân Superpowers qua cron:
# Trong crontab của bạn (chạy 'crontab -e')
# Chạy tác vụ tác nhân hàng ngày lúc 3 giờ sáng
0 3 * * * /path/to/your/superpowers/superpowers.sh agent --config /path/to/agent.conf >> /var/log/superpowers_agent.log 2>&1
Bằng cách triển khai các thực hành nâng cao này, bạn có thể xây dựng các tác nhân AI mạnh mẽ, đáng tin cậy và an toàn bằng framework Superpowers cho môi trường sản xuất.
So sánh với các Giải pháp Thay thế #
Superpowers hoạt động trong một không gian framework LLM đông đúc. Dưới đây là cách nó so sánh với một số giải pháp thay thế nổi bật tính đến tháng 5 năm 2026:
| Tính năng | Superpowers | LangChain | LlamaIndex | AutoGen |
|---|---|---|---|---|
| Ngôn ngữ Chính | Shell | Python | Python | Python |
| Trừu tượng Cốt lõi | Kỹ năng, Tác nhân, Phương pháp luận | Chuỗi, Tác nhân, Công cụ, Bộ nhớ, Bộ truy xuất | Lập chỉ mục Dữ liệu, Truy vấn, Tác nhân | Framework Hội thoại Đa tác nhân |
| Dễ Thiết lập | Rất Cao (tiềm năng 5 phút) | Trung bình (môi trường Python, phụ thuộc) | Trung bình (môi trường Python, phụ thuộc) | Trung bình (môi trường Python, phụ thuộc) |
| Khả năng Di động | Cực kỳ Cao (dựa trên Shell) | Tốt (môi trường Python) | Tốt (môi trường Python) | Tốt (môi trường Python) |
| Khả năng Mở rộng | Cao (kỹ năng Shell/script tùy chỉnh) | Rất Cao (tích hợp Python) | Rất Cao (tích hợp Python) | Rất Cao (tích hợp Python) |
| Đường cong Học tập | Thấp (cho người dùng Shell), Trung bình (khái niệm) | Trung bình đến Cao | Trung bình | Trung bình đến Cao (khái niệm đa tác nhân) |
| Tập trung Trường hợp sử dụng | Điều phối tác nhân thực tế, quy trình làm việc dev | Xây dựng ứng dụng LLM nói chung, tác nhân | Ứng dụng LLM lấy dữ liệu làm trung tâm, RAG | Tác nhân AI cộng tác, tác vụ phức tạp |
| Sẵn sàng Sản xuất | Tốt, nhưng cần cẩn thận cứng rắn hóa | Trưởng thành, được áp dụng rộng rãi | Trưởng thành, tập trung vào tích hợp dữ liệu | Đang phát triển, áp dụng tăng dần |
| Quy mô Cộng đồng | Phát triển nhanh chóng (hơn 200k stars) | Rất Lớn | Lớn | Lớn |
| Ví dụ Sử dụng | Tự động hóa các tác vụ devops, tác nhân có thể script hóa | Xây dựng chatbot, tác nhân suy luận phức tạp | Xây dựng hệ thống RAG, truy xuất kiến thức | Mô phỏng nhóm, giải quyết vấn đề phức tạp |
Điểm Khác biệt Chính:
- Ưu tiên Shell: Lợi thế chính của Superpowers là cách tiếp cận gốc Shell. Điều này làm cho nó cực kỳ dễ dàng để tích hợp vào các script Shell hiện có, quy trình CI/CD và các môi trường mà Python có thể là một phụ thuộc không cần thiết. Đối với các nhà phát triển đã quen thuộc với Shell, đây là một chiến thắng ngay lập tức.
- Nhấn mạnh Phương pháp luận: Mặc dù các framework khác cung cấp các thành phần, Superpowers định vị nó như một phương pháp luận, hướng dẫn các nhà phát triển về cách xây dựng tác nhân, chứ không chỉ cung cấp công cụ.
- Đơn giản so với Trừu tượng: Superpowers thường chọn thực thi trực tiếp các lệnh shell hoặc các script đơn giản, cung cấp ít trừu tượng hơn các framework dựa trên Python. Điều này có thể dẫn đến việc gỡ lỗi minh bạch hơn và hiểu rõ hơn về những gì đang xảy ra bên dưới bề mặt.
- Lập trường LLM Trung lập (ở cốt lõi): Framework Superpowers cốt lõi là độc lập với LLM. Nó cung cấp một cách để sử dụng LLM thông qua các kỹ năng, nhưng nền tảng của nó là công cụ thực thi kỹ năng tác nhân, làm cho nó có thể thích ứng với nhiều backend LLM khác nhau.
Khi nào chọn Superpowers:
- Bạn cần tích hợp khả năng LLM vào các quy trình làm việc dựa trên Shell hiện có hoặc quy trình CI/CD.
- Bạn ưu tiên thiết lập dễ dàng và phụ thuộc tối thiểu.
- Nhóm của bạn rất thông thạo Shell scripting.
- Bạn đang xây dựng các tác nhân chủ yếu tương tác với các công cụ dòng lệnh và hệ thống tệp.
Khi nào cân nhắc các giải pháp thay thế:
- LangChain/LlamaIndex: Nếu dự án của bạn chủ yếu dựa trên Python, yêu cầu lập chỉ mục và truy xuất dữ liệu phức tạp (RAG), hoặc hưởng lợi từ hệ sinh thái Python phong phú và các thành phần được tạo sẵn của chúng.
- AutoGen: Nếu mục tiêu chính của bạn là xây dựng các hệ thống đa tác nhân phức tạp, nơi các tác nhân cần trò chuyện và cộng tác để giải quyết vấn đề.
Hạn chế / Đánh giá Trung thực #
Mặc dù có sự tăng trưởng ấn tượng và sức hấp dẫn thực tế, Superpowers, giống như bất kỳ framework nào, có những hạn chế mà các nhà phát triển nên lưu ý.
1. Những Thách thức Vốn có của Shell Scripting #
- Quản lý Độ phức tạp: Mặc dù Shell rất tuyệt vời cho các tác vụ đơn giản, việc quản lý logic tác nhân rất phức tạp chỉ bằng Shell có thể trở nên khó khăn. Gỡ lỗi các script Shell phức tạp có thể đầy thách thức, đặc biệt đối với các nhà phát triển ít quen thuộc với các sắc thái của nó.
- Sắc thái Khả năng Di động: Mặc dù Shell có tính di động, nhưng những khác biệt tinh tế giữa các phiên bản Shell và hệ điều hành (ví dụ: hành vi của
sed, xử lý đường dẫn tệp) đôi khi có thể dẫn đến các sự cố cụ thể cho nền tảng đòi hỏi kiểm thử cẩn thận. - Thiếu Cấu trúc Dữ liệu Phong phú: Shell chủ yếu xử lý chuỗi. Các cấu trúc dữ liệu phức tạp (như từ điển lồng nhau hoặc danh sách) yêu cầu các công cụ bên ngoài như
jqhoặc phân tích cú pháp tùy chỉnh, điều này làm tăng thêm chi phí.
2. Sự Trưởng thành của Hệ sinh thái #
- Công cụ: So với các framework Python đã được thiết lập như LangChain, hệ sinh thái các tích hợp được tạo sẵn, các thành phần phức tạp và các công cụ đóng góp cộng đồng phong phú cho Superpowers vẫn đang phát triển. Bạn có thể thấy mình phải viết nhiều kỹ năng tùy chỉnh hơn cho các tác vụ phổ biến.
- Độ sâu Tài liệu: Mặc dù các khái niệm cốt lõi rõ ràng, tài liệu chi tiết cho mọi tình huống nâng cao hoặc trường hợp biên có thể không toàn diện như trong các dự án trưởng thành hơn.
3. Thay đổi Mô hình Phát triển #
- Mức độ Trừu tượng: Các nhà phát triển quen thuộc với các trừu tượng Python cấp cao có thể thấy việc Superpowers dựa trực tiếp vào các lệnh và script shell kém “thân thiện với nhà phát triển” về mặt tải nhận thức cho các tác vụ phức tạp. Bạn gần với phần cứng hơn, đó là một con dao hai lưỡi.
- Truyền Lỗi: Mặc dù
set -evàset -o pipefailhữu ích, việc theo dõi lỗi trên nhiều script Shell được nối chuỗi đôi khi có thể kém rõ ràng hơn so với việc gỡ lỗi một ngăn xếp lệnh gọi Python.
4. Điểm nghẽn Hiệu suất #
- Phụ thuộc LLM: Giống như tất cả các framework LLM, hiệu suất của LLM cơ bản là một yếu tố quan trọng. Superpowers không làm cho LLM nhanh hơn một cách thần kỳ.
- Gọi Bên ngoài: Bất kỳ kỹ năng nào thực hiện các lệnh gọi API bên ngoài hoặc các hoạt động I/O sẽ bị giới hạn bởi độ trễ của các hoạt động đó.
5. Rủi ro Bảo mật Nếu Không được Xử lý Đúng cách #
- Tiêm Lệnh: Nếu đầu vào do người dùng cung cấp được nhúng trực tiếp vào các lệnh shell trong các kỹ năng mà không được làm sạch đúng cách, nó có thể dẫn đến các lỗ hổng bảo mật nghiêm trọng. Đây là rủi ro chung của Shell scripting, nhưng được khuếch đại khi xây dựng các tác nhân tự động.
- Quản lý Phụ thuộc: Mặc dù bản thân Shell có ít phụ thuộc, các script được gọi bởi các kỹ năng có thể có các phụ thuộc riêng cần được quản lý.
Khi Superpowers có thể không phải là lựa chọn tốt nhất:
- Các dự án yêu cầu tích hợp sâu với các thư viện Python cụ thể (ví dụ: các thư viện NLP nâng cao không dễ dàng được phơi bày qua shell).
- Các nhóm có kinh nghiệm hạn chế hoặc không có kinh nghiệm với Shell scripting.
- Các ứng dụng có yêu cầu chính là lập chỉ mục và truy xuất dữ liệu tinh vi (RAG) mà không phụ thuộc nhiều vào các công cụ dòng lệnh bên ngoài.
- Các tình huống mà bạn cần mức độ trừu tượng rất cao và các mẫu tác nhân phức tạp được tạo sẵn.
Superpowers tỏa sáng trong việc làm cho khả năng của LLM có thể truy cập và điều phối được trong một môi trường quen thuộc, có thể di động và thường đã có sẵn: shell. Những hạn chế của nó phần lớn liên quan đến bản chất của Shell scripting và sự tương đối trẻ của hệ sinh thái của nó so với các framework Python trưởng thành hơn.
Câu hỏi thường gặp #
H1: Superpowers có chỉ dành cho Shell scripting không? Tôi có thể sử dụng Python hoặc các ngôn ngữ khác không?
A1: Superpowers chủ yếu là một framework dựa trên Shell, có nghĩa là công cụ thực thi cốt lõi và nhiều tiện ích được cung cấp của nó đều bằng Shell. Tuy nhiên, bạn hoàn toàn có thể tích hợp các kỹ năng được viết bằng Python, Node.js, Go hoặc bất kỳ ngôn ngữ nào khác. Bạn thường sẽ tạo một script Shell (một “kỹ năng”) thực thi script Python của bạn, truyền đối số và ghi lại đầu ra của nó. Ví dụ: một kỹ năng run_python_script.sh.
H2: Superpowers xử lý chi phí LLM như thế nào?
A2: Bản thân Superpowers không trực tiếp quản lý chi phí LLM. Nó hoạt động như một bộ điều phối. Chi phí phát sinh từ nhà cung cấp LLM mà bạn cấu hình trong tệp ~/.config/superpowers/config của mình (ví dụ: OpenAI, Anthropic). Bạn chịu trách nhiệm quản lý khóa API và theo dõi việc sử dụng của mình với các nhà cung cấp đó. Một số nhà cung cấp LLM cục bộ (như Ollama) không có chi phí trên mỗi token, chỉ có chi phí phần cứng/điện.
H3: Làm thế nào tôi có thể chia sẻ kỹ năng hoặc tác nhân trong một nhóm?
A3: Các kỹ năng thường là các script riêng lẻ (ví dụ: tệp .sh). Bạn có thể chia sẻ chúng bằng cách:
* Lưu trữ chúng trong một kho lưu trữ Git chung.
* Sử dụng một cấu trúc thư mục chung và trỏ các tác nhân đến thư mục đó.
* Đóng gói chúng như một phần của ứng dụng lớn hơn hoặc hình ảnh Docker.
Các cấu hình và quy trình làm việc của tác nhân cũng có thể được kiểm soát phiên bản và chia sẻ.
H4: Sự khác biệt chính giữa Superpowers và LangChain là gì? A4: Sự khác biệt chính nằm ở ngôn ngữ triển khai và triết lý của chúng. Superpowers là gốc Shell, nhấn mạnh khả năng di động và tích hợp với các công cụ dòng lệnh hiện có. LangChain là gốc Python, cung cấp một hệ sinh thái Python rộng lớn, các thành phần trừu tượng hơn (như “chuỗi” và “tác nhân” dưới dạng các lớp Python) và một mô hình khác để xây dựng các ứng dụng LLM. Superpowers thường đơn giản hơn để thiết lập cho môi trường shell hiện có, trong khi LangChain cung cấp tích hợp Python sâu hơn và một bộ trừu tượng được tạo sẵn phong phú hơn.
H5: Superpowers có phù hợp cho các hệ thống hội thoại đa tác nhân phức tạp không? A5: Mặc dù Superpowers có thể điều phối các tác nhân, sức mạnh cốt lõi của nó không nằm ở các cuộc hội thoại đa tác nhân phức tạp, mới nổi như AutoGen. Superpowers hướng tới việc xác định việc thực thi tuần tự hoặc có điều kiện các kỹ năng bởi một tác nhân, có thể với sự hướng dẫn của LLM. Đối với các cuộc đối thoại và cộng tác phức tạp giữa các tác nhân, bạn có thể cần khám phá các framework như AutoGen hoặc xây dựng các lớp giao tiếp tùy chỉnh trên Superpowers.
Kết luận #
Superpowers, với sức hút ấn tượng trên GitHub và cách tiếp cận thực tế, cung cấp một framework hấp dẫn cho các nhà phát triển muốn tích hợp khả năng LLM vào quy trình làm việc của họ. Nền tảng dựa trên Shell của nó mang lại sự dễ dàng thiết lập và khả năng di động vô song, làm cho nó trở thành một đối thủ mạnh mẽ để tự động hóa các tác vụ phát triển, tăng cường quy trình CI/CD và xây dựng các tác nhân AI có thể script hóa.
Khả năng định nghĩa các “kỹ năng” mô-đun và điều phối chúng thành các tác nhân thông minh, kết hợp với một phương pháp luận rõ ràng, trao quyền cho các nhà phát triển di chuyển nhanh chóng từ ý tưởng đến triển khai. Mặc dù nó đòi hỏi sự chú ý cẩn thận đến việc cứng rắn hóa sản xuất, đặc biệt là liên quan đến bảo mật và thiết kế kỹ năng mạnh mẽ, các nguyên tắc cốt lõi của nó là vững chắc và tiềm năng ứng dụng trong thế giới thực là đáng kể.
Đối với các nhà phát triển quen thuộc với Shell scripting hoặc cần một giải pháp nhẹ, có khả năng di động cao cho AI tác nhân, Superpowers là một lựa chọn tuyệt vời. Nó hạ thấp rào cản gia nhập để xây dựng các quy trình làm việc phức tạp được hỗ trợ bởi AI.
Sẵn sàng đi sâu hơn và xây dựng các tác nhân thông minh của riêng bạn? Tham gia thảo luận và nhận hỗ trợ từ các nhà phát triển khác trong nhóm Telegram dibi8 tieng Viet.
Nguồn & Đọc thêm:
- Kho lưu trữ GitHub Superpowers: https://github.com/obra/superpowers
- Tài liệu LangChain: https://python.langchain.com/ (tính đến ngày 2026-05-23)
- Tài liệu LlamaIndex: https://www.llamaindex.ai/ (tính đến ngày 2026-05-23)
- Tài liệu AutoGen: https://microsoft.github.io/autogen/ (tính đến ngày 2026-05-23)
Tuyên bố miễn trừ trách nhiệm: Một số liên kết bên trên là liên kết tiếp thị. Nếu bạn đăng ký qua các liên kết này, dibi8.com có thể nhận hoa hồng mà bạn không tốn thêm chi phí. Giúp duy trì trang web và nội dung miễn phí.
💬 Bình luận & Thảo luận