Codemodelle und das Vertex AI SDK verwenden

In Vertex AI gibt es drei Basismodelle für generativen KI-Code. Bei den drei Modellen handelt es sich um ein Codegenerierungsmodell, ein Codevervollständigungsmodell und ein Codechat-Modell.

  • Der Name des Modells zur Codegenerierung lautet code-bison und die Klasse im Vertex AI SDK ist CodeGenerationModel.

  • Der Name des Codevervollständigungsmodells lautet code-gecko und die Klasse im Vertex AI SDK ist dieselbe Klasse, die für die Codegenerierung CodeGenerationModel verwendet wird.

  • Der Name des Codechat-Modells lautet codechat-bison und die Klasse im Vertex AI SDK ist CodeChatModel.

In den folgenden Themen wird gezeigt, wie Sie mit diesen Klassen und dem Vertex AI SDK einige gängige codebezogene generative KI-Aufgaben ausführen.

Codefunktion generieren

Die Anwendungsfälle für das Basismodell der Codegenerierung umfassen das Entwerfen von Unittests, das Schreiben einer Funktion und das Erstellen einer Klasse. Verwenden Sie zum Generieren von Code dieselbe Klasse, die auch zum Erstellen der Codevervollständigung verwendet wird: CodeGenerationModel. Um eine Lösung zu erstellen, die Code generiert, übergeben Sie den Namen einer Version des Codegenerierungsmodells, z. B. code-bison@002. Weitere Informationen zum Basismodell zur Codegenerierung finden Sie unter Eingabeaufforderungen zur Codegenerierung erstellen und Eingabeaufforderungen zur Codegenerierung testen.

Das folgende Codebeispiel schreibt eine Funktion, die erkennt, ob ein Jahr ein Schaltjahr ist.

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,
))

Die entsprechende Ausgabe sieht etwa so aus:

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 ...

Code für die Codevervollständigung generieren

Bei der Codevervollständigung handelt es sich um Code, der den Code so vervollständigt, wie er geschrieben wurde. Die generierte Vorhersage wird während der Eingabe angezeigt. Wenn Sie eine Lösung zur Codevervollständigung erstellen möchten, verwenden Sie die Klasse CodeGenerationModel. Dies ist die gleiche Klasse, die zum Generieren von Code verwendet wird, z. B. eine Funktion. Um Code zu generieren, für den vorhergesagt wird, dass er den Code so vervollständigt, wie er geschrieben wurde, rufen Sie CodeGenerationModel.from_pretrained auf und übergeben den Namen einer Version des Codevervollständigungsmodells. Weitere Informationen zum Basismodell für die Codevervollständigung finden Sie unter Eingabeaufforderungen zur Codevervollständigung erstellen und Eingabeaufforderungen zur Codevervollständigung testen.

Der folgende Beispielcode verwendet die neueste stabile Version von code-gecko, um Code zurückzugeben, der den Start einer Funktion, die einen String umkehrt, vorhersagt.

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,
))

Die Ausgabe sieht in etwa so aus:

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

Codechat erstellen

Sie können eine Chatsitzung erstellen, in der es um Code geht. Sie können beispielsweise den Chat nutzen, um sich über eine Programmiersprache oder Syntax zu informieren. Verwenden Sie die Methode start_chat auf einer Instanz eines CodeChatModel, um eine Code-Chatsitzung mit dem Vertex AI SDK zu erstellen. Im Gegensatz zu einem Textchat verwendet ein mit dem Vertex AI SDK erstellter Codechat die Klasse InputOutputTextPair nicht. Weitere Informationen zum Fundamentmodell für Codechats finden Sie unter Eingabeaufforderungen für Codechats erstellen und Eingabeaufforderungen für Codechats testen.

Im folgenden Beispiel wird ein Codechat verwendet, um Informationen zum Schreiben einer Funktion anzufordern.

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"))

Die entsprechende Ausgabe sieht etwa so aus:

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.

Codemodellantworten streamen

Möglicherweise möchten Sie Antworten von den Codegenerierungs- und Code-Chat-Modellen erhalten, sobald diese generiert werden. Das Empfangen von Antworten von einem Basismodell, während die Antworten generiert werden, wird als Streaming bezeichnet. Wenn die Codegenerierung und die Antworten des Code-Chatmodells gestreamt werden, werden die Ausgabe-Tokens bereits bei der Generierung gesendet. Verwenden Sie zum Streamen von Code die Methode CodeGenerationModel.predict_streaming. Verwenden Sie zum Streamen von Codechat die Methode CodeChatModel.predict_streaming. Weitere Informationen zum Streamen von Basismodellen finden Sie unter Antworten von generativen KI-Modellen streamen.

Codegenerierung streamen

Der folgende Beispielcode streamt Code, der prüft, ob ein Jahr ein Schaltjahr ist. Außerdem gibt sie die Zeit vor und die Zeit nach dem Aufruf von from_pretrained aus, um zu zeigen, wie lange es dauert, die Ausgabe zu streamen.

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())

Die Antwort sieht etwa so aus:

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

Codechat streamen

Der folgende Beispielcode streamt Code-Chat als Antwort auf eine Chatbot-Anfrage zum Schreiben einer Funktion, die ihren eigenen Quellcode ausgibt. Das Codebeispiel gibt auch die Zeit vor und die Zeit nach dem Aufruf von from_pretrained aus, um zu zeigen, wie lange es dauert, die Ausgabe zu streamen.

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())

Die Antwort sieht etwa so aus:

```
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
```

Nächste Schritte