ARTKIT は、Gen AI アプリケーションのプロンプトベースのテストと評価を自動化するために BCG X によって開発された Python フレームワークです。
ARTKIT は、Gen AI アプリケーションの自動化されたエンドツーエンドのテストおよび評価パイプラインを開発するための Python フレームワークです。柔軟な Gen AI モデルを活用してテストおよび評価プロセスの主要なステップを自動化することで、ARTKIT パイプラインは、さまざまな Gen AI システムのテストおよび評価のニーズを満たすように容易に適応されます。
ARTKIT は、チャレンジャー ボットとターゲット システム間の自動マルチターン会話もサポートします。 Gen AI システムとの長時間の対話後に問題や脆弱性が発生する可能性が高くなるため、対話型アプリケーションでは複数ターンのテストが重要です。
ARTKIT の中心となる概念と機能を学ぶには、ユーザー ガイドから始めることをお勧めします。例にアクセスして、ARTKIT を使用して Gen AI システムをテストおよび評価する方法を確認してください。
これらは、ARTKIT を使用して Gen AI システムの習熟度、公平性、安全性、セキュリティをテストおよび評価できるさまざまな方法のほんの一例にすぎません。
ARTKIT の利点は、少しの手間で多くのことができることです。いくつかの単純な関数とクラスが、Gen AI システムのテストと評価のための、高速かつ柔軟で目的に適したパイプラインの開発をサポートします。主な機能は次のとおりです。
注記
ARTKIT は、データ サイエンティストやエンジニアがカスタマイズして、人間参加型のテストと評価を強化できるように設計されています。効果的なテストと評価は Gen AI の各ユースケースに合わせて調整する必要があることが経験からわかっているため、私たちは意図的に「プッシュボタン」ソリューションを提供しません。自動化は、テストと評価を拡張および加速するための戦略であり、ケース固有のリスク状況のマッピング、ドメインの専門知識、批判的思考に代わるものではありません。
ARTKIT は、次のモデル プロバイダーに対してすぐに使用できるサポートを提供します。
他のサービスに接続するために、ユーザーは新しいモデル クラスを開発できます。
ARTKIT は、PyPI と Conda の両方のインストールをサポートします。専用の仮想環境に ARTKIT をインストールすることをお勧めします。
MacOS と Linux:
Python -m venv アートキット ソースアートキット/bin/activate pip アートキットをインストールする
Windows:
Python -m venv アートキット artkitScriptsactivate.bat pip アートキットをインストールする
conda install -c conda-forge アートキット
パイプライン フロー図の視覚化を有効にするには、GraphViz をインストールし、それがシステムの PATH 変数にあることを確認します。
dot -V
実行して、インストールを確認します。 ほとんどの ARTKIT ユーザーは、OpenAI や Hugging Face などの外部モデル プロバイダーのサービスにアクセスする必要があります。
私たちが推奨するアプローチは次のとおりです。
pip
を使用してpython-dotenv
インストールします。pip インストール python-dotenv
またはconda
:
conda install -c conda-forge python-dotenv
.env
という名前のファイルを作成します。.env
.gitignore
に追加して、Git リポジトリにコミットされないようにします。.env
内で環境変数を定義します (例: API_KEY=your_api_key
from dotenv import load_dotenv
load_dotenv ()
# Verify that the environment variable is loaded
import os
os . getenv ( 'YOUR_API_KEY' )
ARTKIT リポジトリには、プロジェクト ルートに.env_example
というサンプル ファイルが含まれています。このファイルは、サポートされている API のプレースホルダ認証情報など、環境変数を定義するためのテンプレートを提供します。
認証情報の安全な保存を促進するために、ARTKIT モデル クラスは API 認証情報を直接受け入れず、代わりに環境変数を定義する必要があります。たとえば、OpenAI API キーがOPENAI_API_KEY
という環境変数に保存されている場合、次のように OpenAI モデル クラスを初期化できます。
import artkit . api as ak
ak . OpenAIChat (
model_id = "gpt-4o" ,
api_key_env = "OPENAI_API_KEY"
)
api_key_env
変数は、API キーをパラメータとして直接受け入れるのではなく、環境変数の名前を文字列として受け入れます。これにより、キーは印刷可能な Python オブジェクトとして保存されないため、コード リポジトリ内で API キーが誤って公開されるリスクが軽減されます。 。
主要な ARTKIT 関数は次のとおりです。
run
: 1 つ以上のパイプライン ステップを実行します。step
: 辞書または辞書の反復可能オブジェクトを生成する単一のパイプライン ステップchain
: 順番に実行される一連のステップparallel
: 並列して実行される一連のステップ以下では、次の手順で簡単なサンプル パイプラインを開発します。
まず、 artkit.api
をインポートし、OpenAI GPT-4o モデルとのセッションをセットアップします。以下のコードは、 OPENAI_API_KEY
という環境変数に OpenAI API キーが保存されており、その応答をcache/chat_llm.db
というデータベースにキャッシュしたいことを前提としています。
import artkit . api as ak
# Set up a chat system with the OpenAI GPT-4o model
chat_llm = ak . CachedChatModel (
model = ak . OpenAIChat ( model_id = "gpt-4o" ),
database = "cache/chat_llm.db"
)
次に、パイプライン ステップとして使用される関数をいくつか定義します。 ARTKIT は、非同期ジェネレーターと連携して非同期処理を可能にするように設計されているため、以下の関数はasync
、 await
、およびyield
キーワードを使用して定義されています。
# A function that rephrases input prompts to have a specified tone
async def rephrase_tone ( prompt : str , tone : str , llm : ak . ChatModel ):
response = await llm . get_response (
message = (
f"Your job is to rephrase in input question to have a { tone } tone. n "
f"This is the question you must rephrase: n { prompt } "
)
)
yield { "prompt" : response [ 0 ], "tone" : tone }
# A function that behaves as a chatbot named AskChad who mirrors the user's tone
async def ask_chad ( prompt : str , llm : ak . ChatModel ):
response = await llm . get_response (
message = (
"You are AskChad, a chatbot that mirrors the user's tone. "
"For example, if the user is rude, you are rude. "
"Your responses contain no more than 10 words. n "
f"Respond to this user input: n { prompt } "
)
)
yield { "response" : response [ 0 ]}
# A function that evaluates responses according to a specified metric
async def evaluate_metric ( response : str , metric : str , llm : ak . ChatModel ):
score = await llm . get_response (
message = (
f"Your job is to evaluate prompts according to whether they are { metric } . "
f"If the input prompt is { metric } , return 1, otherwise return 0. n "
f"Please evaluate the following prompt: n { response } "
)
)
yield { "evaluation_metric" : metric , "score" : int ( score [ 0 ])}
次に、2 つの異なる口調 (丁寧と皮肉) に従って入力プロンプトを言い換え、言い換えられたプロンプトを AskChad に送信し、最後に応答の皮肉を評価するパイプラインを定義します。
pipeline = (
ak . chain (
ak . parallel (
ak . step ( "tone_rephraser" , rephrase_tone , tone = "POLITE" , llm = chat_llm ),
ak . step ( "tone_rephraser" , rephrase_tone , tone = "SARCASTIC" , llm = chat_llm ),
),
ak . step ( "ask_chad" , ask_chad , llm = chat_llm ),
ak . step ( "evaluation" , evaluate_metric , metric = "SARCASTIC" , llm = chat_llm )
)
)
pipeline . draw ()
最後に、入力プロンプトを使用してパイプラインを実行し、結果を表に表示します。
# Input to run through the pipeline
prompt = { "prompt" : "What is a fun activity to do in Boston?" }
# Run pipeline
result = ak . run ( steps = pipeline , input = prompt )
# Convert results dictionary into a multi-column dataframe
result . to_frame ()
結果表には左から右に以下が表示されます。
input
: 元の入力プロンプトtone_rephraser
: 言い換えられたプロンプト。指定されたトーンを持つように元のプロンプトを言い換えます。ask_chad
: AskChad からの応答。ユーザーの口調を反映します。evaluation
: SARCASTIC メトリクスの評価スコア。皮肉な応答に 1 のフラグが付けられます。ARTKIT の完全な紹介については、ユーザー ガイドとサンプルをご覧ください。
ARTKIT への貢献は大歓迎です。詳細については、「寄稿者ガイド」セクションを参照してください。
このプロジェクトは Apache 2.0 に基づいてライセンスされており、特許訴訟に対する保護が追加され、自由な使用、変更、配布が許可されています。詳細については、LICENSE ファイルを参照するか、Apache 2.0 にアクセスしてください。
BCG X は、ボストン コンサルティング グループの技術構築および設計部門です。
私たちは、チームに参加してくれる才能あるデータ サイエンティストとソフトウェア エンジニアを常に探しています。詳細については、BCG X キャリアにアクセスしてください。