Há três modelos de fundação de código de IA generativa na Vertex AI. Estes são: geração, preenchimento e chat de código.
O nome do modelo de geração de código é
code-bison
, e a classe dele no SDK da Vertex AI éCodeGenerationModel
.O nome do modelo de preenchimento de código é
code-gecko
, e a classe dele no SDK da Vertex AI é a mesma usada para o de geração de código,CodeGenerationModel
.O nome do modelo de chat de código é
codechat-bison
, e a classe dele no SDK da Vertex AI éCodeChatModel
.
Os tópicos a seguir mostram como usar essas classes e o SDK da Vertex AI para realizar algumas tarefas comuns relacionadas a códigos de IA generativa.
Gerar uma função de código
Os casos de uso do modelo de fundação de geração de código incluem projetar testes de unidade e criar uma função e classe. Para gerar código, use a mesma classe usada para criar o preenchimento de código, CodeGenerationModel
. Para criar uma solução que gere código, transmita o nome de uma versão do modelo de geração de código, como code-bison@002
. Para saber mais sobre o modelo de fundação de geração de código,
consulte
Criar comandos para gerar código
e
Testar comandos de geração de código.
O exemplo de código a seguir cria uma função que detecta se um ano é bissexto.
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,
))
O resultado será mais ou menos assim:
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 ...
Gerar código para preenchimento
O código de preenchimento é um código previsto para ser preenchido à medida que é criado. A previsão gerada aparece enquanto você digita. Se você quiser criar uma solução
de preenchimento de código, use a
classe
CodeGenerationModel
. Essa é a mesma classe utilizada para gerar um código, como uma função. Para gerar o código previsto para ser preenchido à medida que é criado, chame CodeGenerationModel.from_pretrained
e transmita o nome de uma versão do modelo de preenchimento de código. Para saber mais sobre o modelo de fundação de preenchimento de código,
consulte
Criar comandos para o preenchimento de código
e
Testar comandos de preenchimento de código.
O exemplo de código a seguir usa a
versão estável mais recente do
code-gecko
para retornar o código previsto para preencher o início de uma função
que inverte uma string.
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,
))
O resultado será assim:
"""
:type s: str
:rtype: str
"""
reversed_str = ""
for i in range(len(s) - 1, -1, -1):
reversed_str += s[i]
Criar um chat de código
Crie uma sessão de chat especificamente sobre código. Por
exemplo, você pode usar o chat para aprender sobre uma linguagem ou sintaxe de programação.
Para criar uma sessão de chat de código com o SDK da Vertex AI, use o
método start_chat
em uma instância de um CodeChatModel
. Ao contrário de um chat de texto, um
chat de código criado com o SDK da Vertex AI não usa a
classe
InputOutputTextPair
. Para saber mais sobre o modelo de fundação do chat de código,
consulte
Criar comandos para chat de código
e
Testar comandos de chat de código.
A seguir, usamos o chat de código para solicitar informações sobre como criar uma função.
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"))
O resultado será mais ou menos assim:
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.
Fazer streaming de respostas do modelo de código
Talvez você queira receber respostas dos modelos de geração de código e chat de código à medida que eles gerados. O recebimento de respostas de um modelo de fundação à medida que
elas são geradas é conhecido como streaming. Durante o streaming das respostas do modelo de geração de código e chat de código, os tokens de saída são enviados no momento em que são gerados. Para fazer streaming da geração de código, use o
método CodeGenerationModel.predict_streaming
. Para fazer streaming de um chat de código, use o
método CodeChatModel.predict_streaming
. Para saber mais sobre streaming de modelos de fundação, consulte Fazer streaming de respostas de modelos de IA generativa.
Fazer streaming de geração de código
O exemplo de código a seguir faz streaming de um código que verifica se um ano é bissexto. Ele também retorna o tempo anterior e posterior à chamada de from_pretrained
, para demonstrar quanto tempo leva para fazer o streaming da saída.
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())
O resultado será mais ou menos assim:
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
Fazer streaming de chat de código
O exemplo de código a seguir faz streaming de um chat de código que é resposta a uma solicitação do chatbot para criar uma função que imprima seu próprio código-fonte. O exemplo de código também exibe o tempo anterior e posterior à chamada de from_pretrained
, para demonstrar quanto tempo leva para
fazer o streaming da saída.
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())
O resultado será mais ou menos assim:
```
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
```
A seguir
- Saiba como usar classes de modelo de texto e o SDK da Vertex AI.
- Saiba como usar o SDK da Vertex AI para ajustar modelos de fundação.
- Saiba mais sobre classes do SDK da Vertex AI não relacionadas a IA generativa.