Tổng quan về mẫu Routing

Trong khi xử lý tuần tự qua prompt chaining là kỹ thuật nền tảng để thực thi các quy trình tuyến tính, xác định với mô hình ngôn ngữ, khả năng áp dụng của nó bị hạn chế trong các kịch bản đòi hỏi phản hồi thích ứng. Các hệ thống agentic trong thực tế thường phải phân xử giữa nhiều hành động tiềm năng dựa trên các yếu tố phụ thuộc, chẳng hạn như trạng thái môi trường, đầu vào của người dùng, hoặc kết quả của một thao tác trước đó. Khả năng ra quyết định động này, điều khiển luồng xử lý đến các hàm, công cụ hoặc quy trình con chuyên biệt khác nhau, được thực hiện thông qua cơ chế gọi là routing.

Routing đưa logic có điều kiện vào framework vận hành của agent, cho phép chuyển từ một đường thực thi cố định sang mô hình mà agent đánh giá động các tiêu chí cụ thể để lựa chọn từ tập hợp các hành động tiếp theo có thể. Điều này cho phép hành vi hệ thống linh hoạt và nhận biết ngữ cảnh hơn.

Ví dụ, một agent được thiết kế cho các yêu cầu khách hàng, khi được trang bị hàm routing, có thể trước tiên phân loại truy vấn đến để xác định ý định của người dùng. Dựa trên phân loại này, nó có thể điều hướng truy vấn đến một agent chuyên biệt để trả lời câu hỏi trực tiếp, một công cụ truy xuất cơ sở dữ liệu cho thông tin tài khoản, hoặc một quy trình leo thang cho các vấn đề phức tạp, thay vì mặc định theo một đường phản hồi đơn lẻ, được xác định trước. Một agent tinh vi hơn sử dụng routing có thể:

  1. Phân tích truy vấn của người dùng.
  2. Điều hướng truy vấn dựa trên ý định:
    • Nếu ý định là “kiểm tra trạng thái đơn hàng”, điều hướng đến sub-agent hoặc chuỗi công cụ tương tác với cơ sở dữ liệu đơn hàng.
    • Nếu ý định là “thông tin sản phẩm”, điều hướng đến sub-agent hoặc chuỗi tìm kiếm danh mục sản phẩm.
    • Nếu ý định là “hỗ trợ kỹ thuật”, điều hướng đến chuỗi khác truy cập hướng dẫn khắc phục sự cố hoặc leo thang lên nhân viên.
    • Nếu ý định không rõ ràng, điều hướng đến sub-agent hoặc chuỗi prompt làm rõ.

Các cơ chế Routing

Thành phần cốt lõi của mẫu Routing là cơ chế thực hiện đánh giá và điều hướng luồng. Cơ chế này có thể được triển khai theo nhiều cách:

  • Routing dựa trên LLM: Bản thân mô hình ngôn ngữ có thể được prompt để phân tích đầu vào và xuất ra một định danh hoặc hướng dẫn cụ thể chỉ ra bước tiếp theo hoặc đích đến. Ví dụ, một prompt có thể yêu cầu LLM “Phân tích truy vấn người dùng sau và chỉ xuất ra danh mục: ‘Trạng thái đơn hàng’, ‘Thông tin sản phẩm’, ‘Hỗ trợ kỹ thuật’, hoặc ‘Khác’.” Hệ thống agentic sau đó đọc đầu ra này và điều hướng quy trình tương ứng.

  • Routing dựa trên Embedding: Truy vấn đầu vào có thể được chuyển đổi thành vector embedding. Embedding này sau đó được so sánh với các embedding đại diện cho các tuyến hoặc khả năng khác nhau. Truy vấn được điều hướng đến tuyến có embedding tương đồng nhất. Phương pháp này hữu ích cho routing ngữ nghĩa, nơi quyết định dựa trên ý nghĩa của đầu vào thay vì chỉ từ khóa.

  • Routing dựa trên quy tắc: Phương pháp này sử dụng các quy tắc hoặc logic được định nghĩa trước (ví dụ: câu lệnh if-else, switch case) dựa trên từ khóa, mẫu, hoặc dữ liệu có cấu trúc được trích xuất từ đầu vào. Cách này có thể nhanh hơn và xác định hơn routing dựa trên LLM, nhưng kém linh hoạt hơn trong việc xử lý các đầu vào tinh tế hoặc mới lạ.

  • Routing dựa trên mô hình Machine Learning: Phương pháp này sử dụng một mô hình phân biệt, chẳng hạn như bộ phân loại (classifier), đã được huấn luyện đặc biệt trên một tập dữ liệu có nhãn nhỏ để thực hiện tác vụ routing. Mặc dù có sự tương đồng về khái niệm với các phương pháp dựa trên embedding, đặc điểm chính của nó là quá trình fine-tuning có giám sát, điều chỉnh các tham số của mô hình để tạo ra một hàm routing chuyên biệt. Kỹ thuật này khác biệt so với routing dựa trên LLM vì thành phần ra quyết định không phải là mô hình sinh (generative model) thực thi prompt tại thời điểm inference. Thay vào đó, logic routing được mã hóa trong các trọng số đã học của mô hình fine-tuned.

Các cơ chế routing có thể được triển khai tại nhiều thời điểm khác nhau trong chu trình vận hành của agent. Chúng có thể được áp dụng ở đầu để phân loại tác vụ chính, tại các điểm trung gian trong chuỗi xử lý để xác định hành động tiếp theo, hoặc trong một quy trình con để chọn công cụ phù hợp nhất từ một tập cho trước.

Các framework tính toán như LangChain, LangGraph và Google Agent Developer Kit (ADK) cung cấp các cấu trúc rõ ràng để định nghĩa và quản lý logic có điều kiện như vậy. LangGraph, với kiến trúc đồ thị dựa trên trạng thái, đặc biệt phù hợp cho các kịch bản routing phức tạp nơi các quyết định phụ thuộc vào trạng thái tích lũy của toàn bộ hệ thống. Tương tự, Google ADK cung cấp các thành phần nền tảng để cấu trúc khả năng và mô hình tương tác của agent, đóng vai trò cơ sở cho việc triển khai logic routing.

Việc triển khai routing cho phép hệ thống vượt ra ngoài xử lý tuần tự xác định. Nó tạo điều kiện phát triển các luồng thực thi thích ứng hơn, có thể phản hồi động và phù hợp với phạm vi đầu vào và thay đổi trạng thái rộng hơn.

Ứng dụng thực tế và các trường hợp sử dụng

Mẫu routing là cơ chế điều khiển quan trọng trong thiết kế các hệ thống agentic thích ứng, cho phép chúng thay đổi động đường thực thi để phản hồi với các đầu vào và trạng thái nội bộ thay đổi. Tính hữu ích của nó trải dài nhiều lĩnh vực bằng cách cung cấp một lớp logic có điều kiện cần thiết.

Trợ lý ảo và AI gia sư

Trong tương tác người-máy, chẳng hạn với trợ lý ảo hoặc gia sư AI, routing được sử dụng để diễn giải ý định người dùng. Phân tích ban đầu của truy vấn ngôn ngữ tự nhiên xác định hành động tiếp theo phù hợp nhất, cho dù đó là gọi một công cụ truy xuất thông tin cụ thể, leo thang lên nhân viên, hoặc chọn mô-đun tiếp theo trong chương trình học dựa trên hiệu suất của người dùng. Điều này cho phép hệ thống vượt ra ngoài luồng đối thoại tuyến tính và phản hồi theo ngữ cảnh.

Xử lý dữ liệu và tài liệu tự động

Trong các pipeline xử lý dữ liệu và tài liệu tự động, routing đóng vai trò như một hàm phân loại và phân phối. Dữ liệu đến, chẳng hạn như email, phiếu hỗ trợ hoặc API payload, được phân tích dựa trên nội dung, metadata hoặc định dạng. Hệ thống sau đó điều hướng mỗi mục đến quy trình tương ứng, chẳng hạn như quy trình tiếp nhận khách hàng tiềm năng, một hàm chuyển đổi dữ liệu cụ thể cho định dạng JSON hoặc CSV, hoặc đường leo thang cho vấn đề khẩn cấp.

Điều phối đa Agent

Trong các hệ thống phức tạp liên quan đến nhiều công cụ hoặc agent chuyên biệt, routing đóng vai trò như bộ điều phối cấp cao. Một hệ thống nghiên cứu bao gồm các agent riêng biệt để tìm kiếm, tóm tắt và phân tích thông tin sẽ sử dụng router để giao nhiệm vụ cho agent phù hợp nhất dựa trên mục tiêu hiện tại. Tương tự, một trợ lý viết mã AI sử dụng routing để xác định ngôn ngữ lập trình và ý định của người dùng — gỡ lỗi, giải thích hoặc dịch — trước khi chuyển đoạn mã đến công cụ chuyên biệt đúng.

Cuối cùng, routing cung cấp khả năng phân xử logic thiết yếu để tạo ra các hệ thống đa dạng chức năng và nhận biết ngữ cảnh. Nó biến đổi agent từ bộ thực thi tĩnh các chuỗi được định nghĩa trước thành hệ thống động có thể ra quyết định về phương pháp hiệu quả nhất để hoàn thành tác vụ trong điều kiện thay đổi.

Ví dụ mã thực hành (LangChain)

Triển khai routing trong mã liên quan đến việc định nghĩa các đường đi có thể và logic quyết định chọn đường nào. Các framework như LangChain và LangGraph cung cấp các thành phần và cấu trúc cụ thể cho điều này. Cấu trúc đồ thị dựa trên trạng thái của LangGraph đặc biệt trực quan để trực quan hóa và triển khai logic routing.

Đoạn mã này minh họa một hệ thống giống agent đơn giản sử dụng LangChain và Google Generative AI. Nó thiết lập một “coordinator” điều hướng yêu cầu người dùng đến các handler “sub-agent” mô phỏng khác nhau dựa trên ý định của yêu cầu (đặt chỗ, thông tin hoặc không rõ ràng). Hệ thống sử dụng mô hình ngôn ngữ để phân loại yêu cầu rồi ủy thác cho hàm handler phù hợp, mô phỏng mẫu ủy thác cơ bản thường thấy trong kiến trúc đa agent.

Đầu tiên, cài đặt các thư viện cần thiết:

pip install langchain langgraph google-cloud-aiplatform langchain-google-genai google-adk deprecated pydantic
# Copyright (c) 2025 Marco Fago
# https://www.linkedin.com/in/marco-fago/
#
# Mã nguồn được cấp phép theo Giấy phép MIT.
# Xem file LICENSE trong repository để biết toàn văn giấy phép.

from langchain_google_genai import ChatGoogleGenerativeAI
from langchain_core.prompts import ChatPromptTemplate
from langchain_core.output_parsers import StrOutputParser
from langchain_core.runnables import RunnablePassthrough, RunnableBranch

# --- Cấu hình ---
# Đảm bảo biến môi trường API key đã được đặt (ví dụ: GOOGLE_API_KEY)
try:
    llm = ChatGoogleGenerativeAI(model="gemini-2.5-flash", temperature=0)
    print(f"Language model initialized: {llm.model}")
except Exception as e:
    print(f"Error initializing language model: {e}")
    llm = None


# --- Định nghĩa các Handler Sub-Agent mô phỏng ---
def booking_handler(request: str) -> str:
    """Mô phỏng Booking Agent xử lý yêu cầu."""
    print("\n--- DELEGATING TO BOOKING HANDLER ---")
    return f"Booking Handler processed request: '{request}'. Result: Simulated booking action."


def info_handler(request: str) -> str:
    """Mô phỏng Info Agent xử lý yêu cầu."""
    print("\n--- DELEGATING TO INFO HANDLER ---")
    return f"Info Handler processed request: '{request}'. Result: Simulated information retrieval."


def unclear_handler(request: str) -> str:
    """Xử lý các yêu cầu không thể ủy thác."""
    print("\n--- HANDLING UNCLEAR REQUEST ---")
    return f"Coordinator could not delegate request: '{request}'. Please clarify."


# --- Định nghĩa chuỗi Router Coordinator ---
coordinator_router_prompt = ChatPromptTemplate.from_messages([
    ("system", """Analyze the user's request and determine which specialist handler should process it.
   - If the request is related to booking flights or hotels, output 'booker'.
   - For all other general information questions, output 'info'.
   - If the request is unclear or doesn't fit either category, output 'unclear'.

    ONLY output one word: 'booker', 'info', or 'unclear'."""),
    ("user", "{request}")
])

if llm:
    coordinator_router_chain = coordinator_router_prompt | llm | StrOutputParser()

# --- Định nghĩa logic ủy thác ---
# Sử dụng RunnableBranch để điều hướng dựa trên đầu ra của chuỗi router.
branches = {
    "booker": RunnablePassthrough.assign(
        output=lambda x: booking_handler(x['request']['request'])
    ),
    "info": RunnablePassthrough.assign(
        output=lambda x: info_handler(x['request']['request'])
    ),
    "unclear": RunnablePassthrough.assign(
        output=lambda x: unclear_handler(x['request']['request'])
    ),
}

# Tạo RunnableBranch — điều hướng đầu vào gốc đến handler tương ứng
delegation_branch = RunnableBranch(
    (lambda x: x['decision'].strip() == 'booker', branches["booker"]),
    (lambda x: x['decision'].strip() == 'info', branches["info"]),
    branches["unclear"]  # Nhánh mặc định cho 'unclear' hoặc đầu ra khác
)

# Kết hợp chuỗi router và nhánh ủy thác thành một runnable duy nhất
coordinator_agent = (
    {
        "decision": coordinator_router_chain,
        "request": RunnablePassthrough()
    }
    | delegation_branch
    | (lambda x: x['output'])  # Trích xuất đầu ra cuối cùng
)


# --- Ví dụ sử dụng ---
def main():
    if not llm:
        print("\nSkipping execution due to LLM initialization failure.")
        return

    print("--- Running with a booking request ---")
    request_a = "Book me a flight to London."
    result_a = coordinator_agent.invoke({"request": request_a})
    print(f"Final Result A: {result_a}")

    print("\n--- Running with an info request ---")
    request_b = "What is the capital of Italy?"
    result_b = coordinator_agent.invoke({"request": request_b})
    print(f"Final Result B: {result_b}")

    print("\n--- Running with an unclear request ---")
    request_c = "Tell me about quantum physics."
    result_c = coordinator_agent.invoke({"request": request_c})
    print(f"Final Result C: {result_c}")


if __name__ == "__main__":
    main()

Đoạn mã này xây dựng một hệ thống giống agent đơn giản sử dụng LangChain và mô hình Google Generative AI (gemini-2.5-flash). Nó định nghĩa ba handler sub-agent mô phỏng: booking_handler, info_handlerunclear_handler, mỗi handler được thiết kế để xử lý các loại yêu cầu cụ thể.

Thành phần cốt lõi là coordinator_router_chain, sử dụng ChatPromptTemplate để hướng dẫn mô hình ngôn ngữ phân loại yêu cầu người dùng đến thành một trong ba danh mục: 'booker', 'info' hoặc 'unclear'. Đầu ra của chuỗi router này sau đó được RunnableBranch sử dụng để ủy thác yêu cầu gốc cho hàm handler tương ứng. coordinator_agent kết hợp các thành phần này, trước tiên điều hướng yêu cầu để ra quyết định rồi chuyển yêu cầu đến handler đã chọn.

Ví dụ mã thực hành (Google ADK)

Agent Development Kit (ADK) là một framework để xây dựng các hệ thống agentic, cung cấp môi trường có cấu trúc để định nghĩa khả năng và hành vi của agent. Khác với các kiến trúc dựa trên đồ thị tính toán tường minh, routing trong mô hình ADK thường được triển khai bằng cách định nghĩa một tập hợp rời rạc các “tool” đại diện cho các chức năng của agent. Việc chọn tool phù hợp để phản hồi truy vấn người dùng được quản lý bởi logic nội bộ của framework, tận dụng mô hình cơ sở để khớp ý định người dùng với handler chức năng đúng.

Đoạn mã này minh họa một ứng dụng ADK sử dụng thư viện Google ADK. Nó thiết lập một agent “Coordinator” điều hướng yêu cầu người dùng đến các sub-agent chuyên biệt (“Booker” cho đặt chỗ và “Info” cho thông tin chung) dựa trên các hướng dẫn được định nghĩa. Các sub-agent sau đó sử dụng các tool cụ thể để mô phỏng xử lý yêu cầu.

# Copyright (c) 2025 Marco Fago
#
# Mã nguồn được cấp phép theo Giấy phép MIT.
# Xem file LICENSE trong repository để biết toàn văn giấy phép.

import uuid
from typing import Dict, Any, Optional
from google.adk.agents import Agent
from google.adk.runners import InMemoryRunner
from google.adk.tools import FunctionTool
from google.genai import types
from google.adk.events import Event


# --- Định nghĩa các hàm Tool ---
def booking_handler(request: str) -> str:
    """
    Xử lý yêu cầu đặt chỗ chuyến bay và khách sạn.
    Args:
        request: Yêu cầu đặt chỗ của người dùng.
    Returns:
        Thông báo xác nhận rằng đặt chỗ đã được xử lý.
    """
    print("------------- Booking Handler Called -------------")
    return f"Booking action for '{request}' has been simulated."


def info_handler(request: str) -> str:
    """
    Xử lý yêu cầu thông tin chung.
    Args:
        request: Câu hỏi của người dùng.
    Returns:
        Thông báo cho biết yêu cầu thông tin đã được xử lý.
    """
    print("------------- Info Handler Called ----------------")
    return f"Information request for '{request}'. Result: Simulated information retrieval."


def unclear_handler(request: str) -> str:
    """Xử lý các yêu cầu không thể ủy thác."""
    return f"Coordinator could not delegate request: '{request}'. Please clarify."


# --- Tạo Tool từ các hàm ---
booking_tool = FunctionTool(booking_handler)
info_tool = FunctionTool(info_handler)

# Định nghĩa các sub-agent chuyên biệt được trang bị tool tương ứng
booking_agent = Agent(
    name="Booker",
    model="gemini-2.0-flash",
    description="A specialized agent that handles all flight and hotel booking requests by calling the booking tool.",
    tools=[booking_tool]
)

info_agent = Agent(
    name="Info",
    model="gemini-2.0-flash",
    description="A specialized agent that provides general information and answers user questions by calling the info tool.",
    tools=[info_tool]
)

# Định nghĩa agent cha với hướng dẫn ủy thác rõ ràng
coordinator = Agent(
    name="Coordinator",
    model="gemini-2.0-flash",
    instruction=(
        "You are the main coordinator. Your only task is to analyze "
        "incoming user requests and delegate them to the appropriate specialist agent. "
        "Do not try to answer the user directly.\n"
        "- For any requests related to booking flights or hotels, delegate to the 'Booker' agent.\n"
        "- For all other general information questions, delegate to the 'Info' agent."
    ),
    description="A coordinator that routes user requests to the correct specialist agent.",
    # Sự hiện diện của sub_agents kích hoạt ủy thác dựa trên LLM (Auto-Flow) theo mặc định.
    sub_agents=[booking_agent, info_agent]
)


# --- Logic thực thi ---
async def run_coordinator(runner: InMemoryRunner, request: str):
    """Chạy agent coordinator với yêu cầu cho trước và ủy thác."""
    print(f"\n--- Running Coordinator with request: '{request}' ---")
    final_result = ""
    try:
        user_id = "user_123"
        session_id = str(uuid.uuid4())
        await runner.session_service.create_session(
            app_name=runner.app_name, user_id=user_id, session_id=session_id
        )
        for event in runner.run(
            user_id=user_id,
            session_id=session_id,
            new_message=types.Content(
                role='user',
                parts=[types.Part(text=request)]
            ),
        ):
            if event.is_final_response() and event.content:
                if hasattr(event.content, 'text') and event.content.text:
                    final_result = event.content.text
                elif event.content.parts:
                    text_parts = [part.text for part in event.content.parts if part.text]
                    final_result = "".join(text_parts)
                break
        print(f"Coordinator Final Response: {final_result}")
        return final_result
    except Exception as e:
        print(f"An error occurred while processing your request: {e}")
        return f"An error occurred while processing your request: {e}"


async def main():
    """Hàm chính để chạy ví dụ ADK."""
    print("--- Google ADK Routing Example (ADK Auto-Flow Style) ---")
    print("Note: This requires Google ADK installed and authenticated.")
    runner = InMemoryRunner(coordinator)

    result_a = await run_coordinator(runner, "Book me a hotel in Paris.")
    print(f"Final Output A: {result_a}")

    result_b = await run_coordinator(runner, "What is the highest mountain in the world?")
    print(f"Final Output B: {result_b}")

    result_c = await run_coordinator(runner, "Tell me a random fact.")
    print(f"Final Output C: {result_c}")

    result_d = await run_coordinator(runner, "Find flights to Tokyo next month.")
    print(f"Final Output D: {result_d}")


if __name__ == "__main__":
    import nest_asyncio
    nest_asyncio.apply()
    await main()

Script này bao gồm một agent Coordinator chính và hai sub-agent chuyên biệt: BookerInfo. Mỗi agent chuyên biệt được trang bị một FunctionTool bọc một hàm Python mô phỏng hành động. Hàm booking_handler mô phỏng xử lý đặt chỗ chuyến bay và khách sạn, trong khi hàm info_handler mô phỏng truy xuất thông tin chung.

Vai trò chính của agent Coordinator, như được định nghĩa trong instruction, là phân tích các tin nhắn người dùng đến và ủy thác cho agent Booker hoặc Info. Việc ủy thác này được xử lý tự động bởi cơ chế Auto-Flow của ADK vì Coordinatorsub_agents được định nghĩa. Hàm run_coordinator thiết lập InMemoryRunner, tạo user ID và session ID, rồi sử dụng runner để xử lý yêu cầu người dùng thông qua agent coordinator. Hàm main minh họa cách sử dụng hệ thống bằng cách chạy coordinator với các yêu cầu khác nhau.

Tóm lược nhanh

Vấn đề: Các hệ thống agentic thường phải phản hồi với nhiều loại đầu vào và tình huống đa dạng mà không thể xử lý bằng một quy trình tuyến tính đơn lẻ. Một quy trình tuần tự đơn giản thiếu khả năng ra quyết định dựa trên ngữ cảnh. Nếu không có cơ chế chọn đúng công cụ hoặc quy trình con cho tác vụ cụ thể, hệ thống vẫn cứng nhắc và không thích ứng.

Lý do: Mẫu Routing cung cấp giải pháp chuẩn hóa bằng cách đưa logic có điều kiện vào framework vận hành của agent. Nó cho phép hệ thống trước tiên phân tích truy vấn đến để xác định ý định hoặc bản chất. Dựa trên phân tích này, agent điều hướng động luồng điều khiển đến công cụ, hàm hoặc sub-agent chuyên biệt phù hợp nhất. Quyết định này có thể được dẫn dắt bởi nhiều phương pháp, bao gồm prompt LLM, áp dụng quy tắc được định nghĩa trước, hoặc sử dụng tương đồng ngữ nghĩa dựa trên embedding. Cuối cùng, routing biến đổi một đường thực thi tĩnh, được xác định trước thành quy trình linh hoạt và nhận biết ngữ cảnh có khả năng chọn hành động tốt nhất có thể.

Nguyên tắc chung: Sử dụng mẫu Routing khi agent phải quyết định giữa nhiều quy trình, công cụ hoặc sub-agent riêng biệt dựa trên đầu vào của người dùng hoặc trạng thái hiện tại. Nó thiết yếu cho các ứng dụng cần phân loại hoặc sàng lọc yêu cầu đến để xử lý các loại tác vụ khác nhau, chẳng hạn như chatbot hỗ trợ khách hàng phân biệt giữa yêu cầu bán hàng, hỗ trợ kỹ thuật và câu hỏi quản lý tài khoản.

Những điểm chính

  • Routing cho phép agent ra quyết định động về bước tiếp theo trong quy trình dựa trên các điều kiện.
  • Nó cho phép agent xử lý các đầu vào đa dạng và thích ứng hành vi, vượt ra ngoài thực thi tuyến tính.
  • Logic routing có thể được triển khai bằng LLM, hệ thống dựa trên quy tắc, hoặc tương đồng embedding.
  • Các framework như LangGraphGoogle ADK cung cấp các cách có cấu trúc để định nghĩa và quản lý routing trong quy trình agent, mặc dù với các cách tiếp cận kiến trúc khác nhau.

Kết luận

Mẫu Routing là bước quan trọng trong việc xây dựng các hệ thống agentic thực sự động và phản hồi. Bằng cách triển khai routing, chúng ta vượt ra ngoài các luồng thực thi tuyến tính đơn giản và trao quyền cho agent ra quyết định thông minh về cách xử lý thông tin, phản hồi đầu vào người dùng, và sử dụng các công cụ hoặc sub-agent có sẵn.

Routing có thể được áp dụng trong nhiều lĩnh vực, từ chatbot dịch vụ khách hàng đến các pipeline xử lý dữ liệu phức tạp. Khả năng phân tích đầu vào và điều hướng quy trình có điều kiện là yếu tố nền tảng để tạo ra các agent có thể xử lý sự biến thiên vốn có của các tác vụ thực tế.

Các ví dụ mã sử dụng LangChain và Google ADK minh họa hai cách tiếp cận khác nhau nhưng đều hiệu quả để triển khai routing. Cấu trúc dựa trên đồ thị của LangGraph cung cấp cách trực quan và tường minh để định nghĩa các trạng thái và chuyển đổi, lý tưởng cho các quy trình đa bước phức tạp với logic routing tinh vi. Google ADK, mặt khác, tập trung vào việc định nghĩa các khả năng riêng biệt (Tool) và dựa vào khả năng của framework để điều hướng yêu cầu người dùng đến handler tool phù hợp, có thể đơn giản hơn cho các agent với tập hành động rời rạc được định nghĩa rõ ràng.

Nắm vững mẫu Routing là yếu tố thiết yếu để xây dựng các agent có thể điều hướng thông minh các kịch bản khác nhau và cung cấp phản hồi hoặc hành động phù hợp dựa trên ngữ cảnh. Đây là thành phần then chốt trong việc tạo ra các ứng dụng agentic linh hoạt và mạnh mẽ.