# Tổng hợp kiến thức: AI Agents from Scratch Tài liệu này tổng hợp toàn bộ các khái niệm cốt lõi và mẫu thiết kế đã học được từ repository "AI Agents from Scratch". ## PHẦN 1: FOUNDATION (NỀN TẢNG) ### 1. Runnable (Đơn vị thực thi) **Runnable** là "viên gạch LEGO" của framework, chuẩn hóa giao diện cho mọi thành phần. * **Hợp đồng (Contract):** Triển khai phương thức `_call(input, config)`. * **3 Chế độ:** `invoke` (đơn), `stream` (dòng), `batch` (song song). * **Composition:** Dễ dàng nối chuỗi bằng `.pipe()`. ### 2. Messages (Cấu trúc hội thoại) Sử dụng các lớp đối tượng thay vì chuỗi trần. * **SystemMessage**: Chỉ thị, nhân cách. * **HumanMessage**: Input người dùng. * **AIMessage**: Output mô hình. * **ToolMessage**: Kết quả gọi hàm. ### 3. LLM Wrapper Đóng gói model thô (node-llama-cpp) thành một **Runnable** để đồng bộ hóa giao diện và dễ dàng thay thế. ### 4. Context & Configuration Truyền `RunnableConfig` xuyên suốt pipeline. * `callbacks`: Logging, metrics, side-effects. * `metadata`: Context người dùng/phiên. * `configurable`: Runtime overrides (ví dụ: thay đổi temperature động). --- ## PHẦN 2: COMPOSITION (KẾT HỢP) ### 1. Prompts Quản lý đầu vào LLM bằng Templates. * **PromptTemplate**: Tách logic khỏi văn bản, hỗ trợ biến số. * **ChatPromptTemplate**: Cấu trúc hóa hội thoại đa lượt (Multi-turn conversation). ### 2. Output Parsers Chuyển đổi văn bản thô từ LLM thành dữ liệu có cấu trúc. * **StructuredOutputParser**: Định nghĩa Schema (JSON), tự động sinh hướng dẫn định dạng (`format_instructions`) và validate kết quả. Giải quyết vấn đề output không nhất quán của LLM. --- ## PHẦN 3: PROJECT PATTERNS (MẪU THIẾT KẾ THỰC TẾ) Từ dự án **Smart Email Classifier**, rút ra mẫu kiến trúc tham khảo cho các tác vụ phân loại/xử lý văn bản: 1. **Separation of Concerns (Phân tách mối quan tâm):** * `ParserRunnable`: Chỉ lo việc làm sạch và chuẩn hóa dữ liệu đầu vào. * `ClassifierRunnable`: Chỉ lo việc gọi LLM và xử lý logic phân loại. 2. **Pipeline:** Kết nối `Parser -> Classifier`. 3. **Side Effects via Callbacks:** Sử dụng Callback để ghi log lịch sử và tính toán thống kê (Statistics), giữ cho code chính sạch sẽ. 4. **Strict System Prompts:** Sử dụng System Prompt chi tiết để định nghĩa danh mục và ép kiểu JSON output. --- *Tài liệu được tạo tự động bởi Antigravity IDE.*