> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Bedrock Agents

> Weave で Amazon Bedrock Agents の invocation をトレースし、エージェントの入力、基盤モデルの使用状況、完了時の出力を取得します。

[Amazon Bedrock Agents](https://docs.aws.amazon.com/bedrock/latest/userguide/agents.html) を使用すると、基盤モデル、ナレッジベース、アクショングループをオーケストレーションするマネージド AI エージェントを AWS 上に構築できます。Weave は `bedrock-agent-runtime` クライアントへの Call をトレースします。これにより、各 `invoke_agent` の invocation について、基盤モデル、トークン使用量、セッション ID、エージェントの応答などを確認できます。

<Note>
  Weave TypeScript SDK は現在、Bedrock Agents インテグレーションをサポートしていません。
</Note>

<h2 id="prerequisites">
  前提条件
</h2>

* W\&B APIキー。詳細については、[APIキー](/ja/products/wandb/platform/app/settings-page/user-settings#api-keys)を参照してください。
* Bedrock Agents へのアクセス権を持つアカウント用に設定された AWS 認証情報 ([Identity and access management for Amazon Bedrock](https://docs.aws.amazon.com/bedrock/latest/userguide/security-iam.html) を参照してください) 。
* 既存の Bedrock エージェントとエイリアス。`agentId` と `agentAliasId` を控えておいてください。次の AWS CLI コマンドを実行すると、ご自身の ID に関連付けられたエージェントの一覧を取得できます。`<your-region>` は、エージェントが配置されているリージョンのスラッグに置き換えてください。

  ```bash theme={"system"}
  aws bedrock-agent list-agents --region us-east-1
  ```

<h2 id="installation">
  インストール
</h2>

Weave と AWS SDK for Python をインストールします。

```bash theme={"system"}
pip install weave boto3
```

<h2 id="trace-invoke_agent-calls">
  `invoke_agent` の Call をトレースする
</h2>

`bedrock-agent-runtime` クライアントを作成し、`patch_client` に渡します。Weave がクライアントのタイプを検出し、`invoke_agent` メソッドをラップします。パッチの適用後は、通常どおりクライアントを使用できます。

```python lines highlight="15-17" theme={"system"}
import boto3

import weave
from weave.integrations.bedrock import patch_client

weave.init("your-team-name/bedrock-agents-demo")

# Bedrock Agents のランタイムクライアントを作成し、パッチを適用します。
bedrock_agent_client = boto3.client("bedrock-agent-runtime", region_name="us-east-1")
patch_client(bedrock_agent_client)

# エージェントを呼び出します。`enableTrace=True` を設定すると、Weave が
# オーケストレーショントレースのイベントから、使用された基盤モデルとトークン使用量を取得できるようになります。
response = bedrock_agent_client.invoke_agent(
    agentId="[YOUR-AGENT-ID]",
    agentAliasId="[YOUR-AGENT-ALIAS-ID]",
    sessionId="[YOUR-SESSION-ID]",
    inputText="What is the capital of France?",
    enableTrace=True,
)

# ストリーミングされる completion を読み取り、最終的な応答テキストを組み立てます。
final_text = ""
for event in response["completion"]:
    chunk = event.get("chunk")
    if chunk and "bytes" in chunk:
        final_text += chunk["bytes"].decode("utf-8")

print(final_text)
```

各 `invoke_agent` の Call は、Weights & Biases の UI に `BedrockAgentRuntime.invoke_agent` トレースとして表示されます。トレースには次の内容が記録されます。

* エージェントの入力 (`agentId`、`agentAliasId`、`sessionId`、`inputText`) 。
* completion イベントストリームから抽出されたアシスタントのテキスト。
* エージェントが使用する基盤モデル (オーケストレーショントレースから抽出) 。
* トークン使用量 (`prompt_tokens`、`completion_tokens`、`total_tokens`) 。エージェントから報告された場合に記録されます。

基盤モデルとトークン使用量は `orchestrationTrace` イベントから抽出されます。Bedrock がこのイベントを出力するのは、`enableTrace=True` を指定して `invoke_agent` を呼び出した場合のみです。このフラグを指定しなくても、トレースには入力と生成された応答テキストが記録されます。ただし、基盤モデルは `bedrock-agent:<agentId>` にフォールバックし、トークン数は取得できません。

<h2 id="nest-related-agent-calls-together">
  関連するエージェントの Call をまとめてネストする
</h2>

前処理、後処理、チェーンされた API 呼び出しなどの関連ロジックと `invoke_agent` の Call をグループ化するには、関数を `@weave.op` でラップします。Weave は、パッチが適用された `invoke_agent` のトレースを親 op の中にネストします。

```python lines theme={"system"}
@weave.op
def ask_agent(question: str, session_id: str) -> str:
    response = bedrock_agent_client.invoke_agent(
        agentId="[YOUR-AGENT-ID]",
        agentAliasId="[YOUR-AGENT-ALIAS-ID]",
        sessionId=session_id,
        inputText=question,
        enableTrace=True,
    )
    text = ""
    for event in response["completion"]:
        chunk = event.get("chunk")
        if chunk and "bytes" in chunk:
            text += chunk["bytes"].decode("utf-8")
    return text


answer = ask_agent("Summarize today's open support tickets.", session_id="session-1")
```

<h2 id="multi-turn-conversations">
  マルチターンの会話
</h2>

Bedrock Agents では、`sessionId` を再利用すると、会話の状態がサービス側で保持されます。Weights & Biases の UI で複数のターンを 1 つのトレースにまとめるには、それらのターンを `weave.thread` でラップします。

```python lines theme={"system"}
with weave.thread("support-conversation") as t:
    for prompt in [
        "I can't log in to my account.",
        "I already tried resetting my password.",
    ]:
        ask_agent(prompt, session_id=t.thread_id)
```

Weave では、各ターンが UI の Threads ビューにそれぞれ個別の行として表示されます。

<h2 id="view-traces">
  トレースを表示する
</h2>

サンプルを実行すると、Weave が project のダッシュボードへのリンクを出力します。このリンクを開くと、各 `invoke_agent` Call のエージェントへの入力、基盤モデル、トークン使用量、生成された応答を確認できます。
