(Acest articol a fost publicat pentru prima dată pe BLUECOLOGIE BLOGș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.
Instrumentele permit modelele AI să ruleze codul și să acceseze alte aplicații. Acesta poate fi un instrument pe computer (cum ar fi o funcție R) sau acces și API.
Prin crearea de instrumente, puteți oferi accesul LLM la bazele de date online (prin API -urile lor) sau să le permiteți să ruleze cod pe computer, să interpretați ieșirea și să îl utilizați în răspunsurile lor.
Există multe modalități de a utiliza instrumente. Până în prezent, multe exemple de instrumente sunt destinate programatorilor de computer. Există câteva instrumente în general utile (cum ar fi crearea de fișiere sau căutarea pe web). Cu toate acestea, am vrut să văd dacă pot face un instrument care să fie util în mod special în domeniul meu de cercetare.
În acest tutorial mă voi uita să le folosesc pentru a obține date oceanice dintr -o bază de date publică care are o API.
Exemplul de bază al unui instrument este obținerea datei și orei curente. Apoi, când cereți timpul, în loc să halucinezi un timp și o dată, modelul poate utiliza un instrument pentru a obține un timp și o dată curentă.
Instrumentele sunt definite folosind un protocol de context de model, care este o structură standardizată pentru conectarea modelelor de limbaj natural la instrumente programatice (care au toate regulile normale de programare, cum ar fi sensibilul la caz, sintaxa adecvată limbajului etc.).
Este greu să găsești explicații clare despre modul în care funcționează, dar iată ce înțeleg:
Instrumentul este „înregistrat” la model. Această înregistrare este doar un prompt pentru model, dar se face cu o structură specifică care definește instrumentul, parametrii, ieșirile și cazurile de utilizare. În acest fel, modelul știe să scrie cod pentru a rula instrumentul.
Apoi, când discutați cu modelul, s -ar putea să interpreteze că utilizarea instrumentului ar fi utilă. Cum ar fi dacă întrebați timpul și „știe” despre un instrument de date, l-ar putea folosi. Scrie codul corespunzător pentru a utiliza instrumentul, îl trimite înapoi la computer (sau către API), unde este evaluat codul. Ieșirea este apoi trimisă înapoi la model. Modelul interpretează acest lucru în răspunsul final pe care vi -l va oferi.
Există un bun exemplu despre modul în care instrumentele nu funcționează și funcționează în documentația Ellmer.
Să încercăm un instrument mai interesant decât exemplul obișnuit de obținere a datei și a orei.
Caz de utilizare
remora Pachetul vă permite să extrageți datele oceanice din baza de date IMOS Bluelink. Putem oferi un acces LLM la aceste date prin crearea unui instrument care utilizează
remora pentru a extrage datele.
Remora
Vom începe să facem câteva date și să testăm remora. Rețineți că
remora Nu este pe CRAN, așa că va trebui să îl instalați de la GitHub.
Ceea ce facem mai jos este să descărcăm temperaturi oceanice pentru unele date alcătuite. Avem nevoie doar de coordonate și date.
Pentru un exemplu mai detaliat, consultați documentația Remora
library(remora)
library(tidyverse)
library(raster)
# Create a dataframe of coordinates near Tasmania with different dates in 2021
tas_dat <- data.frame(
datetime = ymd_hms(paste(
c("2021-02-15", "2021-02-15", "2021-02-15",
"2021-02-15", "2021-02-15"),
"10:00:00")),
X = c(147.2, 148.5, 146.8, 145.3, 144.7), # Longitudes around Tasmania
Y = c(-42.5, -41.8, -43.2, -42.9, -41.5)
)
write.csv(tas_dat, "tas_dat.csv", row.names = FALSE)
Extragerea datelor SST la o adâncime dată este simplă:
tas_temp <-
extractBlue(df = tas_dat,
X = "X",
Y = "Y",
datetime = "datetime",
env_var = "BRAN_temp",
extract_depth = 30,
verbose = TRUE,
full_timeperiod = FALSE)
Acum știm cum să folosim remora Pentru a obține datele, putem defini un instrument, astfel încât LLM să o poată face.
Vom folosi ellmer Pachet pentru a defini instrumentul. Primul pas este să faceți o funcție.
ellmer Documentația vă recomandă să mențineți simple intrările și ieșirile funcției. În primul rând, LLM -urile nu pot gestiona structurile complexe de date R (cum ar fi listele complexe). În al doilea rând, LLM va consuma intrările și ieșirile. Aceasta înseamnă că folosește jetoane, care te costă $ și folosește fereastra contextului modelului (capacitatea de prompt).
Deci nu doriți să aveți gigabyte de date care intră sau ieșind din instrument.
Pentru a ocoli acest lucru, am definit un instrument care ia o cale și să scriu un fișier. În acest fel, LLM nu „vede” datele, nu vede decât căile de intrare și ieșire și cererea mea de profunzime.
#' Extracts SST data from the IMOS BlueLink database
#'
#' @param data_path A path to a csv dataframe
#' @param depth The depth to extract the SST data from
#' @return The current time in the given time zone.
get_sst <- function(data_path, depth) {
dat <- read.csv(data_path)
datout <- extractBlue(df = dat,
X = "X",
Y = "Y",
datetime = "datetime",
env_var = "BRAN_temp",
extract_depth = depth,
verbose = FALSE,
full_timeperiod = FALSE)
write.csv(datout, "temp_data.csv", row.names = FALSE)
return("File written to sst_data.csv")
}
Acum, testați funcția funcționează:
get_sst("tas_dat.csv", 30)
ellmer Pachetul are un create_tool_def că semi-automate următorul pas pe baza documentației Roxygen pe care le-am scris mai sus. Cu toate acestea, acest lucru pare în prezent să funcționeze numai dacă aveți o cheie API OpenAI.
Începeți un nou chat:
library(ellmer) chat <- chat_claude( model = "claude-3-5-haiku-20241022", max_tokens = 1000 )
(Probabil că ar trebui să utilizați un model logic puternic, cum ar fi Sonnet sau GPT4.0 pentru utilizarea instrumentelor, dar Haiku a funcționat bine pentru acest simplu).
Acum înregistrăm instrumentul la chat:
mytool <- tool(
get_sst,
"Gets SST data from the IMOS BlueLink database",
data_path = type_string(
"Path to a csv dataframe that has columns datetime, X, Y",
required = TRUE
),
depth = type_number(
"The depth to extract the SST data from",
required = TRUE
)
)
chat$register_tool(mytool)
Rețineți documentația atentă a instrumentului. Acest lucru va deveni prompturi pentru model, așa că folosiți toate strategiile prompt normale pentru a -l ajuta să vă dați seama când să utilizați instrumentul.
De asemenea, folosim type_xxx Funcții de la ellmer Pentru a defini tipurile de intrări. Acest lucru este important pentru a vă asigura că modelul știe să scrie corect codul pentru utilizarea instrumentului.
Acesta este bitul ușor:
chat$chat("Can you get me SST data at 21m depth for the coordinates in tas_dat.csv?")
Dacă asta funcționează pentru tine (așa cum a făcut -o pentru mine), ar trebui să ai un nou fișier CSV în directorul tău de lucru cu datele SST.
Concluzie
Cu un pic de cod, puteți oferi prompturi și răspunsuri LLM și răspunsuri noi tipuri de capacități.
Exemplul meu simplu ar putea fi îmbunătățit adăugând mai mulți parametri în funcție și adăugând verificarea erorilor și rapoarte.
Dacă am dori să continuăm, am putea crea un instrument de analiză care apoi analizează datele din fișier, face parcelele și așa mai departe.
Definițiile instrumentelor se bazează pe documentația funcției. Aceasta înseamnă că puteți lua orice funcție R existentă și o transformați cu ușurință într -un instrument.
Vrei să fii atent la cât și la tipurile de date care intră în instrumente. În mod evident, există probleme de securitate (ce se întâmplă dacă modelul a creat cod rău intenționat?), Precum și probleme de confidențialitate dacă lucrați cu date sensibile.
Costurile API ar putea de asemenea să explodeze. ellmer oferă o funcție
token_usage()pentru a vă ajuta să urmăriți cheltuielile.
În general, am fost încântat de cât de ușor a fost să fac un instrument cu aplicații interesante în domeniul meu de științe oceanice.
