Hay tres modelos base de código generativo de IA en Vertex AI. Los tres modelos son un modelo de generación de código, un modelo de finalización de código y un modelo de chat de código.
El nombre del modelo de generación de código es
code-bison
y su clase en el SDK de Vertex AI esCodeGenerationModel
.El nombre del modelo de finalización de código es
code-gecko
, y su clase en el SDK de Vertex AI es la misma clase que se usa para la generación de código,CodeGenerationModel
.El nombre del modelo del chat de código es
codechat-bison
y su clase en el SDK de Vertex AI esCodeChatModel
.
En los siguientes temas, se muestra cómo usar estas clases y el SDK de Vertex AI para realizar algunas tareas comunes de IA generativa relacionada con código.
Genera una función de código
Los casos prácticos para el modelo base de generación de código incluyen diseñar
pruebas de unidades,
escribir una función y crear una clase. Para generar código, usa la misma clase que se usa para completar el código, CodeGenerationModel
. Para crear una solución que genere código, pasa el nombre de una versión del modelo de generación de código, como code-bison@002
. Para obtener más información sobre el modelo de base de generación de código,
consulta
Crea instrucciones para generar código
y
Prueba instrucciones de generación de código.
En la siguiente muestra de código, se escribe una función que detecta si un año es bisiesto.
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,
))
El resultado será similar al siguiente ejemplo:
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 código para completar el código
La finalización de código es código que se espera que complete código a medida que se escribe. La
predicción generada aparecerá a medida que escribas. Si deseas crear una solución de
finalización de código, usa la clase
CodeGenerationModel
. Esta es la misma clase que se usa para generar código, como una función. Para
generar un código que se espera que complete el código a medida que se escribe, llama
a CodeGenerationModel.from_pretrained
y pasa el nombre de una versión del
modelo de finalización de código. Para obtener más información sobre el modelo de base de finalización de código,
consulta
Crea instrucciones para completar el código
y
Prueba instrucciones de finalización de código.
En el siguiente código de muestra, se usa la versión estable
más reciente de code-gecko
para mostrar el código que completa el inicio de una función
que revierte una cadena.
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,
))
El resultado es similar a este:
"""
:type s: str
:rtype: str
"""
reversed_str = ""
for i in range(len(s) - 1, -1, -1):
reversed_str += s[i]
Crea un chat de código
Te recomendamos crear una sesión de chat específicamente sobre el código. Por
ejemplo, es posible que desees usar el chat para obtener información sobre un lenguaje
de programación o sintaxis.
Para crear una sesión de chat de código con el SDK de Vertex AI, usa el método
start_chat
en una instancia de un CodeChatModel
. A diferencia de un chat de texto, un
chat de código creado con el SDK de Vertex AI no usa la clase
InputOutputTextPair
. Para obtener más información sobre el modelo de base de chat de código,
consulta
Crea instrucciones para el chat de código
y
Prueba instrucciones de chat de código.
A continuación, se usa el chat de código para solicitar información sobre cómo escribir una función.
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"))
El resultado será similar al siguiente ejemplo:
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.
Transmitir respuestas del modelo de código
Es posible que quieras recibir respuestas de los modelos de generación de código y
de chat de código a medida que se generan. Recibir respuestas de un modelo de base a medida que
se generan respuestas se conoce como transmisión. Cuando se transmiten las respuestas del modelo de chat
y la generación de código, los tokens de salida se envían cuando se
generan. Para transmitir una generación de código, usa el
método CodeGenerationModel.predict_streaming
. Para transmitir un chat de código, usa el
método CodeChatModel.predict_streaming
. Para obtener más información sobre
la transmisión de modelos base, consulta
Transmitir respuestas desde modelos generativos de IA.
Transmitir generación de código
El siguiente código de muestra transmite un código que verifica si un año es bisiesto. También
muestra el tiempo anterior y el tiempo posterior a la llamada a from_pretrained
para
demostrar cuánto tiempo lleva transmitir el resultado.
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 respuesta podría ser similar a la siguiente:
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
Transmitir chat de código
El siguiente código de muestra transmite el chat de código que responde a una solicitud
de chatbot para escribir una función que imprima su propio código fuente. La muestra de código
también genera el tiempo anterior y el tiempo posterior a la llamada a from_pretrained
para
demostrar cuánto tiempo lleva transmitir el resultado.
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 respuesta podría ser similar a la siguiente:
```
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
```
¿Qué sigue?
- Obtén información sobre cómo usar clases de modelos de texto y el SDK de Vertex AI.
- Obtén información sobre cómo usar el SDK de Vertex AI para ajustar los modelos de base.
- Obtén información sobre las clases del SDK de Vertex AI no relacionadas con la IA generativa.