PythonでPaLM APIを用いた言語モデルによるテキスト生成

スポンサーリンク

PythonでPaLM APIを用いた言語モデルによるテキスト生成を行ってみます。

今回はgoogle-generativeaiを用います。このライブラリ・モジュールはPythonの標準ライブラリではありませんので、事前にインストールする必要があります。

またPaLM APIを用いるためにはAPIキーを発行する必要がありますので、事前に発行しておく必要があります。

■Python

今回のPythonのバージョンは、「3.10.9」を使用しています。(Windows11)(pythonランチャーでの確認)

■PaLM APIを用いた言語モデルによるテキスト生成

では、PaLM APIを用いた言語モデルによるテキスト生成を行うため、スクリプトを書いていきます。

■コード

import pprint
import google.generativeai as palm

palm.configure(api_key='発行されたAPIキー')

models = [m for m in palm.list_models() if 'generateText' in m.supported_generation_methods]
model = models[0].name

prompt = """
明日の天気を予想してください。
"""

completion = palm.generate_text(
    model=model,
    prompt=prompt,
    temperature=0,
    max_output_tokens=800,
)

print(completion.result)

まずはモジュールのインポートを行います。pprintというモジュールをインポートしています。これは、結果をきれいに表示するために使用します。次に、google.generativeaiモジュールをpalmという名前でインポートします。このモジュールには、GenerativeAI(Palm)の機能が含まれています。

次に「palm.configure(api_key=’発行されたAPIキー’)」と記述し関数を使用して、GenerativeAI(Palm)APIの認証に使用するAPIキーを設定します。「発行されたAPIキー」の部分は、実際のAPIキーに置き換える必要があります。

設定後「models = [m for m in palm.list_models() if ‘generateText’ in m.supported_generation_methods]」と記述し関数を使用して利用可能なモデルのリストを取得します。このリストは、GenerativeAI(Palm)が提供するさまざまなモデルを含みます。次にリスト内包表記を使用して「’generateText’」というテキスト生成メソッドをサポートしているモデル(models/text-bison-001)のみを抽出します。

その後、model = models[0].nameと記述し、モデルの選択をします。選択後、プロンプトの設定します。prompt変数に、テキスト生成のための入力となるプロンプト(提示文)を設定します。今回は「明日の天気を予想してください。」という日本語の文をプロンプトとして使用します。

設定後、テキスト生成の実行します。

completion = palm.generate_text(
    model=model,
    prompt=prompt,
    temperature=0,
    max_output_tokens=800,
)

上記では、palm.generate_text()関数を使用し指定したモデルとプロンプトに基づいてテキスト生成を実行します。model引数には選択したモデルの名前を指定し、prompt引数にはプロンプトを指定します。temperature引数は生成されるテキストの多様性を制御し、max_output_tokens引数は生成されるテキストの最大トークン数を指定します。

最後に「print(completion.result)」と記述し、結果を表示します。

■検証・実行

今回書いたスクリプトを「ai_generator.py」という名前でPythonが実行されている作業ディレクトリ(カレントディレクトリ)に保存し、コマンドプロンプトから実行してみます。

Traceback (most recent call last):
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\api_core\grpc_helpers.py", line 72, in error_remapped_callable
    return callable_(*args, **kwargs)
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\grpc\_channel.py", line 1030, in __call__
    return _end_unary_response_blocking(state, call, False, None)
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\grpc\_channel.py", line 910, in _end_unary_response_blocking
    raise _InactiveRpcError(state)  # pytype: disable=not-instantiable
grpc._channel._InactiveRpcError: <_InactiveRpcError of RPC that terminated with: status = StatusCode.INVALID_ARGUMENT details = "The requested language is not supported by models/text-bison-001" debug_error_string = "UNKNOWN:Error received from peer ipv6:%5B2404:6800:4004:824::200a%5D:443 {created_time:"2023-06-19T04:27:02.19780269+00:00", grpc_status:3, grpc_message:"The requested language is not supported by models/text-bison-001"}" >

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\Users\user_\ai_generator.py", line 13, in 
    completion = palm.generate_text(
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\generativeai\text.py", line 139, in generate_text
    return _generate_response(client=client, request=request)
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\generativeai\text.py", line 159, in _generate_response
    response = client.generate_text(request)
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\ai\generativelanguage_v1beta2\services\text_service\client.py", line 641, in generate_text
    response = rpc(
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\api_core\gapic_v1\method.py", line 113, in __call__
    return wrapped_func(*args, **kwargs)
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\api_core\grpc_helpers.py", line 74, in error_remapped_callable
    raise exceptions.from_grpc_error(exc) from exc
google.api_core.exceptions.InvalidArgument: 400 The requested language is not supported by models/text-bison-001

実行してみると、上記のメッセージが表示されました。メッセージの内容を確認すると、「400 The requested language is not supported by models/text-bison-001(400 要求された言語は、models/text-bison-001 でサポートされません)」という内容です。内容から2023年6月の記事公開時点ではmodels/text-bison-001は、日本語はサポートされてない。

そのため、「テキスト生成のための入力となるプロンプト(提示文)」を日本語から英語に変更し、スクリプトを実行してみます。

**Tomorrow's Weather Forecast**

* **Day:** Mostly sunny, with a high near 60 degrees Fahrenheit.
* **Night:** Mostly clear, with a low around 40 degrees Fahrenheit.
* **Wind:** Southeast wind 5 to 10 mph.
* **Chance of precipitation:** 0%.

**Summarized:** Tomorrow will be a sunny day with a high near 60 degrees Fahrenheit. The night will be mostly clear with a low around 40 degrees Fahrenheit. There is no chance of precipitation.

(**明日の天気予報** **Day:** Mostly sunny, with high near 60 degrees Fahrenheit. * 夜:**ほとんど晴れ、最低気温は華氏40度前後です。* **Wind:** 南東の風5〜10mph. * 降水確率:0%。**Summarized:** 明日は晴れで、最高気温は華氏60度付近です。夜はほぼ晴れで、最低気温は華氏40度前後でしょう。降水確率はゼロです。)

実行してみると、言語モデルによるテキスト生成が行われました。

■備考

Q.APIの認証に使用するAPIキーを設定していない場合はどうなるか。

A.下記のようなメッセージが表示されます。

Traceback (most recent call last):
  File "C:\Users\user_\ai_generator.py", line 4, in 
    models = [m for m in palm.list_models() if 'generateText' in m.supported_generation_methods]
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\generativeai\models.py", line 93, in list_models
    client = get_default_model_client()
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\generativeai\client.py", line 157, in get_default_model_client
    default_model_client = glm.ModelServiceClient(**default_client_config)
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\ai\generativelanguage_v1beta2\services\model_service\client.py", line 427, in __init__
    self._transport = Transport(
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\ai\generativelanguage_v1beta2\services\model_service\transports\grpc.py", line 149, in __init__
    super().__init__(
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\ai\generativelanguage_v1beta2\services\model_service\transports\base.py", line 97, in __init__
    credentials, _ = google.auth.default(
  File "C:\Users\user_\AppData\Roaming\Python\Python310\site-packages\google\auth\_default.py", line 692, in default
    raise exceptions.DefaultCredentialsError(_CLOUD_SDK_MISSING_CREDENTIALS)
google.auth.exceptions.DefaultCredentialsError: Your default credentials were not found. To set up Application Default Credentials, see https://cloud.google.com/docs/authentication/external/set-up-adc for more information.

コメント

タイトルとURLをコピーしました