Usar modelos de texto e o SDK da Vertex AI

Existem três tipos de modelos de fundação de IA generativa na Vertex AI. Há um modelo de geração de texto, um modelo de chat de texto e um modelo de embedding de texto. Modelos de chat e geração de texto geram texto. O modelo de embedding de texto gera uma representação vetorial de um texto que você usa para encontrar itens semelhantes.

  • Os nomes dos modelos de geração de texto são text-bison e text-unicorn, e a classe deles no SDK da Vertex AI é TextGenerationModel.

  • O nome do modelo de chat de texto é chat-bison, e a classe dele no SDK da Vertex AI é ChatModel.

  • O nome do modelo de embedding de texto é textembedding-gecko, e a classe dele no SDK da Vertex AI é TextEmbeddingModel.

Os tópicos a seguir mostram como usar essas classes e o SDK da Vertex AI para realizar algumas tarefas comuns de IA generativa.

Gerar texto

É possível usar a classe TextGenerationModel do SDK da Vertex AI para gerar texto. O exemplo de código a seguir carrega uma versão estável

do modelo text-bison e usa o método predict para gerar um roteiro. Esse exemplo de código não inclui parâmetros opcionais. O método de previsão retorna um objeto TextGenerationResponse que tem os atributos text, safety_attributes e is_blocked. Para saber mais sobre como gerar texto com o modelo de fundação de geração de texto, consulte Criar comandos de texto e Testar comandos de texto.

from vertexai.language_models import TextGenerationModel

model = TextGenerationModel.from_pretrained("text-bison@002")

print(model.predict(
    "What is the best recipe for banana bread? Recipe:",
    # The following are optional parameters:
    #max_output_tokens=128,
    #temperature=0,
    #top_p=1,
    #top_k=5,
))

O início da saída pode ser semelhante à seguinte:

Ingredients:

* 3 very ripe bananas, mashed
* 1/2 cup (1 stick) unsalted butter, at room temperature
* 3/4 cup granulated sugar
* 3/4 cup packed light brown sugar
* 2 large eggs
* 2 teaspoons vanilla extract
* 1 1/2 cups all-purpose flour
* 1 teaspoon baking soda
* 1/2 teaspoon salt
* 1/2 cup chopped walnuts or pecans (optional)

Instructions:

1. Preheat oven to 350 degrees F
   ...

Gerar chat de texto

O exemplo de código a seguir mostra como carregar uma versão estável do modelo de fundação de chat de texto. Em seguida, ele usa o método start_chat para iniciar um chat e o método send_message para enviar mensagens. Para saber mais sobre como usar o modelo de fundação de chat de texto, consulte Criar comandos de chat e Testar comandos de chat.

from vertexai.language_models import ChatModel, InputOutputTextPair

chat_model = ChatModel.from_pretrained("chat-bison@002")

chat = chat_model.start_chat(
    # Optional parameters, such ase top_p, top_k, temperature, max_output_tokens,
    # aren't specified in this example
    context="My name is Ned. You are my personal assistant. My favorite movies are Lord of the Rings and Hobbit.",
    examples=[
        InputOutputTextPair(
            input_text="Who do you work for?",
            output_text="I work for Ned.",
        ),
        InputOutputTextPair(
            input_text="What do I like?",
            output_text="Ned likes watching movies.",
        ),
    ],
)

print(chat.send_message("Are my favorite movies based on a book series?"))

A saída send_message será mais ou menos assim:

Yes, your favorite movies are based on a book series.

O send_message a seguir envia uma segunda mensagem usando a mesma sessão de chat de texto.

print(chat.send_message("When where these books published?"))

A saída para esse segundo send_message pode ser semelhante a esta:

The books were published in 1954 and 1955.

Fazer streaming de respostas do modelo de texto

Talvez você queira receber respostas dos modelos de geração de texto e chat de texto à medida que são gerados. O recebimento de respostas de um modelo de fundação à medida que elas são geradas é conhecido como streaming. Durante o streaming da geração de texto e das respostas dos modelos de chat, os tokens de saída são enviados no momento em que são gerados. Para fazer streaming da geração de texto, use o método TextGenerationModel.predict_streaming. Para fazer streaming um chat de texto, use o método ChatModel.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 texto

O exemplo de código a seguir faz streaming de texto que conta até 100 à medida que o texto é gerado. 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 TextGenerationModel

text_generation_model = TextGenerationModel.from_pretrained("text-bison@002")

print("Start: ", datetime.datetime.now())
for response in text_generation_model.predict_streaming(
    prompt="Count to 100",
    max_output_tokens=1000,
    # The following parameters are optional
    #temperature=0,
    #top_p=1,
    #top_k=5,
):
    print(datetime.datetime.now(), "|", response)
print("End: ", datetime.datetime.now())

A resposta pode ser semelhante a esta:

Start:  YYYY-MM-DD 06:31:07.825599
YYYY-MM-DD 06:31:08.933534 | 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 1
YYYY-MM-DD 06:31:09.335374 | 9. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 3
YYYY-MM-DD 06:31:09.738079 | 5. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 5
YYYY-MM-DD 06:31:10.142726 | 1. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 6
YYYY-MM-DD 06:31:10.535045 | 7. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 8
YYYY-MM-DD 06:31:10.937847 | 3. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 9
YYYY-MM-DD 06:31:10.996782 | 9. 100.
End:  YYYY-MM-DD 06:31:10.998498

Fazer streaming de chat de texto

O exemplo de código a seguir faz streaming de um chat de texto que é resposta a uma solicitação do bot de chat para contar até 99. 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 ChatModel

chat_model = ChatModel.from_pretrained("chat-bison@002")
chat = chat_model.start_chat()

print("Start: ", datetime.datetime.now())
for response in chat.send_message_streaming(
    message="Hello. How are you today? Please count to 99",
    max_output_tokens=1024,
):
    print(datetime.datetime.now(), "|", response)
print("End: ", datetime.datetime.now())

O resultado será mais ou menos assim:

Start:  YYYY-MM-DD 06:31:19.808735
YYYY-MM-DD 06:31:20.957465 | Hello, I am doing well today. Thank you for asking. 1, 2, 3, 4,
YYYY-MM-DD 06:31:21.312577 | 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 2
YYYY-MM-DD 06:31:DD.709306 | 2, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 3
YYYY-MM-DD 06:31:22.132016 | 8, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 5
YYYY-MM-DD 06:31:22.517211 | 4, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 7
YYYY-MM-DD 06:31:22.911003 | 0, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 8
YYYY-MM-DD 06:31:23.257773 | 6, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99.
End:  YYYY-MM-DD 06:31:23.265454

Gerar embeddings de texto

É possível usar a classe TextEmbeddingModel no SDK da Vertex AI para calcular embeddings de texto. O exemplo de código Python a seguir usa o método TextEmbeddingModel.get_embeddings para gerar embeddings de texto usando um prompt. Neste exemplo, get_embeddings retorna um objeto embeddings que contém um objeto embedding. O exemplo imprime o comprimento e as estatísticas do vetor retornado. Para saber mais sobre embeddings de texto e o modelo de base correspondente, consulte Receber embeddings de texto.

from vertexai.language_models import TextEmbeddingModel

model = TextEmbeddingModel.from_pretrained("textembedding_gecko_current")
embeddings = model.get_embeddings(["What is life?"])
for embedding in embeddings:
    vector = embedding.values
    print(len(vector))
    print(embedding.statistics)

A resposta será semelhante a esta:

768
TextEmbeddingStatistics(token_count=4.0, truncated=False)

A seguir