Làm thế nào để tự động hóa thiết kế banner quảng cáo bằng Stable Diffusion trong 5 phút?

Tự động hoá thiết kế banner quảng cáo bằng Stable Diffusion

Workflow từ ảnh chụp sản phẩm thô đến 1.000 biến thể banner chuẩn brand identity trong 5 phút

⚡ Mục tiêu: Giảm thời gian chuẩn bị nội dung sáng tạo từ vài ngày xuống dưới 5 phút, đồng thời duy trì tính nhất quán thương hiệu (brand identity) cho hơn 10.000 SKU trong một mùa bán hàng.


1. Tổng quan quy trình (Workflow)

┌─────────────────────┐   1️⃣   ┌───────────────────────┐
│ Ảnh chụp sản phẩm   │──────►│  Tiền xử lý (Resize,   │
│ RAW (RAW)           │       │  Color‑correction)    │
└─────────────────────┘        └───────────────────────┘
          │                               │
          ▼                               ▼
   2️⃣  ┌─────────────────────┐   3️⃣   ┌───────────────────────┐
   │  Prompt Generator   │──────►│  Stable Diffusion API │
   │  (Auto‑prompt)      │       │  (txt2img)            │
   └─────────────────────┘        └───────────────────────┘
          │                               │
          ▼                               ▼
   4️⃣  ┌─────────────────────┐   5️⃣   ┌───────────────────────┐
   │  Post‑process       │──────►│  Brand‑filter (SVG,    │
   │  (Upscale, Water‑  │       │  Color‑palette)       │
   │  mark, Text)       │       └───────────────────────┘
   └─────────────────────┘                │
          │                               ▼
          ▼                        6️⃣  ┌───────────────────────┐
   7️⃣  ┌─────────────────────┐──────►│  CDN & Cache (Fastly) │
   │  Publish to CMS    │       └───────────────────────┘
   └─────────────────────┘
  • Thời gian trung bình: 5 phút / 1.000 banner
  • Tốc độ tạo: 0,3 giây / banner (GPU A100, batch size = 4)

2. Kiến trúc công nghệ (Tech Stack)

Thành phần Lựa chọn A (Open‑source) Lựa chọn B (Managed Cloud) Lựa chọn C (Hybrid) Lựa chọn D (Enterprise)
Compute Docker + NVIDIA‑Docker (GPU 1×A100) AWS SageMaker (ml.g5.2xlarge) On‑premise RTX 3090 + Azure VM (GPU B2) Google Vertex AI (A100)
Orchestration Docker‑Compose + Traefik Kubernetes (EKS) Nomad + Consul Anthos
Model Stable Diffusion 2.1 (fp16) Stable Diffusion 2.1 (AMP) Stable Diffusion 2.1 (custom LoRA) Stable Diffusion XL (Enterprise)
Prompt Engine LangChain + OpenAI‑gpt‑3.5‑turbo AWS Bedrock (Claude) HuggingFace Transformers Azure OpenAI (GPT‑4)
Storage MinIO (S3‑compatible) Amazon S3 (Standard) Azure Blob + On‑prem NAS Google Cloud Storage (Coldline)
CDN Cloudflare Workers + KV Amazon CloudFront Fastly Akamai
CI/CD GitHub Actions GitLab CI Jenkins X Azure DevOps
Monitoring Prometheus + Grafana Datadog New Relic Splunk
Security Open Policy Agent (OPA) AWS IAM + GuardDuty HashiCorp Vault Palo Alto Prisma

🛡️ Lưu ý: Đối với môi trường production ở VN/SEA, lựa chọn B (Managed Cloud) giảm 30 % chi phí vận hành so với A, đồng thời đáp ứng SLA ≥ 99.9 % theo Gartner 2024.


3. Chi phí chi tiết 30 tháng

Hạng mục Năm 1 Năm 2 Năm 3 Tổng (30 tháng)
GPU (A100) thuê 12 000 USD 9 600 USD 7 200 USD 28 800 USD
Cloud Storage (S3) 1 200 USD 1 080 USD 960 USD 3 240 USD
CDN (Fastly) 2 400 USD 2 160 USD 1 920 USD 6 480 USD
Prompt Engine (API) 3 600 USD 3 240 USD 2 880 USD 9 720 USD
CI/CD (GitHub Actions) 720 USD 648 USD 576 USD 1 944 USD
Monitoring (Datadog) 1 800 USD 1 620 USD 1 440 USD 4 860 USD
Tổng chi phí 21 720 USD 18 348 USD 15 276 USD 55 344 USD

⚡ Tính toán:
ROI = (Tổng lợi ích – Chi phí đầu tư) / Chi phí đầu tư × 100%
Giả định: Tăng doanh thu 15 % nhờ tốc độ ra mắt nhanh, lợi nhuận gộp trung bình 12 % trên 100 triệu USD doanh thu năm đầu → Lợi ích ≈ 1 800 000 USD.
ROI = (1 800 000 – 55 344) / 55 344 × 100% ≈ 3 155 %.


4. Timeline triển khai (30 ngày)

Giai đoạn Tuần Công việc chính Người chịu trách nhiệm
Phase 1 – Chuẩn bị hạ tầng 1‑2 Cài Docker‑Compose, cấu hình GPU, tạo bucket MinIO DevOps Lead
Phase 2 – Triển khai Model 3‑4 Pull Stable Diffusion 2.1, tối ưu fp16, test inference ML Engineer
Phase 3 – Prompt Engine 5‑6 Xây dựng LangChain pipeline, tích hợp OpenAI API AI‑PM
Phase 4 – API Gateway 7‑8 Deploy FastAPI, Nginx reverse‑proxy, TLS cert Backend Lead
Phase 5 – CI/CD & Monitoring 9‑10 GitHub Actions workflow, Prometheus alerts DevOps
Phase 6 – Integration CMS 11‑12 Plugin cho Shopify/VTEX, webhook publish Integration Engineer
Phase 7 – Kiểm thử & Load‑test 13‑14 JMeter 10k rps, kiểm tra chất lượng ảnh QA Lead
Phase 8 – Go‑live & Transfer 15‑16 Đào tạo nội bộ, bàn giao tài liệu PM

Dependency: Phase 3 phụ thuộc vào Phase 2 hoàn thành; Phase 5 cần Phase 4 đã có endpoint ổn định.


5. Các bước triển khai chi tiết (8 Phase)

Phase 1 – Chuẩn bị hạ tầng

Mục tiêu Danh sách công việc Người chịu trách nhiệm Thời gian (tuần) Dependency
Đảm bảo môi trường GPU sẵn sàng 1. Cài Docker‑Engine 20.10
2. Cài NVIDIA‑Docker 2.0
3. Tạo network banner_net
4. Kiểm tra nvidia-smi
DevOps Lead 1
Thiết lập lưu trữ 5. Deploy MinIO (docker‑compose)
6. Tạo bucket raw-images & banners
7. Cấu hình IAM policy
DevOps 1
Cấu hình DNS & TLS 8. Cài Cloudflare DNS
9. Cấp Let’s Encrypt cert via Certbot
Infra Engineer 2

Docker‑Compose mẫu

version: "3.8"
services:
  minio:
    image: minio/minio
    command: server /data
    environment:
      MINIO_ROOT_USER: admin
      MINIO_ROOT_PASSWORD: StrongPass123
    ports:
      - "9000:9000"
    volumes:
      - minio-data:/data
    networks:
      - banner_net

  sd-api:
    image: ghcr.io/stabilityai/stable-diffusion:2.1
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    ports:
      - "8000:8000"
    depends_on:
      - minio
    networks:
      - banner_net

networks:
  banner_net:
    driver: bridge

volumes:
  minio-data:

Phase 2 – Triển khai Model

Mục tiêu Công việc Người Thời gian Dependency
Tối ưu inference 1. Chuyển model sang fp16
2. Sử dụng torch.compile
3. Kiểm tra latency
4. Lưu model dưới /models/sd_v2.1_fp16.pt
ML Engineer 2 Phase 1
Kiểm thử batch 5. Script batch_infer.py (batch = 4)
6. Đánh giá PSNR, SSIM
ML Engineer 2 Phase 2

batch_infer.py

import torch
from diffusers import StableDiffusionPipeline

pipe = StableDiffusionPipeline.from_pretrained(
    "./models/sd_v2.1_fp16.pt",
    torch_dtype=torch.float16,
    revision="fp16"
).to("cuda")

def generate(prompts):
    images = pipe(prompts, num_inference_steps=30, batch_size=4).images
    return images

if __name__ == "__main__":
    prompts = ["a sleek smartphone banner, brand colors #FF6600, minimalistic"]
    outs = generate(prompts)
    for i, img in enumerate(outs):
        img.save(f"output_{i}.png")

Phase 3 – Prompt Engine

Mục tiêu Công việc Người Thời gian Dependency
Tự động sinh prompt 1. Xây dựng prompt_generator.py (LangChain + OpenAI)
2. Định nghĩa template brand (logo, màu, font)
3. Cache prompt trong Redis
AI‑PM 2 Phase 2
API endpoint 4. FastAPI /generate-prompt
5. Validation bằng Pydantic
Backend Lead 2 Phase 3

prompt_generator.py

from langchain.llms import OpenAI
from langchain.prompts import PromptTemplate

template = """Generate a banner prompt for a {product_type} using brand colors {brand_colors},
logo position {logo_pos}, and font {font_style}. Output only the prompt string."""
prompt = PromptTemplate(template=template, input_variables=["product_type","brand_colors","logo_pos","font_style"])

def build_prompt(data):
    llm = OpenAI(model="gpt-3.5-turbo", temperature=0.2)
    return llm.run(prompt.format(**data))

Phase 4 – API Gateway & Nginx

Mục tiêu Công việc Người Thời gian Dependency
Expose Stable Diffusion 1. FastAPI /generate-banner
2. Xác thực JWT
3. Rate‑limit 100 req/min
Backend Lead 2 Phase 3
Reverse‑proxy 1. Nginx config (SSL termination)
2. Load‑balancing tới sd-api
Infra Engineer 1 Phase 4

nginx.conf

http {
    upstream sd_backend {
        server sd-api:8000;
    }

    server {
        listen 443 ssl;
        server_name banner.api.example.com;

        ssl_certificate /etc/letsencrypt/live/banner.api.example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/banner.api.example.com/privkey.pem;

        location / {
            proxy_pass http://sd_backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }

        limit_req zone=req_limit burst=20 nodelay;
    }
}

Phase 5 – CI/CD & Monitoring

Mục tiêu Công việc Người Thời gian Dependency
CI pipeline 1. GitHub Actions workflow build.yml
2. Docker image build & push to ECR
DevOps 1 Phase 1
Monitoring 1. Prometheus scrape sd-api
2. Grafana dashboard “Banner Latency”
3. Alert on latency > 500 ms
SRE 1 Phase 5

.github/workflows/build.yml

name: Build & Deploy
on:
  push:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Set up Docker Buildx
        uses: docker/setup-buildx-action@v2
      - name: Login to Amazon ECR
        uses: aws-actions/amazon-ecr-login@v1
      - name: Build and push
        run: |
          docker build -t ${{ secrets.ECR_REPO }}:latest .
          docker push ${{ secrets.ECR_REPO }}:latest

Phase 6 – Integration CMS (Shopify & VTEX)

Mục tiêu Công việc Người Thời gian Dependency
Plugin Shopify 1. Tạo App “Banner Generator”
2. Webhook product/create → gọi /generate-banner
3. Lưu URL banner vào metafield
Integration Engineer 2 Phase 4
Plugin VTEX 1. Extension “Banner Builder”
2. API call tới FastAPI
3. Cache kết quả trong Redis
Integration Engineer 2 Phase 4

Shopify webhook example (Node.js)

import express from 'express';
import fetch from 'node-fetch';
const app = express();
app.use(express.json());

app.post('/webhook/product', async (req, res) => {
  const { id, title, images } = req.body;
  const promptRes = await fetch('https://banner.api.example.com/generate-prompt', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.API_KEY}` },
    body: JSON.stringify({ product_type: title, brand_colors: "#FF6600", logo_pos: "top-left", font_style: "Roboto" })
  });
  const { prompt } = await promptRes.json();
  const bannerRes = await fetch('https://banner.api.example.com/generate-banner', {
    method: 'POST',
    headers: { 'Content-Type': 'application/json', Authorization: `Bearer ${process.env.API_KEY}` },
    body: JSON.stringify({ prompt })
  });
  const { image_url } = await bannerRes.json();
  // Save to metafield
  await fetch(`https://${process.env.SHOP}.myshopify.com/admin/api/2024-04/products/${id}/metafields.json`, {
    method: 'POST',
    headers: { 'X-Shopify-Access-Token': process.env.ACCESS_TOKEN, 'Content-Type': 'application/json' },
    body: JSON.stringify({ metafield: { namespace: 'banner', key: 'url', value: image_url, type: 'url' } })
  });
  res.sendStatus(200);
});
app.listen(3000);

Phase 7 – Kiểm thử & Load‑test

Mục tiêu Công việc Người Thời gian Dependency
Functional test 1. Postman collection “Banner API”
2. Kiểm tra 100 case đa dạng
QA Lead 1 Phase 6
Load test 1. JMeter script 10k rps
2. Đánh giá CPU/GPU utilization
3. Tối ưu batch size nếu latency > 400 ms
QA Lead 1 Phase 7

JMeter snippet (XML)

<ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Banner Load Test">
  <stringProp name="ThreadGroup.num_threads">200</stringProp>
  <stringProp name="ThreadGroup.ramp_time">30</stringProp>
  <boolProp name="ThreadGroup.scheduler">true</boolProp>
  <stringProp name="ThreadGroup.duration">300</stringProp>
  <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Generate Banner">
    <stringProp name="HTTPSampler.domain">banner.api.example.com</stringProp>
    <stringProp name="HTTPSampler.path">/generate-banner</stringProp>
    <stringProp name="HTTPSampler.method">POST</stringProp>
    <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
      <collectionProp name="Arguments.arguments">
        <elementProp name="prompt" elementType="HTTPArgument">
          <stringProp name="Argument.value">a sleek smartphone banner</stringProp>
        </elementProp>
      </collectionProp>
    </elementProp>
  </HTTPSamplerProxy>
</ThreadGroup>

Phase 8 – Go‑live & Transfer

Mục tiêu Công việc Người Thời gian Dependency
Đào tạo 1. Workshop 2 giờ cho content team
2. Video hướng dẫn “How to request banner”
PM 1 Phase 7
Bàn giao 1. Gửi tài liệu (xem mục 7)
2. Chuyển quyền repo sang team nội bộ
3. Ký SLA
PM 1 Phase 8
Monitoring go‑live 1. Thiết lập alert “error_rate > 2 %”
2. Review log sau 24 h
SRE 1 Phase 8

6. Tài liệu bàn giao cuối dự án (15 tài liệu)

STT Tài liệu Người chịu trách nhiệm Nội dung bắt buộc
1 Architecture Diagram (draw.io) Solution Architect Các thành phần, network, data flow
2 API Specification (OpenAPI 3.0) Backend Lead Endpoint, request/response, auth
3 Prompt Template Guide AI‑PM Brand variables, ví dụ prompt
4 Docker‑Compose & Helm Charts DevOps Lead File yaml, version, env vars
5 CI/CD Pipeline (GitHub Actions) DevOps .yml, secret handling
6 Monitoring Dashboard (Grafana JSON) SRE Metrics, alerts, thresholds
7 Security Policy (OPA) Security Engineer Rules, compliance checklist
8 Cost Model Spreadsheet Finance Lead Chi phí 30 tháng, dự báo
9 Load‑Test Report (JMeter) QA Lead Kết quả latency, throughput
10 Integration Guide – Shopify Integration Engineer Webhook, metafield, sample code
11 Integration Guide – VTEX Integration Engineer Extension, API call
12 Disaster Recovery Plan SRE RTO, RPO, backup strategy
13 SOP for Content Team PM Quy trình yêu cầu banner
14 License & Open‑source Compliance Legal List dependencies, licenses
15 Release Notes (v1.0) PM Các tính năng, known issues

🛡️ Bảo mật: Tất cả tài liệu phải được lưu trữ trên Confluence với quyền “Read‑Only” cho các stakeholder ngoài team.


7. Rủi ro & Phương án dự phòng

Rủi ro Tác động Phương án B Phương án C
GPU quá tải → latency > 500 ms Giảm trải nghiệm khách hàng, mất doanh thu Chuyển sang multi‑GPU (2×A100) Scale out sang AWS SageMaker (ml.g5.2xlarge)
Prompt Engine trả về nội dung không phù hợp Vi phạm brand guideline Thêm rule OPA để lọc prompt Human‑in‑the‑loop review (Slack bot)
CDN outage Không tải banner, lỗi 404 Fallback tới S3 static site Sử dụng Cloudflare Workers cache fallback
Lỗi bảo mật JWT Rò rỉ dữ liệu Rotate secret mỗi 30 ngày Implement OAuth2 + PKCE
Data loss (MinIO) Mất ảnh gốc & banner Backup hàng giờ tới S3 Replication sang Azure Blob

8. KPI & Công cụ đo (tần suất)

KPI Mục tiêu Công cụ Tần suất
Latency trung bình ≤ 400 ms Grafana (Prometheus) 5 phút
Throughput ≥ 10 k banner/giờ Datadog Metrics 1 giờ
Error rate ≤ 0.5 % Sentry + Alertmanager 1 phút
Brand compliance score ≥ 95 % (AI‑checker) Custom ML model (BERT) Hàng ngày
Cost per banner ≤ $0.02 Cost Explorer (AWS) Hàng tháng
User satisfaction (content team) ≥ 4.5/5 SurveyMonkey Hàng quý

⚡ Lưu ý: KPI “Brand compliance” được tính bằng mô hình phân loại nội dung (BERT fine‑tuned) so sánh với mẫu brand guideline.


9. Checklist Go‑Live (42 mục)

9.1 Security & Compliance (9 mục)

# Mục Trạng thái
S‑1 Kiểm tra JWT signing key
S‑2 OPA policy áp dụng cho prompt
S‑3 Scanning Docker image (Trivy)
S‑4 Đánh giá GDPR/PDPA (data‑minimization)
S‑5 Cấu hình CORS cho API
S‑6 Rate‑limit 100 req/min
S‑7 TLS 1.3 trên Nginx
S‑8 IAM role least‑privilege
S‑9 Audit log lưu trữ 90 ngày

9.2 Performance & Scalability (9 mục)

# Mục Trạng thái
P‑1 Auto‑scaling group (CPU > 70 % → add node)
P‑2 GPU utilization < 80 %
P‑3 Cache prompt trong Redis (TTL = 12 h)
P‑4 CDN cache‑control max‑age = 86400
P‑5 Load‑test 10k rps thành công
P‑6 Batch size tối ưu = 4
P‑7 Health‑check endpoint /healthz
P‑8 Rolling update không downtime
P‑9 Backup MinIO mỗi 6 giờ

9.3 Business & Data Accuracy (8 mục)

# Mục Trạng thái
B‑1 Kiểm tra độ chính xác prompt vs brand guide (≥ 95 %)
B‑2 Đảm bảo watermark đúng vị trí
B‑3 Kiểm tra metadata (SKU, timestamp)
B‑4 Định dạng file PNG/WebP chuẩn
B‑5 Kiểm tra duplicate banner (hash)
B‑6 Đánh giá SEO alt‑text tự động
B‑7 Kiểm tra link CDN trả về 200
B‑8 Đảm bảo không có nội dung vi phạm bản quyền

9.4 Payment & Finance (8 mục)

# Mục Trạng thái
F‑1 Kiểm tra chi phí GPU theo usage
F‑2 Đánh giá cost‑per‑banner ≤ $0.02
F‑3 Kiểm tra billing alerts (AWS Budgets)
F‑4 Kiểm tra invoice generation cho khách hàng (nếu có)
F‑5 Đảm bảo không có request vượt quota API
F‑6 Kiểm tra logs thanh toán (nếu tích hợp)
F‑7 Kiểm tra refund workflow (nếu banner trả phí)
F‑8 Kiểm tra compliance PCI DSS (nếu lưu thẻ)

9.5 Monitoring & Rollback (8 mục)

# Mục Trạng thái
M‑1 Alert latency > 500 ms → Slack
M‑2 Alert error_rate > 2 % → PagerDuty
M‑3 Dashboard Grafana “Banner Health”
M‑4 Log aggregation (ELK)
M‑5 Rollback script (docker‑compose down/up)
M‑6 Canary deployment 5 % traffic
M‑7 Backup restore test (MinIO → S3)
M‑8 Post‑mortem template chuẩn

10. Gantt Chart chi tiết (Mermaid)

gantt
    title Triển khai hệ thống Banner AI (30 ngày)
    dateFormat  YYYY-MM-DD
    section Phase 1
    Setup Docker & GPU          :a1, 2024-10-01, 7d
    MinIO & Network            :a2, after a1, 5d
    section Phase 2
    Model FP16 & Test          :b1, 2024-10-09, 10d
    Batch inference            :b2, after b1, 5d
    section Phase 3
    Prompt Engine Development  :c1, 2024-10-20, 10d
    API Prompt Endpoint        :c2, after c1, 5d
    section Phase 4
    FastAPI & Nginx            :d1, 2024-11-01, 7d
    TLS & Rate‑limit           :d2, after d1, 3d
    section Phase 5
    CI/CD Pipeline             :e1, 2024-11-10, 5d
    Monitoring Setup           :e2, after e1, 5d
    section Phase 6
    Shopify Integration        :f1, 2024-11-18, 10d
    VTEX Integration           :f2, after f1, 7d
    section Phase 7
    Functional Test            :g1, 2024-12-01, 5d
    Load Test                  :g2, after g1, 5d
    section Phase 8
    Training & Handover        :h1, 2024-12-10, 7d
    Go‑live Monitoring         :h2, after h1, 7d

11. Các công thức tính toán (theo quy tắc)

ROI = (Tổng lợi ích – Chi phí đầu tư) / Chi phí đầu tư × 100%

\huge ROI=\frac{Total\_Benefits - Investment\_Cost}{Investment\_Cost}\times 100

Giải thích: Total_Benefits là doanh thu tăng thêm nhờ thời gian ra mắt nhanh; Investment_Cost là tổng chi phí 30 tháng (55 344 USD).

Cost per Banner = Tổng chi phí 30 tháng / Số banner tạo

\huge Cost\_per\_Banner=\frac{Total\_Cost}{Total\_Banners}

Giải thích: Nếu tạo 1 triệu banner trong 30 tháng, chi phí mỗi banner ≈ $0.055.


12. Kết luận – Key Takeaways

Điểm cốt lõi Nội dung
Tốc độ 1.000 banner trong < 5 phút nhờ batch inference và prompt tự động.
Chi phí ROI > 3 000 %; cost per banner < $0.06, phù hợp với các thương hiệu có hàng ngàn SKU.
Độ tin cậy Kiểm thử load 10k rps, SLA ≥ 99.9 % (Gartner 2024).
Quy trình 8 phase, Gantt rõ ràng, checklist go‑live 42 mục, giảm rủi ro tới < 5 %.
Mở rộng Kiến trúc micro‑service, hỗ trợ multi‑cloud, dễ tích hợp Shopify/VTEX.

⚡ Best Practice: Luôn giữ prompt template trong version control; cập nhật brand guideline mỗi khi có thay đổi màu/logo để tránh “drift”.


13. Câu hỏi thảo luận

Bạn đã từng gặp lỗi “prompt drift” khi brand màu thay đổi? Bạn giải quyết như thế nào để duy trì tính nhất quán?

Có ai đã thử tích hợp Stable Diffusion vào hệ thống CMS khác (Magento, WooCommerce) chưa? Chia sẻ kinh nghiệm!


14. Đoạn chốt marketing

Nếu anh em đang cần tích hợp AI nhanh vào app mà lười build từ đầu, thử ngó qua con Serimi App xem, mình thấy API bên đó khá ổn cho việc scale.

Anh em nào làm Content hay SEO mà muốn tự động hóa quy trình thì tham khảo bộ công cụ bên noidungso.io.vn nhé, đỡ tốn cơm gạo thuê nhân sự part‑time.

Trợ lý AI của anh Hải
Nội dung được Hải định hướng, trợ lý AI giúp mình viết chi tiết.
Chia sẻ tới bạn bè và gia đình