Repost: Tidy Rag în R cu Ragnar

URMĂREȘTE-NE
16,065FaniÎmi place
1,142CititoriConectați-vă

(Acest articol a fost publicat pentru prima dată pe Realizarea geneticiiș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.

Repostat de la original la: https://blog.stephenturner.us/p/tidy-rag-in-r-with-ragnar

Recuperare generație augmentată în R folosind pachetul Ragnar. Demonstrație: răzuirea textului de pe linkurile relevante de pe un site web și utilizarea RAG pentru a întreba despre finanțarea subvenției a unei universități.

Nota: După ce am scris această postare săptămâna trecută, echipa Tidyverse a lansat Ragnar 0.2.0 pe 12 iulie. Totul aici ar trebui să funcționeze, dar aruncați o privire la Note de eliberare Pentru a afla despre câteva caracteristici noi frumoase, care nu sunt acoperite aici.

Am mai scris puțin despre generația de preluare (RAG), aici înainte. În primul rând, despre GUI pentru LLM -uri locale cu RAG:

GUI pentru LLM -uri locale cu Rag

… și mai târziu la construirea unei mici aplicații Rag pentru a discuta cu o grămadă de PDF -uri în biblioteca Zotero folosind Open WebUI:

Construiți o aplicație de zdrență locală cu Open WebUI pentru a discuta cu biblioteca dvs. ZoteroConstruiți o aplicație de zdrență locală cu Open WebUI pentru a discuta cu biblioteca dvs. Zotero

Într -un Nutshell simplificat: LLM -urile nu vă pot ajuta cu lucruri care nu sunt în datele lor de instruire sau au trecut de data de întrerupere a antrenamentului. Cu RAG, puteți furniza fragmente relevante din aceste documente ca context către LLM, astfel încât răspunsurile sale să fie întemeiate într -o colecție de conținut cunoscut dintr -un corpus de documente de încredere.

Și mai simplificat: Rag vă permite să „discutați cu documentele dvs.”.

În această postare voi demonstra cum să zgâriați textul de pe un site web și să implementați un flux de lucru cu zdrențe în R folosind un nou plus la Tidyverse: Ragnarîmpreună cu funcționalitatea din Ellmer Pentru a interacționa cu API -urile LLM prin R.

Python a dominat istoric spațiul de dezvoltare a produselor AI, dar cu completări recente precum Ellmer, treburi, Ganderși mallR se prinde rapid.

Aici voi folosi noul Ragnar Pachet în Tidyverse (sursă, documentare) pentru a construi un mic flux de lucru în R care folosește API -ul OpenAI.

Voi ingera informații de pe site -ul UVA School of Data Science (SDS) la DataScience.Virginia.eduapoi puneți câteva întrebări care nu vor avea răspunsuri în datele de formare ale modelului de bază.

Dacă doriți să urmați, veți avea nevoie de o cheie API OpenAI. Puteți configura asta la platform.openai.com. Odată ce faci asta, fugi usethis::edit_r_environ() Pentru a adăuga un nou OPENAI_API_KEY Variabilă de mediu și reporniți sesiunea R.

În r, voi avea nevoie de pachetele Ellmer și Ragnar. Deoarece Ragnar nu este încă pe CRAN, va trebui să -l instalez cu Pak sau DevTools.

install.packages("ellmer")
pak::pak("tidyverse/ragnar")

Primul lucru pe care vreau să -l fac este să găsesc toate legăturile cu alte pagini la DataScience.Virginia.eduzgâriați tot conținutul respectiv și lipiți -l într -o bază de date DuckDB. Cea mai mare parte a acestora este modificată direct de la Documentația Ragnarprin urmare, chunking -ul de context încă arată că ingeți o carte.

library(ragnar)

# Find all links on a page
base_url <- "https://datascience.virginia.edu/"
pages <- ragnar_find_links(base_url)

# Create and connect to a vector store
store_location <- "pairedends.ragnar.duckdb"
store <- ragnar_store_create(
  store_location,
  embed = (x) ragnar::embed_openai(x),
  overwrite=TRUE
)

# Read each website and chunk it up
for (page in pages) {
  message("ingesting: ", page)
  chunks <- page |>
    ragnar_read(frame_by_tags = c("h1", "h2", "h3")) |>
    ragnar_chunk(boundaries = c("paragraph", "sentence")) |>
    # add context to chunks
    dplyr::mutate(
      text = glue::glue(
        r"---(
        # Excerpt from UVA School of Data Science (SDS) page"
        link: {origin}
        chapter: {h1}
        section: {h2}
        subsection: {h3}
        content: {text}

        )---"
      )
    )
  ragnar_store_insert(store, chunks)
}
# Build the index
ragnar_store_build_index(store)

Să presupunem acum că vrem să punem întrebări cu privire la finanțarea subvenției de cercetare la Școala UVA de Știință a Datelor (SDS). În primul rând, să vedem ce ne spune ChatGPT fără să oferim deloc context atunci când îl cerem să ne povestească despre finanțarea activă a subvențiilor SDS.

Acum să folosim API -ul OpenAI oferind contextul vectorial pe care tocmai l -am creat, care ar trebui să aibă informații despre finanțarea activă a UVA SDS de la acestea Pagina de listare a subvențiilor active.

library(ragnar)
store_location <- "pairedends.ragnar.duckdb"
store <- ragnar_store_connect(store_location, read_only = TRUE)

# Get relevant chunks
text <- "Tell me about some of SDS's active grant funding."
relevant_chunks <- ragnar_retrieve_vss(
  store,
  text,
  top_k = 10
)
relevant_chunks

#'  Register ellmer tool
#' You can register an ellmer tool to let the LLM retrieve chunks.
system_prompt <- stringr::str_squish(
  r"--(
  You are an expert about UVA's School of Data Science.
  You are concise. You always respond by first direct
  quoting material from the SDS website, then adding
  your own additional context and interpertation.
  Always include links to the source materials used.
  )--"
)
chat <- ellmer::chat_openai(
  system_prompt,
  model = "gpt-4.1-mini",
  params = ellmer::params(temperature = .5)
)

# Register a retrieve tool with ellmer
ragnar_register_tool_retrieve(chat, store, top_k = 10)

# Run the query
chat$chat(text)

Acum, când întrebăm despre o parte din finanțarea activă a subvențiilor SDS, primim un răspuns mai bun:

Iată câteva exemple de finanțare activă a subvențiilor la Școala de Științe a datelor UVA (SDS):

  • Schimbul de resurse și date (RDE) are un acord de subvenție de 5.000.000 USD, cu o perioadă de performanță de la 29 februarie 2024 până la 27 februarie 2029, în prezent 25% finalizată.

  • Laboratoarele de inovare a științei datelor biomedicale: Un program intens de dezvoltare a proiectelor de cercetare are o sumă de premiere de 1.943.352 USD.

  • Sprijinirea profesorilor pre-servicii Discursul matematic prin co-designul instrumentelor de simulare a predării este sponsorizat de NSF-ul SUA cu un premiu total de 250.000 USD.

  • Învățarea profundă a activității Bayesian Bayesian este sponsorizată de NSF din SUA.

  • Îmbunătățirea securității și confidențialității cyberinfrastructurilor comunitare pentru cercetarea colaborativă are un premiu total de 882.518 dolari de la NSF din SUA.

  • Evaluarea eficacității medicamentelor reconstituite are o sumă de premiere de 86.134 dolari.

  • Accelerarea capitalurilor rasiale și etnice în rezultatele de reabilitare a SCI are o sumă de premiere de 53.170 dolari.

  • Aplicarea științei datelor pe sistemele financiare cu accent pe siguranță și securitate are o sumă de premiere de 5.000 USD.

Aceste subvenții acoperă o serie de subiecte de la educație, inovație biomedicală, securitate, la echitate socială în reabilitare.

Sursă: Subvenții active UVA SDS

Pe măsură ce scriu acest lucru, costul pentru GPT-4.1 Mini este ridicol de ieftin la 0,40 USD cenți pe milion de jetoane de intrare (vezi mai multe despre aceștia Pagina de prețuri API) Demonstrația de aici m -a costat 0,01 USD (Încorporarea textului și stocarea vectorială au costat o fracțiune de un ban, pe lângă completările de intrare/ieșire).

Există o mulțime de deschise/locale Modele care acceptă utilizarea instrumentelorprecum și deschis/local Modele de încorporare texttoate acestea pot fi rulate prin Ollama. Am încercat același exercițiu de mai sus folosind Încorporarea nomică
Prin Ollama pentru încorporarea textului și a încercat mai multe cu abilități de apel de instrumente, inclusiv QWEN3, Mistral, Llama3.1, Llama3.2, Llama3.3 și noul Llama4, iar rezultatele au fost toate
teribil. Nu știu dacă acest lucru s -a datorat inferiorității modelelor în sine, sau dacă acesta a fost modelul de încorporare pe care l -am ales, care, întâmplător, s -a întâmplat să fie cel mai popular model de încorporare disponibil în Olama. Puneți doar 1 dolar pe contul dvs. API OpenAI și începeți să lucrați și încetați să vă faceți griji.

Acest webinar recent de la CTO Posit Joe Cheng nu acoperă deloc Rag. De fapt, el menționează aproape de vârf că ar trebui să nu Fii prima ta alegere atunci când simpla schimbare a unui prompt de sistem ar fi suficient de bună. Este o discuție bună și am învățat câteva lucruri frumoase pe parcurs.

Dominic Botezariu
Dominic Botezariuhttps://www.noobz.ro/
Creator de site și redactor-șef.

Cele mai noi știri

Pe același subiect

LĂSAȚI UN MESAJ

Vă rugăm să introduceți comentariul dvs.!
Introduceți aici numele dvs.