(Acest articol a fost publicat pentru prima dată pe Musings on rși a contribuit cu drag la R-Bloggers). (Puteți raporta problema despre conținutul de pe această pagină aici)
Doriți să vă împărtășiți conținutul pe R-Bloggers? Faceți clic aici dacă aveți un blog sau aici dacă nu.
Introducere
În calitate de cineva care se bucură atât de ciclism, cât și de codificare în R, m -am întrebat întotdeauna dacă există modalități prin care R (sau știința datelor mai general) ar putea ajuta cu eficiența mea de formare sau cu experiența de ciclism. În cele două postări anterioare din acest blog, am scris despre utilizarea LLMS de la LM Studio și Azure Openai pentru a crea rezumate text și descrieri ale primelor 100 de urcări de ciclism din Marea Britanie. Ca un sport care pune un accent puternic pe date, există de fapt o mulțime de oportunități de a aplica tehnici de știință a datelor la ciclism.
O oportunitate recentă pentru mine este în jurul problemei planificării rutelor ciclului. Rutele de ciclism sunt stocate în mod obișnuit în fișiere cu extensia .gpx
(care reprezintă formatul de schimb GPS) și, de obicei, conțin date GPS, cum ar fi punctele de referință, rutele și piesele. Fișierele GPX se bazează pe XML (extensibile limbaj de marcare), ceea ce înseamnă că folosesc sintaxa XML pentru a structura datele, ceea ce le face atât citibile de oameni, cât și citibile de mașină.
Fiecare fișier GPX ar reprezenta o anumită rută de ciclism și, la un moment dat, s -ar fi acumulat cu ușurință peste o sută de fișiere GPX fără un sistem care să le organizeze. Aceasta reprezintă o problemă. De exemplu,
- Cum mi -aș da seama de distanța și ridicarea fiecărui traseu?
- Traseul este o buclă sau este un traseu unidirecțional?
- Unde trece traseul?
Modul tradițional de a descoperi acest lucru este de a încărca manual fișierul GPX în planificatorul de rute la alegere, fie că este vorba de Strava, Komoot, Garmin, Hammerhead, etc., și din nou manual Dă traseului un titlu și o descriere. Probabil că va dura 5 minute pentru a face acest lucru pentru fiecare traseu – dați sau luați – dar de ce să vă petreceți timpul făcând lucrurile manual când puteți petrece mai mult timp pe bicicletă, nu? 😊
- Generați hărți de rută și grafice ale profilului de ridicare
- Calculați statisticile totale de distanță și de altitudine
- Identificați locațiile la punctele de început și de sfârșit ale traseului, precum și de marcajele de 25%, 50%și 75%
- Interfață cu LLMS cu {Ellmer} pentru a genera un titlu și o descriere a fișierului GPX.
{ellmer}
Pachetul oferă o interfață unificată și consecventă pentru a interacționa cu mai mulți furnizori de modele de limbaj mare (LLM), cum ar fi OpenAI, Azure Openai, Claude și Gemini.
Ceea ce înseamnă în esență acest lucru este că acum există un flux de lucru R pentru a obține de la un fișier GPX (sau sute dintre ele) la un titlu și descriere generată de LLM pentru traseu. Deoarece {Ellmer} vă permite să interfațați cu diferite LLM -uri, puteți juca, de asemenea, cu opțiunile modelului, precum și promptul pentru a optimiza rezultatele.
Această postare va oferi o introducere în {gpxtoolbox} și cum să o utilizați.
Noțiuni de bază
Pentru a urma, veți avea nevoie de următoarele:
-
{gpxtoolbox}
Pachet pentru procesarea fișierelor GPX. -
{ellmer}
Pachet pentru interfață cu LLMS. - O cheie API pentru furnizorul de LLM ales (de exemplu, Openai, Azure Openai).
Să începem prin instalarea pachetelor necesare:
install.packages("ellmer") devtools::install_github("martinctc/gpxtoolbox")
Exemplu flux de lucru
Iată un ghid pas cu pas pentru generarea de titluri și descrieri pentru un traseu GPX.
Pasul 1: Procesați un fișier GPX
În primul rând, folosiți analyse_gpx()
Funcție din {gpxtoolbox}
Pentru a extrage statistici de rută dintr -un fișier GPX:
library(gpxtoolbox) # Path to the example GPX file example_gpx_path <- system.file("extdata", "icc_intro_ride.gpx", package = "gpxtoolbox") # Analyse the GPX file and get route statistics stats <- analyse_gpx(example_gpx_path, return = "stats") print(stats)
Următoarele sunt returnate:
$total_distance_km (1) 42.81 $total_elevation_gain_m (1) 622.2 $total_elevation_loss_m (1) 556.6 $max_elevation_m (1) 143 $min_elevation_m (1) 29.9 $start_point (1) "The Gatehouse, Fieldway Crescent, Canonbury, Highbury, London Borough of Islington, London, Greater London, England, N5 1PZ, United Kingdom" $end_point (1) "Archway Road, London Borough of Haringey, London, Greater London, England, N6 4EJ, United Kingdom" $p25_point (1) "Highwood Hill, Mill Hill, London Borough of Barnet, London, Greater London, England, NW7 4HN, United Kingdom" $p50_point (1) "36, Camlet Way, Hadley Wood, London Borough of Enfield, London, Greater London, England, EN4 0LJ, United Kingdom" $p75_point (1) "Lincoln Road, Colney Hatch, London Borough of Barnet, London, Greater London, England, N2 9DJ, United Kingdom"
În exemplul de mai sus, example_gpx_path
Se arată către un eșantion de fișier GPX care vine instalat cu pachetul {gpxtoolbox}, care este un traseu pentru călătoria de introducere pentru Islington Cycling Club. Puteți înlocui example_gpx_path
Cu calea către un fișier GPX pe care l -ați salvat local la mașina dvs. În mod alternativ, puteți furniza, de asemenea, o adresă URL pe un traseu la plimbare cu GPS.
stats
Obiectul este o listă numită care conține valori cheie și detalii despre ruta GPX:
$total_distance_km
: Distanța totală a traseului în kilometri.$total_elevation_gain_m
: Câștigul total de altitudine (în sus) în metri.$total_elevation_loss_m
: Pierderea totală a altitudinii (coborâre) în metri.$max_elevation_m
: Cel mai înalt punct de altitudine de -a lungul traseului în metri.$min_elevation_m
: Cel mai mic punct de altitudine de -a lungul traseului în metri.$start_point
: O adresă sau o locație citită de om pentru punctul de plecare al traseului.$end_point
: O adresă sau o locație care poate fi citită de om pentru punctul de încheiere al traseului.$p25_point
,$p50_point
,$p75_point
: Adrese sau locații care pot fi citite de om pentru puncte la 25%, 50%și, respectiv, 75%din distanța totală a traseului. În {gpxtoolbox}, aceasta este implementată ca un apel API către OpenStreetMap cu coloanele Latitude și Longitudine expuse în punctele de pistă. Pentru mai multe detalii, consultați implementareaidentify_geo()
.
Pasul 2: Generați un titlu și o descriere
gen_description()
Acceptă o listă de statistici de rută conform mai sus și folosește acest lucru ca parte a promptului pentru a fi trimis la LLM. Rețineți că înainte de a putea utiliza gen_description()
va trebui să fi obținut o cheie API și un punct final de la furnizorul de alegere LLM. Această funcție apelează direct chat_*()
Funcții prefixate de la {Ellmer}, pentru care puteți găsi mai multe informații aici. De exemplu, ar trebui să satisfaceți argumentele din chat_azure()
Dacă utilizați Azure AI, chat_claude()
Pentru Claude, și așa mai departe. Pentru un exemplu despre cum să configurați AI Open AI, puteți face referire la această postare anterioară.
După ce aveți toate biți și piese gata, treceți pur și simplu obiectul de listă care conține statisticile rutelor și valorile API necesare pentru gen_description()
folosind platform
argument pentru a specifica platforma de utilizat (care la rândul său determină ce funcție să apeleze de la {ellmer}):
# Generate a title and description using OpenAI result <- gen_description( stats = stats, platform = "azure", api_key = Sys.getenv("OPENAI_API_KEY"), deployment_id = "gpt-4o-mini" ) cat(result)
Produsul va include un titlu și o descriere detaliată a traseului, evidențierea caracteristicilor cheie precum distanța, câștigul de altitudine și reperele notabile:
(1) "**Title:** Highbury to Highwood Hill Adventure - 42.8 km, 622 m Climb nn**Description:** Embark on an exhilarating journey from The Gatehouse in Canonbury to Archway Road, traversing through the scenic landscapes of North London. This 42.81 km route offers a total elevation gain of 622.2 m, showcasing a mix of rewarding climbs and gentle descents. Experience stunning views at the 25% mark at Highwood Hill in Mill Hill, pass through the tranquil Camlet Way at the halfway point, and enjoy the charm of Lincoln Road in Colney Hatch as you approach the final stretch. With elevations ranging from 29.9 m to a peak of 143 m, this route is perfect for those looking to experience both urban and lush green environments in a single adventure. Lace up your hiking boots and explore the diverse terrains this route has to offer!"
Pasul 3: Personalizarea promptului
gen_description()
Funcția folosește un prompt implicit pentru a genera titlul și descrierea. Dacă doriți să adaptați ieșirea, puteți utiliza prompt
argument pentru a furniza propriul prompt funcției. Promptul de șablon, care este utilizat ca implicit, este stocat în desc_prompt.md
fișier inclus în {gpxtoolbox}
pachet. Acest lucru vă permite să adaptați tonul și stilul textului generat la preferințele dvs.
Pasul 4: Vizualizarea traseului
În afară de generarea unui titlu și descriere pentru un traseu, puteți vizualiza și traseul cu plot_route()
care generează forma traseului și a profilului de ridicare. Desigur, această caracteristică nu este atât de dezvoltată pe cât mi -aș dori și mă gândesc să integrez {Leaflet} sau un fel de pachet de mapare ca un pas următor. Puteți consulta această vinie pe care o voi actualiza cu exemple ca noi funcții.
De ce să folosiți {ellmer}?
În postările anterioare, am demonstrat cum să creez funcții personalizate pentru interfațarea cu LLMS. În timp ce această abordare oferă flexibilitate, poate fi nevoie de timp pentru a menține și a se adapta la diferiți furnizori. {ellmer}
Pachetul simplifică acest proces, oferind o interfață consecventă la mai multe platforme LLM, inclusiv:
- Openai
- Azure Openai
- Claude
- Gemenii
- Perplexitate
- Deepseek
Cu {ellmer}
puteți comuta între furnizori cu modificări minime ale codului dvs., ceea ce îl face o soluție versatilă și eficientă pentru lucrul cu LLMS.
Concluzie
Integrarea {gpxtoolbox}
şi {ellmer}
Deschide multe posibilități pentru automatizarea creării de titluri și descrieri de rute. În timp ce acest instrument a fost inițial inspirat dintr -un caz de utilizare a ciclismului, acest pachet este relevant și pentru planificarea drumeții, plimbări sau alergări. Dacă nu ai făcut -o deja, dă {gpxtoolbox}
şi {ellmer}
Încercați și anunțați -mă ce credeți. Explorare fericită!
NB Pentru orice solicitări de îmbunătățire sau erori, aș aprecia dacă puteți trimite o problemă https://github.com/martinctc/gpxxoolbox/issues. Vă mulțumesc!