0
0
Lập trình
Harry Tran
Harry Tran106580903228332612117

Khám Phá LangGraph.js: Thư Viện JavaScript Xây Dựng AI Agents Hiệu Quả (Phần 1)

Đăng vào 3 tuần trước

• 4 phút đọc

Giới Thiệu LangGraph.js

Chào mừng bạn đến với LangGraph.js, một thư viện JavaScript mạnh mẽ được thiết kế nhằm xây dựng các AI agents phức tạp. Thư viện này cho phép mở rộng thông qua máy trạng thái dựa trên đồ thị. Trong phần đầu tiên này, chúng ta sẽ cùng khám phá các khái niệm cốt lõi của LangGraph.js cũng như lý do vì sao nó lại nổi bật trong việc phát triển các hệ thống agent đáng tin cậy và chịu lỗi.

Bối Cảnh: AI Agents và Quy Trình Làm Việc

AI agents có thể được định nghĩa một cách cơ bản là bất kỳ hệ thống nào cho phép mô hình ngôn ngữ kiểm soát các quy trình làm việc lặp đi lặp lại và thực hiện hành động. Các LLM (Large Language Model) agents thường sử dụng thiết kế "Lý luận và Hành động" (ReAct) với một vòng lặp gồm các bước:

  1. Lý do và lên kế hoạch cho hành động cần thực hiện.
  2. Thực hiện hành động bằng cách sử dụng các công cụ phần mềm thông thường.
  3. Quan sát tác động của các công cụ và lập kế hoạch lại hoặc phản ứng theo tính hợp lý.

Tuy nhiên, các LLM agents thường không thể cung cấp độ tin cậy cần thiết ở quy mô lớn do tính ngẫu nhiên của chúng. Các hệ thống được thiết kế tốt có thể khai thác tính ngẫu nhiên này một cách hợp lý, trong khi các hệ thống tổng hợp có khả năng chịu lỗi cao hơn, giúp xử lý các lỗi đầu ra LLM.

Tôi tin rằng các agents rất thú vị và cần được phát triển bằng các phương pháp kỹ thuật từ Software 2.0. Một số điểm tương đồng quan trọng là:

  1. Cân bằng giữa tự động hóa và khả năng kiểm soát của người dùng.
  2. Tương tự như hệ thống phân tán trong khả năng chịu lỗi và sửa lỗi.
  3. Hệ thống đa tác nhân giống như các ứng dụng mạng nhiều người chơi.
  4. Đặc điểm yêu thích nhu cầu phục hồi và kiểm soát phiên bản.

Lớp trừu tượng StateGraph của LangGraph.js được thiết kế để đáp ứng các nhu cầu này. Nó cung cấp API cấp thấp hơn so với các khuôn khổ tác nhân khác, cho phép bạn kiểm soát cách áp dụng AI.

LangGraph.js mở rộng khuôn khổ xử lý đồ thị Pregel của Google, mang đến khả năng chịu lỗi và phục hồi cho các khối lượng công việc lâu dài hoặc dễ xảy ra lỗi. Bạn có thể tập trung vào các hoạt động cục bộ và hệ thống sẽ tự động kết hợp chúng thành một ứng dụng mạnh mẽ và có khả năng mở rộng.

Thiết Kế Cốt Lõi và Cách Hoạt Động

LangGraph.js mô hình hóa quy trình làm việc của các agents như một máy trạng thái. Bạn có thể xác định hành vi của agents thông qua ba thành phần chính:

  1. State: Cấu trúc dữ liệu dùng chung biểu diễn trạng thái hiện tại của ứng dụng. Thông thường, đây sẽ là giao diện hoặc lớp.
  2. Nodes: Các hàm TypeScript mã hóa logic của agents. Chúng sẽ nhận State hiện tại làm đầu vào và trả về State đã được cập nhật.
  3. Edges: Quy định luồng điều khiển giữa các Node, xác định Node nào sẽ được thực thi tiếp theo dựa trên trạng thái hiện tại.

Sự kết hợp giữa Nodes và Edges cho phép tạo ra các quy trình làm việc phức tạp phát triển theo thời gian. Công nghệ này phải kể đến cách mà LangGraph.js quản lý các States.

Nodes và Cách Thêm Chúng Vào Đồ Thị

Trong StateGraph, các Nodes thường là các hàm TypeScript, và bạn có thể thêm chúng vào biểu đồ bằng phương thức addNode. Dưới đây là một ví dụ minh họa:

typescript Copy
import { END, START, StateGraph } from "@langchain/langgraph";
 
interface IState {
  input: string;
  results?: string;
}
 
const graphState: StateGraphArgs<IState>["channels"] = {
  input: {
    value: (x?: string, y?: string) => y ?? x ?? "",
    default: () => "",
  },
  results: {
    value: (x?: string, y?: string) => y ?? x ?? "",
    default: () => "",
  },
};
 
function myNode(state: IState) {
  console.log("In node:", state.input);
  return { results: `Hello, ${state.input}!` };
}
 
const builder = new StateGraph({ channels: graphState })
  .addNode("my_node", myNode)
  .addEdge(START, "my_node")
  .addEdge("my_node", END);
 
const graph = builder.compile();
 
console.log(await graph.invoke({ input: "Will" }));
// { input: 'Will', results: 'Hello, Will!' }

Các hàm sẽ được chuyển đổi thành RunnableToLambda, giúp bổ sung xử lý không đồng bộ và theo dõi gốc.

Edges và Quản Lý Luồng Logic

Edges xác định cách logic được định tuyến và khi nào Graph cần dừng lại. Chúng có thể được cấu hình điều kiện để định tuyến đến một hoặc nhiều Node, hoặc dừng lại khi đạt được điều kiện nhất định.

Quản Lý State với Reducer

LangGraph.js giới thiệu giao diện State và Reducer để quản lý State hiệu quả. Điều này giúp xác định cách thức cập nhật thông tin trong các Node và kiểm soát cách dữ liệu chảy qua ứng dụng của bạn. Tôi sẽ trình bày một số ví dụ cụ thể trong các phần tiếp theo.

Kết Luận

LangGraph.js không chỉ cung cấp sự linh hoạt mà còn mang tính khả thi cho các dự án AI phức tạp. Hãy cùng theo dõi phần 2 trong bài viết tiếp theo để đi sâu vào các khái niệm nâng cao và cách thực thi chi tiết hơn về LangGraph.js.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào