Ảnh minh hoạ bởi Unsplash
Sau khi dạo qua một vòng lý thuyết về sức mạnh và sự đáng sợ của AI Agent ở những bài viết trước, hôm nay chúng ta sẽ bắt tay vào "phẫu thuật" thực tế. Nếu bạn là một lập trình viên Python (hoặc thậm chí chỉ mới biết code cơ bản), bạn hoàn toàn có thể tự tay nhào nặn ra một Trợ lý AI có khả năng tự động đọc hóa đơn từ Gmail và ghi dữ liệu thẳng vào bảng tính Google Sheets của bạn. Phép màu đó không đòi hỏi bạn phải có bằng Tiến sĩ toán học; tất cả nằm ở nghệ thuật Function Calling (Gọi hàm).
Bài viết này sẽ lột trần kiến trúc của một AI Agent, giải thích cách bộ não LLM bắt tay với thế giới bên ngoài thông qua các API, và những nguyên tắc sống còn khi lập trình tự động hóa.
Phần 1: Khung Xương Kiến Trúc Của Một AI Agent
Một đoạn script Chatbot Python bình thường chỉ có 2 bước: Nhận câu hỏi (Input) -> Gửi cho OpenAI API -> In câu trả lời ra màn hình (Output). Khung xương của AI Agent thì phức tạp hơn nhiều, nó vận hành theo một Vòng lặp (Loop) ReAct (Lập luận và Hành động):
- User Input: "Thời tiết ở Hà Nội hôm nay thế nào?"
- Thought (Suy nghĩ): LLM nhận câu hỏi và lẩm bẩm: "Mình không có dữ liệu thời tiết thời gian thực. Nhưng khoan, người chủ đã cấp cho mình một công cụ (Tool) tên là `get_weather`. Mình phải dùng nó."
- Action (Hành động): LLM không trả lời user bằng chữ. Nó trả về một cục dữ liệu JSON dạng: `{"tool": "get_weather", "location": "Hanoi"}`.
- Execution (Máy tính thực thi): Ứng dụng Python của BẠN sẽ nhận cục JSON đó, tự động chạy cái hàm Python `get_weather("Hanoi")`, gọi API thời tiết của Yahoo, lấy được kết quả là "32 độ C, nắng gắt".
- Observation (Quan sát): Bạn ném kết quả "32 độ C" đó ngược trở lại cho LLM.
- Final Answer (Trả lời cuối): LLM tổng hợp lại và nói với người dùng: "Hôm nay Hà Nội 32 độ C và rất nắng, bạn nhớ bôi kem chống nắng nhé!".
Phần 2: Phép Màu Của "Function Calling" (Cấp Công Cụ)
Để LLM biết được bạn đang có trong tay những công cụ gì, bạn phải KHAI BÁO chúng. Đây là cốt lõi của việc xây dựng Agent. Bạn sẽ dùng một framework mạnh mẽ như LangChain hoặc sử dụng trực tiếp SDK của OpenAI.
Ví dụ, bạn muốn Agent tự động ghi hóa đơn vào Google Sheets. Bạn phải viết một hàm Python thật (Native Function):
def ghi_google_sheet(ten_khach, so_tien):
# Code gọi Google API ở đây
# ...
return "Đã ghi thành công"
Nhưng LLM không thể đọc trực tiếp code Python. Bạn phải cung cấp cho LLM một bản "Mô tả bằng ngôn ngữ tự nhiên" (JSON Schema) mô tả chính xác hàm đó làm gì:
{
"name": "ghi_google_sheet",
"description": "Dùng để ghi thông tin hóa đơn vào bảng tính khi khách hàng xác nhận mua",
"parameters": {
"type": "object",
"properties": {
"ten_khach": {"type": "string", "description": "Tên của khách hàng"},
"so_tien": {"type": "integer", "description": "Số tiền (VNĐ)"}
},
"required": ["ten_khach", "so_tien"]
}
}
Đóng gói bản mô tả này gửi kèm theo Prompt. LLM đọc xong sẽ vỗ đùi: "À, ta có một siêu năng lực tên là ghi_google_sheet. Nếu người dùng bắt ta ghi sổ, ta sẽ ra lệnh cho cái hàm này chạy".
Phần 3: Quản Lý Trạng Thái (State Management)
AI Agent thường phải chạy qua rất nhiều vòng lặp (Đọc email -> Sinh bản nháp -> Chờ sếp duyệt -> Gửi email). Để Agent không bị "ngáo" và quên mất mình đang ở bước nào, bạn cần xây dựng Quản lý Trạng thái (State). Giới công nghệ hiện đang phát cuồng với LangGraph - một thư viện tuyệt vời giúp bạn vẽ ra luồng chạy của Agent dưới dạng biểu đồ (Graph).
- State là một biến bộ nhớ toàn cục (Ví dụ một Dictionary trong Python) chứa toàn bộ các tin nhắn từ đầu đến cuối cuộc hội thoại. Mỗi Node (Điểm nút) trong sơ đồ sẽ nhận cái State này vào, xử lý công việc của nó, và trả cái State đã được cập nhật sang cho Node tiếp theo. Việc chia nhỏ luồng chạy (Workflow) giúp bạn gỡ lỗi (debug) cực kỳ dễ dàng khi Agent bị mắc kẹt.
Phần 4: Chặn Đứng Thảm Họa - Xử Lý Lỗi Và Logging
Như đã phân tích ở bài viết về Bảo mật AI Agent, bạn không thể thả rông một Agent trên máy chủ Production được. Dưới đây là những đoạn code sinh tử bạn phải thêm vào mã nguồn:
- Giới hạn vòng lặp (Max Iterations): LLM có thể bị kẹt trong một logic luẩn quẩn. Nó cố gọi API bị lỗi -> API trả về lỗi -> Nó gọi lại đúng y như cũ -> Lại lỗi. Nó sẽ lặp vô hạn và đốt sạch tiền trong thẻ tín dụng của bạn. Luôn dùng cờ `max_iterations = 5` (Sau 5 lần thử thất bại, bắt buộc Agent phải dừng lại và chat báo lỗi cho con người).
- Human-in-the-loop (HITL): Đối với hàm `gui_email_cho_khach_hang()`, bạn không được để Agent tự gọi ngầm. Khúc code thực thi của bạn phải có một dòng `input("Bạn có muốn cho phép gửi email này không? (y/n): ")`. Chỉ khi bạn gõ phím 'y', email mới được bay đi.
- Logging vạn năng: Dùng thư viện `langsmith` hoặc ghi ra file `.log` toàn bộ những gì Agent đã Suy Nghĩ (Thought) bên trong cái đầu của nó. Nếu một ngày hệ thống bị phá hoại, bạn phải có Nhật ký (Audit log) để lôi ra xem con AI đã bị "ngáo" ở đoạn nào để sửa Prompt.
Bí quyết thành công của Agent không nằm ở việc chọn LLM nào thông minh nhất, mà nằm ở việc bạn mô tả Công Cụ (Tool Schema) và Viết Lỗi Cụ Thể (Error Handling) sắc bén đến mức nào.
Lời kết:
Xây dựng một AI Agent từ con số 0 bằng Python mang lại một cảm giác quyền lực tột độ. Bạn đang đóng vai chúa trời, ban phát đôi mắt (Vision), trí tuệ (LLM) và đôi tay (Tools) cho một khối mã vô tri. Kỷ nguyên Software 2.0 đã chính thức bắt đầu, nơi mã nguồn không còn là những dòng lệnh IF/ELSE cứng ngắc, mà là sự giao tiếp linh hoạt giữa các Tác nhân đa thông minh.
Nhưng công nghệ xây ra để làm gì nếu không giải quyết được "Nỗi đau" (Pain-points) của thế giới thực? Trong bài viết cuối cùng của chuỗi chủ đề Công nghệ AI này, chúng ta sẽ tạm gác lại những dòng code khô khan, để phóng tầm mắt ra toàn cảnh thị trường: AI đang cày xới và biến đổi 3 ngành công nghiệp xương sống của Việt Nam là Tài chính, Thanh toán và Nông nghiệp như thế nào?