Sống trong một thế giới nơi hầu hết mọi người khó khăn ra khỏi nhà mà không có smartphone đã có nghĩa Google không bao giờ quá xa với chúng ta. Trong một chớp mắt, chúng ta có thể tìm thấy câu trả lời cho hầu hết mọi câu hỏi thông qua truy vấn tìm kiếm trên công cụ tìm kiếm của Google.
Công cụ tìm kiếm (và quyền truy cập của chúng vào thông tin vô tận) đã được tích hợp vào cuộc sống hàng ngày, khiến nhiều người trong chúng ta phụ thuộc vào chúng một cách đáng kinh ngạc. Và để một công cụ trở nên tối ưu, câu trả lời cho các truy vấn cần được truy xuất ngay lập tức do tiêu chuẩn cao do Google và các ông lớn công nghệ khác đặt ra.
Bất kỳ độ trễ, chậm trễ hay kéo dài nào sẽ làm hỏng trải nghiệm người dùng, đó là lý do tại sao Ứng dụng Launchpad này, Alexis, đã sử dụng Redis làm cơ sở dữ liệu chính để vượt qua chướng ngại vật này.
Người sáng lập ứng dụng này, Bobby Donchev, đã tận dụng sức mạnh của RedisAI và RediSearch để truy xuất thông tin từ một ngữ liệu (corpus) để phản hồi truy vấn với hiệu quả tối đa. Người dùng có thể lập chỉ mục PDF và sử dụng giao diện người dùng đơn giản để trích xuất thông tin từ tài liệu của họ.
Nếu không có Redis, toàn bộ quá trình tìm kiếm sẽ chậm chạp, làm hỏng chức năng của Alexis. Hãy xem Bobby đã xây dựng ứng dụng này như thế nào.
Tuy nhiên, trước khi tiến tiếp, chúng tôi muốn nhấn mạnh rằng chúng tôi cũng có một loạt ứng dụng tuyệt vời cho bạn để xem trên Redis Launchpad. Vì vậy hãy chắc chắn kiểm tra nó!
- Bạn sẽ xây dựng gì?
- Bạn sẽ cần gì?
- Kiến trúc
- Bắt đầu
- Cách dữ liệu được lưu trữ
- Cách dữ liệu được truy cập
- Cách nó hoạt động
1. Bạn sẽ xây dựng gì?
Bạn sẽ xây dựng một bộ xếp hạng văn bản (text ranker) hiệu quả có thể truy xuất các truy vấn tìm kiếm với tốc độ tối đa. Người dùng sẽ có thể tận dụng ứng dụng này để lập chỉ mục các PDF quan trọng và trích xuất câu trả lời từ tài liệu của họ dễ dàng.
Chúng tôi sẽ đi qua từng bước theo thứ tự thời gian và làm nổi bật các thành phần cần thiết để xây dựng ứng dụng.
2. Bạn sẽ cần gì?
- RediSearch: lập chỉ mục, truy vấn và công cụ tìm kiếm toàn văn bản (full-text search engine)
- RedisAI: thực thi mô hình học sâu/học máy để quản lý dữ liệu và giảm độ trễ
- Redis Streams: quản lý tiêu thụ dữ liệu
- NodeJS: dùng làm nền tảng mã nguồn mở, đa nền tảng thực thi mã JavaScript bên ngoài trình duyệt web
- RedisJSON: triển khai Tiêu chuẩn Trao Đổi Dữ Liệu JSON ECMA-404 như một kiểu dữ liệu gốc (native data type).
3. Kiến trúc
Cung cấp câu trả lời cho truy vấn của người tìm kiếm diễn ra trong hai bước:
- Trước tiên, bạn chọn văn bản có khả năng chứa câu trả lời. Bạn sẽ phải sử dụng RediSearch với hàm xếp hạng BM25 cho bước này.
- Bạn có thể sử dụng mô hình AI Transformer được tải vào RedisAI để xác định các đoạn câu trả lời (answer spans) trong văn bản.
Bằng cách sử dụng RediSearch ở bước đầu tiên, bạn sẽ giảm đáng kể không gian tìm kiếm. Điều này sẽ làm cho trải nghiệm tổng thể của ứng dụng nhanh hơn. Sau đó, bạn sẽ cần sử dụng NodeJS với TypeScript ở backend và React với TypeScript ở frontend.
Ngoài việc sử dụng RedisAI và RediSearch, bạn sẽ tận dụng RedisJSON cho mô hình người dùng của mình cũng như một worker bất đồng bộ (asynchronous worker) được triển khai với Redis Streams.
Máy chủ web được expose (tiết lộ) với framework express có các endpoint sau:
Một khi bạn đăng ký và đăng nhập vào ứng dụng, bạn sẽ có thể bắt đầu thêm tài liệu vào thư viện được lập chỉ mục. Khi một PDF được tải lên, một sự kiện sẽ được ghi vào Redis Streams. Sau đó, ai đó từ nhóm người tiêu dùng (consumer group) sẽ lấy sự kiện để xử lý bất đồng bộ.
Sau đó bạn có thể xử lý PDF, áp dụng một số làm sạch và lưu trữ PDF trong một hash Redis được lập chỉ mục với RediSearch. Bây giờ bạn sẽ có thể gửi các truy vấn ngôn ngữ tự nhiên (natural queries) đến máy chủ và không bị giới hạn trong các tìm kiếm từ khóa cơ bản như 'triển khai kubernetes', 'DDD root aggregate' v.v.
Thay vào đó, bạn sẽ có thể truy vấn các tìm kiếm liên quan hơn.
Sơ đồ luồng (Flowchart)
Dưới đây là tổng quan chung về cách Alexis hoạt động.
Trả Lời Truy Vấn (Answer Query)
- Người dùng nhập truy vấn trên UI, truy vấn này được gửi đến RediSearch
- Cả RediSearch và hàm BM25 sau đó được kích hoạt bằng từ khóa để tìm nội dung có ý nghĩa nhất.
- Nội dung này sau đó được truyền đến RedisAI, cùng với truy vấn, để so sánh và quyết định câu trả lời nào phù hợp nhất với truy vấn của người dùng.
Tải Lên PDF & Lập Chỉ Mục Nội Dung PDF
- Người dùng gõ một câu hỏi vào công cụ tìm kiếm.
- RediSearch lập chỉ mục PDF và tìm kiếm câu trả lời cho truy vấn này.
- RedisAI chạy suy luận (inference) và kéo một số câu trả lời có thể.
- RedisAI sau đó so sánh từng câu trả lời và quyết định cái nào liên quan nhất đến truy vấn.
- Câu trả lời cuối cùng được hiển thị cho người dùng.
4. Bắt đầu
Bước 1: Cài đặt các điều kiện tiên quyết
Node - v12.x.x
NPM - v6.x.x
Docker and Docker-compose
Bước 2. Sao chép kho lưu trữ (Clone the repository)
Bước 3: Cài đặt các phụ thuộc
Thay đổi thư mục thành alexis và chạy lệnh dưới đây:
npm install
Bước 4. Thiết lập frontend và backend
Lệnh dưới đây sẽ bootstrap (khởi tạo) server và client app và cũng sẽ khởi tạo Redis server cũng như RedisInsight GUI:
npm run bootstrap
Bước 5. Khởi động ứng dụng
npm start
Bước 6. Truy cập ứng dụng
Mở https://localhost:3000 để truy cập ứng dụng
Bước 7. Truy cập RedisInsight
RedisInsight là công cụ trực quan cho phép bạn thực hiện cả tương tác dựa trên GUI và CLI với cơ sở dữ liệu Redis của bạn, và nhiều hơn nữa khi phát triển ứng dụng dựa trên Redis. Đây là một client GUI Desktop thuần túy đầy đủ tính năng cung cấp khả năng thiết kế, phát triển và tối ưu hóa ứng dụng Redis của bạn. Nhấp vào đây để tìm hiểu thêm về RedisInsight
RedisInsight GUI có thể truy cập qua liên kết sau: https://localhost:8001
5. Cách dữ liệu được lưu trữ
Bước 1: Dữ liệu người dùng được lưu trữ trong RedisJSON
Bước 2: Một chỉ mục RediSearch được tạo cho mỗi người dùng với mã dưới đây
Bước 3: Khi người dùng tải lên PDF, chúng tôi cập nhật mảng pdfs của họ với RedisJSON
Bước 4: Việc tải lên tệp cũng kích hoạt một sự kiện được ghi vào stream ax:stream:pdf-processing. Tải trọng (payload) của stream là:
Bước 5: Một consumer (người tiêu dùng) trong một consumer group lấy sự kiện từ stream và xử lý tệp, cũng ghi nội dung trong một hash.
6. Cách dữ liệu được truy cập
Trong ứng dụng này, có một chỉ mục RediSearch cho mỗi người dùng lập chỉ mục hash trên. Điều này cung cấp khả năng tra cứu để khớp nội dung liên quan với truy vấn của người dùng. Nội dung được phân tích với mã dưới đây:
Nội dung được truy xuất bởi RediSearch sau đó được truyền đến RedisAI để được phân tích.
7. Cách nó hoạt động
Tạo tài khoản
Khi bạn mở ứng dụng Alexis, bạn sẽ được điều hướng đến cổng đăng nhập (xem hình dưới). Nếu bạn chưa có tài khoản, bạn sẽ có cơ hội tạo một tài khoản mới từ siêu liên kết ở dưới cùng.
Một khi bạn đã đăng nhập, bạn sẽ được đưa đến một trang khác trên cổng. Nếu đây là lần đầu tiên bạn truy cập cổng, bạn sẽ không có tài liệu nào trong thư viện. Bước tiếp theo sẽ là nhập chúng vào ứng dụng.
Nhập tài liệu vào thư viện của bạn
Để bắt đầu thủ tục này, bạn có thể kéo thả tài liệu vào hộp ở giữa màn hình hoặc thủ công kéo chúng lên bằng cách nhấp vào biểu tượng đám mây.
Một khi bạn đã tải lên tài liệu, bạn sẽ nhận được xác nhận lưu trữ của nó thông qua việc hiển thị tiêu đề của nó ở phía bên trái màn hình (xem dưới).
Khi điều này xảy ra, PDF được tải lên máy chủ và cũng được làm sạch trong nền. Quá trình này hiệu quả nhờ các khả năng tiên tiến của Redis.
Thực hiện truy vấn của bạn
Như bạn có thể thấy từ hình ảnh trên, bạn chỉ cần gõ truy vấn bạn muốn ứng dụng truy xuất. Trong ví dụ này, người dùng đã trực tiếp hỏi nội dung tệp là về gì bằng cách gõ 'Hành trình là về cái gì?' (What is the journey about?)
Khi bạn đã gửi truy vấn, bạn sẽ tức thì được cung cấp một vài câu trả lời, mỗi cái được xếp hạng theo thứ bậc dựa trên độ liên quan (xem ví dụ dưới).
Kết luận: Làm cho tìm kiếm dễ dàng với Redis
Khi đến cốt lõi, mọi người đều mong đợi các truy vấn tìm kiếm tức thì không có độ trễ gì cả. Đây là kỷ nguyên số, sau cùng, và bất kỳ độ trễ nào chỉ sẽ đẩy người dùng ra xa và hướng về thứ gì đó tối ưu hơn.
Bằng cách sử dụng Redis, Alexis được cấp quyền hoạt động ở tiêu chuẩn cao cấp. Thu thập nội dung có ý nghĩa nhất trên các vị trí khác nhau nhanh chóng và hiệu quả nhờ RediSearch. Và khả năng siêu tiên tiến của RedisAI có thể lọc qua nội dung này và cung cấp cho người dùng câu trả lời chính xác và liên quan nhất cho truy vấn của họ.
Nếu bạn muốn khám phá thêm về cách ứng dụng này được làm thì bạn nên xem video YouTube của Bobby. Chúng tôi cũng có nhiều loại ứng dụng đa dạng cho bạn để lấy cảm hứng trên Redis Launchpad.
Từ tạo hệ thống theo dõi xe buýt thời gian thực ở Helsinki đến bảo vệ người được bảo hiểm nông nghiệp ở các quốc gia đang phát triển, lập trình viên từ khắp nơi trên thế giới đang tận dụng kỳ diệu của Redis để tạo ra sự khác biệt trong cuộc sống hàng ngày. Và bạn cũng có thể!
Ai đã tạo ra ứng dụng này?
Bobby Donchev
Bobby là một kỹ sư lập trình năng động đã có hơn mười hai năm kinh nghiệm thiết kế và triển khai hệ thống cho khách hàng.
Hãy chắc chắn ghé thăm trang GitHub của anh ấy để cập nhật tất cả các dự án anh ấy đã tham gia.