- Trong môi trường công nghệ thay đổi nhanh, việc duy trì vận hành on-call vững chắc là rất quan trọng để bảo đảm dịch vụ hoạt động trơn tru
- Các nhóm kỹ thuật nền tảng đang gặp khó khăn trong việc quản lý hiệu quả lịch trực on-call, ứng phó sự cố, liên lạc trong những thời điểm quan trọng và hỗ trợ khách hàng mạnh mẽ trên các kênh Slack®
- Bài viết mô tả Genie, một copilot on-call sử dụng AI tạo sinh để tối ưu hóa giao tiếp với kỹ sư on-call và trả lời câu hỏi
Tìm hiểu chi tiết hơn: vấn đề và động lực
- Tại Uber, nhiều nhóm như nhóm Michelangelo có các kênh hỗ trợ trên Slack để người dùng nội bộ có thể yêu cầu trợ giúp
- Trung bình mỗi tháng có 45.000 câu hỏi được đưa ra trên các kênh này
- Khối lượng câu hỏi lớn và thời gian chờ phản hồi dài làm giảm năng suất của cả người dùng lẫn kỹ sư on-call
Quy trình rườm rà
- Thông thường, khi người dùng đặt câu hỏi trong kênh Slack, họ phải chờ kỹ sư on-call phản hồi
- Kỹ sư on-call sẽ trả lời câu hỏi ban đầu của người dùng hoặc yêu cầu thêm chi tiết
- Người dùng có thể đặt câu hỏi tiếp theo, yêu cầu làm rõ thêm hoặc cung cấp thông tin bổ sung
- Khi đó lại phát sinh tình huống phải tiếp tục chờ phản hồi từ kỹ sư on-call
- Sau nhiều lượt trao đổi qua lại, câu hỏi của người dùng mới được giải quyết
Khó tìm thông tin
- Nhiều câu hỏi có thể được trả lời bằng cách tham chiếu tài liệu sẵn có, nhưng thông tin bị phân tán ở wiki nội bộ của Uber gọi là Engwiki, Stack Overflow nội bộ và các nơi khác, nên rất khó tìm ra câu trả lời cụ thể
- Kết quả là người dùng thường lặp đi lặp lại cùng một câu hỏi, tạo ra nhu cầu hỗ trợ on-call rất cao trên hàng trăm kênh Slack
Thách thức kiến trúc
- Để xây dựng copilot on-call, Uber đã lựa chọn giữa việc fine-tune mô hình LLM hoặc tận dụng Retrieval-Augmented Generation (RAG)
- Fine-tune đòi hỏi dữ liệu được tuyển chọn, chứa nhiều ví dụ đa dạng và chất lượng cao để LLM có thể học
- Ngoài ra còn cần tài nguyên tính toán để luôn cập nhật mô hình với các ví dụ mới
- Ngược lại, RAG không yêu cầu phải có sẵn nhiều ví dụ đa dạng ngay từ đầu
- Cách tiếp cận này rút ngắn thời gian ra mắt copilot, nên Uber đã chọn hướng này cho copilot
Việc xây dựng copilot on-call đi kèm một số thách thức như xử lý hiện tượng hallucination, bảo vệ nguồn dữ liệu và cải thiện trải nghiệm người dùng. Dưới đây là tổng quan về cách Uber giải quyết từng vấn đề.
Về hallucination, Uber tập trung vào các điểm sau:
- Độ chính xác của phản hồi: truy xuất kiến thức liên quan đến câu hỏi để bảo đảm bộ máy LLM không tạo ra thông tin sai lệch hoặc gây hiểu nhầm
- Cơ chế xác minh: triển khai phương thức kiểm chứng phản hồi của copilot dựa trên các nguồn có thẩm quyền để giảm khả năng hallucination
- Học liên tục: bảo đảm copilot có thể truy cập dữ liệu mới nhất để nâng cao độ chính xác
Để bảo mật dữ liệu, Uber đã lựa chọn rất cẩn thận các nguồn dữ liệu thu thập, vì có nhiều nguồn dữ liệu không thể bị lộ ra trên các kênh Slack
Để cải thiện trải nghiệm người dùng, Uber thiết kế như sau:
- Giao diện trực quan: thiết kế giao diện dễ sử dụng để người dùng có thể tương tác hiệu quả với copilot
- Vòng phản hồi: xây dựng hệ thống cho phép người dùng gửi phản hồi về câu trả lời để liên tục cải thiện hiệu năng của copilot
Những thách thức này đã được giải quyết khi phát triển một copilot on-call đáng tin cậy, thân thiện với người dùng và an toàn
Phân tích sâu về cấu trúc
- Hãy xem kiến trúc của copilot on-call Genie
- Tóm lại, Uber scrape các nguồn dữ liệu nội bộ như wiki nội bộ, Stack Overflow nội bộ và tài liệu yêu cầu kỹ thuật, sau đó dùng mô hình embedding của OpenAI để tạo vector từ các nguồn dữ liệu này
- Các embedding này được lưu trong cơ sở dữ liệu vector
- Sau đó, khi người dùng đăng câu hỏi lên kênh Slack, câu hỏi sẽ được chuyển thành embedding
- Dịch vụ sẽ truy xuất các embedding liên quan đến câu hỏi từ cơ sở dữ liệu vector
- Kết quả được lập chỉ mục bằng embedding sẽ được dùng làm prompt cho LLM để nhận phản hồi
Bước đẩy artifact cho khâu chuẩn bị dữ liệu, embedding và serving có thể được khái quát hóa thành một ứng dụng RAG dùng Apache Spark™. Các bước chung này tạo thành nền tảng của ứng dụng RAG
ETL
Chuẩn bị dữ liệu
- Ứng dụng Spark lấy nội dung từ từng nguồn dữ liệu thông qua API Engwiki hoặc API Uber Stack Overflow
- Ở bước chuẩn bị dữ liệu này, đầu ra là Spark DataFrame
- Schema có một cột chứa liên kết Engwiki, một cột khác chứa nội dung của Engwiki, và cả hai đều ở định dạng chuỗi
Tạo embedding
- Sau khi dữ liệu được scrape, embedding được tạo bằng mô hình embedding của OpenAI và được đẩy lên Terrablob, hệ thống Blob storage của Uber
- Các embedding được tạo ra chỉ có thể được truy cập thông qua các kênh Slack cụ thể gắn với không gian Engwiki tương ứng
- Định dạng đầu ra là một DataFrame có schema ánh xạ nội dung chunk với vector tương ứng của chunk đó
- Nội dung wiki nội bộ của Uber được chia chunk bằng langchain và embedding được tạo từ OpenAI thông qua PySpark UDF
Pusher
- Phần này cho thấy cách đẩy vector lên Terrablob
- Cũng mô tả cách vector được đẩy đi
- Một bootstrap job được kích hoạt để thu thập dữ liệu từ nguồn dữ liệu vào Sia
- Sia là giải pháp cơ sở dữ liệu vector nội bộ của Uber
- Sau đó, hai Spark job được kích hoạt để build và merge index, đồng thời thu thập dữ liệu vào Terrablob
- Tất cả các leaf sẽ đồng bộ và tải xuống index cơ sở cùng snapshot được lưu trong Terrablob
- Trong quá trình truy xuất, truy vấn được gửi trực tiếp tới từng leaf
Dịch vụ tri thức
- Genie có một dịch vụ backend tên là Knowledge Service
- Dịch vụ này trước tiên chuyển truy vấn đầu vào thành embedding, sau đó lấy các chunk phù hợp nhất từ cơ sở dữ liệu vector để trả lời cho mọi truy vấn đến
Theo dõi chi phí
- Để theo dõi chi phí, khi Slack client hoặc nền tảng khác gọi Knowledge Service, một UUID được truyền tới Knowledge Service
- Sau đó Knowledge Service chuyển UUID này tới Michelangelo Gateway thông qua context header
- Michelangelo Gateway là dịch vụ passthrough tới LLM, nên có thể thêm UUID đó vào audit log để theo dõi chi phí
Đánh giá hiệu năng của Genie
Cách đo lường
-
Người dùng có thể gửi phản hồi ngay trên Slack bằng cách nhấn vào các nút liên quan trong câu trả lời của Genie
-
Người dùng được cung cấp các lựa chọn sau:
- Đã giải quyết: câu trả lời đã giải quyết hoàn toàn vấn đề
- Hữu ích: câu trả lời có ích một phần nhưng người dùng vẫn cần thêm trợ giúp
- Không hữu ích: phản hồi sai hoặc không liên quan
- Không liên quan: người dùng cần hỗ trợ on-call và Genie không thể giúp được, ví dụ như review code
-
Khi người dùng để lại phản hồi, plugin Slack sẽ lấy dữ liệu đó và stream phản hồi cùng metadata liên quan vào bảng Hive bằng một Kafka topic cụ thể
-
Sau đó các metric này được trực quan hóa trên dashboard
Đánh giá hiệu năng
- Genie cũng cung cấp cho người dùng tùy chọn chạy đánh giá tùy chỉnh
- Người dùng có thể đánh giá hallucination, độ liên quan của câu trả lời hoặc các chỉ số khác mà họ cho là quan trọng với use case
- Các đánh giá này có thể được dùng để tinh chỉnh tốt hơn mọi thành phần RAG liên quan như truy xuất và sinh nội dung
Quy trình đánh giá là một pipeline ETL riêng sử dụng các thành phần Michelangelo đã được xây dựng sẵn. Context và phản hồi của Genie được truy xuất từ Hive rồi join với các dữ liệu liên quan khác như metadata của Slack và phản hồi người dùng. Dữ liệu sau xử lý được chuyển cho Evaluator. Evaluator lấy prompt được chỉ định và chạy LLM làm Judge. Các metric được chỉ định sẽ được trích xuất và đưa vào báo cáo đánh giá, người dùng có thể xem báo cáo này trong UI
Đánh giá tài liệu
- Việc truy xuất thông tin chính xác phụ thuộc vào độ rõ ràng và độ chính xác của tài liệu nguồn
- Nếu chất lượng tài liệu thấp, thì dù LLM có hoạt động tốt đến đâu cũng không thể cho hiệu năng tốt
- Vì vậy, khả năng đánh giá tài liệu và đưa ra các đề xuất có thể hành động để cải thiện chất lượng tài liệu là yếu tố thiết yếu với một hệ thống RAG hiệu quả và hữu dụng
Phần này mô tả workflow của ứng dụng đánh giá tài liệu. Sau khi dữ liệu được scrape, các tài liệu trong knowledge base được chuyển thành Spark DataFrame. Mỗi hàng trong DataFrame đại diện cho một tài liệu trong knowledge base. Sau đó, LLM được gọi làm Judge để xử lý đánh giá. Tại đây, prompt đánh giá tùy chỉnh được dùng để cung cấp đầu vào cho LLM. LLM trả về điểm đánh giá, phần giải thích cho điểm số, cũng như các đề xuất có thể hành động để cải thiện chất lượng của từng tài liệu. Tất cả các metric này được xuất bản thành báo cáo đánh giá mà người dùng có thể truy cập trong Michelangelo UI
Giải pháp cho các thách thức
- Để giảm hallucination, Uber đã thay đổi cách gửi prompt lấy từ cơ sở dữ liệu vector tới LLM
- Với mọi kết quả lấy từ cơ sở dữ liệu vector, Uber thêm rõ ràng URL nguồn tương ứng cùng với ngữ cảnh từng phần
- Yêu cầu LLM chỉ trả lời dựa trên các ngữ cảnh con đã được cung cấp và trả về các URL nguồn để trích dẫn cho câu trả lời
- Cố gắng cung cấp URL nguồn cho mọi câu trả lời
- Để tránh làm rò rỉ nguồn dữ liệu lên Slack tới những người không được phép truy cập các nguồn dữ liệu quan trọng hoặc không được phép tạo embedding bằng OpenAI, Uber đã tuyển chọn trước các nguồn dữ liệu mà phần lớn kỹ sư Uber có thể truy cập rộng rãi và chỉ cho phép sử dụng các nguồn đó để tạo embedding
- Để tối đa hóa khả năng Genie trả lời câu hỏi, Uber đã phát triển một chế độ tương tác mới
- Ở chế độ này, người dùng có thể đặt câu hỏi tiếp theo thuận tiện hơn và được khuyến khích đọc kỹ hơn câu trả lời của Genie
- Nếu Genie không thể trả lời câu hỏi, người dùng có thể dễ dàng escalte vấn đề lên bộ phận hỗ trợ on-call
Trong chế độ tương tác mới, khi người dùng đặt câu hỏi, Genie sẽ trả lời kèm các nút hành động cho bước tiếp theo. Thông qua các nút này, người dùng có thể dễ dàng đặt câu hỏi tiếp theo, đánh dấu câu hỏi là đã được giải quyết hoặc liên hệ hỗ trợ từ con người
Kết quả
- Kể từ khi ra mắt vào tháng 9 năm 2023, Genie đã mở rộng hiện diện tới 154 kênh Slack và trả lời hơn 70.000 câu hỏi
- Genie đạt tỷ lệ hữu ích 48,9%, cho thấy hiệu quả của nó đang gia tăng
- Ước tính từ khi ra mắt đến nay, Genie đã tiết kiệm 13.000 giờ công kỹ thuật
Tương lai
- Genie là một bot Slack tiên tiến được thiết kế để đơn giản hóa quản lý on-call, tối ưu hóa ứng phó sự cố và cải thiện cộng tác nhóm
- Được phát triển với trọng tâm là sự đơn giản và hiệu quả, Genie đóng vai trò như một trợ lý toàn diện, giúp các nhóm kỹ thuật xử lý liền mạch trách nhiệm on-call
- Copilot trợ lý on-call này có thể thay đổi toàn bộ trải nghiệm tương tác và phối hợp giữa người dùng và kỹ sư on-call trong các kênh Slack của từng nền tảng
- Ngoài ra, nó cũng có thể thay đổi trải nghiệm trong từng sản phẩm như Michelangelo hay IDE, để người dùng có thể tìm trợ giúp theo sản phẩm ngay trong kênh Slack của sản phẩm hoặc bên trong sản phẩm mà không phải chờ hỗ trợ on-call
Kết luận
- Copilot trợ lý on-call Genie đang cách mạng hóa cách các nhóm kỹ thuật quản lý công việc on-call
- Bằng cách thúc đẩy tự động giải quyết vấn đề và cung cấp phân tích sâu sắc, Genie giúp các nhóm xử lý trách nhiệm on-call một cách hiệu quả và hữu hiệu
Ý kiến của GN⁺
- Genie là một copilot on-call sáng tạo giúp tiết kiệm thời gian cho kỹ sư và cải thiện trải nghiệm người dùng bằng cách trả lời câu hỏi của người dùng trên vô số kênh Slack của Uber
- Thành công của Genie cho thấy sự kết hợp mạnh mẽ giữa công nghệ machine learning và chuyên môn của con người. Nó tận dụng dữ liệu quy mô lớn và LLM để cung cấp câu trả lời chính xác và hữu ích cho các câu hỏi
- Tuy nhiên, Genie vẫn còn những giới hạn và dư địa cải thiện. Nó chưa giải quyết triệt để vấn đề hallucination và đôi khi có thể cung cấp thông tin không chính xác hoặc gây hiểu nhầm. Hệ thống cần được cải thiện thông qua giám sát liên tục và phản hồi từ người dùng
- Một điểm cần cân nhắc khác là bảo mật dữ liệu và quyền riêng tư. Dữ liệu mà Genie xử lý có thể nhạy cảm và mang tính bí mật, vì vậy việc xử lý an toàn và kiểm soát truy cập là thiết yếu
- Trong tương lai, Genie có thể phát triển theo hướng nâng cao chất lượng câu trả lời, tích hợp thêm nhiều nguồn dữ liệu và tăng cường bảo mật. Cũng có thể mở rộng các copilot tương tự Genie sang các lĩnh vực kinh doanh khác
- Từ hỗ trợ khách hàng tự động, hỗ trợ bán hàng, cho tới thậm chí hỗ trợ lập trình, các trợ lý dựa trên AI có thể được áp dụng cho nhiều tác vụ khác nhau. Những công cụ này có thể nâng cao năng suất của nhân viên và cải thiện trải nghiệm người dùng
- Nhìn chung, Genie là một ví dụ thú vị cho thấy AI và chuyên môn của con người có thể dẫn tới cách làm việc và dịch vụ khách hàng tốt hơn như thế nào. Những công nghệ như vậy sẽ tiếp tục phát triển và được kỳ vọng tạo ra tác động đáng kể tới cách chúng ta làm việc và tương tác
Chưa có bình luận nào.