paint-brush
Salesforce Developer vytváří LLM Assistant, který běží lokálně na vašem počítačipodle@akutishevsky
Nová historie

Salesforce Developer vytváří LLM Assistant, který běží lokálně na vašem počítači

podle Anton Kutishevsky
Anton Kutishevsky HackerNoon profile picture

Anton Kutishevsky

@akutishevsky

Do this, do that.

7 min read2025/03/17
Read on Terminal Reader
Read this story in a terminal
Print this story
tldt arrow
cs-flagCS
Přečtěte si tento příběh v češtině!
en-flagEN
Read this story in the original language, English!
ru-flagRU
Прочтите эту историю на русском языке!
tr-flagTR
Bu hikayeyi Türkçe okuyun!
es-flagES
Lee esta historia en Español!
ja-flagJA
この物語を日本語で読んでください!
ay-flagAY
¡Aka sarnaqäw aymar arun ullart’apxam!
xh-flagXH
Funda eli bali ngesiXhosa!
tl-flagTL
Basahin ang kwentong ito sa Filipino!
sw-flagSW
Soma hadithi hii kwa kiswahili!
fi-flagFI
Lue tämä tarina suomeksi!
uz-flagUZ
Bu hikoyani o'zbek tilida o'qing!
ka-flagKA
წაიკითხეთ ეს ამბავი ქართულად!
CS

Příliš dlouho; Číst

Vytvořil jsem webovou komponentu Salesforce Lightning, která vám umožní spouštět výkonné jazykové modely AI (LLM) přímo na vašem počítači v rámci Salesforce. Využívá technologii Pico LLM ke zpracování dat lokálně, udržuje vaše informace v bezpečí a rychle reaguje. Můžete jej použít ke generování e-mailů, psaní obsahu, analýze zákaznických dat a dalším, to vše bez spoléhání na externí služby. Podívejte se na ukázkové video a repozitář GitHub, kde se dozvíte více!
featured image - Salesforce Developer vytváří LLM Assistant, který běží lokálně na vašem počítači
Anton Kutishevsky HackerNoon profile picture
Anton Kutishevsky

Anton Kutishevsky

@akutishevsky

Do this, do that.

Experimentoval jsem s místními LLM v Salesforce a rád bych vám řekl o komponentě, kterou jsem jako výsledek vyvinul. Má již známé rozhraní chatu, které používá záznamy Salesforce pro kontext. Funguje lokálně na vašem počítači, takže zpracovaná data nejsou odesílána žádné službě třetí strany.


Zavedení Agentforce mě ovlivnilo při vývoji komponenty. Agentforce používá agenty — systémy, které mohou činit rozhodnutí a provádět různé akce. Naproti tomu asistenti zpracovávají informace pouze reaktivně. I když věřím, že je možné vybudovat místního agenta pomocí Pico LLM, vyžadovalo by to obrovské úsilí. Proto jsem se rozhodl místo toho vyvinout asistenta.


Vlastnosti

Jak byste očekávali, že LLM bude fungovat, generuje odpovědi na jakékoli téma, protože je předtrénován na rozsáhlém souboru dat. Navíc je schopen používat záznamy Salesforce pro další kontext. Vlastnosti komponenty jsou:


  • Podporuje více modelů. Lze použít jakýkoli model s otevřeným zdrojovým kódem z webu Pico, jako je Gemma, Llama nebo Phi. Jediným omezením je zde velikost paměti RAM, kterou má váš počítač. Čím více model váží, tím více RAM spotřebuje.
  • Pracuje s jedním záznamem. Když je komponenta umístěna na stránku záznamu, pak je schopna přistupovat k záznamu pro kontext. Pokud je například na stránce podrobností záznamu o účtu, může generovat odpověď na základě hodnot polí.
  • Podporuje související záznamy. Pokud má záznam související záznamy, komponenta se může dotazovat a začlenit je do odpovědí.
  • Konfigurovatelné. Komponentu lze konfigurovat za běhu pomocí vyskakovacího okna konfigurace. Umožňuje změnit možnosti generování, jako je limit dokončení tokenu, teplota a horní P.

Jak to funguje

Z pohledu koncového uživatele je proces přímočarý. Nahrajete model, vyberete systémovou výzvu, vyberete záznamy, napíšete uživatelskou výzvu a podíváte se na generovaný výsledek.

Co je Pico LLM?

Spouštění LLM v prohlížeči je úkol náročný na zdroje kvůli velikosti modelu, požadavkům na šířku pásma a potřebě RAM. Proto tým Pico vyvinul svou techniku picoLLM Compression, díky které je použití LLM lokálně mnohem efektivnější pro počítače. Poskytli picoLLM Inference Engine jako JavaScript SDK, aby umožnil vývojářům front-endu spouštět LLM lokálně napříč prohlížeči. Podporuje všechny moderní prohlížeče včetně Chrome, Safari, Edge, Firefox a Opera. Chcete-li se dozvědět více o tom, jak funguje picoLLM Inference Engine, můžete si přečíst jejich článek .

Část LWC

Komponenta slouží jako most mezi uživatelem a rozhraním PicoLLM. Jádrem komponenty je stránka Visualforce vložená jako iframe. Stránka načte sadu PicoLLM SDK a komunikuje s LWC, což umožňuje poslední použít SDK prostřednictvím poštovních zpráv. Celá kombinace prvků zvládá následující:


  • Načítání modelu. LWC má tlačítko, které vám umožní načíst model dle vašeho výběru. Spouští vstupní prvek souboru skrytý uvnitř prvku iframe. Jakmile je model načten, Pico SDK vytvoří webové pracovníky a komponenta je připravena zpracovat uživatelský vstup.
  • Nastavení systémové výzvy. Nemusíte pokaždé psát systémovou výzvu, je snadné vybrat libovolný uložený záznam objektu System_Prompt__c . Po stisknutí tlačítka se zobrazí vyskakovací okno se stávajícími systémovými výzvami, ze kterých si můžete vybrat.
  • Přijímání uživatelského vstupu. K dispozici je textová oblast s nastavitelnou velikostí pro shromažďování uživatelských vstupů. Po shromáždění se odešle do prvku iframe jako užitečné zatížení a přidá se do historie konverzace.
  • Přístup k záznamům Salesforce. Jsou zde dvě tlačítka: Vybrat pole a Vybrat související záznamy. První shromažďuje hodnoty polí záznamu na stránce záznamu, na které se nachází LWC. Druhý umožňuje vybrat související objekt a dotazovat se na jeho záznamy spolu s hodnotami vybraných polí. Tyto informace jsou také odesílány do prvku iframe jako užitečné zatížení.
  • Změna možností generování. V případě potřeby lze limit tokenu dokončení, teplotu a možnosti horního P změnit pomocí vyhrazeného tlačítka v komponentě. Tyto informace jsou také odesílány jako užitečné zatížení do prvku iframe.
  • Generování výsledku. Když prvek iframe obdrží užitečné zatížení, použije sadu Pico SDK k využití načteného modelu a vygenerování výsledku. Pokud byly poskytnuty možnosti generování, jsou brány v úvahu. Dialog se také aktualizuje pokaždé, takže LLM si bude pamatovat jeho historii.
  • Vykreslování chatových zpráv. LWC je schopen vykreslit odchozí zprávy, což jsou ty, které poskytl uživatel. Příchozí zprávy obsahující vygenerovanou odpověď jsou dynamicky vykreslovány, jakmile má komponenta co říci uživateli. Například generované výsledky nebo informace a chybové zprávy.

Trochu Apex kódu

Na zadní straně věcí není nic fantastického. Apex kód dělá veškerou těžkou práci související s detekcí vztahů mezi objekty pomocí ID záznamu ze stránky záznamu. Také provádí několik SOQL dotazů, a tím je zde splněna jeho povinnost.

Rozvojové výzvy

Weboví pracovníci

Dříve jsem používal nástroj unpkg ke spouštění kódu z modulu uzlů v komponentě LWC. Tento přístup vedl k dalším konfiguračním krokům a byl méně bezpečným způsobem, jak to zprovoznit. Tentokrát jsem chtěl spustit modul PicoLLM přímo ze Salesforce a nejen ze stránky Experience Cloud, což jsem dělal dříve, ale z rozhraní Lightning Experience.


PicoLLM pod kapotou používá webové pracovníky pro paralelní zpracování a to byl hlavní problém, protože není povoleno je spouštět z LWC. Naštěstí nám nikdo neodmítl spouštět webové pracovníky ze stránky visualforce a byl to přístup, který jsem použil.


Stáhl jsem si surový kód PicoLLM a přidal jej jako statický zdroj na stránku visualforce. V LWC jsem použil iframe, který obsahoval stránku visualforce. Komunikace mezi LWC a stránkou uvnitř iframe mi umožnila používat webové pracovníky. Stránka spouští kód související s PicoLLM z webové komponenty lightning.

Použití záznamů Salesforce pro kontext

Zkopírujte a vložte záznamy Salesforce ve formátu JSON nebo CSV, vložte je do jakéhokoli online LLM a sledujte. Spotřebuje záznamy, použije je pro další kontext a vygeneruje odpověď. Ukázalo se, že při použití komprimovaných modelů pro lokální zpracování to není tak snadné.


Nejprve jsem jednoduše vkládal záznamy ve formátu JSON přímo do uživatelského řádku. Pak jsem očekával, že ta věc bude dostatečně chytrá, aby odlišila samotnou výzvu od dalšího kontextu, který jsem uvedl. Použil jsem různé modely různých velikostí a nechápal jsem, proč se ke generování odpovědí nepoužívá JSON. Většinou se jednalo o odmítnutí odpovědět na mou výzvu nebo vygenerování smyšlených dat, která nesouvisela s tím, o co jsem je požádal. Začal jsem experimentovat s různými formáty kontextových dat: pomocí CSV, pomocí JSON, pomocí rozdělovačů výzev k přísnému odlišení výzvy od kontextu – nic nepomohlo.


Málem jsem tu myšlenku opustil, protože klíčová funkce nefungovala. Po pár měsících jsem najednou dostal hloupě jednoduchou mozkovou vlnu. Co když jsem právě obrátil pořadí rychlých částí? Od uživatelské výzvy na prvním místě a kontextu na druhém místě až po kontext na prvním místě a na druhém místě. K mému překvapení to fungovalo a jakýkoli model, který jsem použil, začal okamžitě chápat záznamy Salesforce jako kontext.

Výkon

Funkčnost komponenty byla testována na těchto strojích:

  • PC s procesorem AMD Ryzen 9 9900X a 32GB RAM (5600 MT/s).
  • Microsoft Surface Laptop 7 poháněný procesorem Snapdragon X-Elite ARM s 16 GB RAM (8448 MT/s).

Rychlost načítání modelu – vše je o paměti

Časově nejnáročnější částí použití komponenty je počáteční načtení modelu. Možná byste čekali, že 9900X snadno překoná Snapdragon X-Elite, ale mýlili byste se. K mému překvapení je to druhé rychlejší. Protože má rychlejší paměť, předpokládám, že čím rychlejší RAM, tím rychleji se model načítá. Zde je pro referenci srovnávací tabulka rychlosti načítání modelu:


image

Rychlost generování odezvy

Stejný příběh s rychlostí generování odezvy. Jak jsem pochopil, musíte mít rychlou kombinaci CPU a RAM, abyste získali nejrychlejší možnou generaci. Protože se generování odezvy mění se stejnou výzvou, neprováděl jsem přesné testy rychlosti. Rychlost generování je však extrémně vysoká, téměř stejně rychlá jako u online alternativ.

A co použití GPU?

Použití GPU ke generování odpovědí by bylo skutečně mnohem efektivnější. I když je možné použít GPU s PicoLLM, sám jsem tuto konfiguraci netestoval. Existuje pro to několik důvodů. Za prvé se domnívám, že používá funkci WebGPU, která není ve výchozím nastavení ve většině prohlížečů (kromě Edge) povolena. Za druhé, pravděpodobně to vyžaduje několik gigabajtů VRAM k načtení modelu, který nemám.

Závěr

Vývoj tohoto pomocníka byl fascinující cestou průzkumu. Od potýkání se s omezeními webového pracovníka až po odhalení zásadní role rychlé objednávky při poskytování kontextu, výzvy byly stimulující i obohacující. Výsledkem je webová komponenta Lightning, která nabízí jedinečný přístup k využití síly velkých jazykových modelů v rámci ekosystému Salesforce.


Zatímco počáteční doba načítání modelu může být zvažována, zejména u větších modelů, schopnost zpracovávat data lokálně nabízí významné výhody z hlediska zabezpečení dat, odezvy a nákladové efektivity. Potenciální případy použití, od automatizace generování obsahu po poskytování inteligentní pomoci, jsou rozsáhlé a čekají na prozkoumání.


Podívejte se na repozitář GitHub .

L O A D I N G
. . . comments & more!

About Author

Anton Kutishevsky HackerNoon profile picture
Anton Kutishevsky@akutishevsky
Do this, do that.

ZAVĚŠIT ZNAČKY

TENTO ČLÁNEK BYL PŘEDSTAVEN V...

Read on Terminal Reader
Read this story in a terminal
 Terminal
Read this story w/o Javascript
Read this story w/o Javascript
 Lite
Also published here
X REMOVE AD