CrewAI: Xây dựng đội AI Multi-Agent với 51K+ Star — Hướng dẫn thiết lập đầy đủ 2026

CrewAI (crewAIInc/crewAI) là framework Python để điều phối các AI agent tự chủ dựa trên vai trò. Tương thích với OpenAI, Anthropic, Ollama, LangChain và LlamaIndex. Bao gồm cài đặt, vai trò agent, luồng công việc, triển khai production và benchmark.

  • ⭐ 51759
  • MIT
  • Cập nhật 2026-05-19

{{< resource-info >}}

Cách cài đặt CrewAI, cấu hình vai trò agent, kết nối tác vụ và triển khai hệ thống multi-agent production-ready trong vòng 30 phút.

Giới thiệu #

Xây dựng một agent LLM đơn lẻ là điều đơn giản. Điều phối năm agent nghiên cứu, viết, chỉnh sửa, kiểm tra sự kiện và xuất bản nội dung mà không chồng chéo lẫn nhau là một vấn đề hoàn toàn khác. CrewAI giải quyết điều này bằng mô hình điều phối dựa trên vai trò, cho phép lập trình viên xác định các agent chuyên biệt, giao tác vụ và chạy chúng như một đội được phối hợp. Với hơn 51,759 sao trên GitHub và 318 ngườ đóng góp, CrewAI đã trở thành framework Python hàng đầu cho việc cộng tác multi-agent vào năm 2026. Hướng dẫn này sẽ đi qua cách cài đặt CrewAI, cấu hình crew đầu tiên của bạn và triển khai lên production với cấu hình thực tế, benchmark và các đánh đổi trung thực.

CrewAI là gì? #

CrewAI là framework Python mã nguồn mở để điều phối các AI agent tự chủ dựa trên vai trò, hoạt động cộng tác trên các tác vụ phức tạp. Nó cung cấp hai khái niệm trừu tượng cốt lõi: Crews (đội các agent với vai trò, mục tiêu và câu chuyện nền được xác định) và Flows (luồng công việc dựa trên sự kiện kết nối nhiều crew với logic có điều kiện và quản lý trạng thái). Khác với prompt LLM đơn lẻ, các agent CrewAI có thể phân công công việc, sử dụng công cụ và tạo đầu ra có cấu trúc thông qua thực thi tuần tự, phân cấp hoặc song song.

CrewAI hoạt động như thế nào #

Kiến trúc của CrewAI tách biệt định nghĩa agent khỏi logic điều phối:

CrewAI Logo

Các thành phần cốt lõi:

Thành phầnMục đíchFile cấu hình
AgentNgườ làm việc AI dựa trên vai trò với mục tiêu, câu chuyện nền và công cụagents.yaml
TaskĐơn vị công việc được giao cho agent với đầu ra mong đợitasks.yaml
CrewĐội agent thực thi tác vụ thông qua quy trình được định nghĩacrew.py
FlowLuồng công việc dựa trên sự kiện kết nối nhiều crew với quản lý trạng tháiflow.py
ToolKhả năng bên ngoài (tìm kiếm, API, tính toán)tools/
ProcessChiến lược thực thi: tuần tự, phân cấp hoặc song songcrew.py

CrewAI Architecture

Luồng thực thi:

  1. Flow nhận đầu vào và khởi tạo trạng thái
  2. Tác vụ được gửi đến agent dựa trên loại quy trình
  3. Agent thực thi tác vụ, tùy chọn sử dụng công cụ
  4. Đầu ra tác vụ cung cấp ngữ cảnh cho các tác vụ tiếp theo
  5. Kết quả cuối cùng được trả về với chỉ số sử dụng token

Sơ đồ trên thể hiện kiến trúc kép của CrewAI: Crews xử lý cộng tác agent trong một workflow đơn, còn Flows cung cấp xương sống dựa trên sự kiện để chuỗi hóa nhiều crew với quản lý trạng thái và định tuyến có điều kiện.

Cài đặt & Thiết lập #

Yêu cầu trước #

CrewAI yêu cầu Python 3.10–3.13 và API key từ ít nhất một nhà cung cấp LLM.

# Kiểm tra phiên bản Python
python --version  # Phải là 3.10, 3.11, 3.12, hoặc 3.13

# Cài đặt uv (trình quản lý gói được khuyến nghị)
curl -LsSf https://astral.sh/uv/install.sh | sh

Cài đặt CrewAI #

# Cài đặt framework CrewAI core
uv pip install crewai

# Hoặc với gói công cụ tùy chọn
uv pip install 'crewai[tools]'

# Xác minh cài đặt
crewai version

Tạo dự án mới #

# Tạo khung dự án CrewAI mới
crewai create crew research_crew

# Di chuyển vào thư mục dự án
cd research_crew

# Cài đặt các phụ thuộc dự án
crewai install

Cấu trúc dự án được tạo:

research_crew/
├── .gitignore
├── pyproject.toml
├── README.md
├── .env
└── src/
    └── research_crew/
        ├── __init__.py
        ├── main.py
        ├── crew.py
        ├── config/
        │   ├── agents.yaml
        │   └── tasks.yaml
        └── tools/
            ├── __init__.py
            └── custom_tool.py

Cấu hình biến môi trường #

# .env — thêm file này vào .gitignore!
OPENAI_API_KEY=sk-your-openai-key-here
SERPER_API_KEY=your-serper-api-key

Với LLM cục bộ qua Ollama (không cần API key):

# Tải model cục bộ
ollama pull llama3.1

# Trong cấu hình agent, sử dụng: ollama/llama3.1

Xác định Agent đầu tiên của bạn #

Chỉnh sửa src/research_crew/config/agents.yaml để xác định các agent dựa trên vai trò:

# src/research_crew/config/agents.yaml

researcher:
  role: >
    Senior Research Analyst
  goal: >
    Conduct thorough research on {topic} and gather
    comprehensive, accurate, and up-to-date information.
  backstory: >
    You are a seasoned research analyst with 15 years of
    experience in technology analysis. You find obscure but
    critical data points and synthesize complex information.
  llm: openai/gpt-4o
  max_iter: 15
  verbose: true

writer:
  role: >
    Technical Content Writer
  goal: >
    Transform research findings on {topic} into a
    well-structured, engaging article.
  backstory: >
    You are an award-winning technical writer who excels at
    making complex topics accessible without sacrificing accuracy.
  llm: openai/gpt-4o
  max_iter: 10
  verbose: true

editor:
  role: >
    Senior Content Editor
  goal: >
    Review and polish the article about {topic} to ensure
    factual accuracy, grammar, and readability.
  backstory: >
    You are a meticulous editor with a sharp eye for factual
    errors and logical inconsistencies.
  llm: openai/gpt-4o-mini
  max_iter: 8
  verbose: true

Các tùy chọn cấu hình chính cho mỗi agent:

Tham sốMô tảVí dụ
roleChức danh và chức năng của agentSenior Research Analyst
goalMục tiêu agent cần đạt đượcNghiên cứu {topic}
backstoryNgữ cảnh định hình hành vi của agentKinh nghiệm và tính cách
llmMô hình LLM qua LiteLLMopenai/gpt-4o
max_iterSố vòng lặp suy luận tối đa mỗi tác vụ15
verboseIn quá trình suy nghĩ ra consoletrue
allow_delegationCó thể phân công cho agent khácfalse

Xác định tác vụ và kết nối Crew #

Cấu hình tác vụ #

Chỉnh sửa src/research_crew/config/tasks.yaml:

# src/research_crew/config/tasks.yaml

research_task:
  description: >
    Research the topic: {topic}. Gather at least 10 key data points
    from multiple authoritative sources. Include statistics,
    expert opinions, and recent developments.
  expected_output: >
    A structured research brief with 10+ data points, source
    citations, and a summary of key findings.
  agent: researcher

writing_task:
  description: >
    Using the research brief provided, write a comprehensive
    technical article about {topic}. Target 1500 words.
    Use clear headings, examples, and engaging prose.
  expected_output: >
    A markdown-formatted article with introduction, body
    sections, and conclusion. Minimum 1500 words.
  agent: writer
  context: [research_task]

editing_task:
  description: >
    Edit the article for clarity, grammar, factual accuracy,
    and readability. Ensure all claims are supported by the
    research brief.
  expected_output: >
    A polished final article ready for publication.
    Include an editor's note summarizing changes made.
  agent: editor
  context: [writing_task]
  output_file: output/final_article.md

Định nghĩa Crew #

Kết nối agent và tác vụ trong src/research_crew/crew.py:

# src/research_crew/crew.py
from crewai import Agent, Crew, Process, Task
from crewai.project import CrewBase, agent, crew, task

@CrewBase
class ResearchCrew:
    """Research crew for producing high-quality articles."""

    agents_config = "config/agents.yaml"
    tasks_config = "config/tasks.yaml"

    @agent
    def researcher(self) -> Agent:
        return Agent(
            config=self.agents_config["researcher"],
            tools=[],
            allow_delegation=False,
        )

    @agent
    def writer(self) -> Agent:
        return Agent(
            config=self.agents_config["writer"],
            tools=[],
            allow_delegation=False,
        )

    @agent
    def editor(self) -> Agent:
        return Agent(
            config=self.agents_config["editor"],
            tools=[],
            allow_delegation=False,
        )

    @task
    def research_task(self) -> Task:
        return Task(config=self.tasks_config["research_task"])

    @task
    def writing_task(self) -> Task:
        return Task(config=self.tasks_config["writing_task"])

    @task
    def editing_task(self) -> Task:
        return Task(
            config=self.tasks_config["editing_task"],
            output_file="output/final_article.md",
        )

    @crew
    def crew(self) -> Crew:
        return Crew(
            agents=self.agents,
            tasks=self.tasks,
            process=Process.sequential,
            verbose=True,
        )

Điểm vào và thực thi #

# src/research_crew/main.py
#!/usr/bin/env python
from research_crew.crew import ResearchCrew

def run():
    """Run the research crew."""
    inputs = {
        "topic": "AI coding assistants in 2026"
    }
    result = ResearchCrew().crew().kickoff(inputs=inputs)
    print("\n\n========== FINAL OUTPUT ==========\n")
    print(result.raw)
    print(f"\nToken usage: {result.token_usage}")

if __name__ == "__main__":
    run()

Chạy crew:

# Thực thi qua CLI
crewai run

# Hoặc chạy trực tiếp bằng Python
python -m research_crew.main

Đầu ra mong đợi:

[2026-05-20 10:23:15] Working Agent: Senior Research Analyst
[2026-05-20 10:23:15] Starting Task: Research the topic: AI coding assistants in 2026...
...
[2026-05-20 10:24:02] Working Agent: Technical Content Writer
[2026-05-20 10:24:02] Starting Task: Using the research brief provided...
...
[2026-05-20 10:25:18] Working Agent: Senior Content Editor
...
========== FINAL OUTPUT ==========
[Bài viết đã chỉnh sửa hoàn chỉnh xuất hiện ở đây]
Token usage: UsageMetrics(total_tokens=18432, prompt_tokens=14201, ...)

Cách sử dụng nâng cao: Flows, công cụ và mẫu production #

Sử dụng CrewAI Flows cho điều phối phức tạp #

Flows cung cấp điều phối dựa trên sự kiện với quản lý trạng thái:

# src/research_crew/flow.py
from crewai.flow.flow import Flow, listen, start
from pydantic import BaseModel
from research_crew.crew import ResearchCrew

class ArticleState(BaseModel):
    topic: str = ""
    word_count: int = 0
    final_article: str = ""

class ArticleFlow(Flow[ArticleState]):

    @start()
    def get_topic(self):
        self.state.topic = "Multi-agent AI frameworks in 2026"
        print(f"Starting flow for topic: {self.state.topic}")

    @listen(get_topic)
    def run_research_crew(self):
        result = ResearchCrew().crew().kickoff(
            inputs={"topic": self.state.topic}
        )
        self.state.final_article = result.raw
        self.state.word_count = len(result.raw.split())

    @listen(run_research_crew)
    def validate_output(self):
        if self.state.word_count < 1000:
            print("WARNING: Article too short, triggering revision")
        else:
            print(f"Article validated: {self.state.word_count} words")
            with open("output/article.md", "w") as f:
                f.write(self.state.final_article)

if __name__ == "__main__":
    ArticleFlow().kickoff()

Tạo công cụ tùy chỉnh #

# src/research_crew/tools/custom_tool.py
from crewai.tools import tool
import requests

@tool("Web Search")
def web_search(query: str) -> str:
    """Search the web for information on a given query."""
    response = requests.get(
        "https://serpapi.com/search",
        params={"q": query, "api_key": "${SERPER_API_KEY}"}
    )
    return response.json()["organic_results"][0]["snippet"]

Đăng ký công cụ trong crew:

# Trong crew.py, import và gắn kết
from research_crew.tools.custom_tool import web_search

@agent
def researcher(self) -> Agent:
    return Agent(
        config=self.agents_config["researcher"],
        tools=[web_search],  # Gắn công cụ tùy chỉnh
        allow_delegation=False,
    )

Quy trình phân cấp với agent quản lý #

@crew
def crew(self) -> Crew:
    return Crew(
        agents=self.agents,
        tasks=self.tasks,
        process=Process.hierarchical,
        manager_llm="openai/gpt-4o",
        verbose=True,
    )

Triển khai production với FastAPI #

# api_server.py — Triển khai production
from fastapi import FastAPI, BackgroundTasks
from pydantic import BaseModel
from research_crew.crew import ResearchCrew
import uuid

app = FastAPI(title="CrewAI Research API")
jobs: dict = {}

class CrewRequest(BaseModel):
    topic: str

@app.post("/research")
async def start_research(request: CrewRequest, background: BackgroundTasks):
    job_id = str(uuid.uuid4())
    jobs[job_id] = {"status": "queued", "topic": request.topic}
    background.add_task(
        lambda: run_crew(job_id, request.topic)
    )
    return {"job_id": job_id, "status": "queued"}

@app.get("/status/{job_id}")
async def get_status(job_id: str):
    return jobs.get(job_id, {"error": "Job not found"})

def run_crew(job_id: str, topic: str):
    jobs[job_id]["status"] = "running"
    result = ResearchCrew().crew().kickoff(inputs={"topic": topic})
    jobs[job_id]["status"] = "completed"
    jobs[job_id]["result"] = result.raw

# Chạy: uvicorn api_server:app --host 0.0.0.0 --port 8000

Benchmark / Trường hợp sử dụng thực tế #

Benchmark hiệu năng #

Biểu đồ benchmark CrewAI — so sánh hiệu quả token giữa các framework multi-agent, dữ liệu từ benchmark cộng đồng tháng 5/2026

So sánh CrewAI với các framework khác trên tác vụ nghiên cứu multi-agent tiêu chuẩn:

Chỉ sốCrewAIAutoGenLangGraphAgno
Thờ gian đến lần chạy đầu tiên~15 phút~30 phút~60 phút~20 phút
Chi phí token (chuẩn hóa)1.5–2x5–6x1x cơ sở1.2x
Sao GitHub (Tháng 5/2026)51,759~38,000~28,000~15,000
Dòng code hello-world~20~40~50~25
Checkpoint tích hợp sẵnMột phầnKhôngCó (Postgres/Redis)Không
Hỗ trợ async
Hỗ trợ LLM cục bộ (Ollama)

Các trường hợp sử dụng thực tế #

Báo cáo nghiên cứu tự động: Một startup fintech sử dụng CrewAI để tạo báo cáo phân tích thị trường hàng ngày. Agent nghiên cứu thu thập dữ liệu tài chính, agent phân tích xu hướng và agent viết tạo báo cáo cuối cùng — tất cả trước 8 giờ sáng.

Pipeline sản xuất nội dung: Một công ty media vận hành crew 4 agent cho bài blog: nghiên cứu → viết → chỉnh sửa → tối ưu hóa SEO. Sản lượng tăng từ 3 lên 12 bài mỗi tuần.

Tự động hóa review code: Một team SaaS sử dụng CrewAI để phân loại pull request. Một agent tóm tắt thay đổi, một agent khác kiểm tra pattern bảo mật và một agent thứ ba tạo bình luận review.

Tích hợp với các công cụ phổ biến #

OpenAI / Anthropic / Google Gemini #

CrewAI sử dụng LiteLLM để định tuyến model độc lập nhà cung cấp:

# agents.yaml — chọn model cho mỗi agent
researcher:
  role: Research Analyst
  llm: anthropic/claude-sonnet-4-20250514
  # hoặc: openai/gpt-4o
  # hoặc: gemini/gemini-2.0-flash

Ollama (LLM cục bộ) #

researcher:
  role: Research Analyst
  llm: ollama/llama3.1
  # Yêu cầu: ollama pull llama3.1

Công cụ LangChain #

# Sử dụng công cụ LangChain trong CrewAI
from langchain_community.tools import WikipediaQueryRun
from langchain_community.utilities import WikipediaAPIWrapper
from crewai import Agent

wiki_tool = WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper())

agent = Agent(
    role="Researcher",
    goal="Research topics thoroughly",
    tools=[wiki_tool],  # Công cụ LangChain hoạt động trực tiếp
    verbose=True,
)

LlamaIndex (Tích hợp RAG) #

from llama_index.core import VectorStoreIndex, SimpleDirectoryReader
from crewai.tools import tool

@tool("Document Search")
def document_search(query: str) -> str:
    """Search internal documents for relevant information."""
    documents = SimpleDirectoryReader("./docs").load_data()
    index = VectorStoreIndex.from_documents(documents)
    query_engine = index.as_query_engine()
    return str(query_engine.query(query))

Triển khai Docker #

# Dockerfile
FROM python:3.12-slim

WORKDIR /app
COPY pyproject.toml .
COPY src/ ./src/

RUN pip install crewai crewai-tools
RUN crewai install

EXPOSE 8000

CMD ["crewai", "run"]
# docker-compose.yml
version: "3.8"
services:
  crewai:
    build: .
    env_file: .env
    volumes:
      - ./output:/app/output
    ports:
      - "8000:8000"

So sánh với các giải pháp thay thế #

Tính năngCrewAIAutoGenLangGraphAgno
Mô hình điều phốiCrew dựa trên vai tròAgent hội thoạiĐồ thị trạng tháiAgent nhẹ
Tốc độ prototype15 phút (nhanh nhất)30 phút60 phút (dốc nhất)20 phút
Hiệu quả tokenTrung bình (1.5–2x)Chi phí cao nhất (5–6x)Tốt nhất (1x)Tốt (1.2x)
Checkpoint productionMột phần + CrewAI+Không tích hợpCó (Postgres/Redis)Không
Khả năng quan sátCrewAI+ (đang phát triển)OTEL cơ bảnLangSmith (sâu)Tối thiểu
Độ khó họcThấpTrung bìnhCaoThấp
Đào bảo trìTích cựcChế độ bảo trìTích cựcTích cực
Phù hợp nhấtPrototype nhanh, luồng dựa trên vai tròNghiên cứu, agent viết codeLuồng production có trạng tháiTác vụ agent đơn giản

Hạn chế / Đánh giá trung thực #

CrewAI KHÔNG phù hợp cho:

  1. Máy trạng thái phức tạp: Nếu luồng công việc cần đồ thị tuần hoàn với phân nhánh và time-travel debugging, mô hình đồ thị rõ ràng của LangGraph phù hợp hơn.

  2. Production khối lượng cực cao: Checkpointing của CrewAI là một phần so với khả năng duy trì trạng thái đầy đủ của LangGraph. Với hàng nghìn lần chạy hàng ngày cần audit trail, LangGraph được thử nghiệm kỹ hơn.

  3. Ngân sách nhạy cảm với token: Các agent của CrewAI mặc định khá dài dòng. Trên các tác vụ tương đương, dự kiến tiêu thụ token gấp 1.5–2 lần LangGraph. Dự trù $100–$500/tháng cho khối lượng production trung bình.

  4. Yêu cầu độ trễ thực thờ: Điều phối multi-agent tăng độ trễ vốn có. Một crew 3-agent tuần tự với GPT-4o mất 45–90 giây. Không phù hợp cho yêu cầu phản hồi dưới 1 giây.

  5. Khả năng quan sát sâu: CrewAI+ cung cấp giám sát nhưng LangSmith cung cấp khả năng truy vết sâu hơn với tính toán token theo node và khả năng replay.

Câu hỏi thường gặp #

Q: CrewAI yêu cầu phiên bản Python nào? A: CrewAI yêu cầu Python 3.10 đến 3.13. Không hỗ trợ Python 3.9 trở xuống. Sử dụng pyenv để quản lý nhiều phiên bản Python trên hệ thống.

Q: Làm thế nào cài đặt CrewAI với hỗ trợ LLM cục bộ? A: Cài đặt CrewAI bình thường bằng pip install crewai, sau đó cài đặt Ollama riêng. Trong cấu hình agent, đặt llm: ollama/llama3.1. Không cần API key cho suy luận cục bộ.

Q: CrewAI có thể hoạt động với model không phải OpenAI không? A: Có. CrewAI hỗ trợ mọi model tương thích LiteLLM bao gồm Anthropic Claude, Google Gemini, Azure OpenAI, DeepSeek, Mistral và model cục bộ qua Ollama. Sử dụng định dạng provider/model-name trong cấu hình agent.

Q: Sự khác biệt giữa CrewAI Crews và Flows là gì? A: Crews là các team agent cộng tác trên tác vụ thông qua các quy trình tuần tự, phân cấp hoặc song song. Flows là luồng công việc dựa trên sự kiện kết nối nhiều crew với logic có điều kiện, quản lý trạng thái qua Pydantic models và phân nhánh. Dùng Crews cho cộng tác đơn luồng và Flows cho pipeline đa giai đoạn.

Q: Chi phí chạy crew CrewAI trong production là bao nhiêu? A: Với crew 3-agent sử dụng GPT-4o chạy 100 lần/ngày, dự kiến chi phí API LLM khoảng $100–$300/tháng. Sử dụng model rẻ hơn như GPT-4o-mini cho tác vụ đơn giản có thể giảm chi phí 40–60%. CrewAI miễn phí và mã nguồn mở (giấy phép MIT).

Q: Làm thế nào debug agent CrewAI cho kết quả kém? A: Đặt verbose: true trên agent để xem quá trình suy nghĩ. Dùng max_iter giới hạn vòng lặp suy luận. Thêm schema đầu ra có cấu trúc để ép format. Xem lại chỉ số sử dụng token sau mỗi lần chạy. Với vấn đề dai dẳng, đơn giản hóa mô tả tác vụ và xác minh cấu hình công cụ.

Q: CrewAI đã sẵn sàng production cho doanh nghiệp chưa? A: Với khối lượng production vừa và nhỏ, có. CrewAI+ thêm tính năng quan sát và triển khai được quản lý từ $99/tháng. Với khối lượng lớn hoặc cần audit nghiêm ngặt, cân nhắc sử dụng CrewAI với checkpointing tùy chỉnh hoặc đánh giá LangGraph.

Kết luận #

CrewAI mang lại con đường nhanh nhất từ ý tưởng đến hệ thống multi-agent hoạt động. Tính trừu tượng dựa trên vai trò — các agent với vai trò, mục tiêu và câu chuyện nền được xác định cộng tác hoàn thành tác vụ — ánh xạ rõ ràng với cách team thực sự làm việc. Trong vòng 30 phút, bạn có thể cài đặt CrewAI, tạo khung dự án, xác định agent và tác vụ, và chạy crew đầu tiên. Cho production, thêm Flows cho điều phối dựa trên sự kiện, FastAPI cho endpoint HTTP và Docker cho triển khai.

Các hành động bắt đầu ngay hôm nay:

  1. Cài đặt CrewAI: pip install crewai
  2. Tạo khung dự án đầu tiên: crewai create crew my_project
  3. Xác định 2–3 agent với vai trò riêng biệt trong agents.yaml
  4. Chạy crew với crewai run
  5. Tham gia cộng đồng CrewAI để được hỗ trợ và tìm hiểu các mẫu nâng cao

Tham gia thảo luận trên Telegram: Tham gia cộng đồng dibi8.com để nhận mẹo multi-agent AI và chiến lược triển khai production.

Hosting Và Hạ Tầng Được Đề Xuất #

Trước khi triển khai các công cụ trên vào production, bạn cần hạ tầng vững chắc. Hai lựa chọn dibi8 đang dùng:

  • DigitalOcean — Credit miễn phí $200 trong 60 ngày, 14+ khu vực toàn cầu. Lựa chọn mặc định cho dev chạy AI tools open source.
  • HTStack — VPS Hong Kong, độ trễ thấp khi truy cập từ Trung Quốc. Cùng IDC đang host dibi8.com.

Liên kết tiếp thị — không tăng chi phí của bạn, giúp dibi8.com hoạt động.

Nguồn & Tài liệu tham khảo #

Tiết lộ: Bài viết này chứa liên kết affiliate. Nếu bạn nhấp vào liên kết và thực hiện giao dịch mua, chúng tôi có thể nhận được hoa hồng mà không phát sinh thêm chi phí cho bạn. Điều này giúp hỗ trợ nghiên cứu kỹ thuật độc lập, thử nghiệm và tạo nội dung giáo dục miễn phí của chúng tôi. Tất cả các khuyến nghị đều dựa trên đánh giá riêng của chúng tôi về các công cụ.

💬 Bình luận & Thảo luận