Bỏ qua đến nội dung chính

Streaming

📖 Nội dung bài học

Tóm tắt

Khi xây dựng giao diện chat với các model AI, người dùng mong muốn thấy phản hồi xuất hiện ngay lập tức thay vì phải chờ 10-30 giây để có phản hồi đầy đủ. Hàm converse_stream giải quyết vấn đề này bằng cách streaming văn bản khi nó được tạo ra, tạo ra trải nghiệm người dùng tốt hơn nhiều.

Cách Streaming Hoạt Động

Thay vì chờ toàn bộ phản hồi được tạo ra, streaming gửi lại các phần văn bản ngay khi chúng có sẵn. Đây là cách luồng thay đổi:

Khi bạn gọi converse_stream, bạn sẽ nhận lại ngay một phản hồi ban đầu có chứa một đối tượng stream. Stream này là một generator tạo ra các event khi model tạo ra văn bản. Mỗi event chứa một phần nhỏ của phản hồi tổng thể.

Triển khai cơ bản

Đây là cách dùng converse_stream trong code của bạn:

messages = []
add_user_message(messages, "Write a 1 sentence description of a fake database")
response = client.converse_stream(messages=messages, modelId=model_id)

for event in response["stream"]:
    print(event)

Code này sẽ in ra tất cả các event khác nhau khi chúng đến. Bạn sẽ thấy phản hồi đến theo từng phần thay vì tất cả cùng một lúc.

Hiểu các Event của Stream

Stream tạo ra một số loại event, mỗi loại phục vụ một mục đích khác nhau:

Đối với việc tạo văn bản cơ bản, bạn chỉ cần quan tâm đến các event contentBlockDelta. Chúng chứa các phần văn bản thực tế được tạo ra mà bạn muốn hiển thị cho người dùng.

Các event luôn đến theo một thứ tự có thể dự đoán được: messageStart, nhiều event contentBlockDelta chứa văn bản của bạn, sau đó là contentBlockStop, messageStop và cuối cùng là metadata.

Trích xuất Văn bản

Để chỉ lấy văn bản được tạo ra từ mỗi phần, hãy lọc các event contentBlockDelta và trích xuất văn bản:

text = ""
for event in response["stream"]:
    if "contentBlockDelta" in event:
        chunk = event["contentBlockDelta"]["delta"]["text"]
        print(chunk, end="")
        text += chunk

print("\n\nTotal Message:\n" + text)

Tham số end="" loại bỏ dấu xuống dòng tự động mà hàm print của Python thêm vào, làm cho văn bản streaming xuất hiện tự nhiên hơn.

Ứng dụng thực tế

Trong một ứng dụng thực tế, thay vì in ra từng phần, bạn thường sẽ:

  • Gửi từng phần đến frontend của bạn thông qua WebSocket hoặc Server-Sent Events
  • Cập nhật UI để hiển thị phản hồi đang tăng lên trong thời gian thực
  • Lưu trữ thông báo đầy đủ sau khi streaming kết thúc
  • Xử lý mọi lỗi có thể xảy ra trong quá trình streaming

Cách tiếp cận streaming này chuyển đổi trải nghiệm người dùng từ "gửi và chờ" thành "gửi và xem phản hồi xuất hiện", làm cho các ứng dụng hỗ trợ AI của bạn có cảm giác đáp ứng và hấp dẫn hơn nhiều.

Tải xuống

🔁 Bài học liên quan

📚 Nguồn & ghi nhận

Bài học có hữu ích không?

Góp ý / Báo lỗiPhát hiện sai sót hoặc có ý tưởng cải thiện?