Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • MCP - Response streaming

    Response streaming

    Khi xây dựng ứng dụng chat với Claude, có một thách thức quan trọng về trải nghiệm người dùng: các phản hồi có thể mất 10-30 giây để tạo ra, khiến người dùng phải nhìn chằm chằm vào biểu tượng loading. Giải pháp là streaming response, cho phép người dùng thấy văn bản xuất hiện từng đoạn khi Claude tạo ra, tạo cảm giác phản hồi nhanh hơn nhiều.
    Click image for larger version

Name:	image.png
Views:	9
Size:	23.6 KB
ID:	436167



    Vấn đề với Phản hồi Tiêu chuẩn
    Trong một thiết lập chat thông thường, server của bạn gửi tin nhắn người dùng cho Claude và chờ phản hồi hoàn chỉnh trước khi gửi bất cứ thứ gì trở lại client. Điều này tạo ra độ trễ khó chịu khi người dùng không có phản hồi nào rằng có gì đó đang xảy ra.

    Streaming Hoạt động như thế nào
    Với streaming được bật, Claude ngay lập tức gửi lại phản hồi ban đầu cho biết nó đã nhận được yêu cầu của bạn và bắt đầu tạo văn bản. Sau đó bạn nhận được một loạt events, mỗi cái chứa một phần nhỏ của phản hồi tổng thể.
    Server của bạn có thể chuyển tiếp các đoạn văn bản này đến ứng dụng client khi chúng đến, cho phép người dùng thấy phản hồi được xây dựng từng từ một. Tất cả các events này là một phần của một yêu cầu duy nhất đến Claude.
    Click image for larger version

Name:	image.png
Views:	6
Size:	28.6 KB
ID:	436168


    Hiểu về Stream Events
    Khi bạn bật streaming, Claude gửi lại nhiều loại events:
    • MessageStart - Một tin nhắn mới đang được gửi
    • ContentBlockStart - Bắt đầu một block mới chứa văn bản, tool use, hoặc nội dung khác
    • ContentBlockDelta - Các đoạn của văn bản thực tế được tạo ra
    • ContentBlockStop - Block nội dung hiện tại đã được hoàn thành
    • MessageDelta - Tin nhắn hiện tại đã hoàn thành
    • MessageStop - Kết thúc thông tin về tin nhắn hiện tại
    Các events ContentBlockDelta chứa văn bản thực tế được tạo ra mà bạn muốn hiển thị cho người dùng.
    Click image for larger version

Name:	image.png
Views:	6
Size:	32.0 KB
ID:	436169



    Triển khai Streaming Cơ bản
    Để bật streaming, thêm stream=True vào lời gọi messages.create của bạn:
    python
    messages = []
    add_user_message(messages, "Viết mô tả 1 câu về một cơ sở dữ liệu giả")

    stream = client.messages.create(
    model=model,
    max_tokens=1000,
    messages=messages,
    stream=True
    )

    for event in stream:
    print(event)
    Click image for larger version

Name:	image.png
Views:	6
Size:	37.3 KB
ID:	436170


    Text Streaming Đơn giản
    Thay vì phân tích events thủ công, bạn có thể sử dụng giao diện streaming đơn giản của SDK để trích xuất chỉ nội dung văn bản:
    python
    with client.messages.stream(
    model=model,
    max_tokens=1000,
    messages=messages
    ) as stream:
    for text in stream.text_stream:
    print(text, end="")
    Cách tiếp cận này tự động lọc ra mọi thứ trừ nội dung văn bản thực tế, thường là những gì bạn cần để hiển thị phản hồi cho người dùng.

    Lấy Tin nhắn Hoàn chỉnh
    Trong khi streaming các đoạn riêng lẻ rất tốt cho trải nghiệm người dùng, bạn thường cần tin nhắn hoàn chỉnh để lưu trữ hoặc xử lý thêm. Sau khi streaming hoàn thành, bạn có thể lấy tin nhắn cuối cùng đã được tập hợp:
    python
    with client.messages.stream(
    model=model,
    max_tokens=1000,
    messages=messages
    ) as stream:
    for text in stream.text_stream:
    # Gửi từng đoạn đến client của bạn
    pass

    # Lấy tin nhắn hoàn chỉnh để lưu trữ database
    final_message = stream.get_final_message()
    Điều này mang lại lợi ích của cả hai thế giới: streaming thời gian thực cho người dùng và một message object hoàn chỉnh cho logic ứng dụng của bạn.
Working...
X