Trong bài học trước, chúng ta đã tạo ra "đôi bàn tay" (Tools). Bây giờ, chúng ta sẽ xây dựng "hệ thần kinh" để kết nối bộ não AI với các công cụ đó. Bài học này tập trung vào việc lắp ráp một Agent hoàn chỉnh thông qua vòng lặp ReAct, sử dụng hệ thống môi trường và tiện ích đã thiết lập ở Bài 1.
I. Vòng lặp ReAct là gì?
ReAct là sự kết hợp giữa Reasoning (Suy luận) và Acting (Hành động). Đây là kiến trúc phổ biến nhất giúp AI không chỉ "nói" mà còn biết "làm". Quy trình diễn ra như sau:
- Thought (Suy nghĩ): AI phân tích yêu cầu của người dùng và các công cụ hiện có.
- Act (Hành động): AI quyết định gọi một Tool cụ thể với các tham số tương ứng.
- Observation (Quan sát): AI nhận kết quả từ Tool và nạp lại vào bộ nhớ.
- Repeat: AI suy nghĩ tiếp dựa trên kết quả vừa nhận được cho đến khi tự tin đưa ra câu trả lời cuối cùng.
II. Sử dụng hàm createAgent
LangChain cung cấp hàm createAgent để tự động hóa toàn bộ vòng lặp ReAct phức tạp này. Nhiệm vụ của bạn chỉ là cung cấp Model (được khởi tạo qua util-langchain) và danh sách các công cụ đã được khai báo.
III. Mã nguồn: 03-the-react-agent-loop.ts
Chúng ta sẽ tạo một script để chạy Agent. Lưu ý cách chúng ta nạp env.ts để quản lý API Key và dùng generateImage để trực quan hóa sơ đồ suy luận.
// apps/langchain/scripts/03-the-react-agent-loop.ts
// pnpm --filter=ai-notes-langchain run tsx scripts/03-the-react-agent-loop.ts
import './env'; // Load environment variables from our custom env script
import { createGeminiModel, generateImage } from '@workspace/util-langchain';
import { createAgent, tool } from 'langchain';
import { z } from 'zod';
// 1. Re-define the math tool for standalone execution
const addTool = tool(
async ({ a, b }) => {
return `The result is ${a + b}`;
},
{
name: 'math_adder',
description: 'Use this tool to add two numbers together.',
schema: z.object({
a: z.number(),
b: z.number(),
}),
},
);
async function main() {
// 2. Initialize the Brain using our centralized utility (Gemini 2.5 Flash)
const model = createGeminiModel();
// 3. Assemble the Agent: Connect Brain + Hands
const agent = createAgent({
model: model,
tools: [addTool],
});
// 4. Generate a visual diagram of the Agent's logic using util-langchain
await generateImage(agent.graph, 'graph-ignore/scripts-03-run-agent.jpg');
console.log('--- Agent is thinking... ---');
// 5. Execute the Agent using invoke
const response = await agent.invoke({
messages: [
{ role: 'user', content: 'Please calculate 1234 plus 5678 for me.' },
],
});
// 6. Display the final answer
const lastMessage = response.messages[response.messages.length - 1];
console.log('\nAI Response:');
console.log(lastMessage.content);
}
main().catch(console.error);IV. Phân tích quy trình vận hành
Khi bạn thực thi lệnh npx tsx scripts/03-the-react-agent-loop.ts, hệ thống thực hiện các bước sau:
- Nạp môi trường: File
env.tsđảm bảoGEMINI_API_KEYđã sẵn sàng. - Gửi yêu cầu: LangChain gửi câu hỏi của bạn kèm theo danh sách mô tả (JSON Schema) của
math_addertới Gemini. - Suy luận: Gemini nhận thấy câu hỏi cần tính toán và trả về một yêu cầu gọi công cụ (
tool_call). - Thực thi: LangChain chặn yêu cầu đó, tự động chạy hàm Javascript của bạn.
- Phản hồi: Kết quả được gửi ngược lại cho Gemini để nó tổng hợp thành câu trả lời tự nhiên.
V. Hình ảnh sơ đồ Graph
Nhờ vào tiện ích generateImage trong gói util-langchain, bạn có thể thấy cấu trúc vòng lặp của Agent:

VI. Tổng kết
createAgentlà trung tâm điều phối kết nối Model và Tools dựa trên kiến trúc ReAct.- Việc sử dụng
env.tsvàutil-langchaingiúp mã nguồn Agent sạch sẽ và chuyên nghiệp hơn. - Kết quả của
invokechứa toàn bộ lịch sử tin nhắn, giúp bạn có thể theo dõi từng bước suy luận của AI.
Trong bài học tiếp theo, chúng ta sẽ cấp cho Agent một "siêu năng lực" mới: Truy cập Internet để tìm kiếm thông tin thời gian thực thông qua Tavily API!