paint-brush
Hãy xây dựng một chatbot hỗ trợ khách hàng bằng RAG và tài liệu của công ty bạn trong OpenWebUItừ tác giả@hostkey
1,648 lượt đọc
1,648 lượt đọc

Hãy xây dựng một chatbot hỗ trợ khách hàng bằng RAG và tài liệu của công ty bạn trong OpenWebUI

từ tác giả Hostkey.com8m2024/07/09
Read on Terminal Reader

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

OpenWebUI mang đến cơ hội duy nhất để xây dựng các chatbot hấp dẫn và hữu ích ngay cả khi không có nhiều kinh nghiệm viết mã. Trong bài viết này, chúng tôi sẽ chia sẻ hành trình tạo một chatbot hỗ trợ kỹ thuật được thiết kế để hỗ trợ đội ngũ tuyến đầu của chúng tôi bằng cách trả lời các câu hỏi của người dùng. Đây là bản tóm tắt từng bước về hành động của nó.
featured image - Hãy xây dựng một chatbot hỗ trợ khách hàng bằng RAG và tài liệu của công ty bạn trong OpenWebUI
Hostkey.com HackerNoon profile picture
0-item

OpenWebUI là một nền tảng truyền thông toàn diện bao gồm một bộ công cụ AI: OpenAI, Ollama, Automation1111, ComfyUI, Whisper API, đào tạo mô hình tùy chỉnh, RAG dựa trên Langchain với ChromaDB, tìm kiếm trên web/BM25 lai, v.v.


Mặc dù tất cả những điều này đã có sẵn một thời gian, được ghi lại và có thể triển khai bằng kiến thức lập trình Python, OpenWebUI mang đến cơ hội duy nhất để xây dựng các chatbot hấp dẫn và hữu ích ngay cả khi không có nhiều kinh nghiệm viết mã.


Trong bài viết này, chúng tôi sẽ chia sẻ hành trình tạo một chatbot hỗ trợ kỹ thuật được thiết kế để hỗ trợ nhóm tuyến đầu của chúng tôi bằng cách trả lời các câu hỏi của người dùng (và cuối cùng trở thành một phần trong nhóm của chúng tôi).


Thuê máy chủ GPU triển khai ngay lập tức hoặc máy chủ có cấu hình tùy chỉnh với thẻ NVIDIA Tesla A100 / H100 80Gb hoặc A5000 / A4000 cấp chuyên nghiệp. Máy chủ GPU với thẻ RTX4090 chơi game cũng có sẵn.


Điểm khởi đầu

Chúng tôi có tài liệu người dùng được xây dựng bằng Tài liệu cho MkDocs. Điều này dẫn đến cấu trúc thư mục chứa các tệp .md có định dạng Markdown. Chúng tôi cũng đã triển khai thiết lập OpenWebUI và Ollama với mô hình hướng dẫn llama3-8b.


Mục đích của dự án:


  1. Phát triển chatbot tùy chỉnh: Chatbot này sẽ tương tác với người dùng và cung cấp thông tin dựa trên tài liệu của chúng tôi.
  2. Chuyển đổi tài liệu sang định dạng phù hợp với LLM: Chúng tôi cần chuyển đổi tài liệu Markdown của mình thành định dạng mà LLM có thể xử lý hiệu quả cho Thế hệ tăng cường truy xuất (RAG).
  3. Cho phép cập nhật và bổ sung dữ liệu: Hệ thống sẽ cho phép cập nhật và bổ sung liên tục vào cơ sở dữ liệu vectơ chứa tài liệu của chúng tôi.
  4. Tập trung vào trả lời câu hỏi: Chatbot chủ yếu hoạt động như một hệ thống trả lời câu hỏi và tránh tham gia vào các cuộc trò chuyện không liên quan đến CNTT.
  5. Cung cấp liên kết nguồn: Bất cứ khi nào có thể, chatbot nên liên kết lại với nguồn tài liệu gốc về thông tin được cung cấp.
  6. Triển khai tính năng lọc câu hỏi: Chúng ta cần khả năng cấu hình giới hạn câu hỏi cho chatbot. Ví dụ: chúng tôi có thể muốn ngăn nó trả lời các câu hỏi dựa trên vị trí địa lý.

Triển khai ngây thơ

Nỗ lực ban đầu của chúng tôi chỉ đơn giản là tải tài liệu hiện có ở định dạng Markdown ban đầu và sử dụng mô hình llama3 mà không có bất kỳ sửa đổi nào. Nói một cách nhẹ nhàng thì kết quả thật đáng thất vọng:


Đầu tiên: Tệp Markdown của chúng tôi chứa nhiều thành phần khác nhau như thẻ hình ảnh, chú thích cuối trang, khối mã, định dạng in đậm và in nghiêng, liên kết bên trong và bên ngoài, biểu tượng và thậm chí cả cấu trúc " ** " cho các nút. Tất cả "tiếng ồn" bổ sung này tạo ra vấn đề khi chia tài liệu thành nhiều phần để xử lý.


Thứ hai: Mô hình chuyển đổi câu/all-MiniLM-L6-v2 mà OpenWebUI sử dụng theo mặc định để biểu diễn các câu và đoạn văn trong không gian vectơ 384 chiều (cần thiết cho các tác vụ RAG như phân cụm và tìm kiếm ngữ nghĩa), chủ yếu được đào tạo bằng tiếng Anh . Chúng tôi muốn bot của mình cuối cùng cũng hỗ trợ các ngôn ngữ khác.


Thứ ba: Mặc dù llama3 là một mô hình hướng dẫn nhưng nó vẫn có thể được hướng vào các cuộc thảo luận ngoài chủ đề thay vì tập trung vào việc trả lời các truy vấn của người dùng. Model 70b có thể phù hợp hơn nhưng nó yêu cầu GPU có bộ nhớ video 40GB, trong khi llama3-8b có thể chạy trên GPU chỉ có 8GB.

Mặc dù vấn đề thứ ba có thể được giải quyết bằng cách tạo một mô hình tùy chỉnh (tác nhân theo thuật ngữ OpenAI), nhưng hai vấn đề đầu tiên yêu cầu các giải pháp quan trọng hơn. Đây là những gì chúng tôi đã nghĩ ra cho đến nay.

Từng bước: Thiết lập Chatbot hỗ trợ kỹ thuật trong OpenWebUI

Trước tiên, chúng tôi sẽ chuyển đổi tài liệu sang định dạng phù hợp để tải vào hệ thống RAG (Thế hệ tăng cường truy xuất) của chúng tôi. Chúng tôi đã tạo một tập lệnh bash mạnh mẽ có tên ai_text_generator để tự động hóa quy trình này.


Tập lệnh duyệt qua tất cả các thư mục tài liệu và sử dụng các biểu thức chính quy trong sed, awk và Perl để xóa và thay thế đánh dấu Markdown mà RAG không cần. Cuối cùng, nó thêm một liên kết đến tài liệu gốc được lưu trữ tại https://hostkey.com/documentation ở cuối mỗi tài liệu.



Tập lệnh này chuẩn bị tỉ mỉ tài liệu của bạn để sử dụng với hệ thống RAG trong OpenWebUI. Dưới đây là tóm tắt từng bước về hành động của nó:


  • Tạo URL: Nó tạo ra một URL hoàn chỉnh cho mỗi tệp tài liệu.
  • Xóa đánh dấu hình ảnh: Xóa tất cả đánh dấu Markdown liên quan đến hình ảnh.
  • Xóa chú thích: Loại bỏ tất cả các chú thích khỏi văn bản. Định dạng nút: Chuyển đổi cú pháp ** và ** của Markdown thành [ ], định dạng chúng dưới dạng nút một cách hiệu quả.
  • Xóa tiêu đề: Xóa các dòng bắt đầu bằng ">", có thể được sử dụng để tạo dàn bài hoặc mục lục.
  • Xóa biểu tượng: Xóa mọi đánh dấu hoặc mã Markdown đại diện cho biểu tượng.
  • Định dạng văn bản in đậm: Loại bỏ định dạng văn bản in đậm của Markdown.
  • Sửa đổi liên kết: Xóa các liên kết nội bộ trong khi vẫn giữ các liên kết bên ngoài.
  • Định dạng liên kết email: Định dạng lại liên kết đến địa chỉ email.
  • Chuẩn hóa khoảng trắng: Loại bỏ khoảng trắng thừa ở đầu mỗi dòng cho đến ký tự đầu tiên.
  • Chuyển đổi kết thúc dòng: Chuyển đổi CRLF (kết thúc dòng Windows) sang định dạng UNIX (LF).
  • Giảm dòng trống: Loại bỏ các dòng trống liên tiếp vượt quá một.
  • Nối thêm URL: Nối URL đã tạo vào cuối mỗi tệp được xử lý.


Sau khi chạy tập lệnh, thư mục ai_data sẽ chứa một tập hợp các tệp sẵn sàng để tải vào hệ thống RAG của OpenWebUI.



Tiếp theo, chúng ta cần thêm một mô hình mới vào OpenWebUI để làm việc với cơ sở dữ liệu vectơ tài liệu của chúng ta và Ollama LLM. Mô hình này phải hỗ trợ giọng điệu 'bạn' (ты) giản dị hơn, không chỉ bằng tiếng Anh. Chúng tôi dự định bổ sung thêm hỗ trợ cho các ngôn ngữ khác như tiếng Thổ Nhĩ Kỳ trong tương lai.


  1. Để bắt đầu, chúng ta sẽ vào Bảng quản trị - Cài đặt - Tài liệu . Trong trường Mô hình nhúng , chúng tôi sẽ chọn bộ biến đổi câu/all-MiniLM-L12-v2 . Chúng tôi đã thử nghiệm tất cả các mô hình được đề xuất từ danh sách này (https://www.sbert.net/docs/sentence_transformer/pretraining_models.html) và nhận thấy mô hình này phù hợp nhất.

  2. Chúng tôi sẽ nhấp vào biểu tượng tải xuống bên cạnh trường Mô hình nhúng để tải xuống và cài đặt nó.

  3. Ngay bây giờ chúng ta sẽ thiết lập các thông số RAG:

    • Top K = 10: Điều này có nghĩa là hệ thống sẽ xem xét top 10 tài liệu phù hợp nhất khi tạo phản hồi.

    • Chunk Size = 1024: Tài liệu sẽ được chia thành từng chunk 1024 token để xử lý.

    • Chunk Overlap = 100: Sẽ có sự chồng chéo 100 token giữa các chunk liên tiếp.



Sau đó, bạn có thể đi tới phần Không gian làm việc - Tài liệu và tải tài liệu của chúng tôi lên. Bạn nên cung cấp cho nó một thẻ bộ sưu tập cụ thể (trong trường hợp của chúng tôi là hostingkey_en) để giúp kết nối với mô hình hoặc yêu cầu API sau này dễ dàng hơn.



Tiếp theo, chúng ta sẽ tạo một mô hình tùy chỉnh cho chatbot của mình. Để thực hiện việc này, chúng ta sẽ quay lại Workspace - Models và nhấp vào biểu tượng dấu cộng.


Chúng tôi sẽ đặt tên cho chatbot của mình và chọn mô hình cơ sở (trong trường hợp của chúng tôi là llama3-mới nhất).


Sau đó, chúng tôi sẽ xác định Dấu nhắc hệ thống. Đây là những gì cho chatbot biết cách tự nhìn nhận và hành xử. Nó phác thảo vai trò, những hạn chế và kết quả mong muốn của chúng tôi.


Đây là Lời nhắc hệ thống mà chúng tôi đã thiết kế cho chatbot hỗ trợ kỹ thuật của mình:


You are HOSTKEY an IT Support Assistant Bot, focused on providing users with IT support based on the content from knowledge base. Stay in character and maintain your focus on IT support, avoiding unrelated activities such as creative writing or engaging in non-IT discussions.


If you cannot find relevant information in the knowledge base or if the user asks non-related questions that are not part of the knowledge base, do not attempt to answer and inform the user that you are unable to assist and print text "Visit https://hostkey.com/documentation for more information" at the end.


Provide short step-by-step instructions and external links


Provide a link to relevant doc page about user question started with 'See more information here:'Add text "Visit https://hostkey.com/documentation for more information" at the end.


Example of answer: " User: How can I cancel my server?


Bot:


You can cancel your server at any time. To do this, you need to access the Invapi control panel and follow these steps:

- Go to the "Billing" tab in the specific server management menu.

- Click the [Cancel service] button.

- Describe the reason for the cancellation and select its type.

- Click the [Confirm termination] button.


Please note that for immediate cancellation, we will not refund the hours of actual server usage, including the time to provision the server itself, order software, and process the cancellation request (up to 12 hours). The unused balance will be returned to your credit balance. Withdrawal of funds from the credit balance will be made in accordance with our refund policy.


You can cancel the service cancellation request in the Billing tab using the [Revoke] button.

Additionally, if you need to cancel a service that includes an OS/software license or has a customized/non-standard configuration, please contact us via a ticketing system for manual refund processing.


See more information here: https://hostkey.com/documentation/billing/services_cancellation/ "


Tiếp theo, chúng ta sẽ kết nối bộ sưu tập tài liệu cần thiết. Trong phần Kiến thức , chúng ta sẽ nhấp vào nút Chọn Tài liệu và chọn bộ sưu tập mà chúng ta cần dựa trên thẻ của nó.


Thuê máy chủ GPU triển khai ngay lập tức hoặc máy chủ có cấu hình tùy chỉnh với thẻ NVIDIA Tesla A100 / H100 80Gb hoặc A5000 / A4000 cấp chuyên nghiệp. Máy chủ GPU với thẻ RTX4090 chơi game cũng có sẵn.



Chúng tôi cũng cần định cấu hình một số tham số bổ sung ẩn trong tab Thông số nâng cao . Nhấp vào Hiển thị sẽ hiển thị các cài đặt này. Chúng tôi sẽ đặt Nhiệt độ thành 0,3 và Độ dài bối cảnh thành 4089.



Cuối cùng, chúng tôi nhấp vào Lưu & Cập nhật để tạo mô hình chatbot hỗ trợ kỹ thuật tùy chỉnh.


Và bạn có nó rồi đấy! Chatbot của chúng tôi sẵn sàng hoạt động và xử lý các yêu cầu của người dùng. Đó là lịch sự, kiên nhẫn và sẵn sàng 24/7.

Mẹo làm việc với RAG trong OpenWebUI

Dưới đây là một số lời khuyên quan trọng cần ghi nhớ:

  1. Nếu bạn đang làm việc với một số lượng lớn tài liệu trong RAG, bạn nên cài đặt OpenWebUI có hỗ trợ GPU (nhánh open-webui:cuda).
  2. Mọi sửa đổi đối với Mô hình nhúng (chuyển đổi, tải, v.v.) sẽ yêu cầu bạn lập chỉ mục lại tài liệu của mình vào cơ sở dữ liệu vectơ. Việc thay đổi các tham số RAG không bắt buộc phải làm điều này.
  3. Khi thêm hoặc xóa tài liệu, hãy luôn đi tới mô hình tùy chỉnh của bạn, xóa bộ sưu tập các tài liệu đó và thêm lại chúng. Nếu không, tìm kiếm của bạn có thể không hoạt động chính xác hoặc sẽ kém hiệu quả hơn đáng kể. Nếu bot của bạn cung cấp câu trả lời không chính xác nhưng tài liệu có thông tin cần thiết lại xuất hiện trong danh sách ở dưới cùng thì đây có thể là sự cố.
  4. Mặc dù OpenWebUI nhận dạng nhiều định dạng khác nhau để tạo RAG (pdf, csv, rst, xml, md, epub, doc, docx, xls, xlsx, ppt, ppt, txt), nhưng cách tốt nhất là tải tài liệu lên dưới dạng văn bản thuần túy để có hiệu suất tối ưu.
  5. Mặc dù tìm kiếm kết hợp có thể cải thiện kết quả nhưng nó tiêu tốn nhiều tài nguyên và có thể tăng đáng kể thời gian phản hồi (20-30-40 giây trở lên) ngay cả trên GPU mạnh mẽ. Đây là sự cố đã biết với các nhà phát triển đang tìm giải pháp.



Bây giờ chúng tôi đã thử nghiệm chatbot, bước tiếp theo là tích hợp nó vào hệ thống trò chuyện hiện có của công ty chúng tôi. OpenWebUI cung cấp API và có thể hoạt động như một proxy cho Ollama, bổ sung thêm các tính năng độc đáo của riêng nó. Tuy nhiên, tài liệu vẫn còn thiếu, khiến việc tích hợp gặp một chút thách thức.


Bằng cách kiểm tra mã và lịch sử cam kết, chúng tôi đã thu thập được một số thông tin chi tiết về cách cấu trúc các yêu cầu API, nhưng nó vẫn chưa hoạt động hoàn toàn như mong đợi. Chúng tôi đã cố gắng gọi mô hình tùy chỉnh nhưng không có chức năng RAG.

Chúng tôi háo hức chờ đợi các tính năng đã hứa của nhà phát triển trong các bản phát hành sắp tới, bao gồm RAG, tìm kiếm trên web cũng như các ví dụ và mô tả chi tiết.


Quá trình thử nghiệm cũng tiết lộ một số điểm mâu thuẫn và dư thừa trong tài liệu của chúng tôi. Điều này mang đến cơ hội vừa nâng cao hiệu suất của chatbot vừa cải thiện tính rõ ràng và chính xác tổng thể của tài liệu của chúng tôi.


Thuê máy chủ GPU triển khai ngay lập tức hoặc máy chủ có cấu hình tùy chỉnh với thẻ NVIDIA Tesla A100 / H100 80Gb hoặc A5000 / A4000 cấp chuyên nghiệp. Máy chủ GPU với thẻ RTX4090 chơi game cũng có sẵn.