Come interagire con un LLM in Go

I modelli linguistici di grandi dimensioni (LLM) possono essere integrati nelle applicazioni Go per abilitare funzionalità avanzate di linguaggio naturale come il completamento del testo, la generazione di codice e l'analisi semantica. Questo articolo spiega come connettersi a un LLM tramite API REST, utilizzando la libreria standard di Go.

Prerequisiti

Assicurati di avere:

  • Go installato (versione 1.18 o superiore)
  • Una chiave API valida da un provider LLM (come OpenAI)

Esempio di chiamata a un LLM

Ecco un esempio di codice Go che invia una richiesta POST a un LLM (es. OpenAI GPT) e stampa la risposta:


package main

import (
  "bytes"
  "encoding/json"
  "fmt"
  "io"
  "net/http"
  "os"
)

func main() {
  apiKey := os.Getenv("OPENAI_API_KEY")
  if apiKey == "" {
    fmt.Println("OPENAI_API_KEY non impostata")
    return
  }

  url := "https://api.openai.com/v1/chat/completions"
  payload := map[string]interface{}{
    "model": "gpt-3.5-turbo",
    "messages": []map[string]string{
      {"role": "user", "content": "Ciao, cosa puoi fare?"},
    },
  }

  jsonData, err := json.Marshal(payload)
  if err != nil {
    panic(err)
  }

  req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
  if err != nil {
    panic(err)
  }

  req.Header.Set("Content-Type", "application/json")
  req.Header.Set("Authorization", "Bearer "+apiKey)

  client := &http.Client{}
  resp, err := client.Do(req)
  if err != nil {
    panic(err)
  }
  defer resp.Body.Close()

  body, err := io.ReadAll(resp.Body)
  if err != nil {
    panic(err)
  }

  fmt.Println(string(body))
}
  

Interpretazione della risposta

La risposta JSON include un campo choices contenente il messaggio generato dal modello. Puoi usare encoding/json per decodificarlo e accedere direttamente al contenuto.

Conclusioni

Usando Go è possibile interagire facilmente con un LLM tramite API HTTP. Questo approccio ti consente di integrare potenti funzionalità linguistiche in qualsiasi servizio o applicazione backend scritta in Go.

Torna su