paint-brush
Bạn muốn học Warhammer 40K? Xây dựng Chatbot này với Vector và RAG trên phần cứng hàng hóatừ tác giả@datastax
495 lượt đọc
495 lượt đọc

Bạn muốn học Warhammer 40K? Xây dựng Chatbot này với Vector và RAG trên phần cứng hàng hóa

từ tác giả DataStax11m2024/02/26
Read on Terminal Reader

dài quá đọc không nổi

Tìm hiểu về một phương pháp đơn giản để kết hợp các cửa hàng vectơ, tìm kiếm từ vựng và kỹ thuật nhắc nhở để thực hiện RAG chính xác trên phần cứng thông thường.
featured image - Bạn muốn học Warhammer 40K? Xây dựng Chatbot này với Vector và RAG trên phần cứng hàng hóa
DataStax HackerNoon profile picture
0-item


Khi xây dựng một ứng dụng AI tổng quát cần gọi mô hình ngôn ngữ lớn (LLM) nhiều lần để hoàn thành một tác vụ, một vấn đề phổ biến là các truy vấn lặp lại tới LLM có thể vừa tốn kém vừa khó đoán. Các mô hình lớn như GPT-3.5/4 cực kỳ tốn tài nguyên để đào tạo và chạy suy luận; điều này được phản ánh trong phí API cũng như sự gián đoạn dịch vụ không thường xuyên. ChatGPT ban đầu được phát hành dưới dạng bản xem trước nghiên cứu và không nhằm mục đích sử dụng cho các ứng dụng sản xuất. Tuy nhiên, tính hữu dụng của nó trên một loạt các ứng dụng là không thể chối cãi, vì vậy sự quan tâm đến LLM đã bùng nổ.


Kể từ khi ChatGPT ra đời, người dùng đã tìm mọi cách giải quyết vấn đề thiếu quyền riêng tư và không thể kiểm soát cài đặt thời gian hoạt động hoặc suy luận khi sử dụng GPT. Điều này đã dẫn đến sự phổ biến của các mô hình công khai, miễn phí như Llama 2 của Meta và sau đó là việc tạo ra các phiên bản Llama được lượng tử hóa và tham số thấp hơn có thể chạy trên phần cứng của người tiêu dùng. Các mô hình công khai này có khả năng cung cấp nhiều chức năng tương tự như GPT với sức mạnh tính toán thấp hơn nhiều, mặc dù phải trả giá bằng ít tham số hơn và ít kết quả đầu ra dài dòng hơn.


Nếu ứng dụng của bạn không nhất thiết phải phụ thuộc vào việc xử lý các ngữ cảnh quá lớn hoặc tạo ra các kết quả đầu ra dài dòng thì việc lưu trữ suy luận của riêng bạn về các phiên bản mà bạn kiểm soát có thể là một lựa chọn tiết kiệm chi phí hơn. Và khi nói đến các ứng dụng thế hệ tăng cường truy xuất (RAG) trong thế giới thực, sự khác biệt về chi phí có thể còn trở nên đáng kể hơn.


Tôi sẽ trình bày một phương pháp đơn giản để kết hợp các cửa hàng vectơ, tìm kiếm từ vựng và kỹ thuật nhắc nhở để thực hiện RAG chính xác trên phần cứng thông thường. Bằng cách sử dụng phương pháp này, bạn có thể vừa giảm độ phức tạp của khối lượng lớn thông tin, vừa giúp việc chạy các ứng dụng AI tổng hợp trở nên chính xác, hiệu quả và tiết kiệm chi phí hơn trên quy mô lớn. Bằng cách sử dụng RAG trên các kho thông tin cụ thể, bạn có thể có được khả năng loại bỏ ảo giác và tạo ra các tác nhân hiệu quả và hiểu biết từ bất kỳ tài liệu nguồn nào mà không cần phải trả tiền cho API của bên thứ ba.


Để bắt đầu, bạn sẽ cần phiên bản DataStax Enterprise 7 hoặc DataStax Astra DB để lưu trữ vectơ và dữ liệu văn bản, cũng như LLM và mô hình biến đổi câu để tạo phản hồi và mã hóa dữ liệu của bạn bằng vectơ. Tùy thuộc vào độ phức tạp của dữ liệu hoặc lời nhắc của người dùng, bạn cũng có thể xem xét kết hợp điều này với cơ sở dữ liệu DataStax Enterprise 6.8 có thể thực hiện tìm kiếm Solr để khớp với phạm vi dữ liệu rộng hơn, đó là những gì tôi đã sử dụng trong ví dụ này. DataStax liên tục nỗ lực cải tiến để thực hiện tất cả các hoạt động này với một cơ sở dữ liệu duy nhất, nhưng hiện tại, tôi sử dụng hai cơ sở dữ liệu.


Giải quyết ảo giác

Bất kể bạn chọn LLM nào, tất cả họ đều bị ảo giác . Hiện tại, hạn chế đó cần được giải quyết bằng cách cung cấp thông tin trung thực vào bối cảnh được nhắc tới LLM, hay còn gọi là RAG. Phương pháp giúp bạn định vị thông tin và chuyển đổi thông tin đó cho lời nhắc hoàn toàn phụ thuộc vào mô hình dữ liệu của bạn, nhưng bạn có thể tìm thấy thông tin thích hợp hơn theo cách hiệu quả hơn bằng cách sử dụng cơ sở dữ liệu vectơ.


Ví dụ: giả sử bạn có một bộ sưu tập sách điện tử về chủ đề bạn muốn khám phá, chẳng hạn như cách chơi Warhammer 40.000 . Trong những trường hợp bình thường, sẽ phải mất nhiều năm để đọc qua tài liệu hỗ trợ và tích lũy đủ kinh nghiệm chơi trò chơi để đạt đến trình độ chuyên gia.

Một câu hỏi có chủ đích như “Bạn có thể cho tôi biết điều gì về Morvenn Vahl của Adepta Sororitas?” sẽ được trả lời tốt nhất bởi một người chơi kỳ cựu hoặc bất kỳ nhân viên nào tại cửa hàng Warhammer. Mặc dù ChatGPT có thể trả lời nhiều câu hỏi về trò chơi nhưng rất tiếc là nó không có dữ liệu đào tạo về nhân vật cụ thể này:

So sánh điều này với LLM tham số Llama 2 13B được lưu trữ trên máy trạm tiêu dùng có card đồ họa Nvidia RTX A4000. Tương tự, mô hình có thể thể hiện kiến thức cơ bản về vũ trụ Warhammer, nhưng do việc điều chỉnh nên mô hình không quan tâm đến việc không tìm thấy nhân vật và thay vào đó cung cấp ảo giác với nỗ lực cao nhất:

Nếu bạn muốn xây dựng một chatbot có thể giúp cả người mới lẫn người kỳ cựu chơi Warhammer 40.000 thì những kết quả đầu ra này là không thể chấp nhận được. Để trở thành người hướng dẫn trò chơi hiệu quả, chatbot cần biết luật chơi, luật chơi cho từng đơn vị, một số thông tin về truyền thuyết cũng như một số chiến lược và bình luận. May mắn thay, tất cả thông tin về các quy tắc của phiên bản thứ 10 đều có sẵn miễn phí từ Games Workshop và các trang web dành cho người hâm mộ, đồng thời tất cả những gì bạn cần làm là làm cho thông tin đó có thể tìm kiếm được trên ứng dụng chatbot của bạn.


So sánh điều này với cùng một mô hình 13B Llama, trong đó với RAG, nó được yêu cầu so sánh một vài nguồn trên Morvenn Vahl và đưa ra câu trả lời phù hợp dựa trên lời nhắc của người dùng. Lần này, chatbot có quyền truy cập vào cơ sở dữ liệu tìm kiếm và cơ sở dữ liệu vectơ có đầy đủ tất cả thông tin công khai về cách chơi Warhammer 40.000, Phiên bản thứ 10:

Thật la khac biệt! Nó không chỉ tìm thấy thông tin thích hợp về nhân vật thích hợp này mà còn giữ cho kết quả đầu ra của nó phù hợp với bối cảnh cách chơi trò chơi với các quy tắc của phiên bản thứ 10.

Phần khó nhất trong tất cả những điều này là thực hiện tìm kiếm hiệu quả để tìm các trang có liên quan để đưa vào LLM. Đây là nơi cơ sở dữ liệu vector có thể đặc biệt hữu ích.

Áp dụng vectơ

Trong ví dụ này, chúng tôi sẽ sử dụng DSE 7 và DSE 6.8 chạy trong các phiên bản Docker để đáp ứng các yêu cầu về cơ sở dữ liệu của ứng dụng chatbot, ứng dụng này cần có khả năng so sánh vectơ và thực hiện tìm kiếm từ vựng. DSE 7 và Astra DB đã giới thiệu khả năng lưu trữ vectơ và thực hiện tìm kiếm vectơ cũng như lọc theo kết quả khớp văn bản. Chúng tôi chỉ cần tìm kiếm vài chục cuốn sách cho ví dụ này, vì vậy việc chạy các phiên bản DSE trong Docker sẽ đủ cho hầu hết phần cứng tiêu dùng.


Việc sử dụng vectơ trong cơ sở dữ liệu của bạn sẽ giúp tìm các tài liệu tương tự với một truy vấn nhất định hoặc chúng có thể được sử dụng để so sánh các kết quả được truy xuất từ một tìm kiếm khác. Điều này có thể giúp bạn khắc phục những hạn chế của tìm kiếm từ vựng và nâng cao hiệu quả của các mô hình dữ liệu.


Ví dụ: nội dung nào đó như tệp PDF sách điện tử có thể được hưởng lợi từ việc được mã hóa bằng các trình chuyển đổi câu như miniLM và các vectơ có thể được sử dụng để chạy so sánh tương tự giữa một truy vấn và một nguồn nhất định. Trong trường hợp này, mô hình chuyển đổi câu được sử dụng để tạo phần nhúng văn bản của trang vào sách điện tử và điều này có thể cho phép bạn so sánh với lời nhắc của người dùng để tìm hiểu xem kết quả có liên quan đến truy vấn hay không. Các trang có liên quan phải chứa một hoặc nhiều trường hợp thuật ngữ tương tự với truy vấn của người dùng và mang lại điểm tương đồng cao hơn theo quan điểm của mô hình.


Điều đó nói lên rằng, vectơ được áp dụng tốt nhất dưới dạng bổ sung cho mô hình tìm kiếm từ vựng hiện có. Nếu bạn chỉ tìm kiếm theo vectơ thì cuối cùng bạn có thể truy xuất bất ngờ các tài liệu không liên quan và cung cấp chúng dưới dạng ngữ cảnh nơi chúng không áp dụng.

Trong ví dụ này, truy vấn “Bạn có thể cho tôi biết điều gì về Morvenn Vahl của Adepta Sororitas?” có thể được LLM chuyển đổi thành một tập hợp các thuật ngữ tìm kiếm đơn giản:


Morvenn, Vahl, Adepta, Sororitas


Bước đầu tiên trong việc tìm kiếm các tài liệu liên quan là tìm kiếm các tài liệu có chứa các thuật ngữ cơ bản đó. Điều này có thể được thực hiện bằng cách trước tiên lọc các văn bản trùng khớp trong cơ sở dữ liệu để tìm các từ khóa trong văn bản trang khớp với một truy vấn như vậy. Lý do sử dụng LLM để tạo từ khóa là để cung cấp phạm vi từ khóa có thể tìm kiếm rộng hơn vì nó thường cố gắng thêm nhiều từ khóa có liên quan nhưng không có trong văn bản của lời nhắc ban đầu. Tuy nhiên, hãy cẩn thận với điều này vì LLM cũng có thể tạo ra các ký tự đặc biệt và các chuỗi kỳ lạ mà bạn sẽ cần phải loại bỏ.


Sau khi có ít nhất một kết quả, bạn có thể vector hóa truy vấn của người dùng và so sánh nó với các vectơ của tìm kiếm từ vựng, tạo ra điểm số về mức độ liên quan của từng kết quả. Điều này cho phép bạn kiểm tra độ chính xác của kết quả tìm kiếm đối với truy vấn và đặt ngưỡng từ chối các kết quả không liên quan khi cuối cùng trình bày kết quả của bạn cho LLM.


Trong trường hợp này, bước đầu tiên phải khớp với các trang hiển thị cụ thể thẻ chỉ mục hoặc cơ chế chơi trò chơi của Morvenn Vahl vì những trang đó mô tả đơn vị của nhân vật về cách đơn vị đó chơi trong trò chơi. Nếu trang đáp ứng một ngưỡng mức độ liên quan nhất định đối với truy vấn của người dùng, do ứng dụng xác định thì trang đó sẽ được tóm tắt và đưa vào danh sách kết quả.


Cuối cùng, kết quả tìm kiếm có thể được tổng hợp thành danh sách và phản hồi lại LLM, nơi nó được yêu cầu sử dụng các ngữ cảnh phù hợp nhất để trả lời truy vấn ban đầu. Đây là một hình dung của dòng chảy:



Như bạn có thể thấy, LLM được gọi khá thường xuyên cho luồng này. LLM chịu trách nhiệm chuyển lời nhắc của người dùng thành từ khóa, tóm tắt các kết quả có thể áp dụng và chọn ngữ cảnh nào trả lời tốt nhất cho truy vấn. Mỗi nguồn cần kiểm tra sẽ thêm một lệnh gọi LLM khác, việc này có thể khá tốn kém khi thực hiện truy vấn tới GPT. Nhưng nếu bạn đã có thông tin mình cần và chỉ muốn tóm tắt hoặc biến đổi nó, thì bạn có thể không cần sử dụng mô hình lớn như vậy. Trên thực tế, việc chuyển sang các mô hình nhỏ hơn có thể mang lại một số lợi ích.


Bằng cách sử dụng LLM nhỏ hơn, bạn có thể giảm chi phí tính toán cho mỗi truy vấn, điều này có thể giúp tiết kiệm đáng kể theo thời gian. Điều này cũng có thể mang lại thời gian phản hồi nhanh hơn cho người dùng của bạn, điều này có thể cải thiện trải nghiệm tổng thể của họ. Trong ví dụ này, khi RAG được thực hiện bằng LLM nhỏ và cơ sở dữ liệu nhỏ, tất cả đều được lưu trữ trên cùng một phiên bản GPU, sẽ mất khoảng 30 giây để truy xuất 15 nguồn, phân tích mức độ liên quan của chúng và đưa ra câu trả lời cuối cùng. Và các lời nhắc (nguồn) càng ngắn thì kết quả đầu ra có thể được trả về càng nhanh.


Ngoài ra, phương pháp này cho phép tăng cường bảo mật và khả năng mở rộng. Với kỹ thuật nhanh chóng và hệ thống các cuộc gọi tới LLM, bạn có toàn quyền kiểm soát cách truy cập dữ liệu và những gì người dùng sẽ nhận được trong phản hồi của họ. Về mặt sử dụng tài nguyên, mô hình tham số ví dụ 13B chỉ tiêu thụ hơn 8GB VRAM một chút và vẫn cung cấp câu trả lời phù hợp. Tùy thuộc vào nhu cầu, điều này cho thấy tiềm năng thậm chí có thể chạy RAG trên vô số nền tảng khác, chẳng hạn như máy trạm của người dùng và thiết bị di động.

Kiểm soát đầu ra

Kỹ thuật nhanh chóng là chìa khóa giúp RAG thực hiện chính xác những gì bạn muốn. Bạn có thể kiểm soát cách chatbot diễn giải dữ liệu và bối cảnh mà nó sẽ suy nghĩ. Trong ví dụ này, chúng tôi muốn đảm bảo rằng chatbot biết chúng tôi đang tìm kiếm thông tin cụ thể về Warhammer, vì vậy trước tiên chúng tôi có thể yêu cầu chatbot giúp cung cấp ngữ cảnh hỗ trợ cho truy vấn của người dùng:


Truy vấn: “<truy vấn của người dùng>”

Cung cấp cho tôi danh sách từ khóa Warhammer 40K tối thiểu, được phân tách bằng dấu phẩy cho một công cụ tìm kiếm. Chỉ trả lời câu hỏi. Không sử dụng biểu tượng cảm xúc hoặc ký tự đặc biệt.

Trả lời:


Warhammer 40.000 có đầy đủ các thuật ngữ và tên có thể xuất hiện trong nền văn hóa đại chúng không liên quan khác, vì vậy điều quan trọng là phải đặt bối cảnh của RAG ngay trong truy vấn đầu tiên. Ngữ cảnh này phải có sẵn để lựa chọn hoặc sửa đổi nếu ứng dụng của bạn bao gồm nhiều ngữ cảnh, chẳng hạn như nếu bạn cần bao gồm nhiều phiên bản của quy tắc trò chơi Warhammer hoặc kết hợp chúng với sách truyền thuyết chính thức.


Lưu ý rằng truy vấn của người dùng luôn được gói gọn trong dấu ngoặc kép cho thử nghiệm này. Điều này giúp LLM phân biệt giữa truy vấn mà nó đang cố gắng trả lời trực tiếp và các hướng dẫn kỹ thuật nhắc nhở riêng biệt mà nó không được trả lời trực tiếp. Phần câu hỏi/câu trả lời của lời nhắc có thể được điều chỉnh để phù hợp với bối cảnh cụ thể, nhưng về cơ bản, tất cả những gì bạn cần có thể làm là thông báo cho LLM những gì họ nên và không nên trả lời trực tiếp cũng như cách trả lời.


Trong trường hợp này, có thể an toàn khi cho rằng LLM có kiến thức chung về vũ trụ trò chơi vì bộ truyện này khá phổ biến và thông tin chung được cung cấp miễn phí. Đầu ra của truy vấn đầu tiên này giúp tạo ra một số từ khóa để sử dụng trong tìm kiếm từ vựng mà chúng ta không cần phải tạo một bảng ghi chú vào ứng dụng của mình.


Sau đó, việc so sánh từ vựng và vectơ có thể được thực hiện ở chế độ nền và danh sách kết quả được biên soạn để LLM xem xét. Bởi vì lời nhắc ban đầu của người dùng không bao giờ được trả lời trực tiếp bằng suy luận ở bước đầu tiên, LLM chỉ biến đổi những gì được tìm thấy trong tìm kiếm và có thể dễ dàng bị dừng trả lời các truy vấn bên ngoài đường ray bảo vệ hoặc cơ sở kiến thức của nó.

Nếu có kết quả liên quan từ tìm kiếm:


Truy vấn: “<truy vấn của người dùng>”

Xem lại các kết quả tìm kiếm này và sử dụng chúng để trả lời truy vấn.

Kết quả 1

Kết quả 2

vân vân.

Trả lời:


Nếu không có kết quả phù hợp từ tìm kiếm:


Truy vấn: “<truy vấn của người dùng>”
Lịch sự cho tôi biết bạn đã tìm kiếm nhưng không thể tìm thấy câu trả lời cho truy vấn. Thay vào đó hãy trả lời theo sự hiểu biết tốt nhất của bạn.

Trả lời:


Để tăng cường bảo mật, bạn hoàn toàn có thể từ chối hoặc chuyển hướng yêu cầu khi không thể phục vụ.


Truy vấn: “<truy vấn của người dùng>”

Lịch sự cho tôi biết bạn đã tìm kiếm nhưng không thể tìm thấy câu trả lời cho truy vấn. Thay vào đó, hãy hướng dẫn tôi liên hệ với nhóm Hỗ trợ khách hàng để được hỗ trợ.

Trả lời:


Bạn thậm chí có thể làm cho kết quả đầu ra dài hơn bằng cách hỏi thêm chi tiết. Miễn là bạn có thể đưa tài liệu nguồn của mình vào trong cửa sổ ngữ cảnh, LLM có thể chuyển đổi nó cho bạn.


Truy vấn: “<truy vấn của người dùng>”

Xem lại các kết quả tìm kiếm này và sử dụng chúng để trả lời truy vấn. Hãy càng chi tiết càng tốt và trích dẫn các nguồn.

Kết quả 1

Kết quả 2

vân vân.

Trả lời:

Hạn chế

LLM có cửa sổ ngữ cảnh hạn chế và sẽ không xử lý được các trang văn bản cực lớn. Hãy cân nhắc đặt giới hạn về kích thước hàng để dữ liệu của bạn dễ quản lý hơn và LLM xử lý dễ dàng hơn. Ví dụ: cắt các trang thành các đoạn khoảng 1.000 ký tự dường như hoạt động tốt và cố gắng tránh đưa nhiều hơn bốn hoặc năm câu trả lời chi tiết vào lời nhắc.


LLM không có bộ nhớ về cuộc trò chuyện ngoài những gì bạn có thể đưa vào cửa sổ ngữ cảnh. Có thể xây dựng một kho lưu trữ dữ liệu hội thoại cố định, nhưng LLM không thể đưa các cuộc hội thoại quá lớn hoặc bối cảnh chi tiết vào một lời nhắc; có giới hạn trên cho những gì nó có thể biến đổi. Điều này có nghĩa là dù thế nào đi nữa, tại một thời điểm nhất định, bạn sẽ nhận thấy rằng LLM dường như “quên” một số chi tiết nhất định ngay cả khi chúng được cung cấp dưới dạng ngữ cảnh; đây chỉ là một hạn chế cố hữu của công cụ. Tốt nhất bạn chỉ nên dựa vào nó cho những cuộc trò chuyện ngắn và tập trung chuyển đổi từng lượng nhỏ văn bản để giảm thiểu ảo giác.


Tính ngẫu nhiên trong LLM có thể là một vấn đề. Việc kiểm tra và điều chỉnh sẽ là cần thiết để xác định lời nhắc nào hoạt động tốt nhất cho tập dữ liệu của bạn và tìm ra mô hình nào hoạt động tốt nhất cho trường hợp sử dụng của bạn. Trong thử nghiệm của tôi với mô hình tham số 13B, có rất nhiều điều khó dự đoán về từ khóa tìm kiếm nào được tạo từ lời nhắc đầu tiên, đặc biệt là khi độ dài lời nhắc tăng lên. Để có kết quả tốt nhất, hãy tuân theo những lời nhắc ngắn hơn.

Phần kết luận

Tóm lại, việc tận dụng RAG bằng cách kết hợp các mô hình tìm kiếm vectơ và từ vựng cho phép tìm và sắp xếp các kết quả có liên quan hiệu quả hơn, đồng thời tạo ra các kết quả đầu ra tác nhân ít bị ảo giác hơn nhiều. Ngữ cảnh có thể tìm kiếm càng nhỏ thì phản hồi càng chính xác và chính xác. Việc xây dựng hệ thống cuộc gọi LLM tùy chỉnh của riêng bạn mang lại sự linh hoạt hơn nhiều trong việc điều chỉnh phản hồi theo mức độ chính xác và đường ray bảo vệ mong muốn của bạn.


Mặc dù nó không thể xử lý lượng dữ liệu quá lớn trong cửa sổ ngữ cảnh hạn chế, nhưng nó cung cấp khả năng tạo các trợ lý hiệu quả trên cơ sở kiến thức hạn chế, cũng như chạy nhiều tác nhân đồng thời hơn trên cùng một phần cứng hoặc ít hơn trước đây. Điều này có thể mở ra nhiều khả năng hơn cho trợ lý ảo cho các ứng dụng như chơi game trên máy tính bảng hoặc thậm chí bao gồm các chủ đề phức tạp hơn để chính phủ, các công ty pháp lý và kế toán, nghiên cứu khoa học, năng lượng, v.v. sử dụng.


Nếu bạn đã sẵn sàng bắt đầu xây dựng, bạn có thể dùng thử Astra DB miễn phí . Tạo cơ sở dữ liệu của bạn và bắt đầu tải các nguồn RAG ngay hôm nay mà không cần có kinh nghiệm vận hành cơ sở dữ liệu hoặc đám mây.


Bởi Mario Charnell-Delgado, DataStax


Cũng được xuất bản ở đây .