Analizzare il contenuto di una issue con GitHub Models e AI

di Matteo Tumiati, in DevOps,

Nello script di settimana scorsa abbiamo visto come sia possibile sfruttare le API previste da GitHub Model per accedere a modelli AI integrati ed eseguirli all'interno dei nostri workflow. Un altro modo per poter fare la stessa chiamata, ma senza usare le REST API, è quello di utilizzare una GitHub Action (in questo caso è built-in e creata da GitHub stessa).

- name: AI Inference
  id: inference
  uses: actions/ai-inference@v1
  with:
    prompt: 'Congratulati con l'\''utente per aver eseguito il primo prompt via GitHub Actions.'

Vediamo però un esempio più concreto. Supponiamo di voler creare un workflow che, ad ogni issue creata da un utente, analizza il suo contenuto e conferma l'apertura o richiede maggiori informazioni all'utente per poter procedere alla risoluzione. Prima di tutto, dobbiamo assicurarci che il workflow venga invocato ad ogni issue creata:

on:
  issues:
    types: [opened]

Dopodiché, dobbiamo prelevare il test scritto all'interno della issue per poterlo "dare in pasto" al prompt:

- name: Fetch Issue
  id: issue
  uses: actions/github-script@v7
  with:
    script: |
      const issue = await github.rest.issues.get({
        owner: context.repo.owner,
        repo: context.repo.repo,
        issue_number: context.issue.number
      })
      core.setOutput('title', issue.data.title)
      core.setOutput('body', issue.data.body)

A questo punto, possiamo utilizzare l'Action di AI Inference per analizzare il testo e generare una risposta:

- name: Analyze Issue For Reproduction
  if: contains(join(github.event.issue.labels.*.name, ','), 'bug')
  id: analyze-issue
  uses: actions/ai-inference@v1
  with:
    model: mistral-ai/ministral-3b
    system-prompt: |
      Given a bug report title and text for an application, thank the user for opening an issue if there is enough information to reliably reproduce the issue, meaning the report clearly describes the steps to reproduce the problem, specifies the expected and actual behavior, and includes environment details such as browser and operating system; if any of these elements are missing or unclear, return a brief description of what is missing in a friendly response to the author instead. Consider the following title and body:
    prompt: |
      Title: ${{ steps.issue.outputs.title }}
      Body: ${{ steps.issue.outputs.body }}

In aggiunta a quanto visto settimana scorsa, che era relativo solamente all'uso del prompt per generare una risposta, in questo caso abbiamo anche specificato il system prompt, ovvero un insieme di istruzioni generali e contestuali che definiscono il "come" e il "perché" delle risposte dell'IA, stabilendo tono, personalità e regole di comportamento per l'intera conversazione (cioè il come deve rispondere in base alla issue e al contesto fornito). In questo esempio, vediamo anche l'utilizzo di un modello di "Mistral AI", perchè è ottimo per la generazione di testo e ha un costo di generazione piuttosto basso.

Ottenuta la risposta, possiamo presentarla graficamente all'interno della issue stessa.

- name: Comment On Issue
  if: contains(join(github.event.issue.labels.*.name, ','), 'bug')
  uses: actions/github-script@v7
  env:
    AI_RESPONSE: ${{ steps.analyze-issue.outputs.response }}
  with:
    script: |
      await github.rest.issues.createComment({
        owner: context.repo.owner,
        repo: context.repo.repo,
        issue_number: context.issue.number,
        body: process.env.AI_RESPONSE
      })

In questo modo stiamo dando all'autore della issue l'impressione di essere seguito e supportato, anche se in realtà la risposta è generata da un modello AI. Ovviamente, questo è solo un esempio di quello che si può fare con le GitHub Actions e le API di GitHub Model, ma le possibilità sono sostanzialmente infinite.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi