> ## 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.

# Pi 拡張機能

> Agent Lens で Pi のエージェント型セッション、LLM Call、ツール実行をトレースします。

[Pi](https://pi.dev/) は、ターミナルベースのコーディング エージェントです。CoreWeave Agent Lens は、Weights & Biases Weave SDK (`weave`) の `createOtelExtension` インテグレーションを使用して、Pi のセッション、LLM Call、ツール実行を自動的にトレースします。このインテグレーションは [GenAI セマンティック規約](https://opentelemetry.io/docs/specs/semconv/gen-ai/)に準拠しています。このページでは、Pi アプリケーションで Agent Lens のトレースを有効にする方法を説明します。トレースを有効にすると、エージェントの動作の観察、run のデバッグ、トークン使用量とコストの分析が可能になります。

<Note>
  CoreWeave Forge SDK はまだ Pi インテグレーションに対応していないため、このページでは Weave SDK を使用します。両プロダクトは同じトレース データを共有しているため、Weave で送信したトレースは Agent Lens に表示されます。
</Note>

<Warning>
  このインテグレーションは、Pi のセッション データを Agent Lens に送信します。このデータには、ユーザー プロンプト、モデルの応答、ツールの入力と出力、Pi のツールが読み取ったファイルの内容、シェル コマンドとその出力、取得した URL とページの内容が含まれる場合があります。

  このインテグレーションには、PII の除去や機密データのマスキングの機能はありません。セキュリティ要件やコンプライアンス要件により、このデータを Agent Lens に送信できない場合は、Pi アプリケーションで Agent Lens のトレースを有効にしないでください。
</Warning>

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

* [Node.js](https://nodejs.org/) (v22.19 以降) 。Node 20 の場合は、Node 20 を引き続きサポートしている旧バージョンの Pi が `npm` によってインストールされます。
* CoreWeave Forge アカウントと、`WANDB_API_KEY` 環境変数に設定した [APIキー](https://forge.coreweave.com/settings#apikeys)。

<Note>
  Pi は TypeScript および Node.js 向けのフレームワークで、Python 版はありません。Pi を使用するには ESM モジュールシステムが必要です。プロジェクトの `package.json` で `"type": "module"` を指定するか、TypeScript を ESM 形式でコンパイルしてください。CommonJS プロジェクトではエラーになります。ESM プロジェクトのセットアップについて詳しくは、[TypeScript SDK インテグレーション](/ja/products/wandb/weave/guides/integrations/js#set-up-an-esm-project)を参照してください。
</Note>

<h2 id="install-packages">
  パッケージのインストール
</h2>

Agent Lens、Pi、Node の型定義を、ローカルプロジェクトの依存関係としてインストールします。

```bash lines theme={"system"}
npm install weave @earendil-works/pi-coding-agent
npm install --save-dev @types/node tsx typescript
```

<h2 id="trace-a-pi-prompt-and-response">
  Pi のプロンプトと応答をトレースする
</h2>

次の例は、Pi の単一のプロンプトと応答をトレースするために最低限必要なセットアップを示しています。エージェントセッションを作成する前に `weave` パッケージの `init()` を呼び出し、`createOtelExtension()` を拡張機能ファクトリーとして渡します。Agent Lens は、エージェントのライフサイクル全体をトレースします。対象は、会話、プロンプトと応答の各サイクル (`invoke_agent`) 、個々の LLM Call (`chat`) 、およびツール実行 (`execute_tool`) です。セッション ID は `SessionManager.inMemory()` によって自動的に生成されます。

```typescript lines twoslash theme={"system"}
// @noErrors
import {init, createOtelExtension} from 'weave';

import {
  createAgentSession,
  DefaultResourceLoader,
  SessionManager,
  getAgentDir,
} from '@earendil-works/pi-coding-agent';

async function main() {
  // 1. Weave を初期化します。Weave プロジェクトを送信先とする OTEL TracerProvider を
  //    設定します。createOtelExtension() で作成されたスパンはすべて
  //    自動的にここへエクスポートされます。
  await init('[YOUR-TEAM]/[YOUR-PROJECT]');

  // 2. リソースローダーを作成し、Weave OTEL 拡張機能を注入します。
  //    リソースローダーは、エージェントのアクティビティのトレースに使用する
  //    Pi のランタイム環境と拡張機能のライフサイクルを提供します。
  const resourceLoader = new DefaultResourceLoader({
    cwd: process.cwd(),
    agentDir: getAgentDir(),
    extensionFactories: [createOtelExtension({})],
  });

  await resourceLoader.reload();

  // 3. エージェントセッションを開始します
  const {session} = await createAgentSession({
    resourceLoader,
    sessionManager: SessionManager.inMemory(),
  });

  // 4. 拡張機能をバインドします。これにより session_start イベントがトリガーされ、OTEL アダプターが
  //    会話のルートスパンを作成して会話 ID を取得します。
  await session.bindExtensions({});

  // 5. アシスタントの出力を stdout にストリーミングします
  session.subscribe(event => {
    if (
      event.type === 'message_update' &&
      event.assistantMessageEvent.type === 'text_delta'
    ) {
      process.stdout.write(event.assistantMessageEvent.delta);
    }
  });

  // 6. プロンプトを送信し、応答が完了するまで待機します
  await session.prompt('What files are in the current directory?');
  console.log();
}

main();
```

`tsx` を使用してスクリプトをコンパイルし、実行します。`[FILENAME]` は TypeScript ファイル名に置き換えてください。

```bash theme={"system"}
npx tsx [FILENAME].ts
```

コードを実行すると、トレースが Agent Lens project の **Conversations** タブ (`https://forge.coreweave.com/agent-lens/[YOUR-TEAM]/[YOUR-PROJECT]`) に表示されます。Agent Lens は、アプリケーションの実行ごとに Pi のセッション、LLM Call、ツール実行を取得します。

<h3 id="next-steps">
  次のステップ
</h3>

この例をマルチターンの会話にするには、プロンプトを追加します。Agent Lens は `session.prompt()` の各 Call を個別の `invoke_agent` スパンとしてトレースし、それらはすべて 1 つのルートスパンの下にネストされます。エージェントはプロンプトをまたいでコンテキストを自動的に保持します。

コードを実行すると、**Conversations** タブにマルチターンのタイムライン全体が表示され、ネストされた LLM Call、ツール実行、トークン使用量、コストを確認できます。
