Amazon BedrockのModel IDが、表記と異なる件

LangChainでAmazon BedrockでClaude 3.5 Haikuを呼び出そうとしたら、エラーが発生しました。
30分くらい溶かしてしまったので、同じことが起こらないよう、こちらに解決方法を記載しておきます。

生成AIや、それにまつわるライブラリは変化が早いので、既に動かなくなっているかもしれません。
ライブラリ等のバージョンは必ず載せるので、参考にしてみてください

また、AWSのアップデートにより解決してる場合もあります。

動作環境

  • Windows 11
  • WSL2
  • Ubuntu 22.04
$ uv --version
uv 0.5.1

$ uv run python -V
Python 3.12.7

$ uv pip freeze
annotated-types==0.7.0
anyio==4.8.0
boto3==1.36.12
botocore==1.36.12
certifi==2025.1.31
charset-normalizer==3.4.1
h11==0.14.0
httpcore==1.0.7
httpx==0.28.1
idna==3.10
jmespath==1.0.1
jsonpatch==1.33
jsonpointer==3.0.0
langchain-aws==0.2.12
langchain-core==0.3.33
langsmith==0.3.4
numpy==2.2.2
orjson==3.10.15
packaging==24.2
pydantic==2.10.6
pydantic-core==2.27.2
python-dateutil==2.9.0.post0
python-dotenv==1.0.1
pyyaml==6.0.2
requests==2.32.3
requests-toolbelt==1.0.0
s3transfer==0.11.2
six==1.17.0
sniffio==1.3.1
tenacity==9.0.0
typing-extensions==4.12.2
urllib3==2.3.0
zstandard==0.23.0

※ 他の検証でも使用しているので、不要なライブラリが多々はいっています。

エラーの例

まずはこちらをご覧ください。
LangChainは使ってますが、ただただBedrockを呼び出しているソースコードです。

なお、AWS_PROFILE.envファイルに記載したのを読み込んでいます

下記は、エラーの実装例なので、動きません。

from dotenv import load_dotenv
from langchain_aws.chat_models import ChatBedrock
from langchain_core.messages import AIMessage, HumanMessage, SystemMessage

load_dotenv()


MODEL_ID = "anthropic.claude-3-5-haiku-20241022-v1:0"
REGION = "us-east-1"


def main():
    llm = ChatBedrock(
        model_id=MODEL_ID,
        region_name=REGION,
        model_kwargs={
            "max_tokens": 2048,
            "temperature": 0.0,
        },
    )

    messages = [
        SystemMessage("You are a helpful assistant."),
        HumanMessage("こんにちは!わたしはジョンと言います"),
        AIMessage(content="こんにちは、ジョンさん!どのようにお手伝いできますか?"),
        HumanMessage(content="私の名前がわかりますか?"),
    ]

    ai_message = llm.invoke(messages)
    print(ai_message)


if __name__ == "__main__":
    main()

実行結果

$ uv run invoke_bedrock_error.py 
ERROR:root:Error raised by bedrock service: An error occurred (ValidationException) when calling the InvokeModel operation: Invocation of model ID anthropic.claude-3-5-haiku-20241022-v1:0 with on-demand throughput isn’t supported. Retry your request with the ID or ARN of an inference profile that contains this model.
Traceback (most recent call last):
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/invoke_bedrock_error.py", line 34, in <module>
    main()
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/invoke_bedrock_error.py", line 29, in main
    ai_message = llm.invoke(messages)
                 ^^^^^^^^^^^^^^^^^^^^
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/langchain_core/language_models/chat_models.py", line 284, in invoke
    self.generate_prompt(
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/langchain_core/language_models/chat_models.py", line 860, in generate_prompt
    return self.generate(prompt_messages, stop=stop, callbacks=callbacks, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/langchain_core/language_models/chat_models.py", line 690, in generate
    self._generate_with_cache(
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/langchain_core/language_models/chat_models.py", line 925, in _generate_with_cache
    result = self._generate(
             ^^^^^^^^^^^^^^^
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/langchain_aws/chat_models/bedrock.py", line 574, in _generate
    completion, tool_calls, llm_output = self._prepare_input_and_invoke(
                                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/langchain_aws/llms/bedrock.py", line 845, in _prepare_input_and_invoke
    raise e
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/langchain_aws/llms/bedrock.py", line 831, in _prepare_input_and_invoke
    response = self.client.invoke_model(**request_options)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/botocore/client.py", line 569, in _api_call
    return self._make_api_call(operation_name, kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/dohi/git/wordpress-site/src/invoke_bedrock/.venv/lib/python3.12/site-packages/botocore/client.py", line 1023, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.ValidationException: An error occurred (ValidationException) when calling the InvokeModel operation: Invocation of model ID anthropic.claude-3-5-haiku-20241022-v1:0 with on-demand throughput isn’t supported. Retry your request with the ID or ARN of an inference profile that contains this model.

要は、モデルIDがサポートされてないよ、と言っているのですが、何度コピペをしてもAWSに記載のモデルIDの通りで、間違いはありませんでした。

解決方法

結果、モデルIDを変更したら解決しました。
でも、AWSにはanthropic.claude-3-5-haiku-20241022-v1:0って書いてあるのに…

モデルIDを、下記にすれば解決です。

MODEL_ID = "us.anthropic.claude-3-5-haiku-20241022-v1:0"

実行結果は以下の通り。

$ uv run invoke_bedrock.py 
content='はい、あなたの名前はジョンさんですね。先ほどのメッセージで「わたしはジョンと言います」とおっしゃっていました。' additional_kwargs={'usage': {'prompt_tokens': 73, 'completion_tokens': 53, 'total_tokens': 126}, 'stop_reason': 'end_turn', 'model_id': 'us.anthropic.claude-3-5-haiku-20241022-v1:0'} response_metadata={'usage': {'prompt_tokens': 73, 'completion_tokens': 53, 'total_tokens': 126}, 'stop_reason': 'end_turn', 'model_id': 'us.anthropic.claude-3-5-haiku-20241022-v1:0'} id='run-21869e44-b3ef-4d98-8195-d803cff2d287-0' usage_metadata={'input_tokens': 73, 'output_tokens': 53, 'total_tokens': 126}

うーん、これは気づかない。。。

まとめ

今回は、BedrockのモデルIDが違った件をお話しました。

LangChainのライブラリ経由だからなのかはわかりませんが、同じ状況になった方がいらっしゃいましたら是非試してみてください。

コメント

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