🐍

VertexAI SDK for Python Language Models

2023/12/15に公開

はじめに

この記事では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を使ってソースを引用します。

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