Utilizza modelli di testo e l'SDK Vertex AI

In Vertex AI esistono tre tipi di modelli di base testuali per l'IA generativa. C'è un modello di generazione di testo, un modello di chat di testo e un modello di incorporamento di testo. I modelli di chat di testo e di generazione di testi generano testo. Il modello di incorporamento del testo genera una rappresentazione vettoriale del testo che utilizzi per trovare elementi simili.

  • I nomi dei modelli di generazione del testo sono text-bison e text-unicorn e la loro classe nell'SDK Vertex AI è TextGenerationModel.

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

  • Il nome del modello di incorporamento del testo è textembedding-gecko e la sua classe nell'SDK Vertex AI è TextEmbeddingModel.

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

Genera testo

Puoi utilizzare la classe TextGenerationModel dell'SDK Vertex AI per generare testo. Il seguente codice campione carica una versione stabile

versione del modello text-bison, quindi utilizza il metodo predict per generare una formula. Questo esempio di codice non include parametri facoltativi. Il metodo di previsione restituisce un oggetto TextGenerationResponse con attributi text, safety_attributes e is_blocked. Per scoprire di più sulla generazione di testo con il modello di base per la generazione di testo, consulta Progettare prompt di testo e Testare prompt di testo.

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

L'inizio dell'output potrebbe essere simile al seguente:

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

Genera chat di testo

Il seguente codice campione mostra come caricare una versione stabile del modello di base della chat di testo. Successivamente, utilizza il metodo start_chat per avviare una chat e il metodo send_message per inviare messaggi di chat. Per scoprire di più sull'utilizzo del modello di base della chat di testo, consulta Progettare prompt di chat e Testare prompt di 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?"))

L'output di send_message potrebbe essere simile al seguente:

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

Il seguente elemento send_message invia un secondo messaggio utilizzando la stessa sessione di chat di testo.

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

L'output per questo secondo send_message potrebbe essere simile al seguente:

The books were published in 1954 and 1955.

Risposte del modello di testo in streaming

Potresti voler ricevere risposte dai modelli di generazione del testo e di chat di testo 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 di testo e le risposte del modello di chat di testo vengono trasmesse in streaming, i token di output vengono inviati quando vengono generati. Per generare lo streaming del testo, usa il metodo TextGenerationModel.predict_streaming. Per trasmettere una chat di testo in streaming, utilizza il metodo ChatModel.predict_streaming. Per scoprire di più sull'inserimento di flussi di dati dai modelli di base, consulta Trasmettere le risposte in streaming dai modelli di IA generativa.

Generazione di testo in streaming

Il codice campione riportato di seguito trasmette il testo che viene conteggiato fino a 100 quando il testo viene generato. Restituisce come output anche l'ora precedente e quella successiva alla chiamata di from_pretrained per dimostrare quanto tempo occorre per trasmettere l'output in streaming.

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

La risposta potrebbe essere simile alla seguente:

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

Chat di testo in streaming

Il seguente codice campione trasmette in streaming una chat di testo in risposta alla richiesta di un chatbot per conteggiare fino a 99. L'esempio di codice restituisce anche l'ora precedente e quella successiva alla chiamata di from_pretrained per dimostrare il tempo necessario per il flusso dell'output.

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

La risposta potrebbe essere simile alla seguente:

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

Genera incorporamenti di testo

Puoi usare la classe TextEmbeddingModel nell'SDK Vertex AI per calcolare gli incorporamenti di testo. Il seguente esempio di codice Python utilizza il metodo TextEmbeddingModel.get_embeddings per generare incorporamenti di testo utilizzando un prompt. In questo esempio, get_embeddings restituisce un oggetto embeddings che contiene un oggetto embedding. L'esempio mostra la lunghezza e le statistiche del vettore restituito. Per scoprire di più sugli incorporamenti di testo e sul modello di base per l'incorporamento del testo, consulta Ottenere gli incorporamenti di testo.

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)

L'output è simile al seguente:

768
TextEmbeddingStatistics(token_count=4.0, truncated=False)

Passaggi successivi