paint-brush
Salesforce Developer luo LLM-avustajan, joka toimii paikallisesti koneellasikirjoittaja@akutishevsky
548 lukemat
548 lukemat

Salesforce Developer luo LLM-avustajan, joka toimii paikallisesti koneellasi

kirjoittaja Anton Kutishevsky7m2025/03/17
Read on Terminal Reader

Liian pitkä; Lukea

Rakensin Salesforce Lightning Web -komponentin, jonka avulla voit ajaa tehokkaita tekoälykielimalleja (LLM) suoraan tietokoneellasi Salesforcessa. Se käyttää Pico LLM -tekniikkaa tietojen käsittelemiseen paikallisesti, pitää tietosi turvassa ja reagoida nopeasti. Sen avulla voit luoda sähköposteja, kirjoittaa sisältöä, analysoida asiakastietoja ja paljon muuta ilman ulkopuolisia palveluita. Katso demovideo ja GitHub repo saadaksesi lisätietoja!
featured image - Salesforce Developer luo LLM-avustajan, joka toimii paikallisesti koneellasi
Anton Kutishevsky HackerNoon profile picture

Olen kokeillut paikallisia LLM:itä Salesforcen sisällä ja haluaisin kertoa sinulle sen tuloksena kehittämästäni komponentista. Siinä on jo tuttu chat-käyttöliittymä, joka käyttää Salesforce-tietueita kontekstissa. Se toimii paikallisesti tietokoneellasi, joten käsiteltyjä tietoja ei lähetetä millekään kolmannen osapuolen palveluun.


Agentforcen käyttöönotto vaikutti minuun komponentin kehittämiseen. Agentforce käyttää agentteja – järjestelmiä, jotka voivat tehdä päätöksiä ja suorittaa erilaisia toimintoja. Assistentit sen sijaan käsittelevät tietoja vain reaktiivisesti. Vaikka uskon, että on mahdollista rakentaa paikallinen agentti Pico LLM:n avulla, se vaatisi valtavasti vaivaa. Niinpä päätin kehittää assistentin tilalle.

Ominaisuudet

Kuten voit odottaa LLM:n toimivan, se tuottaa vastauksia mistä tahansa aiheesta, koska se on valmiiksi koulutettu laajalle datajoukolle. Lisäksi se pystyy käyttämään Salesforce-tietueita lisäkontekstiin. Komponentin ominaisuudet ovat:


  • Tukee useita malleja. Mitä tahansa avoimen lähdekoodin mallia Pico-verkkosivustolta, kuten Gemma, Llama tai Phi, voidaan käyttää. Ainoa rajoitus tässä on tietokoneesi RAM-muistin määrä. Mitä enemmän malli painaa, sitä enemmän se kuluttaa RAM-muistia.
  • Toimii yhdellä levyllä. Kun komponentti sijoitetaan tietuesivulle, se voi käyttää tietuetta kontekstia varten. Esimerkiksi Tilitietueen tietosivulla se voi luoda vastauksen kenttäarvojensa perusteella.
  • Tukee liittyviä tietueita. Kun tietueella on aiheeseen liittyviä tietueita, komponentti voi tehdä kyselyjä ja sisällyttää ne vastauksiin.
  • Muokattava. Komponentti voidaan konfiguroida lennossa konfigurointiponnahdusikkunan avulla. Sen avulla voidaan muuttaa sukupolvivaihtoehtoja, kuten valmistumistunnuksen rajaa, lämpötilaa ja ylä-P.

Miten se toimii

Loppukäyttäjän näkökulmasta prosessi on suoraviivainen. Lataat mallin, valitset järjestelmäkehotteen, valitset tietueet, kirjoitat käyttäjäkehotteen ja katsot luotavaa tulosta.

Mikä on Pico LLM?

LLM:ien suorittaminen selaimessa on resursseja vievää tehtävää mallin koon, kaistanleveysvaatimusten ja RAM-tarpeiden vuoksi. Siksi Pico-tiimi kehitti picoLLM-pakkaustekniikkansa, joka tekee LLM:ien käytöstä paikallisesti paljon tehokkaampaa tietokoneissa. He toimittivat picoLLM Inference Enginen JavaScript SDK:na, jotta käyttöliittymäkehittäjät voivat suorittaa LLM:itä paikallisesti eri selaimissa. Se tukee kaikkia nykyaikaisia selaimia, mukaan lukien Chrome, Safari, Edge, Firefox ja Opera. Saat lisätietoja picoLLM-päätelmämoottorin toiminnasta lukemalla heidän artikkelinsa .

LWC osa

Komponentti toimii siltana käyttäjän ja PicoLLM-rajapinnan välillä. Komponentin ytimessä on Visualforce-sivu, joka on upotettu iframe-kehykseksi. Sivu lataa PicoLLM SDK:n ja kommunikoi LWC:n kanssa, jolloin viimeinen voi käyttää SDK:ta postiviestien kautta. Koko elementtiyhdistelmä hoitaa seuraavat asiat:


  • Ladataan mallia. LWC:ssä on painike, jonka avulla voit ladata valitsemasi mallin. Se laukaisee iframe-kehykseen piilotetun tiedoston syöttöelementin. Kun malli on ladattu, Pico SDK luo verkkotyöntekijät ja komponentti on valmis käsittelemään käyttäjän syötteen.
  • Järjestelmäkehotteen asettaminen. Sinun ei tarvitse kirjoittaa järjestelmäkehotetta joka kerta, on helppo valita mikä tahansa tallennettu tietue System_Prompt__c objektista. Kun painiketta painetaan, se näyttää ponnahdusikkunan, jossa on olemassa olevat järjestelmäkehotteet, joista valita.
  • Hyväksytään käyttäjän syöte. Siellä on muutettava tekstialue käyttäjän syötteiden keräämistä varten. Kun se on kerätty, se lähetetään iframeen hyötykuormana ja lisätään keskusteluhistoriaan.
  • Salesforce-tietueiden käyttö. Painikkeita on kaksi: Valitse kentät ja Valitse liittyvät tietueet. Ensimmäinen kerää tietueen kenttäarvot tietuesivulle, jolla LWC sijaitsee. Toisen avulla voit valita liittyvän objektin ja tehdä kyselyn sen tietueista yhdessä valittujen kenttäarvojen kanssa. Nämä tiedot lähetetään myös iframe-kehykseen hyötykuormana.
  • Vaihtelevat sukupolvivaihtoehdot. Haluttaessa valmistumistunnisteen rajaa, lämpötilaa ja ylin P-vaihtoehtoja voidaan muuttaa komponentin erillisellä painikkeella. Nämä tiedot lähetetään myös hyötykuormana iframe-kehykseen.
  • Tulosta luodaan. Kun iframe vastaanottaa hyötykuorman, se käyttää Pico SDK:ta ladatun mallin hyödyntämiseen ja tuloksen luomiseen. Jos sukupolvivaihtoehtoja tarjottiin, ne otetaan huomioon. Myös valintaikkuna päivitetään joka kerta, joten LLM muistaa sen historian.
  • Chat-viestien näyttäminen. LWC pystyy renderöimään lähteviä viestejä, jotka ovat käyttäjän toimittamia. Saapuvat viestit, jotka sisältävät luodun vastauksen, renderöidään dynaamisesti, kun komponentilla on jotain sanottavaa käyttäjälle. Kuten luodut tulokset tai tiedot ja virheilmoitukset.

Hieman Apex-koodia

Asioiden taustapuolella ei ole mitään hienoa. Apex-koodi tekee kaiken raskaan työn, joka liittyy objektien välisten suhteiden havaitsemiseen tietuesivun tietuetunnuksen avulla. Lisäksi se suorittaa pari SOQL-kyselyä ja näin ollen tehtävänsä suoritetaan täällä.

Kehityksen haasteet

Verkkotyöntekijät

Aiemmin käytin unpkg-työkalua koodin suorittamiseen LWC-komponentin solmumoduulista. Tämä lähestymistapa johti lisämääritysvaiheisiin, ja se oli vähemmän turvallinen tapa saada se toimimaan. Tällä kertaa halusin suorittaa PicoLLM-moduulin suoraan Salesforcesta enkä pelkästään Experience Cloud -sivustolta, jonka olin tehnyt aiemmin, vaan Lightning Experience -käyttöliittymästä.


Kannen alla PicoLLM käyttää verkkotyöntekijöitä rinnakkaiskäsittelyyn, ja se oli suurin ongelma, koska niitä ei saa ajaa LWC:stä. Onneksi kukaan ei kieltäytynyt antamasta meidän ajaa verkkotyöntekijöitä visualforce-sivulta, ja se oli lähestymistapa, jota käytin.


Latasin raaka PicoLLM-koodin ja lisäsin sen staattisena resurssina visualforce-sivulle. LWC:ssä käytin iframe-kehystä, joka sisälsi visualforce-sivun. LWC:n ja iframen sisällä olevan sivun välinen viestintä antoi minulle mahdollisuuden käyttää verkkotyöntekijöitä. Sivu laukaisee PicoLLM-koodin Lightning Web -komponentista.

Salesforce-tietueiden käyttö kontekstissa

Kopioi ja liitä Salesforce-tietueet JSON- tai CSV-muodossa, heitä se mihin tahansa online-LLM:ään ja katso. Se kuluttaa tietueet, käyttää niitä lisäkontekstiin ja tuottaa vastauksen. Kävi ilmi, että se ei ole niin helppoa, kun käytetään pakattuja malleja paikalliseen käsittelyyn.


Aluksi laitoin vain tietueet JSON-muodossa suoraan käyttäjän kehotteeseen. Sitten odotin asian olevan tarpeeksi älykäs erottamaan kehotteen tarjoamastani lisäkontekstista. Käytin erikokoisia eri malleja, enkä ymmärtänyt, miksi se ei käyttänyt JSONia vastausten luomiseen. Se oli enimmäkseen kieltäytymistä vastaamasta kehotteeseeni tai fiktiivisten tietojen luomista, jotka eivät liittyneet siihen, mitä pyysin siltä. Aloin kokeilla erilaisia kontekstitietojen muotoja: käyttämällä CSV:tä, käyttämällä JSONia, käyttämällä kehotteen jakajia tiukasti erottamaan kehotteet kontekstista - mikään ei auttanut.


Melkein hylkäsin idean, koska avainominaisuus ei toiminut. Parin kuukauden kuluttua sain yhtäkkiä typerän yksinkertaisen aivoaallon. Entä jos käänsin vain käänteisen osien järjestyksen? Käyttäjäkehote tulee ensin ja konteksti toiseksi, konteksti tulee ensin ja kehote toiseksi. Yllätyksekseni se toimi, ja kaikki käyttämäni mallit alkoivat heti ymmärtää Salesforce-tietueita kontekstina.

Suorituskyky

Komponentin toimivuutta testattiin seuraavilla koneilla:

  • PC, jossa on AMD Ryzen 9 9900X -prosessori ja 32 Gt RAM-muistia (5600 MT/s).
  • Microsoft Surface Laptop 7 toimii Snapdragon X-Elite ARM -prosessorilla ja 16 Gt RAM-muistilla (8448 MT/s).

Mallin latausnopeus – kyse on muistista

Aikaa vievin osa komponentin käytössä on mallin alkulataus. Saatat odottaa, että 9900X ylittää helposti Snapdragon X-Eliten, mutta olet väärässä. Yllätyksekseni jälkimmäinen on nopeampi. Koska siinä on nopeampi muisti, oletan, että mitä nopeampi RAM-muisti, sitä nopeammin malli latautuu. Tässä on mallin latausnopeuden vertailutaulukko viitteeksi:


Vastauksen luomisnopeus

Sama tarina vastauksen synnyttämisnopeuden kanssa. Ymmärtääkseni sinulla on oltava nopea yhdistelmä prosessoria ja RAM-muistia saadaksesi nopeimman mahdollisen sukupolven. Koska vasteen tuotto vaihtelee saman kehotteen mukaan, en tehnyt tarkkoja nopeustestejä. Siitä huolimatta sukupolven nopeus on erittäin nopea, melkein yhtä nopea kuin online-vaihtoehdot.

Entä GPU:n käyttö?

GPU:n käyttäminen vastausten luomiseen olisi todellakin paljon tehokkaampaa. Vaikka on mahdollista käyttää GPU:ta PicoLLM:n kanssa, en ole itse testannut kyseistä kokoonpanoa. Tähän on pari syytä. Ensinnäkin uskon, että se käyttää WebGPU-ominaisuutta, joka ei ole oletuksena käytössä useimmissa selaimissa (paitsi Edgessä). Toiseksi se todennäköisesti vaatii useita gigatavuja VRAM-muistia ladatakseen mallin, jota minulla ei ole.

Johtopäätös

Tämän avustajan kehittäminen on ollut kiehtova tutkimusmatka. Haasteet ovat olleet sekä kannustavia että palkitsevia verkkotyöntekijöiden rajoitusten kamppailusta nopean järjestyksen ratkaisevan roolin löytämiseen kontekstin tarjoamisessa. Tuloksena on Lightning Web -komponentti, joka tarjoaa ainutlaatuisen lähestymistavan suurten kielimallien tehon hyödyntämiseen Salesforce-ekosysteemissä.


Vaikka alkuperäisen mallin latausaika voi olla huomioitava erityisesti suuremmissa malleissa, kyky käsitellä tietoja paikallisesti tarjoaa merkittäviä etuja tietoturvan, reagoivuuden ja kustannustehokkuuden kannalta. Mahdolliset käyttötapaukset sisällöntuotannon automatisoinnista älykkään avun tarjoamiseen ovat laajat ja odottavat tutkimista.


Tutustu GitHubin repoon .