텍스트 모델 및 Vertex AI SDK 사용

Vertex AI에는 3가지 유형의 생성형 AI 텍스트 기반 모델이 있습니다. 텍스트 생성 모델, 텍스트 채팅 모델, 텍스트 임베딩 모델이 있습니다. 텍스트 채팅 및 텍스트 생성 모델은 텍스트를 생성합니다. 텍스트 임베딩 모델은 유사한 항목을 찾는 데 사용하는 텍스트의 벡터 표현을 생성합니다.

  • 텍스트 생성 모델 이름은 text-bisontext-unicorn이고 Vertex AI SDK의 클래스는 TextGenerationModel입니다.

  • 텍스트 채팅 모델 이름은 chat-bison이고 Vertex AI SDK의 클래스는 ChatModel입니다.

  • 텍스트 임베딩 모델 이름은 textembedding-gecko이고 Vertex AI SDK의 클래스는 TextEmbeddingModel입니다.

다음 주제에서는 이러한 클래스와 Vertex AI SDK를 사용하여 일반적인 생성형 AI 태스크를 수행하는 방법을 보여줍니다.

텍스트 생성

Vertex AI SDK TextGenerationModel 클래스를 사용하여 텍스트를 생성할 수 있습니다. 다음 샘플 코드는 안정적인 버전을 로드합니다.

text-bison 모델의 버전을 로드한 후 predict 메서드를 사용하여 레시피를 생성합니다. 이 코드 샘플에는 선택적 매개변수가 포함되지 않습니다. 예측 메서드는 text, safety_attributes, is_blocked 속성이 있는 TextGenerationResponse 객체를 반환합니다. 텍스트 생성 기반 모델을 사용하여 텍스트를 생성하는 방법에 대한 자세한 내용은 텍스트 프롬프트 설계텍스트 프롬프트 테스트를 참조하세요.

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

출력의 시작 부분은 다음과 비슷합니다.

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

텍스트 채팅 생성

다음 샘플 코드에서는 텍스트 채팅 기반 모델의 안정적인 버전 버전을 로드하는 방법을 보여줍니다. 그런 다음 start_chat 메서드를 사용하여 채팅을 시작하고 send_message 메서드를 사용하여 채팅 메시지를 보냅니다. 텍스트 채팅 기반 모델 사용에 대한 자세한 내용은 채팅 프롬프트 설계채팅 프롬프트 테스트를 참조하세요.

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

send_message 출력은 다음과 비슷합니다.

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

다음 send_message은 동일한 텍스트 채팅 세션을 사용하여 두 번째 메시지를 보냅니다.

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

이 두 번째 send_message의 출력은 다음과 비슷합니다.

The books were published in 1954 and 1955.

텍스트 모델 응답 스트리밍

텍스트 생성 모델과 텍스트 채팅 모델이 생성될 때 응답을 받을 수 있습니다. 응답이 생성될 때 기반 모델에서 응답을 받는 것을 스트리밍이라고 합니다. 텍스트 생성 및 텍스트 채팅 모델 응답이 스트리밍되면 출력 토큰이 생성될 때 전송됩니다. 텍스트 생성을 스트리밍하려면 TextGenerationModel.predict_streaming 메서드를 사용합니다. 텍스트 채팅을 스트리밍하려면 ChatModel.predict_streaming 메서드를 사용합니다. 기반 모델의 스트리밍에 대한 자세한 내용은 생성형 AI 모델의 응답 스트리밍을 참조하세요.

텍스트 생성 스트리밍

다음 샘플 코드는 텍스트가 생성될 때 100으로 계산되는 텍스트를 스트리밍합니다. 또한 출력을 스트리밍하는 데 걸리는 시간을 보여주기 위해 from_pretrained 호출 전후의 시간을 출력합니다.

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

응답은 다음과 비슷합니다.

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

텍스트 채팅 스트리밍

다음 샘플 코드는 챗봇 요청에 대한 응답으로 텍스트 채팅을 스트리밍하여 99를 계산합니다. 또한 코드 샘플은 출력을 스트리밍하는 데 걸리는 시간을 보여주기 위해 from_pretrained 호출 전후의 시간을 출력합니다.

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

응답은 다음과 비슷합니다.

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

텍스트 임베딩 생성

Vertex AI SDK의 TextEmbeddingModel 클래스를 사용하여 텍스트 임베딩을 계산할 수 있습니다. 다음 Python 코드 샘플에서는 TextEmbeddingModel.get_embeddings 메서드를 사용하여 프롬프트를 통해 텍스트 임베딩을 생성합니다. 이 예시에서 get_embeddingsembedding 객체 하나를 포함하는 embeddings 객체 하나를 반환합니다. 이 예시에서는 반환된 벡터의 길이와 통계를 출력합니다. 텍스트 임베딩 및 텍스트 임베딩 기반 모델에 대한 자세한 내용은 텍스트 임베딩 가져오기를 참조하세요.

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)

출력은 다음과 비슷합니다.

768
TextEmbeddingStatistics(token_count=4.0, truncated=False)

다음 단계