paint-brush
Salesforce Geliştiricisi, Makinenizde Yerel Olarak Çalışan LLM Asistanı Oluştururile@akutishevsky
548 okumalar
548 okumalar

Salesforce Geliştiricisi, Makinenizde Yerel Olarak Çalışan LLM Asistanı Oluşturur

ile Anton Kutishevsky7m2025/03/17
Read on Terminal Reader

Çok uzun; Okumak

Salesforce içinde doğrudan bilgisayarınızda güçlü AI dil modelleri (LLM'ler) çalıştırmanıza olanak tanıyan bir Salesforce Lightning Web Bileşeni oluşturdum. Verileri yerel olarak işlemek, bilgilerinizi güvende tutmak ve hızlı yanıt vermek için Pico LLM teknolojisini kullanır. Harici hizmetlere güvenmeden e-postalar oluşturmak, içerik yazmak, müşteri verilerini analiz etmek ve daha fazlası için kullanabilirsiniz. Daha fazla bilgi edinmek için demo videosunu ve GitHub deposunu inceleyin!
featured image - Salesforce Geliştiricisi, Makinenizde Yerel Olarak Çalışan LLM Asistanı Oluşturur
Anton Kutishevsky HackerNoon profile picture

Salesforce içindeki yerel LLM'lerle deneyler yapıyordum ve sonuç olarak geliştirdiğim bileşenden bahsetmek istiyorum. Bağlam için Salesforce kayıtlarını kullanan zaten bilindik sohbet arayüzüne sahip. Bilgisayarınızda yerel olarak çalışır, bu nedenle işlenmiş veriler herhangi bir üçüncü taraf hizmetine gönderilmez.


Agentforce'un tanıtımı, bileşeni geliştirmem konusunda beni etkileyen şeydi. Agentforce, kararlar alabilen ve çeşitli eylemler gerçekleştirebilen sistemler olan ajanları kullanır. Buna karşın, yardımcılar yalnızca bilgileri tepkisel olarak işler. Pico LLM kullanarak yerel bir ajan oluşturmanın mümkün olduğuna inansam da, bu muazzam bir çaba gerektirir. Bu nedenle, bunun yerine bir yardımcı geliştirmeye karar verdim.

Özellikler

Bir LLM'nin çalışmasını beklediğiniz gibi, geniş bir veri kümesi üzerinde önceden eğitildiği için herhangi bir konu hakkında yanıtlar üretir. Dahası, ek bağlam için Salesforce kayıtlarını kullanabilir. Bileşenin özellikleri şunlardır:


  • Birden fazla modeli destekler. Gemma, Llama veya Phi gibi Pico web sitesindeki herhangi bir açık kaynaklı model kullanılabilir. Buradaki tek sınırlama bilgisayarınızın sahip olduğu RAM miktarıdır. Model ne kadar ağırsa o kadar fazla RAM tüketir.
  • Tek bir kayıtla çalışır. Bileşen bir kayıt sayfasına yerleştirildiğinde, bağlam için kayda erişebilir. Örneğin, bir Hesap kayıt ayrıntı sayfasında olduğunda, alan değerlerine dayalı bir yanıt üretebilir.
  • İlgili kayıtları destekler. Bir kayıtta ilgili kayıtlar olduğunda, bileşen bunları sorgulayabilir ve yanıtların içine dahil edebilir.
  • Yapılandırılabilir. Bileşen, yapılandırma açılır penceresini kullanarak anında yapılandırılabilir. Tamamlama belirteci sınırı, sıcaklık ve en yüksek P gibi oluşturma seçeneklerini değiştirmeye olanak tanır.

Nasıl çalışır?

Son kullanıcı açısından süreç basittir. Bir model yüklersiniz, bir sistem istemi seçersiniz, kayıtları seçersiniz, bir kullanıcı istemi yazarsınız ve üretilen sonuca bakarsınız.

Pico LLM nedir?

LLM'leri bir tarayıcıda çalıştırmak, modelin boyutu, bant genişliği gereksinimleri ve RAM ihtiyaçları nedeniyle kaynak tüketen bir görevdir. Bu nedenle, Pico ekibi, LLM'lerin bilgisayarlar için yerel olarak kullanımını çok daha verimli hale getiren picoLLM Sıkıştırma tekniğini geliştirdi. Ön uç geliştiricilerin LLM'leri tarayıcılar arasında yerel olarak çalıştırmasını sağlamak için bir JavaScript SDK'sı olarak picoLLM Çıkarım Motorunu sağladılar. Chrome, Safari, Edge, Firefox ve Opera dahil tüm modern tarayıcıları destekler. picoLLM Çıkarım Motorunun nasıl çalıştığı hakkında daha fazla bilgi edinmek için makalelerini okuyabilirsiniz.

LWC kısmı

Bileşen, bir kullanıcı ile PicoLLM arayüzü arasında bir köprü görevi görür. Bileşenin özünde, bir iframe olarak gömülü bir Visualforce sayfası bulunur. Sayfa, PicoLLM SDK'sini yükler ve sonuncunun SDK'yi post mesajları aracılığıyla kullanmasına izin vererek LWC ile iletişim kurar. Tüm öğelerin birleşimi aşağıdakileri işler:


  • Bir model yükleme. LWC'de istediğiniz bir modeli yüklemenize izin veren bir düğme bulunur. Bu düğme, iframe içinde gizli bir dosya giriş öğesini tetikler. Model yüklendikten sonra, Pico SDK web işçileri oluşturur ve bileşen kullanıcı girişini işlemeye hazır hale gelir.
  • Bir sistem istemi ayarlama. Her seferinde bir sistem istemi yazmanıza gerek yok, System_Prompt__c nesnesinin kaydedilmiş herhangi bir kaydını seçmek kolaydır. Düğmeye basıldığında, seçilebilecek mevcut sistem istemlerinin bulunduğu bir açılır pencere gösterilir.
  • Kullanıcı girdisini kabul ediyor. Kullanıcı girdisini toplamak için yeniden boyutlandırılabilir bir metin alanı var. Toplandığında, bir yük olarak iframe'e gönderilir ve konuşma geçmişine eklenir.
  • Salesforce kayıtlarına erişim. İki düğme vardır: Alanları Seç ve İlgili Kayıtları Seç. İlki, LWC'nin bulunduğu kayıt sayfasındaki kaydın alan değerlerini toplar. İkincisi, ilgili bir nesne seçmenize ve seçili alan değerleriyle birlikte kayıtlarını sorgulamanıza olanak tanır. Bu bilgi, iframe'e bir yük olarak da gönderilir.
  • Nesil seçeneklerini değiştirme. İstenirse, tamamlama belirteci sınırı, sıcaklık ve en iyi P seçenekleri bileşendeki özel bir düğme aracılığıyla değiştirilebilir. Bu bilgi ayrıca iframe'e bir yük olarak gönderilir.
  • Bir sonuç oluşturma. iframe yükü aldığında, yüklenen modeli kullanmak ve bir sonuç oluşturmak için Pico SDK'sını kullanır. Oluşturma seçenekleri sağlanmışsa, bunlar dikkate alınır. Ayrıca, iletişim kutusu her seferinde güncellenir, böylece LLM geçmişini hatırlayacaktır.
  • Sohbet mesajlarının işlenmesi. LWC, kullanıcının sağladığı giden mesajları işleyebilir. Oluşturulan yanıtı içeren gelen mesajlar, bileşenin kullanıcıya söyleyecek bir şeyi olduğunda dinamik olarak işlenir. Oluşturulan sonuçlar veya bilgi ve hata mesajları gibi.

Biraz Apex kodu

İşin arka tarafında gösterişli bir şey yok. Apex kodu, kayıt sayfasından bir kayıt kimliği kullanarak nesneler arasındaki ilişkileri tespit etmekle ilgili tüm ağır işleri yapar. Ayrıca, birkaç SOQL sorgusu gerçekleştirir ve böylece görevi burada yapılır.

Gelişim Zorlukları

Web çalışanları

Daha önce, LWC bileşenindeki node modülünden kodu yürütmek için unpkg aracını kullandım. Bu yaklaşım ek yapılandırma adımlarına yol açtı ve çalışmasını sağlamanın daha az güvenli bir yoluydu. Bu sefer, PicoLLM modülünü doğrudan Salesforce'tan ve yalnızca daha önce yaptığım Experience Cloud sitesinden değil, Lightning Experience arayüzünden yürütmek istedim.


PicoLLM, perde arkasında paralel işleme için web işçileri kullanır ve bu, LWC'den çalıştırılmasına izin verilmemesi nedeniyle ana sorundu. Neyse ki, kimse web işçilerini bir visualforce sayfasından çalıştırmamıza izin vermeyi reddetmedi ve kullandığım yaklaşım buydu.


Ham PicoLLM kodunu indirdim ve onu visualforce sayfasına statik bir kaynak olarak ekledim. LWC'de visualforce sayfasını içeren bir iframe kullandım. LWC ile iframe içindeki sayfa arasındaki iletişim, web çalışanlarını kullanmama olanak sağladı. Sayfa, Lightning web bileşeninden PicoLLM ile ilgili kodu tetikler.

Bağlam için Salesforce kayıtlarını kullanma

Salesforce kayıtlarını JSON veya CSV formatında kopyalayıp yapıştırın, herhangi bir çevrimiçi LLM'ye atın ve izleyin. Kayıtları tüketecek, bunları ekstra bağlam için kullanacak ve bir yanıt üretecektir. Yerel işleme için sıkıştırılmış modeller kullanıldığında bunun o kadar kolay olmadığı ortaya çıktı.


İlk başta, kayıtları JSON formatında, doğrudan kullanıcı istemine koyuyordum. Sonra şeyin istemin kendisini sağladığım ek bağlamdan ayırt edebilecek kadar akıllı olmasını bekledim. Çeşitli boyutlarda farklı modeller kullandım ve yanıtları oluşturmak için neden JSON'u kullanmadığını anlamadım. Çoğunlukla istemime yanıt vermeyi reddetmeleri veya yapmasını istediğim şeyle ilgili olmayan kurgusal verilerin oluşturulmasıydı. Bağlam verilerinin farklı biçimlerini denemeye başladım: CSV kullanma, JSON kullanma, istemi bağlamdan kesin olarak ayırmak için istem ayraçları kullanma - hiçbiri işe yaramadı.


Ana özellik çalışmadığı için neredeyse bu fikri terk edecektim. Birkaç ay sonra, aniden aptalca basit bir fikir geldi aklıma. Peki ya komut istemi parçalarının sırasını tersine çevirsem? Kullanıcı komut isteminin önce, bağlamın sonra gelmesinden, bağlamın önce, komut isteminin sonra gelmesine. Şaşırtıcı bir şekilde işe yaradı ve kullandığım her model Salesforce kayıtlarını hemen bağlam olarak anlamaya başladı.

Performans

Bileşenin işlevselliği şu makinelerde test edildi:

  • AMD Ryzen 9 9900X işlemci ve 32 GB RAM'e (5600 MT/s) sahip PC.
  • Snapdragon X-Elite ARM işlemci ve 16 GB RAM (8448 MT/s) ile donatılan Microsoft Surface Laptop 7.

Model yükleme hızı—her şey bellekle ilgili

Bileşeni kullanmanın en çok zaman alan kısmı ilk model yüklemesidir. 9900X'in Snapdragon X-Elite'ı kolayca geride bırakmasını bekleyebilirsiniz, ancak yanılıyorsunuz. Şaşırtıcı bir şekilde, ikincisi daha hızlı. Daha hızlı belleğe sahip olduğundan, RAM'iniz ne kadar hızlıysa, modelin de o kadar hızlı yüklendiğini varsayıyorum. İşte referans olması için bir model yükleme hızı karşılaştırma tablosu:


Yanıt oluşturma hızı

Tepki oluşturma hızıyla ilgili aynı hikaye. Anladığım kadarıyla, mümkün olan en hızlı üretimi elde etmek için hızlı bir CPU ve RAM kombinasyonuna sahip olmanız gerekiyor. Tepki oluşturma aynı komutla değiştiği için, kesin hız testleri yapmadım. Yine de, üretim hızı son derece hızlı, neredeyse çevrimiçi alternatifler kadar hızlı.

Peki GPU kullanmaya ne dersiniz?

Gerçekten de, yanıtları üretmek için bir GPU kullanmak çok daha verimli olurdu. PicoLLM ile bir GPU kullanmak mümkün olsa da, bu yapılandırmayı kendim test etmedim. Bunun birkaç nedeni var. İlk olarak, çoğu tarayıcıda (Edge hariç) varsayılan olarak etkin olmayan WebGPU özelliğini kullandığına inanıyorum. İkinci olarak, modeli yüklemek için muhtemelen birkaç gigabayt VRAM'e ihtiyaç duyuyor ve bende yok.

Çözüm

Bu asistanı geliştirmek büyüleyici bir keşif yolculuğu oldu. Web çalışanı sınırlamalarıyla boğuşmaktan bağlam sağlamada hızlı siparişin kritik rolünü keşfetmeye kadar, zorluklar hem teşvik edici hem de ödüllendirici oldu. Sonuç, Salesforce ekosistemi içinde Büyük Dil Modellerinin gücünden yararlanmak için benzersiz bir yaklaşım sunan bir Lightning Web Bileşeni oldu.


İlk model yükleme süresi, özellikle daha büyük modeller için bir değerlendirme konusu olabilirken, verileri yerel olarak işleme yeteneği, veri güvenliği, yanıt verme ve maliyet etkinliği açısından önemli avantajlar sunar. İçerik oluşturmayı otomatikleştirmekten akıllı yardım sağlamaya kadar potansiyel kullanım durumları çok geniştir ve keşfedilmeyi beklemektedir.


GitHub deposuna göz atın.