File size: 3,183 Bytes
e706de2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# Tổng hợp kiến thức: AI Agents from Scratch - Phần Foundation

Tài liệu này tổng hợp các khái niệm cốt lõi đã học được từ 4 bài học đầu tiên trong series "AI Agents from Scratch".

## 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 (LLM, Parser, Tool).

*   **Hợp đồng (Contract):** Mọi Runnable đều phải triển khai phương thức `_call(input, config)`.
*   **3 Phương thức thực thi:**
    1.  `invoke(input)`: Chạy đơn lẻ (1 input -> 1 output).
    2.  `stream(input)`: Trả về kết quả dạng dòng (chunks) theo thời gian thực.
    3.  `batch([inputs])`: Xử lý song song một danh sách input để tăng hiệu suất.
*   **Lợi ích:** Cho phép nối các thành phần khác nhau thành một chuỗi (chain) dễ dàng bằng `.pipe()`.

## 2. Messages (Tin nhắn & Cấu trúc dữ liệu)
Thay vì sử dụng chuỗi văn bản thuần túy, hội thoại được cấu trúc hóa thành các đối tượng để dễ quản lý và phân loại.

*   **Các loại tin nhắn:**
    *   `SystemMessage`: Chỉ thị hệ thống, thiết lập hành vi/nhân cách cho AI.
    *   `HumanMessage`: Tin nhắn từ người dùng.
    *   `AIMessage`: Phản hồi từ AI.
    *   `ToolMessage`: Kết quả trả về từ việc gọi công cụ (function calling).
*   **Quản lý hội thoại:** Cần có cơ chế (như `ConversationHistory`) để lưu trữ, giới hạn độ dài (sliding window) và lọc tin nhắn theo loại.

## 3. LLM Wrapper (Bọc mô hình ngôn ngữ)
**LLM Wrapper** biến đổi một thư viện LLM thô (như `node-llama-cpp`) thành một **Runnable**.

*   **Vai trò:** Đóng vai trò như một Adapter (bộ chuyển đổi).
*   **Chức năng:**
    *   Chuyển đổi input (chuỗi hoặc danh sách Message) thành format mà model hiểu được.
    *   Xử lý việc gọi model (generate/stream).
    *   Trả về kết quả dưới dạng `AIMessage`.
*   **Kết quả:** Giúp thay thế model dễ dàng mà không ảnh hưởng đến phần còn lại của hệ thống.

## 4. Context & Configuration (Ngữ cảnh & Cấu hình)
**RunnableConfig** là cơ chế truyền thông tin xuyên suốt chuỗi xử lý mà không làm rối mã nguồn.

*   **Vấn đề giải quyết:** Tránh việc phải truyền tham số cấu hình (như `userId`, `debug flag`) qua từng hàm thủ công.
*   **Thành phần của Config:**
    *   `callbacks`: Hệ thống hook để theo dõi (log, metrics) tại các điểm bắt đầu/kết thúc/lỗi.
    *   `metadata`: Dữ liệu ngữ cảnh (User ID, Session ID).
    *   `configurable`: Các tham số thay đổi lúc chạy (Runtime overrides), ví dụ: thay đổi `temperature` của LLM cho từng request cụ thể.
*   **Ứng dụng:** Rất hữu ích cho A/B testing, logging tập trung và quản lý đa người dùng.

---
*Tài liệu được tạo tự động bởi Antigravity IDE sau quá trình tự học và phân tích code.*