VertexAI SDK for Python Language Models
はじめに
この記事ではlanguage_modelsパッケージ(以下、language_models)のClassを見ていきます。
※12月14日時点でGAされているクラスを見ていきます。
概要
VertexAI for Pythonにはいくつかパッケージがあります。
- language_models
- preview
- vision_models
今回はlanguage_modelsのClassを見ていきましょう。
ChatMessage
説明:
メッセージとメッセージを書いた人を引数に取ります。
ChatMessage(content: str, author: str)
ChatModel
ChatModelはチャットが可能な言語モデルです。
ChatModelクラスにはいくつかメソッドが存在します。
from_pretrained
説明:
事前学習済みのモデルを呼び出す際に利用します。
使い方:
ChatModel.from_pretrained(model_name,endpoint_name)
endpoint_name
は省略可能です。省略した場合はModelGardenから呼び出します。
引数1にはモデル名を指定します。モデル名は"chat-bison@002"
などです。
引数2にはエンドポイント名を指定します。エンドポイント名は"projects/1234567890123/locations/us-central1/endpoints/1234567890123456789"
などです。
get_tuned_model
説明:
指定された調整済み言語モデルをロードします。
ChatModel.get_tuned_model(tuned_model_name)
チューニングされたモデル名を指定します。
list_tuned_model_names
説明:
調整済みモデルの名前を一覧表示します。
ChatModel.list_tuned_model_names()
引数はありません。
start_chat
説明:
呼び出したモデルを利用してチャットセッションを開始します。
start_chat(
*,
context: typing.Optional[str] = None,
examples: typing.Optional[
typing.List[vertexai.language_models.InputOutputTextPair]
] = None,
max_output_tokens: typing.Optional[int] = None,
temperature: typing.Optional[float] = None,
top_k: typing.Optional[int] = None,
top_p: typing.Optional[float] = None,
message_history: typing.Optional[
typing.List[vertexai.language_models.ChatMessage]
] = None,
stop_sequences: typing.Optional[typing.List[str]] = None
) -> vertexai.language_models.ChatSession
引数が多いのでひとつずつ説明します。
context:AIのコンテキストを指定します。例えば、"in Japanese"
などです。
examples:InputOutputTextPairのリストを指定します。InputOutputTextPairについては後述します。
max_output_tokens:出力するトークンの最大数を指定します。
temperature:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_k:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_p:出力の多様性を調整します。値が高いほど多様性が高くなります。
message_history:チャットの履歴を指定します。
stop_sequences:出力を終了する文字列を指定します。
tune_model
説明:
トレーニングデータに基づいてモデルを調整します。このメソッドは非同期モデル調整ジョブを起動して返します。
tune_model(
training_data: typing.Union[str, pandas.core.frame.DataFrame],
*,
train_steps: typing.Optional[int] = None,
learning_rate_multiplier: typing.Optional[float] = None,
tuning_job_location: typing.Optional[str] = None,
tuned_model_location: typing.Optional[str] = None,
model_display_name: typing.Optional[str] = None,
default_context: typing.Optional[str] = None,
accelerator_type: typing.Optional[typing.Literal["TPU", "GPU"]] = None,
tuning_evaluation_spec: typing.Optional[TuningEvaluationSpec] = None
) -> _LanguageModelTuningJob
引数が多いのでひとつずつ説明します。
training_data:トレーニングデータを指定します。文字列かpandasのDataFrameを指定します。
train_steps:トレーニングステップ数を指定します。
learning_rate_multiplier:学習率の倍率を指定します。
tuning_job_location:モデル調整ジョブの場所を指定します。
tuned_model_location:調整済みモデルの場所を指定します。
model_display_name:モデルの表示名を指定します。
default_context:AIのコンテキストを指定します。
accelerator_type:アクセラレータのタイプを指定します。
tuning_evaluation_spec:モデル調整ジョブの評価仕様を指定します。
ChatSession
説明:
ChatSession は言語モデルとのチャットセッションを表します。
チャットセッション内では、モデルはコンテキストを保持し、以前の会話を記憶します。
ChatSession(
model: vertexai.language_models.ChatModel,
context: typing.Optional[str] = None,
examples: typing.Optional[
typing.List[vertexai.language_models.InputOutputTextPair]
] = None,
max_output_tokens: typing.Optional[int] = None,
temperature: typing.Optional[float] = None,
top_k: typing.Optional[int] = None,
top_p: typing.Optional[float] = None,
message_history: typing.Optional[
typing.List[vertexai.language_models.ChatMessage]
] = None,
stop_sequences: typing.Optional[typing.List[str]] = None,
)
引数が多いのでひとつずつ説明します。
model:ChatModelを指定します。
context:AIのコンテキストを指定します。
examples:InputOutputTextPairのリストを指定します。
max_output_tokens:出力するトークンの最大数を指定します。
temperature:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_k:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_p:出力の多様性を調整します。値が高いほど多様性が高くなります。
message_history:チャットの履歴を指定します。
stop_sequences:出力を終了する文字列を指定します。
補足:start_chatメソッドと一緒によく使います。
message_history
説明:
チャットの履歴を取得します。
send_message
説明:
言語モデルにメッセージを送信し、応答を取得します。
send_message(
message: str,
*,
max_output_tokens: typing.Optional[int] = None,
temperature: typing.Optional[float] = None,
top_k: typing.Optional[int] = None,
top_p: typing.Optional[float] = None,
stop_sequences: typing.Optional[typing.List[str]] = None,
candidate_count: typing.Optional[int] = None,
grounding_source: typing.Optional[
typing.Union[
vertexai.language_models._language_models.WebSearch,
vertexai.language_models._language_models.VertexAISearch,
]
] = None
) -> vertexai.language_models.MultiCandidateTextGenerationResponse
引数が多いのでひとつずつ説明します。
message:送信するメッセージを指定します。
max_output_tokens:出力するトークンの最大数を指定します。
temperature:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_k:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_p:出力の多様性を調整します。値が高いほど多様性が高くなります。
stop_sequences:出力を終了する文字列を指定します。
candidate_count:候補の数を指定します。
grounding_source:応答の根拠を指定します。
send_message_async
説明:
非同期で言語モデルにメッセージを送信し、応答を取得します。
引数はsend_messageと同じです。
send_message_streaming
説明:
言語モデルにメッセージを送信し、ストリーミングされた応答を取得します。
応答は完全に読み込まれるまで履歴に追加されません。
send_message_streaming(
message: str,
*,
max_output_tokens: typing.Optional[int] = None,
temperature: typing.Optional[float] = None,
top_k: typing.Optional[int] = None,
top_p: typing.Optional[float] = None,
stop_sequences: typing.Optional[typing.List[str]] = None
) -> typing.Iterator[vertexai.language_models.TextGenerationResponse]
引数が多いのでひとつずつ説明します。
message:送信するメッセージを指定します。
max_output_tokens:出力するトークンの最大数を指定します。
temperature:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_k:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_p:出力の多様性を調整します。値が高いほど多様性が高くなります。
stop_sequences:出力を終了する文字列を指定します。
InputOutputTextPair
説明:
言語モデルのトレーニングに使用される入力と出力のペアを表します。
InputOutputTextPair(input_text: str, output_text: str)
TextEmbedding
説明:
テキスト埋め込みベクトルと統計。
TextEmbedding(
values: typing.List[float],
statistics: typing.Optional[
vertexai.language_models.TextEmbeddingStatistics
] = None,
_prediction_response: typing.Optional[
google.cloud.aiplatform.models.Prediction
] = None,
)
TextEmbeddingInput
説明:
構造化テキスト埋め込み入力。
TextEmbeddingInput(
text: str,
task_type: typing.Optional[str] = None,
title: typing.Optional[str] = None,
)
TextEmbeddingModel
説明:
テキスト埋め込みモデル。
TextEmbeddingModel(
model_id: str,
endpoint_name: typing.Optional[str] = None
)
endpoint_name
は省略可能です。省略した場合はModelGardenから呼び出します。
引数1にはモデル名を指定します。モデル名は"chat-bison@002"
などです。
引数2にはエンドポイント名を指定します。エンドポイント名は"projects/1234567890123/locations/us-central1/endpoints/1234567890123456789"
などです。
from_pretrained
説明:
事前学習済みのモデルを呼び出す際に利用します。
使い方:
TextEmbeddingModel.from_pretrained(model_name)
引数にはモデル名を指定します。モデル名は"chat-bison@002"
などです。
引数2はありません。
TextGenerationModel
説明:
LanguageModel を作成します。このコンストラクタを直接呼び出すべきではありません。代わりに LanguageModel.from_pretrained(model_name=...) を使用してください。
TextGenerationModel(
model_id: str,
endpoint_name: typing.Optional[str] = None
)
TextGenerationResponse
説明:
TextGenerationResponse は言語モデルの応答を表します。
TextGenerationResponse(
text: str, _prediction_response: typing.Any,
is_blocked: bool = False,
errors: typing.Tuple[int] = (),
safety_attributes: typing.Dict[str, float] = <factory>,
grounding_metadata: typing.Optional[vertexai.language_models._language_models.GroundingMetadata] = None
)
引数が多いのでひとつずつ説明します。
text:応答のテキスト
_prediction_response:予測応答¥
is_blocked:応答がブロックされているかどうか
errors:エラーのリスト
safety_attributes:安全属性
grounding_metadata:根拠メタデータ
raw_prediction_response
説明:
生の予測応答を取得します。
GroundingSource
ソースを引用するために必要なクラスです。
Grounding(グランディング)とはつまり、根拠づけのことです。
VertexAI Search
VertexAI Searchを使ってソースを引用します。
VertexAISearch(
data_store_id: str,
location: str,
project: typing.Optional[str] = None,
disable_attribution: bool = False,
)
WebSearch
説明:
Web検索を使用してソースを引用します。
WebSearch(disable_attribution: bool = False)
ここからしたはCode系のクラス
CodeChatModel
説明:
CodeChatModel はコードを完成させることができるモデルを表します。以下に具体的なコード例を示します。
code_chat_model = CodeChatModel.from_pretrained("codechat-bison@001")
code_chat = code_chat_model.start_chat(
context="私は大規模なエンタープライズアプリケーションを書いています。",
max_output_tokens=128,
temperature=0.2,
top_k=40,
top_p=0.9,
stop_sequences=["\n"])
code_chat.send_message("2つの数字の最小値を計算する関数の作成を手伝ってください")
CodeChatModel(model_id: str, endpoint_name: typing.Optional[str] = None)
endpoint_name
は省略可能です。省略した場合はModelGardenから呼び出します。
引数1にはモデル名を指定します。モデル名は"codechat-bison@002"
などです。
引数2にはエンドポイント名を指定します。エンドポイント名は"projects/1234567890123/locations/us-central1/endpoints/1234567890123456789"
などです。
from_pretrained
説明:
事前学習済みのモデルを呼び出す際に利用します。
使い方:
CodeChatModel.from_pretrained(model_name,endpoint_name)
endpoint_name
は省略可能です。省略した場合はModelGardenから呼び出します。
引数1にはモデル名を指定します。モデル名は"codechat-bison@002"
などです。
引数2にはエンドポイント名を指定します。エンドポイント名は"projects/1234567890123/locations/us-central1/endpoints/1234567890123456789"
などです。
get_tuned_model
説明:
指定された調整済み言語モデルをロードします。
CodeChatModel.get_tuned_model(tuned_model_name)
チューニングされたモデル名を指定します。
list_tuned_model_names
説明:
調整済みモデルの名前を一覧表示します。
CodeChatModel.list_tuned_model_names()
引数はありません。
start_chat
説明:
呼び出したモデルを利用してチャットセッションを開始します。
start_chat(
*,
context: typing.Optional[str] = None,
examples: typing.Optional[
typing.List[vertexai.language_models.InputOutputTextPair]
] = None,
max_output_tokens: typing.Optional[int] = None,
temperature: typing.Optional[float] = None,
top_k: typing.Optional[int] = None,
top_p: typing.Optional[float] = None,
message_history: typing.Optional[
typing.List[vertexai.language_models.ChatMessage]
] = None,
stop_sequences: typing.Optional[typing.List[str]] = None
) -> vertexai.language_models.ChatSession
引数が多いのでひとつずつ説明します。
context:AIのコンテキストを指定します。例えば、"in Japanese"
などです。
examples:InputOutputTextPairのリストを指定します。InputOutputTextPairについては後述します。
max_output_tokens:出力するトークンの最大数を指定します。
temperature:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_k:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_p:出力の多様性を調整します。値が高いほど多様性が高くなります。
message_history:チャットの履歴を指定します。
stop_sequences:出力を終了する文字列を指定します。
tune_model
説明:
トレーニングデータに基づいてモデルを調整します。このメソッドは非同期モデル調整ジョブを起動して返します。
tune_model(
training_data: typing.Union[str, pandas.core.frame.DataFrame],
*,
train_steps: typing.Optional[int] = None,
learning_rate_multiplier: typing.Optional[float] = None,
tuning_job_location: typing.Optional[str] = None,
tuned_model_location: typing.Optional[str] = None,
model_display_name: typing.Optional[str] = None,
default_context: typing.Optional[str] = None,
accelerator_type: typing.Optional[typing.Literal["TPU", "GPU"]] = None,
tuning_evaluation_spec: typing.Optional[TuningEvaluationSpec] = None
) -> _LanguageModelTuningJob
引数が多いのでひとつずつ説明します。
training_data:トレーニングデータを指定します。文字列かpandasのDataFrameを指定します。
train_steps:トレーニングステップ数を指定します。
learning_rate_multiplier:学習率の倍率を指定します。
tuning_job_location:モデル調整ジョブの場所を指定します。
tuned_model_location:調整済みモデルの場所を指定します。
model_display_name:モデルの表示名を指定します。
default_context:AIのコンテキストを指定します。
accelerator_type:アクセラレータのタイプを指定します。
tuning_evaluation_spec:モデル調整ジョブの評価仕様を指定します。
CodeChatSession
説明:
CodeChatSession は言語モデルとのチャットセッションを表します。
チャットセッション内では、モデルはコンテキストを保持し、以前の会話を記憶します。
CodeChatSession(
model: vertexai.language_models.CodeChatModel,
context: typing.Optional[str] = None,
examples: typing.Optional[
typing.List[vertexai.language_models.InputOutputTextPair]
] = None,
max_output_tokens: typing.Optional[int] = None,
temperature: typing.Optional[float] = None,
top_k: typing.Optional[int] = None,
top_p: typing.Optional[float] = None,
message_history: typing.Optional[
typing.List[vertexai.language_models.ChatMessage]
] = None,
stop_sequences: typing.Optional[typing.List[str]] = None,
)
引数が多いのでひとつずつ説明します。
model:CodeChatModelを指定します。
context:AIのコンテキストを指定します。
examples:InputOutputTextPairのリストを指定します。
max_output_tokens:出力するトークンの最大数を指定します。
temperature:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_k:出力の多様性を調整します。値が高いほど多様性が高くなります。
top_p:出力の多様性を調整します。値が高いほど多様性が高くなります。
message_history:チャットの履歴を指定します。
stop_sequences:出力を終了する文字列を指定します。
message_history
説明:
チャットの履歴を取得します。
send_message
説明:
言語モデルにメッセージを送信し、応答を取得します。
send_message(
message: str,
*,
max_output_tokens: typing.Optional[int] = None,
temperature: typing.Optional[float] = None,
candidate_count: typing.Optional[int] = None
) -> vertexai.language_models.MultiCandidateTextGenerationResponse
引数が多いのでひとつずつ説明します。
message:送信するメッセージを指定します。
max_output_tokens:出力するトークンの最大数を指定します。
temperature:出力の多様性を調整します。値が高いほど多様性が高くなります。
candidate_count:候補の数を指定します。
send_message_async
説明:
非同期で言語モデルにメッセージを送信し、応答を取得します。
引数はsend_messageと同じです。
send_message_streaming_async
説明:
言語モデルにメッセージを送信し、ストリーミングされた応答を取得します。
応答は完全に読み込まれるまで履歴に追加されません。
send_message_streaming_async(
message: str,
*,
max_output_tokens: typing.Optional[int] = None,
temperature: typing.Optional[float] = None
) -> typing.AsyncIterator[vertexai.language_models.TextGenerationResponse]
引数が多いのでひとつずつ説明します。
message:送信するメッセージを指定します。
max_output_tokens:出力するトークンの最大数を指定します。
temperature:出力の多様性を調整します。値が高いほど多様性が高くなります。
CodeGenerationModel
説明:
LanguageModel を作成します。このコンストラクタを直接呼び出すべきではありません。代わりに LanguageModel.from_pretrained(model_name=...) を使用してください。
所感:これはあまり使わないモデル
まとめ
今回はVertexAI for Pythonの概要を参照しました。
以前、LINE botのためにざっくりと読んでLINE botを作成しましたが
じっくりと読んでわかったこととしては、VertexAIの動作のほとんどはSDKを使ってできるということです。
SDKなので当たり前ですが、まだできないことも多いので今後に期待しつつ、次回はVertexAI for Pythonのサンプルコードを見ていきます。
Discussion