paint-brush
Gumagawa ang Salesforce Developer ng LLM Assistant na Lokal na Gumagana sa Iyong Machinesa pamamagitan ng@akutishevsky
Bagong kasaysayan

Gumagawa ang Salesforce Developer ng LLM Assistant na Lokal na Gumagana sa Iyong Machine

sa pamamagitan ng 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
tl-flagTL
Basahin ang kwentong ito sa Filipino!
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!
cs-flagCS
Přečtěte si tento příběh v češtině!
xh-flagXH
Funda eli bali ngesiXhosa!
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
წაიკითხეთ ეს ამბავი ქართულად!
TL

Masyadong mahaba; Upang basahin

Gumawa ako ng Salesforce Lightning Web Component na nagbibigay-daan sa iyong magpatakbo ng mahuhusay na AI language models (LLMs) nang direkta sa iyong computer sa loob ng Salesforce. Gumagamit ito ng teknolohiya ng Pico LLM upang iproseso ang data nang lokal, pinapanatiling secure ang iyong impormasyon at mabilis na tumutugon. Magagamit mo ito upang makabuo ng mga email, magsulat ng nilalaman, magsuri ng data ng customer, at higit pa, lahat nang hindi umaasa sa mga panlabas na serbisyo. Tingnan ang demo na video at GitHub repo para matuto pa!
featured image - Gumagawa ang Salesforce Developer ng LLM Assistant na Lokal na Gumagana sa Iyong Machine
Anton Kutishevsky HackerNoon profile picture
Anton Kutishevsky

Anton Kutishevsky

@akutishevsky

Do this, do that.

Nag-eksperimento ako sa mga lokal na LLM sa loob ng Salesforce at gusto kong sabihin sa iyo ang tungkol sa bahaging binuo ko bilang resulta. Mayroon itong pamilyar na interface ng chat na gumagamit ng mga talaan ng Salesforce para sa konteksto. Gumagana ito nang lokal sa iyong computer, kaya hindi ipinapadala ang naprosesong data sa anumang serbisyo ng third-party.


Ang pagpapakilala ng Agentforce ang nakaimpluwensya sa akin na bumuo ng bahagi. Gumagamit ang Agentforce ng mga ahente — mga system na maaaring gumawa ng mga desisyon at magsagawa ng iba't ibang aksyon. Ang mga katulong, sa kabaligtaran, ay nagpoproseso lamang ng impormasyon nang reaktibo. Kahit na naniniwala akong posible na bumuo ng isang lokal na ahente gamit ang Pico LLM, kakailanganin ito ng napakalaking pagsisikap. Kaya, nagpasya akong bumuo ng isang katulong sa halip.


Mga tampok

Tulad ng inaasahan mong gagana ang isang LLM, bumubuo ito ng mga tugon sa anumang paksa, dahil ito ay paunang sinanay sa isang malawak na hanay ng data. Bukod dito, nagagamit nito ang mga talaan ng Salesforce para sa karagdagang konteksto. Ang mga tampok ng sangkap ay:


  • Sinusuportahan ang maramihang mga modelo. Maaaring gamitin ang anumang open-source na modelo mula sa website ng Pico, gaya ng Gemma, Llama, o Phi. Ang tanging limitasyon dito ay ang dami ng RAM na mayroon ang iyong computer. Kung mas tumitimbang ang modelo, mas maraming RAM ang kumokonsumo nito.
  • Gumagana sa isang solong rekord. Kapag ang bahagi ay inilagay sa isang pahina ng talaan, pagkatapos ay maa-access nito ang tala para sa konteksto. Halimbawa, kapag nasa page ng detalye ng talaan ng Account, maaari itong bumuo ng tugon batay sa mga value ng field nito.
  • Sinusuportahan ang mga kaugnay na talaan. Kapag ang isang talaan ay may kaugnay na mga tala, ang bahagi ay maaaring mag-query at isama ang mga ito sa mga tugon.
  • Nako-configure. Ang bahagi ay maaaring i-configure sa mabilisang, gamit ang configuration popup. Nagbibigay-daan ito sa pagbabago ng mga opsyon sa pagbuo, gaya ng limitasyon ng token sa pagkumpleto, temperatura, at nangungunang P.

Paano ito gumagana

Mula sa pananaw ng end user, diretso ang proseso. Mag-upload ka ng modelo, pumili ng system prompt, pumili ng mga tala, magsulat ng user prompt, at tingnan ang resultang nabuo.

Ano ang Pico LLM?

Ang pagpapatakbo ng mga LLM sa isang browser ay isang gawaing umuubos ng mapagkukunan dahil sa laki ng modelo, mga kinakailangan sa bandwidth at mga pangangailangan ng RAM. Samakatuwid, binuo ng Pico team ang kanilang picoLLM Compression technique, na ginagawang mas mahusay ang paggamit ng mga LLM sa lokal para sa mga computer. Ibinigay nila ang picoLLM Inference Engine, bilang isang JavaScript SDK, upang payagan ang mga front-end na developer na magpatakbo ng mga LLM nang lokal sa mga browser. Sinusuportahan nito ang lahat ng modernong browser kabilang ang Chrome, Safari, Edge, Firefox, at Opera. Upang malaman ang higit pa tungkol sa kung paano gumagana ang picoLLM Inference Engine, maaari mong basahin ang kanilang artikulo .

Ang bahagi ng LWC

Ang component ay nagsisilbing tulay sa pagitan ng user at PicoLLM interface. Sa core ng component ay isang Visualforce page na naka-embed bilang isang iframe. Nilo-load ng page ang PicoLLM SDK at nakikipag-ugnayan sa LWC na nagpapahintulot sa huling gumamit ng SDK sa pamamagitan ng mga post na mensahe. Ang buong kumbinasyon ng mga elemento ay humahawak sa mga sumusunod:


  • Naglo-load ng modelo. Ang LWC ay may isang pindutan na nagbibigay-daan sa iyo upang i-load ang isang modelo na iyong pinili. Nagti-trigger ito ng elemento ng input ng file na nakatago sa loob ng iframe. Kapag na-load na ang modelo, gagawa ang Pico SDK ng mga web worker, at handa na ang component na iproseso ang input ng user.
  • Pagtatakda ng prompt ng system. Hindi mo kailangang magsulat ng system prompt sa bawat oras, madaling pumili ng anumang naka-save na record ng System_Prompt__c object. Kapag pinindot ang button, magpapakita ito ng popup na may mga umiiral nang system prompt na mapagpipilian.
  • Pagtanggap ng input ng user. Mayroong isang resizable text area para sa pagkolekta ng input ng user. Kapag nakolekta, ipinapadala ito sa iframe bilang payload at idinaragdag sa history ng pag-uusap.
  • Pag-access sa mga talaan ng Salesforce. Mayroong dalawang mga pindutan: Piliin ang Mga Patlang at Piliin ang Mga Kaugnay na Tala. Kinokolekta ng una ang mga halaga ng field ng tala sa isang pahina ng talaan kung saan naninirahan ang LWC. Ang pangalawa ay nagpapahintulot sa iyo na pumili ng isang kaugnay na bagay at i-query ang mga tala nito kasama ang mga napiling halaga ng field. Ang impormasyong ito ay ipinapadala sa iframe bilang payload din.
  • Pagbabago ng mga pagpipilian sa henerasyon. Kung ninanais, ang limitasyon sa pagkumpleto ng token, temperatura, at nangungunang mga opsyon sa P ay maaaring baguhin sa pamamagitan ng isang nakalaang button sa bahagi. Ang impormasyong ito ay ipinadala din bilang isang payload sa iframe.
  • Pagbuo ng resulta. Kapag natanggap ng iframe ang payload, ginagamit nito ang Pico SDK para magamit ang na-load na modelo at makabuo ng resulta. Kung ang mga pagpipilian sa henerasyon ay ibinigay, sila ay isinasaalang-alang. Gayundin, ang dialog ay ina-update sa bawat oras, kaya maaalala ng LLM ang kasaysayan nito.
  • Nagre-render ng mga mensahe sa chat. Nagagawa ng LWC na mag-render ng mga papalabas na mensahe, na siyang ibinigay ng user. Ang mga papasok na mensahe, na naglalaman ng nabuong tugon, ay dynamic na nire-render kapag ang bahagi ay may anumang sasabihin sa user. Gaya ng mga nabuong resulta o impormasyon at mga mensahe ng error.

Isang maliit na bit ng Apex code

Sa back-end na bahagi ng mga bagay ay walang magarbong. Ginagawa ng Apex code ang lahat ng mabigat na pag-angat na nauugnay sa pag-detect ng mga ugnayan sa pagitan ng mga bagay gamit ang isang record Id mula sa pahina ng talaan. Gayundin, nagsasagawa ito ng ilang mga query sa SOQL, at sa gayon ang tungkulin nito ay ginagawa dito.

Mga Hamon sa Pag-unlad

Mga manggagawa sa web

Dati, ginamit ko ang tool na unpkg para magsagawa ng code mula sa node module sa LWC component. Ang diskarte na ito ay humantong sa karagdagang mga hakbang sa pagsasaayos, at isang hindi gaanong secure na paraan upang gawin itong gumana. Sa pagkakataong ito, gusto kong isagawa ang module ng PicoLLM nang direkta mula sa Salesforce at hindi lamang mula sa site ng Experience Cloud, na ginawa ko dati, ngunit ang interface ng Lightning Experience.


Sa ilalim ng hood, gumagamit ang PicoLLM ng mga web worker para sa parallel processing, at ito ang pangunahing problema dahil hindi ito pinapayagang patakbuhin ang mga ito mula sa LWC. Sa kabutihang palad, walang tumanggi na patakbuhin kami ng mga web worker mula sa isang visualforce page, at ito ang ginamit kong diskarte.


Na-download ko ang raw PicoLLM code at idinagdag ko ito bilang isang static na mapagkukunan sa pahina ng visualforce. Sa LWC gumamit ako ng iframe na naglalaman ng visualforce page. Ang komunikasyon sa pagitan ng LWC at ng pahina sa loob ng iframe ay nagpapahintulot sa akin na gumamit ng mga manggagawa sa web. Pinalitaw ng pahina ang code na nauugnay sa PicoLLM mula sa bahagi ng lightning web.

Paggamit ng mga tala ng Salesforce para sa konteksto

Kopyahin at i-paste ang mga tala ng Salesforce sa JSON o CSV na format, itapon ito sa anumang online na LLM at panoorin. Kakainin nito ang mga tala, gagamitin ang mga ito para sa karagdagang konteksto at bubuo ng tugon. Ito ay lumabas na hindi ganoon kadali kapag gumagamit ng mga naka-compress na modelo para sa lokal na pagproseso.


Noong una, inilalagay ko lang ang mga tala, sa format na JSON, sa prompt ng user. Pagkatapos ay inaasahan ko na ang bagay ay sapat na matalino upang makilala ang mismong prompt mula sa karagdagang kontekstong ibinigay ko. Gumamit ako ng iba't ibang modelo ng iba't ibang laki at hindi ko maintindihan kung bakit hindi nito ginagamit ang JSON upang makabuo ng mga tugon. Kadalasan ay ang mga pagtanggi na tumugon sa aking prompt o pagbuo ng fictional data na hindi nauugnay sa kung ano ang hiniling kong gawin nito. Nagsimula akong mag-eksperimento sa iba't ibang format ng data ng konteksto: gamit ang CSV, gamit ang JSON, gamit ang mga prompt divider upang mahigpit na maiba ang prompt mula sa konteksto — walang nakatulong.


Halos tinalikuran ko ang ideya dahil hindi gumagana ang pangunahing tampok. After a couple of months, bigla akong nagkaroon ng stupidly simple brainwave. Paano kung binaligtad ko lang ang pagkakasunud-sunod ng mga maagang bahagi? Mula sa pag-uuna ng user at pangalawa ang konteksto, hanggang sa mauna ang konteksto at pangalawa ang prompt. Sa aking sorpresa ay gumana ito, at anumang modelo na ginamit ko ay agad na nagsimulang maunawaan ang mga talaan ng Salesforce bilang konteksto.

Pagganap

Nasubok ang functionality ng component sa mga makinang ito:

  • PC na may AMD Ryzen 9 9900X processor at 32GB ng RAM (5600 MT/s).
  • Microsoft Surface Laptop 7 na pinapagana ng Snapdragon X-Elite ARM processor na may 16 GB ng RAM (8448 MT/s).

Bilis ng paglo-load ng modelo— lahat ito ay tungkol sa memorya

Ang pinaka-nakakaubos ng oras na bahagi ng paggamit ng bahagi ay ang paunang pag-load ng modelo. Maaari mong asahan na madaling madaig ng 9900X ang Snapdragon X-Elite, ngunit magkakamali ka. Sa aking pagtataka, ang huli ay mas mabilis. Dahil mayroon itong mas mabilis na memorya, ipinapalagay ko na mas mabilis ang iyong RAM, mas mabilis ang pag-load ng modelo. Narito ang isang talahanayan ng paghahambing ng bilis ng paglo-load ng modelo para sa sanggunian:


image

Bilis ng pagbuo ng tugon

Ang parehong kuwento na may bilis ng pagbuo ng tugon. Sa pagkakaintindi ko, kailangan mong magkaroon ng mabilis na kumbinasyon ng CPU at RAM para makuha ang pinakamabilis na henerasyong posible. Dahil nag-iiba ang pagbuo ng tugon sa parehong prompt, hindi ako nagsagawa ng mga tumpak na pagsubok sa bilis. Gayunpaman, ang bilis ng henerasyon ay napakabilis, halos kasing bilis ng mga online na alternatibo.

Paano ang paggamit ng GPU?

Sa katunayan, ang paggamit ng isang GPU upang makabuo ng mga tugon ay magiging mas mahusay. Bagama't posibleng gumamit ng GPU na may PicoLLM, hindi ko pa nasubukan ang configuration na iyon sa aking sarili. Mayroong ilang mga dahilan para dito. Una, naniniwala ako na ginagamit nito ang tampok na WebGPU, na hindi pinagana bilang default sa karamihan ng mga browser (maliban sa Edge). Pangalawa, malamang na nangangailangan ito ng ilang gigabytes ng VRAM upang mai-load ang modelo na wala ako.

Konklusyon

Ang pagbuo ng katulong na ito ay naging isang kamangha-manghang paglalakbay ng paggalugad. Mula sa pakikipagbuno sa mga limitasyon ng manggagawa sa web hanggang sa pagtuklas ng mahalagang papel ng maagap na pagkakasunud-sunod sa pagbibigay ng konteksto, ang mga hamon ay parehong nakapagpapasigla at nagbibigay-kasiyahan. Ang resulta ay isang Lightning Web Component na nag-aalok ng natatanging diskarte sa paggamit ng kapangyarihan ng Large Language Models sa loob ng Salesforce ecosystem.


Bagama't maaaring isaalang-alang ang unang oras ng paglo-load ng modelo, lalo na para sa mas malalaking modelo, ang kakayahang magproseso ng data nang lokal ay nag-aalok ng makabuluhang mga pakinabang sa mga tuntunin ng seguridad ng data, pagtugon, at pagiging epektibo sa gastos. Ang mga potensyal na kaso ng paggamit, mula sa pag-automate ng pagbuo ng nilalaman hanggang sa pagbibigay ng matalinong tulong, ay malawak at naghihintay na tuklasin.


Tingnan ang GitHub repo .

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

About Author

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

HANG TAGS

ANG ARTIKULONG ITO AY IPINAKITA SA...

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