Trong bài học trước, chúng ta đã thiết lập "bộ não" cho Agent bằng cách khởi tạo Model thông qua hệ thống env.ts và util-langchain. Tuy nhiên, một bộ não nếu không có "đôi bàn tay" thì không thể tác động vào thế giới thực. Bài học này sẽ hướng dẫn bạn cách tạo ra các Tools (Công cụ) để Agent có thể thực hiện hành động.
I. Công cụ (Tool) là gì?
Trong hệ sinh thái LangChain, một Tool là một đối tượng chứa logic mã nguồn mà AI có thể gọi khi cần thiết. Một Tool tiêu chuẩn bao gồm:
- Hàm thực thi (Function): Logic xử lý thực tế (ví dụ: truy vấn DB, gọi API, tính toán).
- Tên (Name): Định danh duy nhất để AI gọi tên công cụ.
- Mô tả (Description): "Bản hướng dẫn" bằng ngôn ngữ tự nhiên để AI hiểu khi nào nên sử dụng công cụ này.
- Schema: Cấu trúc dữ liệu đầu vào được định nghĩa bằng thư viện Zod.
II. Tại sao cần Zod Schema?
AI không thể đọc hiểu mã nguồn JavaScript của bạn. Nó giao tiếp với code thông qua các bản mô tả JSON. Zod đóng vai trò là "ngôn ngữ trung gian", giúp tạo ra bản mô tả đó một cách chính xác, đồng thời đảm bảo AI luôn truyền đúng kiểu dữ liệu (ví dụ: không truyền chữ vào chỗ cần số).
III. Mã nguồn: define-tool.ts
Chúng ta sẽ tạo một công cụ đơn giản để thực hiện phép cộng. Lưu ý rằng chúng ta vẫn nạp file ./env để đảm bảo tính nhất quán của môi trường phát triển đã thiết lập ở bài 1.
// path: scripts/define-tool.ts
import './env'; // Nạp biến môi trường
import { tool } from 'langchain';
import { z } from 'zod';
/**
* Define a Tool using LangChain's tool() utility.
*/
export const addTool = tool(
// 1. Implementation function
async ({ a, b }) => {
const result = a + b;
return `The result of ${a} + ${b} is ${result}`;
},
{
// 2. Tool Name (Lowercase, use underscores for multiple words)
name: 'math_adder',
// 3. Tool Description (CRITICAL: This is how the AI knows when to use it)
description: 'Use this tool when you need to add two numbers together.',
// 4. Input Schema (Using Zod to define parameter types)
schema: z.object({
a: z.number().describe('The first number'),
b: z.number().describe('The second number'),
}),
},
);
// Logging tool metadata to see what the AI "sees"
console.log('--- Tool Metadata ---');
console.log('Name:', addTool.name);
console.log('Description:', addTool.description);
// LangChain automatically converts the Zod schema to JSON Schema for the LLMIV. Phân tích các thành phần
z.number().describe(...): Phương thức.describe()cực kỳ quan trọng. Đây là "lời nhắn" gửi tới AI để nó biết chính xác tham số này dùng để làm gì.- Description của Tool: Đây là thành phần quan quan trọng nhất để AI đưa ra quyết định suy luận. Nếu mô tả quá mờ nhạt (ví dụ: "công cụ tính toán"), AI có thể sẽ bỏ qua nó hoặc gọi sai thời điểm.
- Tính an toàn: Nhờ Zod, nếu AI cố tình truyền một chuỗi văn bản vào tham số
a, hệ thống sẽ tự động chặn lại và báo lỗi trước khi hàm thực thi được chạy.
V. Cách chạy code
Bạn có thể chạy trực tiếp file này để kiểm tra thông tin meta của tool:
npx tsx scripts/define-tool.tsVI. Tổng kết
- AI sử dụng Description để quyết định có dùng công cụ hay không (Reasoning).
- AI sử dụng Schema để biết cách điền dữ liệu vào hàm (Execution).
- Việc kết hợp
env.tsgiúp đảm bảo các công cụ của bạn luôn sẵn sàng kết nối với các dịch vụ bên ngoài (như Database hay API) một cách bảo mật.
Trong bài học tiếp theo, chúng ta sẽ kết hợp Model (bài 1) và Tool (bài 2) để tạo ra một Agent thực thụ, có khả năng tự suy luận và tự vận hành thông qua vòng lặp ReAct!