Cài đặt môi trường phát triển và công cụ CLI
Bước đầu tiên là chuẩn bị hệ điều hành Linux (Ubuntu 22.04 hoặc Debian 12) với đầy đủ các công cụ cần thiết để phát triển AI Agent. Chúng ta cần Python 3.11+, Docker Engine, và các công cụ quản lý Kubernetes như kubectl.
Cập nhật kho lưu trữ và cài đặt các gói hệ thống cơ bản để đảm bảo tính tương thích.
sudo apt update && sudo apt install -y curl wget git unzip python3-pip python3-venv build-essential
Kết quả mong đợi: Quá trình cài đặt hoàn tất không lỗi, các gói phần mềm đã được cập nhật.
Cài đặt Docker Engine chính thức từ kho của Docker để đảm bảo phiên bản mới nhất, tránh dùng bản cũ trong kho mặc định của Ubuntu.
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $USER
newgrp docker
Kết quả mong đợi: Docker Engine được cài đặt, người dùng hiện tại được thêm vào nhóm docker, không cần sudo khi chạy lệnh docker.
Cài đặt kubectl (Kubernetes CLI) để điều khiển cluster từ máy phát triển.
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
chmod +x kubectl
sudo mv kubectl /usr/local/bin/
Kết quả mong đợi: Lệnh kubectl chạy được và trả về phiên bản hiện tại.
Cài đặt Helm (Package manager cho Kubernetes) để triển khai các ứng dụng phức tạp như Ingress Controller hay Monitoring sau này.
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | sudo bash
Kết quả mong đợi: Lệnh helm được cài đặt, kiểm tra bằng helm version trả về thông tin phiên bản.
Verify toàn bộ môi trường CLI đã sẵn sàng.
python3 --version
docker --version
kubectl version --client
helm version
Kết quả mong đợi: Tất cả các lệnh trên đều trả về phiên bản mà không báo lỗi "command not found".
Kiến trúc AI Agent: LangGraph và CrewAI
Hiểu rõ sự khác biệt giữa LangGraph và CrewAI là chìa khóa để thiết kế hệ thống đúng. LangGraph tập trung vào việc xây dựng luồng điều khiển (control flow) dạng đồ thị có chu trình (cyclic graph), cho phép Agent tự quyết định trạng thái tiếp theo. Trong khi đó, CrewAI cung cấp một lớp trừu tượng cao hơn để định nghĩa vai trò (Role), mục tiêu (Goal) và công cụ (Tools) cho một nhóm Agent làm việc song song hoặc tuần tự.
Tạo môi trường ảo Python để cài đặt các thư viện AI, tách biệt khỏi hệ thống.
python3 -m venv venv
source venv/bin/activate
Kết quả mong đợi: Shell prompt xuất hiện dấu (venv), chỉ thị môi trường ảo đang hoạt động.
Cài đặt các thư viện cốt lõi: LangChain, LangGraph, và CrewAI.
pip install langchain langgraph crewai
Kết quả mong đợi: Các thư viện được cài đặt thành công, không có cảnh báo xung đột phiên bản.
Khám phá cấu trúc code cơ bản của LangGraph để hiểu cách định nghĩa State và Node.
cat > /tmp/langgraph_structure.py
Kết quả mong đợi: File Python được tạo, có thể chạy lệnh python /tmp/langgraph_structure.py mà không lỗi cú pháp.
Khám phá cấu trúc code cơ bản của CrewAI để hiểu cách định nghĩa Agent và Task.
cat > /tmp/crewai_structure.py
Kết quả mong đợi: File Python được tạo, cú pháp đúng chuẩn CrewAI.
Verify sự khác biệt: LangGraph yêu cầu bạn tự vẽ đồ thị luồng (edges/nodes), còn CrewAI tự động hóa luồng dựa trên định nghĩa Task và Agent.
grep -n "StateGraph" /tmp/langgraph_structure.py
grep -n "Crew" /tmp/crewai_structure.py
Kết quả mong đợi: LangGraph xuất hiện class StateGraph, CrewAI xuất hiện class Crew.
Thiết lập Kubernetes Cluster mẫu (Kind)
Vì không phải lúc nào cũng có cluster Kubernetes thực tế, chúng ta sẽ sử dụng Kind (Kubernetes in Docker) để tạo một cluster mô phỏng ngay trên máy phát triển. Đây là tiêu chuẩn ngành để test deployment trước khi lên production.
Cài đặt Kind CLI để tạo và quản lý các cluster Docker container.
curl -Lo ./kind https://kind.sigs.k8s.io/dl/v0.20.0/kind-linux-amd64
chmod +x ./kind
sudo mv ./kind /usr/local/bin/kind
Kết quả mong đợi: Lệnh kind version chạy được.
Tạo file cấu hình cluster với 1 node control-plane và 1 node worker để mô phỏng kiến trúc phân tán.
cat > /tmp/kind-config.yaml
Kết quả mong đợi: File YAML được tạo với cấu hình node và ánh xạ cổng.
Khởi tạo cluster Kind dựa trên file cấu hình vừa tạo.
kind create cluster --config /tmp/kind-config.yaml
Kết quả mong đợi: Cluster được tạo thành công, Docker container của node control-plane và worker xuất hiện.
Cấu hình kubectl để trỏ đến cluster Kind vừa tạo.
kind get kubeconfig --name ai-agent-cluster > ~/.kube/config
Kết quả mong đợi: File ~/.kube/config được cập nhật.
Verify cluster hoạt động và node đã sẵn sàng.
kubectl cluster-info
kubectl get nodes
Kết quả mong đợi: kubectl cluster-info trả về địa chỉ API Server, kubectl get nodes trả về trạng thái "Ready" cho cả control-plane và worker.
Luồng dữ liệu: Từ Agent ra Container và ngược lại
Trong kiến trúc này, Python Agent chạy bên trong Docker Container trên Kubernetes Pod. Luồng dữ liệu bao gồm: Input (User Request) -> API Gateway -> Pod (Agent) -> LLM/Tools -> Output (Response). Chúng ta cần đảm bảo container có thể truy cập internet (để gọi LLM API) và nhận request từ bên ngoài.
Tạo file Dockerfile tối ưu cho ứng dụng Python Agent, sử dụng image nhẹ Alpine hoặc Slim để giảm thời gian build và kích thước.
cat > /tmp/Dockerfile
Kết quả mong đợi: File Dockerfile được tạo với các bước chuẩn cho AI Agent.
Tạo file requirements.txt chứa các thư viện cần thiết cho Agent và Web Server.
cat > /tmp/requirements.txt
Kết quả mong đợi: File yêu cầu thư viện được tạo.
Triển khai ứng dụng mẫu lên Kubernetes để xác minh luồng dữ liệu. Tạo một Deployment chạy container Agent.
cat > /tmp/agent-deployment.yaml
Kết quả mong đợi: File YAML Deployment được tạo, định nghĩa container chạy Python script đơn giản để test.
Áp dụng cấu hình Deployment lên cluster.
kubectl apply -f /tmp/agent-deployment.yaml
Kết quả mong đợi: Deployment được tạo thành công (deployment "ai-agent-deployment" created).
Tạo Service để expose Pod ra bên ngoài, cho phép API Gateway hoặc User gọi vào.
cat > /tmp/agent-service.yaml
Kết quả mong đợi: File YAML Service được tạo.
Triển khai Service lên cluster.
kubectl apply -f /tmp/agent-service.yaml
Kết quả mong đợi: Service được tạo thành công.
Verify luồng dữ liệu: Kiểm tra trạng thái Pod và xem log để đảm bảo Agent chạy đúng và nhận được biến môi trường.
kubectl get pods
kubectl get svc
kubectl logs -l app=ai-agent
Kết quả mong đợi: Pod ở trạng thái Running, Service có NodePort được gán, log hiển thị "Agent is starting..." và "Environment variables loaded."
Điều hướng series:
Mục lục: Series: Xây dựng nền tảng AI Agent tự động hóa với LangGraph, CrewAI và Kubernetes
Phần 2: Xây dựng Agent đơn giản với LangGraph và LLM »