Skip to main content
これはインタラクティブなノートブックです。ローカルで実行するか、以下のリンクを使用できます:

WeaveとOpenAIを使用したコード生成

適切な構造、ドキュメント、テストを備えた高品質なコードを生成することは難しい課題です。このガイドでは、コード生成パイプラインの実装方法を紹介します。humaneval テストスイートに対して高品質なPython関数を生成するコード生成パイプラインの作成方法を学びます。 評価比較と追跡にはWeaveを使用し、構造化された出力を使ってコード生成にはOpenAIのGPTモデルを使用します。 Evaluation

ビデオデモンストレーション

Weave、Groq、E2Bを使用したコード生成パイプラインの視覚的なデモンストレーションについては、こちらのビデオをご覧ください:
このビデオでは、WeaveがGroqと統合して強力なコード生成ツールを作成し、そのコードをE2Bで実行して検証するプロセスを段階的に説明しています。以下の例ではOpenAIを使用していますが、WeaveではどのLLMプロバイダーでも使用できます。

なぜWeaveを使用するのか?

このチュートリアルでは、Weaveを使用してコード生成パイプラインを実装し評価します。以下の方法を学びます:
  1. LLMパイプラインの追跡:コード生成プロセスの入力、出力、中間ステップを記録します。
  2. LLM出力の評価:豊富なデバッグツールと視覚化を使用して、生成されたコードの評価を作成し比較します。

環境のセットアップ

まず、環境をセットアップし、必要なライブラリをインポートしましょう:
WeaveはOpenAI APIコールを自動的に追跡し、入力、出力、メタデータを含みます。つまり、OpenAIとのやり取りに追加のログ記録コードを追加する必要はありません - Weaveがバックグラウンドでシームレスに処理します。

構造化出力とPydanticモデルの活用

このコード生成パイプラインでは、OpenAIのstructured outputs modeとPydanticモデルを活用して、言語モデルからの一貫性のある適切にフォーマットされた応答を確保します。このアプローチにはいくつかの利点があります:
  1. 型安全性:期待される出力のためのPydanticモデルを定義することで、生成されるコード、プログラムランナー、ユニットテストに厳格な構造を強制します。
  2. より簡単な解析:構造化出力モードにより、モデルの応答を事前定義されたPydanticモデルに直接解析でき、複雑な後処理の必要性を減らします。
  3. 信頼性の向上:期待する正確なフォーマットを指定することで、言語モデルからの予期しないまたは不正な形式の出力の可能性を減らします。
以下は、Pydanticモデルを定義し、OpenAIの構造化出力で使用する方法の例です:

コードフォーマッタの実装

一貫性のあるクリーンなコード出力を確保するために、CodeFormatterクラスをWeave操作を使用して実装します。このフォーマッタは、生成されたコード、プログラムランナー、ユニットテストにさまざまなリンティングとスタイリングルールを適用します。
このCodeFormatterクラスは、生成されたコードをクリーンアップしフォーマットするためのいくつかのWeave操作を提供します:
  • エスケープされた改行を実際の改行に置き換える
  • 未使用のインポートと変数の削除
  • インポートの並べ替え
  • PEP 8フォーマットの適用
  • 不足しているインポートの追加

CodeGenerationPipelineの定義

Code Generation Pipeline では、コア部分のコード生成ロジックを実装しましょう: 私たちはweave.Modelを使用しているので、変更があった場合に自動的にバージョン管理されます。また、model_nameを属性として保持しているので、実験が容易で、Weaveで簡単に差分比較ができます。関数呼び出しを@weave.opで追跡しているので、入力と出力がログに記録され、エラー追跡とデバッグに役立ちます。
このCodeGenerationPipelineクラスは、Weave Modelとしてコード生成ロジックをカプセル化し、いくつかの主要な利点を提供します:
  1. 自動実験追跡:Weaveはモデルの各実行の入力、出力、パラメータをキャプチャします。
  2. Versioning: Changes to the model’s attributes or code are automatically versioned, creating a clear history of how your code generation pipeline evolves over time.
  3. Reproducibility: The versioning and tracking make it easy to reproduce any previous result or configuration of your code generation pipeline.
  4. ハイパーパラメータ管理:モデル属性(model_nameなど)は明確に定義され、異なる実行間で追跡され、実験を容易にします。
  5. Weaveエコシステムとの統合:weave.Modelを使用することで、評価やサービング機能などの他のWeaveツールとシームレスに統合できます。

評価指標の実装

生成されたコードの品質を評価するために、weave.Scorerサブクラスを使用して簡単な評価指標を実装します。これにより、データセットの各scoreに対してmodel_outputを実行します。model_outputpredict関数の出力から来ていますweave.Modelpromptはデータセットhuman-evalから取得されます。
これらの評価関数は生成されたコードを実行し、コードがデータセットから提供されたテストに合格したかどうかを示すブール値を返します。 Evaluation

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

パイプラインを評価するために、Weave Datasetを作成し評価を実行します:
このコードはサンプルプロンプトでデータセットを作成し、humaneval テストスコアラーを定義し、コード生成パイプラインの評価を実行します。 Final Evaluation

結論

この例では、WeaveとOpenAIの言語モデルを使用してコード生成パイプラインを実装する方法を示しました。以下の方法を紹介しました:
  1. コード生成プロセスの各ステップにWeave操作を作成する
  2. 簡単な追跡と評価のためにパイプラインをWeave Modelでラップする
  3. Weave操作を使用してカスタム評価指標を実装する
  4. データセットを作成し、パイプラインの評価を実行する
Weaveのシームレスな統合により、コード生成プロセス全体を通じて入力、出力、中間ステップを追跡でき、LLMアプリケーションのデバッグ、最適化、評価が容易になります。 Weaveとその機能の詳細については、Weave documentationをご覧ください。この例を拡張して、より大きなデータセットを処理したり、より洗練された評価指標を実装したり、他のLLMワークフローと統合したりすることができます。