paint-brush
RAG'ı ve şirketinizin OpenWebUI'daki belgelerini kullanarak bir müşteri destek sohbet robotu oluşturalımby@hostkey
182

RAG'ı ve şirketinizin OpenWebUI'daki belgelerini kullanarak bir müşteri destek sohbet robotu oluşturalım

Hostkey.com8m2024/07/09
Read on Terminal Reader

OpenWebUI, kapsamlı kodlama deneyiminiz olmasa bile büyüleyici ve kullanışlı sohbet robotları oluşturmak için eşsiz bir fırsat sunuyor. Bu makalede, kullanıcı sorularını yanıtlayarak ön saflardaki ekibimize yardımcı olmak üzere tasarlanmış bir teknik destek sohbet robotu oluşturma yolculuğumuzu paylaşacağız. İşte eylemlerinin adım adım bir özeti.
featured image - RAG'ı ve şirketinizin OpenWebUI'daki belgelerini kullanarak bir müşteri destek sohbet robotu oluşturalım
Hostkey.com HackerNoon profile picture
0-item

OpenWebUI, bir dizi yapay zeka aracı içeren kapsamlı bir medya platformudur: OpenAI, Ollama, Otomatik1111, ComfyUI, Whisper API, özel model eğitimi, ChromaDB ile Langchain tabanlı RAG, hibrit BM25/web araması ve daha fazlası.


Bunların hepsi bir süredir mevcut, belgelenmiş ve Python programlama bilgisiyle uygulanabilir olmasına rağmen, OpenWebUI, kapsamlı kodlama deneyimi olmasa bile büyüleyici ve kullanışlı sohbet robotları oluşturmak için eşsiz bir fırsat sunuyor.


Bu makalede, kullanıcı sorularını yanıtlayarak (ve sonunda ekibimizin bir parçası haline gelerek) ön saflardaki ekibimize yardımcı olmak üzere tasarlanmış bir teknik destek sohbet robotu oluşturma yolculuğumuzu paylaşacağız.


Anında dağıtımlı GPU sunucuları veya profesyonel düzeyde NVIDIA Tesla A100 / H100 80Gb veya A5000 / A4000 kartlarıyla özel yapılandırmaya sahip bir sunucu kiralayın. Oyun RTX4090 kartlarına sahip GPU sunucuları da mevcuttur.


Başlangıç noktası

MkDocs için Malzeme kullanılarak oluşturulmuş kullanıcı belgelerimiz var. Bu, Markdown biçimlendirmesine sahip .md dosyalarını içeren bir dizin yapısıyla sonuçlanır. Ayrıca llama3-8b-instruct modelinin yüklü olduğu konuşlandırılmış bir OpenWebUI ve Ollama kurulumumuz da var.


Proje hedefleri:


  1. Özel bir sohbet robotu geliştirin: Bu sohbet robotu kullanıcılarla etkileşime girecek ve belgelerimize dayalı olarak bilgi sağlayacaktır.
  2. Belgeleri Yüksek Lisans'lara uygun bir formata dönüştürün: Markdown belgelerimizi, Geri Alma Artırılmış Üretim (RAG) için Yüksek Lisans'lar tarafından verimli bir şekilde işlenebilecek bir formata dönüştürmemiz gerekiyor.
  3. Veri güncellemelerini ve eklemeleri etkinleştirin: Sistem, belgelerimizi içeren vektör veritabanına sürekli güncellemelere ve eklemelere izin vermelidir.
  4. Soru yanıtlamaya odaklanın: Chatbot öncelikle bir soru yanıtlama sistemi olarak çalışmalı ve BT ile ilgili olmayan konuşmalardan kaçınmalıdır.
  5. Kaynak bağlantıları sağlayın: Mümkün olduğunda, sohbet robotu, sağlanan bilgiler için orijinal belge kaynaklarına geri bağlantı vermelidir.
  6. Soru filtrelemeyi uygulayın: Chatbot için soru kısıtlamalarını yapılandırma yeteneğine ihtiyacımız var. Örneğin coğrafi konuma göre soruları yanıtlamasını engellemek isteyebiliriz.

Naif Uygulama

İlk girişimimiz mevcut belgelerimizi orijinal Markdown formatında yüklemek ve hiçbir değişiklik yapmadan lama3 modelini kullanmaktı. En hafif tabirle, sonuçlar hayal kırıklığı yarattı:


Birincisi: Markdown dosyalarımız resim etiketleri, dipnotlar, kod blokları, kalın ve italik biçimlendirme, iç ve dış bağlantılar, simgeler ve hatta düğmeler için " ** " yapıları gibi çeşitli öğeleri içerir. Tüm bu ekstra "gürültü", dokümantasyonun işlenmek üzere parçalara ayrılması sırasında sorun yaratır.


İkincisi: OpenWebUI'nin cümleleri ve paragrafları 384 boyutlu bir vektör uzayında temsil etmek için varsayılan olarak kullandığı cümle-transformers/all-MiniLM-L6-v2 modeli (kümeleme ve anlamsal arama gibi RAG görevleri için gereklidir), öncelikle İngilizce üzerine eğitim almıştır. . Botumuzun zamanla diğer dilleri de desteklemesini istiyoruz.


Üçüncüsü: Llama3 bir talimat modeli olmasına rağmen, kullanıcı sorgularını yanıtlamaya odaklanmak yerine yine de konu dışı tartışmalara yönlendirilebilir. 70b modeli daha uygun olabilir, ancak 40 GB video belleği olan bir GPU gerektirirken, llama3-8b yalnızca 8 GB'lık bir GPU üzerinde çalışabilir.

Üçüncü sorun, özel bir model (OpenAI terminolojisinde aracı) oluşturularak potansiyel olarak çözülebilirken, ilk ikisi daha önemli geçici çözümler gerektirir. Şu ana kadar bulduklarımız bunlar.

Adım Adım: OpenWebUI'da Teknik Destek Chatbotunu Ayarlama

Öncelikle belgeleri RAG (Retrieval Augmented Generation) sistemimize yüklemeye uygun bir formata dönüştüreceğiz. Bu işlemi otomatikleştirmek için ai_text_generator adında güçlü bir bash betiği oluşturduk.


Komut dosyası, tüm belge dizinlerini dolaşır ve RAG tarafından gerekmeyen Markdown işaretlemesini kaldırmak ve değiştirmek için sed, awk ve Perl içindeki normal ifadeleri kullanır. Son olarak, her belgenin sonuna https://hostkey.com/documentation adresinde barındırılan orijinal belgelere bir bağlantı eklenir.



Bu komut dosyası, belgelerinizi OpenWebUI'da bir RAG sistemiyle kullanılmak üzere titizlikle hazırlar. İşte eylemlerinin adım adım özeti:


  • URL Oluşturma: Her belge dosyası için tam bir URL oluşturur.
  • Görüntü İşaretlemesini Kaldırma: Görüntülerle ilgili tüm İşaretleme işaretlemesini kaldırır.
  • Ek Açıklama Silme: Metindeki tüm ek açıklamaları çıkarır. Düğme Biçimlendirmesi: Markdown'ın ** ve ** sözdizimini [ ]'ye dönüştürür ve bunları etkili bir şekilde düğme olarak biçimlendirir.
  • Başlık Kaldırma: Büyük olasılıkla bir taslak veya içindekiler tablosu oluşturmak için kullanılan "> " ile başlayan satırları siler.
  • Simge Kaldırma: Simgeleri temsil eden tüm İşaretleme işaretlemelerini veya kodları kaldırır.
  • Kalın Metin Biçimlendirmesi: Markdown'ın kalın metin biçimlendirmesini kaldırır.
  • Bağlantı Değişikliği: Dış bağlantıları korurken dahili bağlantıları siler.
  • E-posta Bağlantısı Biçimlendirmesi: E-posta adreslerine olan bağlantıları yeniden biçimlendirir.
  • Boşluk Normalleştirmesi: Her satırın başlangıcından ilk karaktere kadar olan fazladan boşlukları kaldırır.
  • Satır Sonu Dönüşümü: CRLF'yi (Windows satır sonlarını) UNIX formatına (LF) dönüştürür.
  • Boş Satır Azaltma: Ardışık olarak birden fazla boş satırı ortadan kaldırır.
  • URL Ekleme: Oluşturulan URL'yi işlenen her dosyanın sonuna ekler.


Komut dosyasını çalıştırdıktan sonra ai_data dizini, OpenWebUI'nin RAG sistemine yüklenmeye hazır bir dizi dosya içerecektir.



Daha sonra, belge vektör veritabanımız ve Ollama LLM ile çalışmak için OpenWebUI'ye yeni bir model eklememiz gerekiyor. Bu model, yalnızca İngilizce'de değil, daha gündelik bir 'sen' (ты) tonunu da desteklemelidir. Gelecekte Türkçe gibi diğer dillere de destek eklemeyi planlıyoruz.


  1. Başlamak için Yönetici Paneli - Ayarlar - Belgeler'e gideceğiz. Embedding Model alanında cümle-transformers/all-MiniLM-L12-v2 seçeneğini seçeceğiz. Bu listedeki (https://www.sbert.net/docs/sentence_transformer/pretrained_models.html) önerilen tüm modelleri test ettik ve bunun en uygun olduğunu gördük.

  2. İndirip kurmak için Embedding Model alanının yanındaki indirme ikonuna tıklayacağız.

  3. Hemen RAG parametrelerini ayarlayacağız:

    • Top K = 10: Bu, sistemin bir yanıt oluştururken en alakalı 10 belgeyi dikkate alacağı anlamına gelir.

    • Parça Boyutu = 1024: Belgeler işlenmek üzere 1024 jetonluk parçalara bölünecektir.

    • Parça Örtüşmesi = 100: Ardışık parçalar arasında 100 jetonluk bir çakışma olacaktır.



Bundan sonra Çalışma Alanı - Belgeler bölümüne giderek belgelerimizi yükleyebilirsiniz. Daha sonra modele veya API isteklerine bağlanmayı kolaylaştırmak için ona belirli bir koleksiyon etiketi (bizim durumumuzda hostkey_en) vermek iyi bir fikirdir.



Daha sonra chatbotumuz için özel bir model oluşturacağız. Bunu yapmak için Çalışma Alanı - Modeller'e geri döneceğiz ve artı simgesine tıklayacağız.


Chatbotumuza bir isim vereceğiz ve temel modeli seçeceğiz (bizim durumumuzda, lama3-en son).


Daha sonra Sistem İstemini tanımlayacağız. Chatbot'a kendisini nasıl görmesi ve davranması gerektiğini söyleyen şey budur. Rolünü, sınırlamalarını ve istediğimiz sonuçları özetlemektedir.


İşte teknik destek sohbet robotumuz için tasarladığımız Sistem İstemi:


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/ "


Daha sonra gerekli belge koleksiyonunu bağlayacağız. Knowledge kısmında Belge Seç butonuna tıklayıp ihtiyacımız olan koleksiyonu etiketine göre seçeceğiz.


Anında dağıtımlı GPU sunucuları veya profesyonel düzeyde NVIDIA Tesla A100 / H100 80Gb veya A5000 / A4000 kartlarıyla özel yapılandırmaya sahip bir sunucu kiralayın. Oyun RTX4090 kartlarına sahip GPU sunucuları da mevcuttur.



Ayrıca Gelişmiş Paramlar sekmesi altında gizlenen bazı ek parametreleri de yapılandırmamız gerekiyor. Göster'e tıklamak bu ayarları ortaya çıkaracaktır. Sıcaklığı 0,3'e ve Bağlam Uzunluğunu 4089'a ayarlayacağız.



Son olarak, özel teknik destek chatbot modelimizi oluşturmak için Kaydet ve Güncelle'ye tıklıyoruz.


İşte buyur! Chatbotumuz çalışmaya ve kullanıcı isteklerini karşılamaya hazır. Kibar, sabırlı ve 7/24 ulaşılabilirdir.

OpenWebUI'da RAG ile Çalışmaya İlişkin İpuçları

Akılda tutulması gereken bazı önemli ipuçları:

  1. RAG'da çok sayıda belgeyle çalışıyorsanız OpenWebUI'yi GPU desteğiyle (şube open-webui:cuda) yüklemeniz önemle tavsiye edilir.
  2. Katıştırma Modelinde yapılacak herhangi bir değişiklik (değiştirme, yükleme vb.), belgelerinizi vektör veritabanına yeniden indekslemenizi gerektirecektir. RAG parametrelerinin değiştirilmesi bunu gerektirmez.
  3. Belgeleri eklerken veya kaldırırken her zaman özel modelinize gidin, bu belgelerin koleksiyonunu silin ve bunları tekrar ekleyin. Aksi takdirde, aramanız düzgün çalışmayabilir veya önemli ölçüde daha az etkili olabilir. Botunuz yanlış yanıtlar veriyorsa ancak gerekli bilgileri içeren belgeler alttaki listede görünüyorsa sorun büyük olasılıkla budur.
  4. OpenWebUI, RAG oluşturmak için çeşitli formatları (pdf, csv, rst, xml, md, epub, doc, docx, xls, xlsx, ppt, ppt, txt) tanırken, en iyi performans için belgeleri düz metin olarak yüklemek en iyi uygulamadır.
  5. Hibrit arama sonuçları iyileştirebilse de yoğun kaynak gerektirir ve güçlü bir GPU'da bile yanıt sürelerini (20-30-40 saniye veya daha fazla) önemli ölçüde artırabilir. Bu, geliştiricilerin bir çözüm üzerinde çalıştığı bilinen bir sorundur.



Artık chatbot'u test ettiğimize göre bir sonraki adım onu şirketimizin mevcut sohbet sistemine entegre etmektir. OpenWebUI bir API sunar ve kendi benzersiz özelliklerini ekleyerek Ollama'ya proxy işlevi görebilir. Ancak belgelerin hâlâ eksik olması entegrasyonu biraz zorlaştırıyor.


Kodu ve taahhüt geçmişini inceleyerek API isteklerinin nasıl yapılandırılacağına dair bazı bilgiler topladık, ancak henüz tam olarak beklendiği gibi çalışmıyor. Özel modeli çağırmayı başardık ancak RAG işlevselliği olmadan.

RAG, web araması ve ayrıntılı örnekler ve açıklamalar dahil olmak üzere geliştiricilerin gelecek sürümlerde vaat ettiği özellikleri sabırsızlıkla bekliyoruz.


Test süreci ayrıca belgelerimizdeki bazı tutarsızlıkları ve fazlalıkları da ortaya çıkardı. Bu, hem sohbet robotunun performansını artırma hem de belgelerimizin genel netliğini ve doğruluğunu iyileştirme fırsatı sunuyor.


Anında dağıtımlı GPU sunucuları veya profesyonel düzeyde NVIDIA Tesla A100 / H100 80Gb veya A5000 / A4000 kartlarıyla özel yapılandırmaya sahip bir sunucu kiralayın. Oyun RTX4090 kartlarına sahip GPU sunucuları da mevcuttur.