いずみこんな悩みを解決できる記事を書きました!
僕は現役フリーランスエンジニア(歴10年)で、資格は13個保有しています。
「Amazon BedrockをPythonから呼び出したいけれど、どのAPIを使えばいいか分からない」と悩んでいませんか?
Bedrockには複数の呼び出しAPIがありますが、会話形式のアプリを作るならConverse APIが第一候補になります。
Converse APIはモデルが変わっても同じコードで呼び出せる統一インターフェースです。



InvokeModelよりずっと書きやすいです。
ということで、本記事ではBedrock Converse APIをPythonで使う方法を解説します。



すぐ読み終わるので、ぜひ最後まで読んでくださいませ。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【AWS】Bedrock Converse APIをPythonで使う方法
早速ですが、Bedrock Converse APIをPythonで使う方法を解説します。
Converse APIとは
Converse APIは、Bedrock上のさまざまなモデルへ共通のリクエスト形式でメッセージを送れるAPIです。
従来のInvokeModel APIは、Anthropic ClaudeとAmazon Novaでリクエストボディの構造が異なり、モデルを切り替えるたびにコードの書き直しが必要でした。
Converse APIを使うと、messages・system・inferenceConfig・toolConfigという共通フィールドだけで、どのモデルも呼び出せます。
呼び出し用のメソッドは2つ用意されています。
converse:応答をまとめて1回で受け取るconverse_stream:応答をトークン単位でストリーミング受信する



モデルIDを差し替えるだけでClaudeでもNovaでも動くのが便利ですね。
事前準備
Converse APIを呼び出す前に、3つの準備をします。
AWSコンソールのBedrock画面から、使いたいモデルの利用リクエストを送信します。
承認されると、モデルIDを指定して呼び出せるようになります。
pip install -U boto3Converse APIはboto3の新しめのバージョンで追加されたため、古い環境ではアップグレードしておきます。
aws configure実行するIAMユーザーまたはロールに、bedrock:InvokeModelとbedrock:InvokeModelWithResponseStreamの権限を付与します。
converseで基本的な対話を実装する
まずはconverseメソッドで、1往復の対話を実装します。
import boto3
client = boto3.client("bedrock-runtime", region_name="us-east-1")
model_id = "anthropic.claude-3-5-sonnet-20241022-v2:0"
messages = [
{
"role": "user",
"content": [{"text": "Bedrockの特徴を3つ教えてください"}],
}
]
response = client.converse(
modelId=model_id,
messages=messages,
)
print(response["output"]["message"]["content"][0]["text"])
print(response["usage"])リクエストはroleとcontentを持つメッセージの配列で組み立てます。
contentが{"text": "..."}のリストになっている点が、InvokeModelとの違いです。
応答本文はresponse["output"]["message"]["content"][0]["text"]で取り出せます。
response["usage"]には入力・出力トークン数が入るので、コスト計算に使えます。



レスポンスの形が全モデル共通なので、パース処理を1つ書けば使い回せます。
システムプロンプトと推論パラメータを指定する
システムプロンプトはsystemフィールドで、生成の細かい制御はinferenceConfigで指定します。
response = client.converse(
modelId=model_id,
messages=messages,
system=[{"text": "あなたは日本語で簡潔に答えるアシスタントです"}],
inferenceConfig={
"maxTokens": 512,
"temperature": 0.3,
"topP": 0.9,
},
)maxTokensで最大出力トークン数、temperatureで回答のばらつきを調整します。
モデル固有のパラメータを渡したい場合はadditionalModelRequestFieldsを使います。
converse_streamでストリーミング応答を受け取る
チャットUIのように結果を少しずつ表示したい場合は、converse_streamを使います。
response = client.converse_stream(
modelId=model_id,
messages=messages,
)
for event in response["stream"]:
if "contentBlockDelta" in event:
text = event["contentBlockDelta"]["delta"]["text"]
print(text, end="", flush=True)戻り値のstreamをループで回し、contentBlockDeltaイベントから差分テキストを取り出します。
ほかにもmessageStart・contentBlockStop・messageStop・metadataといったイベントが順に流れてきます。
metadataイベントにトークン使用量が含まれます。



体感速度が上がるので、ユーザー向け画面ではストリーミングを推奨します。
toolConfigでツール実行(function calling)を実装する
Converse APIはtoolConfigを渡すだけで、ツール実行(function calling)に対応します。
tool_config = {
"tools": [
{
"toolSpec": {
"name": "get_weather",
"description": "指定した都市の天気を返す",
"inputSchema": {
"json": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "都市名"}
},
"required": ["city"],
}
},
}
}
]
}
messages = [
{"role": "user", "content": [{"text": "東京の天気は?"}]}
]
response = client.converse(
modelId=model_id,
messages=messages,
toolConfig=tool_config,
)
stop_reason = response["stopReason"]モデルがツールを呼びたいと判断すると、stopReasonがtool_useになります。
アプリ側でツールを実行し、結果をtoolResultとして会話履歴に追加してから、再度converseを呼びます。
if stop_reason == "tool_use":
content = response["output"]["message"]["content"]
tool_use = [b for b in content if "toolUse" in b][0]["toolUse"]
tool_result = {
"toolUseId": tool_use["toolUseId"],
"content": [{"json": {"weather": "晴れ", "temp": 28}}],
}
messages.append(response["output"]["message"])
messages.append(
{"role": "user", "content": [{"toolResult": tool_result}]}
)
final = client.converse(
modelId=model_id,
messages=messages,
toolConfig=tool_config,
)
print(final["output"]["message"]["content"][0]["text"])ツールの結果を受け取ったモデルが、最終的な回答文を生成します。



ツール定義のスキーマもモデル共通なので、プロバイダーごとの書き方を覚え直す必要がありません。
マルチターン会話を続けるコツ
会話を継続する場合は、モデルの応答メッセージをそのままmessagesへ追加してから、次のユーザー発言を足します。
Converse API自体は会話状態を保持しないため、履歴の管理はアプリ側の責任になります。
履歴が長くなるほど入力トークンが増えるので、古いメッセージを要約する仕組みを用意すると安定します。
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
【厳選】フリーランスエンジニアにおすすめなエージェント3選


フリーランスエンジニアになるにはエージェントから案件をもらう必要があります。
僕が実際に利用しているおすすめエージェントを紹介しますね。



エージェントは必ず複数登録してください。
担当者によっては「全然案件紹介してくれない…」みたいなこともあるので…
僕は実際に5つのエージェントを使い回していますよ。
フリーランスを始めるなら「レバテックフリーランス


」
- 業界最大級の案件数。
- 業界トップクラスの高単価報酬、低マージン(平均年収862万円)。
- 案件参画中のフォローの充実。
※詳細は「【業界最大手】レバテックフリーランスとは?メリットや利用手順を解説!」を参照。
レバテックフリーランス
![]()
![]()
とにかく案件数が多いので、とりあえず登録しておけば間違いないエージェントです!



僕もはじめてフリーランスの案件を貰ったのはレバテックフリーランス
![]()
![]()
保有している案件数が多いので、業務経験がなくても何かしらの案件は紹介してもらえますよ(僕はJavaの経験3年でも案件を貰えました)。
手厚い保障を重視したいなら「Midworks


」
- 手厚い保障で正社員並みの安心感。
- 還元率60%超え&単価公開でクリアな契約。
- 給与保障制度(審査あり)。
Midworks
![]()
![]()
フリーランスを目指しているけど不安な方や保障を重視したい方におすすめです。



僕も何度か案件を紹介してもらいました。
自分のスキルに合った案件を紹介してもらえましたし、電話のやり取りも非常に丁寧でした。
週2〜3日の案件探しなら「ITプロパートナーズ


」
- IT案件に特化したフリーランスエージェント。
- 週2〜3日の案件が豊富。
- リモート案件が多く、直エンドなので単価も高い。
※詳細は「【週2・3案件】ITプロパートナーズとは?メリットや利用手順を解説!」を参照。
ITプロパートナーズ
![]()
![]()
週2〜3日から参画できる案件が豊富なので、起業したい人にもおすすめです。



週2〜3日の案件はある程度スキルがないと紹介してもらえない印象です。
とはいえ、週5の案件ももちろんありますし、僕が利用した時は迅速・丁寧に対応していただきました!
よくある質問
Converse APIとInvokeModel APIはどちらを使うべきですか?
会話形式のアプリなら、モデル差を吸収できるConverse APIが基本の選択肢です。
画像生成や埋め込みベクトルの取得など、メッセージ形式に当てはまらない用途ではInvokeModel APIを使います。
モデルIDはどこで確認できますか?
AWSコンソールのBedrock画面、またはlist_foundation_modelsの呼び出しで一覧を取得できます。
リージョンをまたいで負荷分散する場合は、推論プロファイルのIDを指定します。
AccessDeniedExceptionが出る場合の対処法は?
モデルアクセスが有効化されているか、IAMポリシーにInvokeModel権限があるかを確認します。
呼び出しているリージョンと、モデルの提供リージョンが一致しているかも確認ポイントです。
まとめ
今回は、Bedrock Converse APIをPythonで使う方法について解説しました。
以下が本記事のまとめになります。



最後までお読みいただき、ありがとうございました!
| 【当サイト】おすすめフリーランスエージェント3選 | |||
|---|---|---|---|
| エージェント | 評価 | ポイント | 公式サイト |
レバテックフリーランス | 5.0 | 業界最大級のエージェント。 高単価案件が豊富。 | 公式 |
Midworks | 4.8 | 満足度調査で 3年連続3冠を達成。 | 公式 |
ITプロパートナーズ | 4.6 | 週2〜3向けの案件が豊富。 | 公式 |
- クソおすすめ本



海外のエンジニアがどういった思考で働いているかが理解できます。
海外に行く気はないけど海外エンジニアの動向が気になる雑魚エンジニアにおすすめです(本当におすすめな本しか紹介しないのでご安心を)。








