Skip to main content
これはインタラクティブなノートブックです。ローカルで実行するか、以下のリンクを使用してください。
適切な構造、ドキュメント、テストを備えた高品質なコードを生成するのは難しいタスクです。このガイドは、LLM を活用したコード生成ワークフローを構築し、その品質を体系的に測定したい開発者を対象としています。このノートブックでは、Python 関数を生成し、HumanEval テストスイートで評価するコード生成パイプラインの作成方法を紹介します。このパイプラインでは、評価の比較とトラッキングに Weave を、構造化出力を用いたコード生成に OpenAI の GPT モデルを使用します。
コード生成の run を比較する Weave の評価ダッシュボード

Weave を使用する理由

このチュートリアルでは、Weave を使用してコード生成パイプラインを実装し、評価します。このチュートリアルで学ぶ内容は次のとおりです。
  • LLM パイプラインをトラッキングする: コード生成プロセスの入力、出力、中間ステップをログします。
  • LLM の出力を評価する: デバッグツールと可視化機能を使用して、生成されたコードの評価を作成し、比較します。

環境を設定する

環境を設定し、必要なライブラリをインポートします。これらの依存関係には、パイプライン全体で使用するフォーマット用ツール、データセットローダー、OpenAI クライアント、Weave クライアントが含まれます。
Weave は OpenAI API の呼び出しを、入力、出力、メタデータを含めて自動的にトラッキングします。OpenAI とのやり取りをログするためのコードを別途追加する必要はありません。Weave がバックグラウンドで処理します。

構造化出力と Pydantic モデル

このコード生成パイプラインでは、OpenAI の 構造化出力モード と Pydantic モデルを使用して、一貫性があり適切な形式の応答を言語モデルから生成します。このアプローチには、次のような利点があります。
  • 型安全性: 期待される出力を Pydantic モデルとして定義することで、生成されるコード、プログラムランナー、ユニットテストに厳密な構造を適用できます。
  • パースの容易さ: 構造化出力モードでは、モデルの応答が事前定義された Pydantic モデルに直接パースされるため、複雑な後処理がほとんど不要になります。
  • 信頼性の向上: 期待する形式を厳密に指定することで、言語モデルが予期しない出力や不正な形式の出力を返す可能性を抑えられます。
次の例では、Pydantic モデルを定義し、OpenAI の構造化出力で使用します。

コードフォーマッターを実装する

一貫性のある整ったコードを出力するために、Weave のオペレーションを使用して CodeFormatter クラスを実装します。このフォーマッターは、生成されたコード、プログラムランナー、ユニットテストにリンティングとスタイルのルールを適用します。
この CodeFormatter クラスは、生成されたコードをクリーンアップして整形するための複数の Weave オペレーションを提供します。
  • エスケープされた改行文字を実際の改行に置き換える
  • 未使用のインポートと変数を削除する
  • インポートを並べ替える
  • PEP 8 に準拠した整形を適用する
  • 不足しているインポートを追加する

CodeGenerationPipeline を定義する

コード生成パイプラインの run の Weave トレース
フォーマッターの準備ができたら、次はプロンプト、LLM Call、フォーマッターを結び付ける、コード生成の中核となるロジックを実装します。 この例では weave.Model を使用しているため、モデルに変更があると自動的にバージョン管理されます。model_name は属性として保持されるため、これを変えて実験し、Weave で差分を確認したり比較したりできます。関数の Call は @weave.op で追跡され、入力と出力がログされるため、エラーのトラッキングやデバッグに役立ちます。
この CodeGenerationPipeline クラスは、コード生成ロジックを Weave モデルとしてカプセル化しており、次のような利点があります。
  • 自動的な実験管理: Weave は、モデルの run ごとに入力、出力、パラメーターを取得します。
  • バージョン管理: モデルの属性やコードへの変更は自動的にバージョン管理されるため、コード生成パイプラインの変遷を履歴として残せます。
  • 再現性: バージョン管理とトラッキングにより、コード生成パイプラインの過去の任意の結果や設定を再現できます。
  • ハイパーパラメーター管理: モデルの属性 (model_name など) が定義され、異なる run 間で追跡されるため、実験を進めやすくなります。
  • Weave エコシステムとのインテグレーション: weave.Model を使用すると、パイプラインを評価やサービング機能など、他の Weave ツールと連携できます。

評価メトリクスを実装する

生成されたコードの品質を評価するには、weave.Scorer のサブクラスを使って評価メトリクスを実装します。このサブクラスは、データセット内のすべての model_output に対して score を実行します。model_output は weave.Model の predict 関数の出力です。prompt は human-eval データセットから取得します。
これらの評価関数は生成されたコードを実行し、データセットで提供されたテストにそのコードが合格したかどうかを示す真偽値を返します。
生成されたコードを評価する HumanEval Scorer の Weave トレース

Weave Dataset を作成して評価を実行する

パイプラインと Scorer を定義したら、最後のステップとして評価用データセットを用意し、エンドツーエンドで評価を実行します。パイプラインを評価するには、次のように Weave Dataset を作成して評価を実行します。
このコードは、サンプルプロンプトを含むデータセットを作成し、HumanEval のテスト用 Scorer を定義したうえで、コード生成パイプラインの評価を実行します。評価が完了すると、Weights & Biases UI で結果を確認したり、run 間で比較したりできます。
HumanEval Scorer の結果を表示する Weave の評価ダッシュボード

まとめ

この例では、Weave と OpenAI の言語モデルを使用してコード生成パイプラインを実装する方法を紹介しました。ここでは、次の方法を学びました。
  • コード生成プロセスの各ステップに対応する Weave のオペレーションを作成する。
  • パイプラインを Weave モデルでラップし、トラッキングと評価を効率化する。
  • Weave のオペレーションを使用して、カスタムの評価メトリクスを実装する。
  • データセットを作成し、パイプラインの評価を実行する。
Weave はコード生成プロセス全体を通じて入力、出力、中間ステップをトラッキングするため、LLM アプリケーションのデバッグ、最適化、評価を容易に行えます。 Weave とその機能の詳細については、Weave のドキュメントを参照してください。この例を拡張すれば、より大規模なデータセットを扱ったり、より高度な評価メトリクスを実装したり、他の LLM ワークフローと統合したりすることもできます。
最終更新日 2026年9月30日