これはインタラクティブなノートブックです。ローカルで実行するか、以下のリンクを使用できます。
Weave と OpenAI を使用したコード生成

Weave を使用する理由
- LLM パイプラインをトラッキングする: コード生成プロセスの入力、出力、中間 step をログします。
- LLM の出力を評価する: 豊富なデバッグツールと可視化機能を使用して、生成したコードの評価を作成し、比較します。
環境を設定する
Weave は、入力、出力、メタデータを含む OpenAI API の呼び出しを自動的にトラッキングします。つまり、OpenAI とのやり取りのために追加のログ用コードを記述する必要はありません。Weave がバックグラウンドでシームレスに処理します。
structured outputs と Pydantic モデルの活用
- タイプ安全性: 期待する出力に対して Pydantic モデルを定義することで、生成されるコード、プログラムランナー、ユニットテストに厳密な構造を強制できます。
- パースのしやすさ: structured outputs モードを使うと、モデルのレスポンスを事前定義した Pydantic モデルに直接パースできるため、複雑な後処理の必要性を減らせます。
- 信頼性の向上: 期待する形式を明示することで、言語モデルから予期しない出力や形式が不正な出力が返される可能性を低減できます。
コードフォーマッタの実装
CodeFormatter クラスを実装します。このフォーマッタは、生成されたコード、プログラムランナー、ユニットテストに対して、さまざまなlintルールとスタイルルールを適用します。
CodeFormatter クラスは、生成されたコードをクリーンアップして整形するための複数の Weave operations を提供します。
- エスケープされた改行を実際の改行に置き換える
- 未使用の import と変数を削除する
- import を並べ替える
- PEP 8 に準拠した形式を適用する
- 不足している import を追加する
CodeGenerationPipeline を定義する

weave.Model を使うことで、変更時に自動でバージョン管理されます。また、model_name も属性として保持しておくことで、これを使って試行しやすくなり、Weave で差分の確認や比較も簡単に行えます。さらに、@weave.op で関数呼び出しをトラッキングすることで、入出力がログされ、エラーの追跡やデバッグに役立ちます。
CodeGenerationPipeline クラスは、コード生成ロジックを Weave Model としてカプセル化しており、次のような重要な利点があります。
- 自動的な実験トラッキング: Weave は、モデルの各 run について、入力、出力、パラメーターを自動的に記録します。
- バージョン管理: モデルの属性やコードへの変更は自動的にバージョン管理されるため、コード生成パイプラインが時間とともにどのように進化したかを明確な履歴として残せます。
- 再現性: バージョン管理とトラッキングにより、コード生成パイプラインの過去の結果や設定を簡単に再現できます。
- ハイパーパラメーター管理: モデル属性 (
model_nameなど) は明確に定義され、異なる run にわたってトラッキングされるため、実験を進めやすくなります。 - Weave エコシステムとのインテグレーション:
weave.Modelを使うことで、評価やサービング機能など、他の Weave ツールとシームレスに連携できます.
評価メトリクスを実装する
weave.Scorer のサブクラスを使って、シンプルな評価メトリクスを実装します。これにより、データセット内のすべての model_output に対して score が実行されます。model_output は、weave.Model の predict 関数の出力です。prompt はデータセット human-eval から取得されます。

Weave データセットを作成して評価を実行する

結論
- コード生成プロセスの各 step に対応する Weave operations を作成する
- トラッキングと評価を容易に行えるよう、パイプラインを Weave Model でラップする
- Weave operations を使ってカスタム評価メトリクスを実装する
- データセットを作成し、パイプラインを評価する