GuidesOneMux

Tạo tác tử hỗ trợ khách hàng bằng LangGraph với gọi công cụ, phê duyệt của con người và giới hạn thực thi

Mẫu LangGraph thực tiễn để phân loại yêu cầu hỗ trợ khách hàng: định tuyến yêu cầu, gọi công cụ tra cứu, tạm dừng hoàn tiền để chờ người duyệt và giới hạn quá trình thực thi của đồ thị.

Mục lục

Quyết định thiết kế: để tác tử tra cứu, nhưng không tự quyết định hoàn tiền

Tác tử hỗ trợ nên được phép thu thập thông tin giao dịch mua và tìm các hồ sơ phù hợp, nhưng không được tự ý hoàn tiền. Trong LangGraph, có thể thể hiện ranh giới này ngay trong quy trình: định tuyến yêu cầu, gọi các công cụ tra cứu chỉ đọc khi cần, rồi tạm dừng trước thao tác hoàn tiền để một người có thể chấp thuận hoặc từ chối.

Hướng dẫn này xây dựng mẫu đó cho việc phân loại yêu cầu hỗ trợ khách hàng. Mẫu dùng LangGraph để điều phối, mô hình hội thoại có khả năng gọi công cụ để tra cứu, điểm kiểm tra có người duyệt trước nút thực hiện hành động quan trọng và giới hạn đệ quy để kiểm soát quá trình thực thi của đồ thị. Đây là mẫu để điều chỉnh theo nhu cầu, không phải tích hợp OneMux đã được kiểm thử.

Hướng dẫn LangSmith được cung cấp cho bài viết này xây dựng bot hỗ trợ cho cửa hàng nhạc số với các đồ thị con riêng biệt để tra cứu và hoàn tiền. Hướng dẫn mô tả việc trích xuất thông tin khách hàng và giao dịch mua, hỏi thêm khi còn thiếu thông tin, cũng như đánh giá phản hồi cuối, lộ trình gọi công cụ và các bước riêng lẻ. Ví dụ hoàn tiền của hướng dẫn dùng thao tác xóa trong cơ sở dữ liệu và nêu rõ là bỏ qua xác thực cùng các biện pháp bảo mật khác cần có trong môi trường thực tế. Không sao chép hành vi phá hủy dữ liệu trong bản demo đó vào hệ thống hỗ trợ đang vận hành. Đọc hướng dẫn đánh giá tác tử phức tạp của LangSmith.

Điều kiện tiên quyết và ranh giới

Cài đặt LangGraph và gói tích hợp LangChain phù hợp với nhà cung cấp mô hình bạn chọn. Hướng dẫn nguồn dùng langgraph và langchain[openai], nhưng ví dụ bên dưới chủ ý để phần khởi tạo mô hình phụ thuộc vào từng nhà cung cấp. Bạn cũng cần cơ sở dữ liệu hoặc dịch vụ có chức năng tra cứu giao dịch chỉ đọc và thao tác hoàn tiền do ứng dụng của bạn kiểm soát.

Trước khi kết nối mô hình, hãy xác định rõ chức năng của từng công cụ:

  • Tra cứu: chỉ trả về hồ sơ mà khách hàng đã xác thực được phép xem.
  • Chuẩn bị hoàn tiền: xác định đúng giao dịch và số tiền; không thay đổi hồ sơ.
  • Thực hiện hoàn tiền: thực hiện hành động đã được chấp thuận trong mã ứng dụng, kèm kiểm tra phân quyền và ghi nhật ký kiểm toán.

Hãy để việc xác thực khách hàng, phân quyền, tính lũy đẳng và chính sách hoàn tiền nằm ngoài quyền tùy nghi của mô hình. Tên khách hàng hoặc mã hóa đơn do mô hình tạo ra không phải bằng chứng nhận dạng.

Xây dựng đồ thị có điểm kiểm tra của con người

Ví dụ dùng một mô hình hỗ trợ gọi công cụ, một công cụ tra cứu và một nút hoàn tiền riêng. Thay các hàm ứng dụng được đánh dấu bằng lời gọi dịch vụ của riêng bạn, có kiểm tra phân quyền. Điểm cuối bạn cấu hình phải hỗ trợ mô hình và lược đồ công cụ; khả năng tương thích phụ thuộc vào việc tài liệu của điểm cuối có xác nhận hỗ trợ các tham số hay không. Đoạn mã này không chứng minh rằng một mô hình cụ thể hoặc cấu hình OneMux nào đã được kiểm thử.

from typing import Annotated, Literal

from langchain.tools import tool
from langchain_core.messages import AnyMessage
from langgraph.graph import END, START, StateGraph
from langgraph.graph.message import add_messages
from langgraph.prebuilt import ToolNode, tools_condition
from langgraph.checkpoint.memory import MemorySaver
from langgraph.types import interrupt
from typing_extensions import TypedDict

# Replace with your provider's documented LangChain model setup.
# Confirm that the chosen endpoint supports tool calling and the parameters used.
model = make_your_chat_model().bind_tools([])  # bind the tools below in your application

class State(TypedDict):
    messages: Annotated[list[AnyMessage], add_messages]
    refund_request: dict | None
    approval: str | None

@tool
def find_purchases(customer_reference: str) -> list[dict]:
    """Find purchases for an already authenticated customer."""
    return authorized_purchase_lookup(customer_reference)

tools = [find_purchases]
model = make_your_chat_model().bind_tools(tools)

def assistant(state: State):
    return {"messages": [model.invoke(state["messages"])]}

def prepare_refund(state: State):
    # Build this from validated application data, not model-invented values.
    request = build_validated_refund_request(state["messages"])
    decision = interrupt({
        "type": "refund_approval",
        "request": request,
        "instruction": "Approve or reject this exact refund request.",
    })
    if decision != "approve":
        return {"approval": "rejected", "refund_request": request}
    return {"approval": "approved", "refund_request": request}

def execute_refund(state: State):
    if state.get("approval") != "approved":
        return {"messages": [{"role": "assistant", "content": "The refund was not approved."}]}
    result = issue_refund_safely(state["refund_request"])
    return {"messages": [{"role": "assistant", "content": format_refund_result(result)}]}

builder = StateGraph(State)
builder.add_node("assistant", assistant)
builder.add_node("tools", ToolNode(tools))
builder.add_node("prepare_refund", prepare_refund)
builder.add_node("execute_refund", execute_refund)
builder.add_edge(START, "assistant")
builder.add_conditional_edges("assistant", tools_condition)
builder.add_edge("tools", "assistant")
builder.add_edge("prepare_refund", "execute_refund")
builder.add_edge("execute_refund", END)

graph = builder.compile(checkpointer=MemorySaver())

Đây là ví dụ về cấu trúc, không phải đồ thị định tuyến hoàn chỉnh: ứng dụng của bạn cần định tuyến ý định hoàn tiền đã được xác minh đến prepare_refund, còn câu hỏi thông thường đi theo luồng trợ lý/tra cứu. Lệnh gọi interrupt() tạm dừng đồ thị và trả về gói dữ liệu phê duyệt cho bên gọi. Giao diện duyệt của con người nên hiển thị khách hàng, giao dịch, số tiền và ngữ cảnh chính sách trước khi gửi quyết định. Tiếp tục cùng luồng bằng cơ chế Command(resume=...) của LangGraph và cùng mã định danh luồng. Hãy lưu các điểm kiểm tra một cách phù hợp; checkpoint trong bộ nhớ dành cho phát triển, không phù hợp với quy trình sản xuất cần lưu trữ bền vững.

Một chi tiết quan trọng về luồng điều khiển: interrupt là điểm tạm dừng, không phải cơ chế phân quyền. Hãy kiểm tra lại giá trị phê duyệt trong nút thực hiện hoàn tiền và bảo đảm bản thân dịch vụ hoàn tiền cũng kiểm tra phân quyền, điều kiện hợp lệ của giao dịch và yêu cầu trùng lặp.

Giới hạn quá trình thực thi và hiển thị lỗi

Truyền giới hạn đệ quy khi gọi đồ thị. Giới hạn này áp dụng cho các bước siêu cấp của đồ thị; nó không giới hạn số token của mô hình, thời gian chạy công cụ, chi phí truy vấn cơ sở dữ liệu hay số lượng yêu cầu của người dùng. Hãy đặt thời gian chờ và giới hạn tài nguyên riêng cho lời gọi mô hình và công cụ.

from langgraph.errors import GraphRecursionError

config = {
    "configurable": {"thread_id": "support-case-123"},
    "recursion_limit": 12,
}

try:
    result = graph.invoke(
        {"messages": [{"role": "user", "content": "I need help with a purchase."}]},
        config=config,
    )
except GraphRecursionError:
    # Return a safe handoff or ask for clarification; log the trace for review.
    result = {"status": "needs_human_review"}

Chọn giới hạn dựa trên quy trình dự kiến, sau đó kiểm thử cả trường hợp hoàn tất bình thường lẫn đầu vào dễ gây lặp. Tránh âm thầm thử lại khi đồ thị đã vượt giới hạn: việc thử lại có thể lặp lại lời gọi công cụ nếu công cụ không có tính lũy đẳng. Công cụ tra cứu chỉ đọc an toàn hơn khi thử lại so với các thao tác gây tác động phụ.

Đánh giá lộ trình, không chỉ câu trả lời

Hướng dẫn LangSmith được cung cấp nêu ba mục tiêu đánh giá hữu ích: phản hồi cuối (câu trả lời cho khách hàng có phù hợp không?), lộ trình (tác tử có đi đúng luồng gọi công cụ dự kiến không?) và bước đơn lẻ (tác tử có chọn đúng công cụ cho một quyết định cụ thể không?). Với phân loại yêu cầu hoàn tiền, hãy tạo các ca kiểm thử cho trường hợp thiếu thông tin nhận dạng, có nhiều giao dịch mua phù hợp, tra cứu không có kết quả, yêu cầu phê duyệt bị từ chối và yêu cầu hoàn tiền được chấp thuận.

Kiểm tra để bảo đảm tác tử yêu cầu thông tin bắt buộc thay vì tự bịa; việc tra cứu không kích hoạt hoàn tiền; và không thể thực hiện giao dịch nếu chưa được phê duyệt. Dùng dịch vụ giả lập hoặc dịch vụ kiểm thử để đánh giá, tránh làm thay đổi hồ sơ khách hàng thật. Hướng dẫn nguồn dùng chế độ giả lập cho các thao tác cơ sở dữ liệu, nhưng chỉ mô tả thiết lập bản demo của họ — không phải bảo đảm an toàn cho môi trường sản xuất.

Dùng OneMux để truy cập mô hình

OneMux cung cấp quyền truy cập vào các mô hình AI hàng đầu thông qua một API tương thích với OpenAI. Nếu muốn dùng một giao diện API duy nhất để truy cập mô hình, hãy xem hướng dẫn bắt đầu nhanh OneMux, tài liệu API và các mô hình hiện có. Khả năng tương thích với quy trình này phụ thuộc vào tài liệu của điểm cuối mô hình được chọn có xác nhận hỗ trợ gọi công cụ và các tham số được chấp nhận hay không. Hãy xác nhận các chi tiết đó trước khi triển khai; bài viết này không khẳng định ví dụ LangGraph đã được kiểm thử với OneMux.

Giới hạn và khắc phục sự cố

  • Mô hình không gọi công cụ: kiểm tra xem điểm cuối đã chọn có hỗ trợ gọi công cụ không và lược đồ công cụ có được truyền theo định dạng được tài liệu hướng dẫn hay không.
  • Đồ thị lặp vô hạn: kiểm tra các chuyển tiếp giữa trợ lý và công cụ, giới hạn số bước của đồ thị, đồng thời bảo đảm kết quả công cụ hoàn tất sẽ làm thay đổi quyết định tiếp theo.
  • Tiếp tục phê duyệt nhầm ca: dùng mã định danh luồng ổn định gắn với ca hỗ trợ và xác minh checkpoint trước khi tiếp tục.
  • Hoàn tiền hai lần: thêm tính lũy đẳng ở ranh giới dịch vụ và ghi lại yêu cầu đã được chấp thuận cùng kết quả thực hiện.
  • Tác tử để lộ hồ sơ của khách hàng khác: sửa phân quyền trong dịch vụ tra cứu; chỉ dẫn trong prompt không phải cơ chế kiểm soát truy cập.

Kết luận

LangGraph cho phép biểu diễn việc phân loại yêu cầu hỗ trợ thành các bước quy trình rõ ràng, thay vì tin cậy một phản hồi duy nhất của mô hình để quyết định và hành động. Hãy giữ tra cứu ở chế độ chỉ đọc, tạm dừng trước khi hoàn tiền, xác minh phê duyệt tại thời điểm thực hiện và giới hạn số bước của đồ thị. Sau đó, đánh giá cả câu trả lời lẫn lộ trình tác tử đã đi qua. Các biện pháp này giúp quy trình dễ kiểm tra hơn, nhưng trách nhiệm bảo mật và thực thi chính sách trong môi trường sản xuất vẫn thuộc về ứng dụng.

Nguồn

FAQ

Làm thế nào để yêu cầu con người phê duyệt trước khi tác tử LangGraph hoàn tiền?

Tạm dừng đồ thị trước nút thực hiện hoàn tiền bằng interrupt của LangGraph, trình bày yêu cầu đã được xác minh cho người duyệt và chỉ tiếp tục từ cùng checkpoint sau khi nhận được quyết định rõ ràng. Đồng thời kiểm tra lại phê duyệt trong nút thực hiện và áp dụng chính sách tại dịch vụ hoàn tiền.

Giới hạn đệ quy của LangGraph có giới hạn thời gian chạy công cụ hoặc số token của mô hình không?

Không. Giới hạn này kiểm soát các bước siêu cấp của đồ thị, chứ không giới hạn số token mô hình sử dụng, thời lượng chạy công cụ, chi phí cơ sở dữ liệu hay lượng yêu cầu gửi đến. Hãy bổ sung thời gian chờ và giới hạn tài nguyên độc lập.

Mô hình có thể quyết định khách hàng có đủ quyền được hoàn tiền hay không?

Không. Hãy xem đầu ra của mô hình là dữ liệu đầu vào không đáng tin cậy. Xác thực khách hàng và kiểm tra quyền truy cập giao dịch cũng như điều kiện hoàn tiền trong mã ứng dụng và dịch vụ.

Nên đánh giá những gì trong tác tử hỗ trợ khách hàng?

Đánh giá phản hồi cuối, chuỗi lời gọi công cụ và từng bước chọn công cụ. Đưa vào các ca thiếu thông tin, giao dịch mua không rõ ràng, phê duyệt bị từ chối và hoàn tiền được chấp thuận; dùng dịch vụ kiểm thử cho các thao tác gây tác động phụ.

Bài viết liên quan