Đến nội dung chính
Automation

Tự động hóa công việc lặp lại với AI

Dùng AI đề xuất phân loại ticket, kiểm tra kết quả bằng Python và tạo một batch xử lý có thể chạy lại.

Tổng quan

Dành cho người học muốn tự hoàn thành bài thực hành tự động hóa công việc lặp lại với ai, với dữ liệu mẫu có thể kiểm tra.

  • Chọn một phần việc nhỏ để tự động hóa trước.
  • Tách đề xuất AI khỏi thao tác thực thi.
  • Dùng ID và validation để tránh bỏ sót hoặc trùng lặp.

Bạn sẽ hoàn thành: Một file triage.json gồm ba đề xuất hợp lệ, chưa tự động áp dụng vào hệ thống hỗ trợ.

Chuẩn bị

  • Python 3.10+, trình soạn thảo và trợ lý AI có text chat.

Script chạy offline; có thể dán dữ liệu giả lập vào công cụ AI đã có quyền sử dụng. Không cần API hoặc tự động gửi tin nhắn.

Thực hành từng bước

Luồng thực hành minh họa; không phải kết quả đo thực nghiệm.

Bước 1. Chọn batch có ID ổn định

Bắt đầu bằng phân loại ba ticket giả lập trong code dưới, không chọn thao tác xóa file hoặc gửi email làm bước tự động đầu tiên. Xác định các loại cho phép: access, billing, other. Ticket thiếu thông tin phải chuyển người kiểm tra chứ không tự quyết định chắc chắn.

Bước 2. Yêu cầu AI tạo đề xuất có cấu trúc

PROMPT · HƯỚNG DẪN
Phân loại dữ liệu sau. Chỉ trả JSON array với đúng ba trường mỗi item: id, category (access/billing/other), needs_review (boolean). Giữ mọi ID, không trùng lặp; thiếu thông tin thì other và needs_review=true. Không viết câu trả lời khách hàng.
T1: Cannot sign in after password reset
T2: Please explain my sample invoice
T3: I have a question

Lưu kết quả thật vào proposals.json. Nếu bạn muốn thử script trước khi dùng AI, dùng fixture dưới; đây là dữ liệu mẫu do tác giả viết, không phải kết quả chạy model đã được đo.

JSON
[{"id":"T1","category":"access","needs_review":false},
 {"id":"T2","category":"billing","needs_review":false},
 {"id":"T3","category":"other","needs_review":true}]

Bước 3. Kiểm tra trước khi ghi kết quả

Lưu code thành triage.py cạnh proposals.json. Nó kiểm tra cấu trúc và ID, không xác minh category có đúng nghĩa của ticket không. Người thực hành vẫn phải đối chiếu ba nhãn với nguồn trước khi dùng thật.

PYTHON
import json
from pathlib import Path

TICKETS = [{"id": "T1", "text": "Cannot sign in after password reset"},
           {"id": "T2", "text": "Please explain my sample invoice"},
           {"id": "T3", "text": "I have a question"}]
ALLOWED = {"access", "billing", "other"}

def validate(proposals):
    expected = {item["id"] for item in TICKETS}
    if not isinstance(proposals, list) or len(proposals) != len(expected):
        raise ValueError("wrong batch size")
    seen = set()
    for item in proposals:
        if not isinstance(item, dict) or set(item) != {"id", "category", "needs_review"}:
            raise ValueError("invalid fields")
        if item["id"] not in expected or item["id"] in seen:
            raise ValueError("unknown or duplicate id")
        if item["category"] not in ALLOWED or type(item["needs_review"]) is not bool:
            raise ValueError("invalid classification")
        seen.add(item["id"])
    return sorted(proposals, key=lambda item: item["id"])

if __name__ == "__main__":
    proposals = json.loads(Path("proposals.json").read_text(encoding="utf-8"))
    result = validate(proposals)
    Path("triage.json").write_text(json.dumps(result, indent=2) + "\n", encoding="utf-8")
    print("Validated", len(result), "proposals; no messages sent")
SHELL
python3 triage.py

Bước 4. Thử lỗi và chạy lại an toàn

Nhân đôi T1 hoặc đổi một category thành admin: script phải từ chối và không ghi kết quả mới. Sau khi sửa, chạy hai lần cùng input, so sánh nội dung triage.json phải giống nhau. Chỉ giữ bản đã kiểm tra để nhập vào công cụ hỗ trợ bằng bước riêng được phép.

Kiểm tra kết quả

  • Ba ID xuất hiện đúng một lần, T3 có needs_review=true.
  • Batch sai bị chặn trước thao tác ghi; không có thao tác gửi.

Xử lý lỗi thường gặp

AI bọc JSON trong Markdown

Nguyên nhân: Đầu ra không đúng hợp đồng máy đọc.

Cách xử lý: Yêu cầu JSON thuần hoặc bỏ đúng hàng rào code khi sao chép; không dùng eval để đọc.

Script chạy đúng nhưng nhãn sai

Nguyên nhân: Validation cấu trúc không thay thế kiểm tra ý nghĩa.

Cách xử lý: Đối chiếu ticket và sửa đề xuất; lưu các trường hợp sai vào tập kiểm tra prompt.

Bài tập & mở rộng

  • Thêm ticket nhiều nghĩa và kiểm tra được đưa vào review.
  • Chuyển các bước thành workflow n8n ở bài tiếp theo.

Không tích hợp CRM thật và không xử lý dữ liệu khách hàng. Idempotency ở đây chỉ là nội dung output ổn định, không phải bảo đảm giao dịch phân tán.

Nguồn tham khảo

  1. Python JSON
  2. Official OpenAI prompting guide

Kiến thức liên quan

Tiếp tục thực hành