プログラムによる基盤モデルの推論 ( Python )

IBM watsonx.ai の基礎モデルは、Python ライブラリを使用することで、プログラムでプロンプトを表示できます。

2.3.1 以降、テキスト生成 API は非推奨となり、将来的に削除される予定です。

Prompt Labでプロンプトを作成した後、プロンプトをノートブックとして保存し、ノートブックを編集することができます。 生成されたノートブックから始めるのは便利です。なぜなら、認証情報やプロジェクトIDの取得といった初期設定の手順を自動的に行ってくれるからです。

あるいは、 watsonx.ai で新規に作成したノートブックから、基盤モデルを直接操作することもできます。

Python 詳細については、 watsonx.ai ライブラリのドキュメント ModelInference クラス を参照してください。

サンプル・ノートブック

watsonx.aiで利用可能な様々な基礎モデルを促すサンプルノートブックは、Pythonサンプルノートブックを参照してください。

基盤モデルの推進

基礎モデルをプロンプトする前に、watsonx.ai で推論に使用できる基礎モデルのリストを取得してください。 詳しくは、利用可能なファンデーション・モデルについての情報を得るをご覧ください。

次のサンプルコードでは、flan-t5-xxl-11bモデルをさまざまなメソッドでプロンプト化する方法を示しています。

テキスト・ストリームの生成方法を示す例だけが、プロンプト用のモデル・パラメータを含んでいるが、どのメソッドにもパラメータを指定できる。 この validate=False パラメータを使用すると、モデルIDが有効であり、利用可能なファウンデーションモデルを参照しているかどうかを確認する手順を省略できるため、リクエストの処理が高速化されます。

サンプル Python コード (基礎モデルのプロンプト)

import json
from ibm_watsonx_ai import APIClient
from ibm_watsonx_ai.foundation_models import ModelInference
from ibm_watsonx_ai.metanames import GenTextParamsMetaNames as GenParams
from ibm_watsonx_ai.foundation_models.utils.enums import DecodingMethods

my_credentials = Credentials(
    username="jdoe",
    api_key= {my-API-key},
    url="https://cpd-cpd-instance.apps.example.com",
    instance_id="openshift",
    version="5.1"
)

client = APIClient(my_credentials)

gen_parms = {
    GenParams.DECODING_METHOD: DecodingMethods.SAMPLE,
    GenParams.MAX_NEW_TOKENS: 100
}
model_id = client.foundation_models.TextModels.FLAN_T5_XXL
project_id = {my-project-ID}
space_id = None
verify = False

model = ModelInference(
  model_id=model_id,
  credentials=my_credentials,
  params=gen_parms,
  project_id=project_id,
  space_id=space_id,
  verify=verify,
)

prompt_txt = "In today's sales meeting, we "
gen_parms_override = gen_parms = {
    GenParams.DECODING_METHOD: DecodingMethods.SAMPLE,
    GenParams.MAX_NEW_TOKENS: 50
}
# GENERATE

generated_response = model.generate(prompt=prompt_txt, params=gen_parms_override)

print("Output from generate() method:")
print(json.dumps(generated_response, indent=2))

# GENERATE TEXT

generated_text_response = model.generate_text(prompt=prompt_txt, params=gen_parms_override)

print("Output from generate_text() method:")
print(generated_text_response)

# GENERATE STREAM

gen_stream_params = {
  GenParams.DECODING_METHOD: DecodingMethods.GREEDY,
  GenParams.TEMPERATURE: 0.5,
  GenParams.MIN_NEW_TOKENS: 10,
  GenParams.MAX_NEW_TOKENS: 20
}

print("Output from generate_text_stream() method:")
stream_response = model.generate_text_stream(prompt=prompt_txt, params=gen_stream_params)

for chunk in stream_response:
  print(chunk, end='')
注。https://cpd-cpd-instance.apps.example.com URL、および {my-API-key}{my-project-ID} の変数を、ご使用の デプロイメントに有効な値に置き換えます。

generate()メソッドからの出力:

{
  "model_id": "google/flan-t5-xxl",
  "created_at": "2023-07-27T03:40:17.575Z",
  "results": [
    {
      "generated_text": "will discuss the new product line.",
      "generated_token_count": 8,
      "input_token_count": 10,
      "stop_reason": "EOS_TOKEN"
    }
  ],
  ...
}

generate_text()メソッドからの出力:

will discuss the new product line.

generate_text_stream()メソッドからの出力:

will discuss the new product line. Let's start with marketing plans

有害コンテンツの削除

基盤モデルにプロンプトを送信する場合、憎悪、虐待、冒涜(HAP)フィルターと個人を特定できる情報(PII)フィルターはデフォルトで無効になります。 APIのmoderationsフィールドを使用することで、これらを有効にし、HAPフィルターの感度を指定することができます。

フィルターがどのように機能するかについては、モデルの入力と出力から有害な言語を取り除くを参照してください。

Python ライブラリを使用する際、デフォルト設定が適用されたガードレールフィルターを使用するには、リクエストに以下のパラメータを含めてください:

response = model.generate(prompt,guardrails=True)

次のコード例は、フィルタの有効化と設定方法を示しています:

guardrails_hap_params = {
  GenTextModerationsMetaNames.INPUT: False,
  GenTextModerationsMetaNames.THRESHOLD: 0.45
}
guardrails_pii_params = {
  GenTextModerationsMetaNames.INPUT: False,
  GenTextModerationsMetaNames.OUTPUT: True,
  GenTextModerationsMetaNames.MASK: {"remove_entity_value": True}
}

response = model.generate(prompt,
  guardrails=True,
  guardrails_hap_params=guardrails_hap_params,
  guardrails_pii_params=guardrails_pii_params)