3. Vòng lặp ReAct với createAgent

Nam

Nam Hoang / Feb 03, 2026

6 min read

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:

  1. 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ó.
  2. Act (Hành động): AI quyết định gọi một Tool cụ thể với các tham số tương ứng.
  3. Observation (Quan sát): AI nhận kết quả từ Tool và nạp lại vào bộ nhớ.
  4. 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:

  1. Nạp môi trường: File env.ts đảm bảo GEMINI_API_KEY đã sẵn sàng.
  2. 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_adder tới Gemini.
  3. 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).
  4. Thực thi: LangChain chặn yêu cầu đó, tự động chạy hàm Javascript của bạn.
  5. 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:

Sơ đồ ReAct Agent

VI. Tổng kết

  • createAgent là 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.tsutil-langchain giúp mã nguồn Agent sạch sẽ và chuyên nghiệp hơn.
  • Kết quả của invoke chứ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!

👉 Bài tiếp theo: 4. Tích hợp Tìm kiếm Web (Tavily)