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.
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:
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.
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 .
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í:
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.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.
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.
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.
Funkčnost komponenty byla testována na těchto strojích:
Č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:
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.
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.
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 .