Textmodelle und das Vertex AI SDK verwenden

Es gibt drei Arten von Textbasismodellen für generative KI in Vertex AI. Es gibt ein Textgenerierungsmodell, ein Text-Chatmodell und ein Text-Einbettungsmodell. Textchat- und Textgenerierungsmodelle generieren Text. Das Texteinbettungsmodell generiert eine Vektordarstellung von Text, mit der Sie ähnliche Elemente finden.

  • Die Namen der Modelle zur Textgenerierung lauten text-bison und text-unicorn und ihre Klasse im Vertex AI SDK ist TextGenerationModel.

  • Der Name des Textchat-Modells lautet chat-bison und die Klasse im Vertex AI SDK ist ChatModel.

  • Der Name des Texteinbettungsmodells lautet textembedding-gecko und die Klasse im Vertex AI SDK ist TextEmbeddingModel.

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

Texte erstellen

Sie können die Vertex AI SDK-Klasse TextGenerationModel verwenden, um Text zu generieren. Mit dem folgenden Beispielcode wird eine stabile Version geladen

Version des text-bison-Modells, dann wird die Methode predict verwendet, um ein Schema zu generieren. Dieses Codebeispiel enthält keine optionalen Parameter. Die Vorhersagemethode gibt ein TextGenerationResponse-Objekt mit den Attributen text, safety_attributes und is_blocked zurück. Weitere Informationen zum Generieren von Text mit dem Basismodell für die Textgenerierung finden Sie unter Texteingabeaufforderungen entwerfen und Texteingabeaufforderungen testen.

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

Der Anfang der Ausgabe kann in etwa so aussehen:

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

Textchat generieren

Der folgende Beispielcode zeigt, wie Sie eine stabile Version des Textchat-Basismodells laden. Als Nächstes wird die Methode start_chat verwendet, um einen Chat zu starten, und die Methode send_message, um Chatnachrichten zu senden. Weitere Informationen zur Verwendung des Basismodells für Textchat finden Sie unter Chateingabeaufforderungen entwerfen und Chateingabeaufforderungen testen.

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

Die entsprechende Ausgabe send_message sieht etwa so aus:

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

Mit der folgenden send_message wird eine zweite Nachricht mit derselben Text-Chatsitzung gesendet.

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

Die Ausgabe für diese zweite send_message könnte in etwa so aussehen:

The books were published in 1954 and 1955.

Antworten des Textmodells streamen

Möglicherweise möchten Sie Antworten von den Textgenerierungs- und Textchat-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 Textgenerierung und die Antworten des Text-Chatmodells gestreamt werden, werden die Ausgabe-Tokens bereits bei der Generierung gesendet. Verwenden Sie zum Streamen von Textgenerierung die Methode TextGenerationModel.predict_streaming. Verwenden Sie zum Streamen von Textchat die Methode ChatModel.predict_streaming. Weitere Informationen zum Streamen von Basismodellen finden Sie unter Antworten von generativen KI-Modellen streamen.

Streamtext-Generierung

Der folgende Beispielcode streamt Text, der bis 100 zählt, während der Text generiert wird. Außerdem wird die Zeit vor und die Zeit nach dem Aufruf von from_pretrained ausgegeben, um zu zeigen, wie lange es dauert, die Ausgabe zu streamen.

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

Die Antwort sieht etwa so aus:

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

Textchat streamen

Der folgende Beispielcode streamt einen Text-Chat, der auf die Anfrage eines Chatbots reagiert, bis 99 zu zählen. Das Codebeispiel gibt auch die Zeit davor 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 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())

Die Antwort sieht etwa so aus:

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

Texteinbettungen generieren

Sie können die Klasse TextEmbeddingModel im Vertex AI SDK verwenden, um Texteinbettungen zu berechnen. Im folgenden Python-Codebeispiel wird die Methode TextEmbeddingModel.get_embeddings verwendet, um Texteinbettungen mithilfe eines Prompts zu generieren. In diesem Beispiel gibt get_embeddings ein embeddings-Objekt zurück, das ein embedding-Objekt enthält. Im Beispiel werden die Länge und Statistiken des zurückgegebenen Vektors ausgegeben. Weitere Informationen zu Texteinbettungen und dem Basismodell für Texteinbettungen finden Sie unter Texteinbettungen abrufen.

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)

Die Ausgabe sieht in etwa so aus:

768
TextEmbeddingStatistics(token_count=4.0, truncated=False)

Nächste Schritte