Usare modelli di codice e l'SDK Vertex AI

In Vertex AI esistono tre modelli di base di codice per l'IA generativa. I tre modelli sono: generazione di codice, modello di completamento codice e modello di chat di codice.

  • Il nome del modello di generazione del codice è code-bison e la sua classe nell'SDK Vertex AI è CodeGenerationModel.

  • Il nome del modello di completamento del codice è code-gecko e la sua classe nell'SDK Vertex AI è la stessa utilizzata per la generazione del codice, CodeGenerationModel.

  • Il nome del modello di chat di codice è codechat-bison e la sua classe nell'SDK Vertex AI è CodeChatModel.

I seguenti argomenti mostrano come utilizzare queste classi e l'SDK Vertex AI per eseguire alcune attività di IA generativa comuni relative al codice.

Generare una funzione di codice

I casi d'uso per il modello di base per la generazione di codice includono la progettazione di test delle unità, la scrittura di una funzione e la creazione di una classe. Per generare il codice, utilizza la stessa classe usata per creare il completamento del codice, CodeGenerationModel. Per creare una soluzione che genera codice, trasmetti il nome di una versione del modello di generazione del codice, ad esempio code-bison@002. Per scoprire di più sul modello di base per la generazione di codice, consulta Creare prompt per generare codice e Testare i prompt di generazione di codice.

Il seguente esempio di codice scrive una funzione che rileva se un anno è un anno bisestile.

from vertexai.language_models import CodeGenerationModel

code_generation_model = CodeGenerationModel.from_pretrained("code-bison@001")
print(code_generation_model.predict(
    prefix="Write a function that checks if a year is a leap year.",
    # The following parameters are optional:
    # max_output_tokens=1024,
    # temperature=0.0,
))

L'output potrebbe essere simile al seguente:

I will write a function to check if a year is a leap year.

**The function will take a year as input and return a boolean value**.

**The function will first check if the year is divisible by 4.**

**If the year is divisible by 4, the function will then check if the year is divisible by 100.**

**If the year is divisible by 100, the function will then check if the year is divisible by 400.**

**If the year is divisible by 400, the function will ...

Genera il codice per il completamento del codice

Il completamento del codice è il codice che, secondo le previsioni, completi il codice così come viene scritto. La previsione generata viene visualizzata durante la digitazione. Se vuoi creare una soluzione di completamento del codice, utilizza la classe CodeGenerationModel. Si tratta della stessa classe utilizzata per generare il codice, ad esempio una funzione. Per generare il codice che si prevede completi il codice così come è scritto, chiama CodeGenerationModel.from_pretrained e trasmetti il nome di una versione del modello di completamento del codice. Per scoprire di più sul modello di base per il completamento del codice, consulta Creare prompt per il completamento del codice e Testare i prompt di completamento del codice.

Il seguente codice campione utilizza la versione stabile più recente di code-gecko per restituire il codice previsto per completare l'inizio di una funzione che inverte una stringa.

from vertexai.language_models import CodeGenerationModel

code_completion_model = CodeGenerationModel.from_pretrained("code-gecko@001")
print(code_completion_model.predict(
    prefix="def reverse_string(s):",
    # Optional:
    suffix="    return reversed_str",
    max_output_tokens=64,
    # temperature=0.0,
))

L'output è simile al seguente:

"""
:type s: str
:rtype: str
"""
reversed_str = ""
for i in range(len(s) - 1, -1, -1):
    reversed_str += s[i]

Crea una chat di codice

Potresti voler creare una sessione di chat incentrata specificamente sul codice. Ad esempio, potresti utilizzare la chat per scoprire di più su un linguaggio di programmazione o una sintassi. Per creare una sessione di chat di codice con l'SDK Vertex AI, utilizza il metodo start_chat su un'istanza di CodeChatModel. A differenza di una chat di testo, una chat di codice creata con l'SDK Vertex AI non utilizza la classe InputOutputTextPair. Per scoprire di più sul modello di base della chat di codice, consulta Creare prompt per la chat di codice e Testare i prompt di chat di codice.

Di seguito viene utilizzata la chat di codice per richiedere informazioni su come scrivere una funzione.

from vertexai.language_models import CodeChatModel

code_chat_model = CodeChatModel.from_pretrained("codechat-bison@002")
code_chat = code_chat_model.start_chat()
print(code_chat.send_message("Please help write a function that prints its own source code"))

L'output potrebbe essere simile al seguente:

Sure, here is a function that prints its own source code:

```
def print_source_code():
  """Prints the source code of this function."""

  # Get the source code of this function.
  source_code = inspect.getsource(print_source_code)

  # Print the source code.
  print(source_code)

```

This function works by first getting the source code of the function using the
`inspect.getsource()` function. Then, it prints the source code to the console.

Risposte del modello di codice dello stream

Potresti voler ricevere risposte dai modelli di generazione del codice e di chat di codice man mano che vengono generati. La ricezione di risposte da un modello di base quando vengono generate le risposte è nota come flusso di dati. Quando la generazione del codice e le risposte del modello di chat di codice vengono trasmesse in streaming, i token di output vengono inviati quando vengono generati. Per generare il codice in streaming, usa il metodo CodeGenerationModel.predict_streaming. Per trasmettere una chat di codice in streaming, usa il metodo CodeChatModel.predict_streaming. Per scoprire di più sui flussi di dati dai modelli di base, consulta Streaming di risposte dai modelli di IA generativa.

Generazione del codice di stream

Il codice campione riportato di seguito trasmette codice che controlla se un anno sia bisestile. Restituisce anche l'ora precedente e quella successiva alla chiamata di from_pretrained per dimostrare il tempo necessario per trasmettere l'output in streaming.

import datetime
from vertexai.language_models import CodeGenerationModel

code_generation_model = CodeGenerationModel.from_pretrained("code-bison@001")

print("Start: ", datetime.datetime.now())
for response in code_generation_model.predict_streaming(
    prefix="Write a function that checks if a year is a leap year.",
    # Optional:
    # max_output_tokens=1024,
    # temperature=0.0,
):
    print(datetime.datetime.now(), "|", response)
print("End: ", datetime.datetime.now())

La risposta potrebbe essere simile alla seguente:

Start:  YYYY-MM-DD 06:31:45.759810
YYYY-MM-DD 06:31:46.536173 | To check if a year is a leap year, we can use the following step
YYYY-MM-DD 06:31:46.611856 | s:

1. **Check if the year is divisible by 4.** If it is not, th
YYYY-MM-DD 06:31:46.667330 | en it is not a leap year.
2. **Check if the year is divisible by
YYYY-MM-DD 06:31:46.805714 |  100.** If it is, then it is not a leap year unless it is also d
YYYY-MM-DD 06:31:46.940925 | ivisible by 400.
3. **If the year is divisible by 4 but not by 1
YYYY-MM-DD 06:31:47.033529 | 00, then it is a leap year.**

For example, the year 2020 is div
YYYY-MM-DD 06:31:47.110856 | isible by
End:  YYYY-MM-DD 06:31:47.112951

Chat codice stream

Il codice campione riportato di seguito trasmette in streaming la chat di codice in risposta alla richiesta di un chatbot di scrivere una funzione che stampi il proprio codice sorgente. L'esempio di codice restituisce anche l'intervallo di tempo prima e quello successivo alla chiamata di from_pretrained per dimostrare il tempo necessario per trasmettere l'output in streaming.

import datetime
from vertexai.language_models import CodeChatModel

code_chat_model = CodeChatModel.from_pretrained("codechat-bison@001")
code_chat = chat_model.start_chat()

print("Start: ", datetime.datetime.now())
for response in code_chat.send_message_streaming(
    message="Please help write a function that prints its own source code",
    # Optional:
    max_output_tokens=1024,
):
    #print(datetime.datetime.now(), "|", response)
    print(">>>")
    print(response)
print("End: ", datetime.datetime.now())

La risposta potrebbe essere simile alla seguente:

```
Start:  YYYY-MM-DD 06:32:10.733415
>>>
```python
def print_source(func):
    with open(func.__file__, '
>>>
r') as f:
        source = f.read()
    print(source)
```
End:  YYYY-MM-DD 06:32:11.764794
```

Passaggi successivi