
🐢 LLMエージェント向けのオープンソース評価・テストライブラリ
[!IMPORTANT] Giskard v3 は、AIエージェントの動的かつマルチターンのテストのために設計された、新規に書き直されたバージョンです。このリリースでは、効率性を高めるために重い依存関係を削除しつつ、より強力なAI脆弱性スキャナーと拡張されたRAG評価を導入しています。これらはどちらも
giskard-scanにネイティブに搭載され、v2への依存はありません。表形式/MLモデル用のレガシースキャンのみがv2専用のままです。 Giskard v2 は引き続き利用可能ですが、積極的なメンテナンスは行われていません。 進捗を追う → v3アナウンスを読む · ロードマップ
pip install giskard # チェック (+ agents, llm, core)
pip install "giskard[scan]" # + 脆弱性 / 品質スキャン
pip install "giskard[openai]" # LLMジャッジ / ジェネレーター用プロバイダーSDK
Python 3.12+ が必要です。
| Extra | 追加されるもの |
|---|---|
| (なし) | giskard-checks と依存関係 |
scan | giskard-scan |
openai / anthropic / … | プロバイダーSDK (pyproject.toml のオプション依存関係を参照) |
テレメトリー: giskard-core によるオプションの集計分析。プロンプトや出力は送信されません。
Giskardをインポートする前にオプトアウト: export DO_NOT_TRACK=1 または export GISKARD_TELEMETRY_DISABLED=1
詳細: giskard-core README
Giskardは、エージェントシステムのテストと評価のためのオープンソースのPythonライブラリです。v3アーキテクチャは、必要な依存関係のみを持つ、焦点を絞ったパッケージ群からなるモジュール式のセットであり、LLM、ブラックボックスエージェント、マルチステップパイプラインなど、あらゆるものをラップできるようにゼロから構築されています。
これらは、giskard-core (共有ユーティリティとテレメトリー)、giskard-llm (プロバイダーに依存しないLLMルーティング)、giskard-agents (エージェントとワークフローのオーケストレーション) という3つの基盤ライブラリの上に構築されており、これらは自動的に取り込まれ、直接使用されることはほとんどありません。
pip install giskard-checks
Giskard Checks は、LLMベースのシステムをテストする評価 (evals) を作成するための軽量ライブラリです。単純なアサーションからLLM-as-judge評価までをカバーします。従来のユニットテストとは異なり、evalsは非決定的な出力のために設計されており、同じ入力に対して異なる有効な応答が生成される可能性があります。
Giskard Checksを以下の用途に使用します:
組み込みのevalsには、文字列マッチング、比較、正規表現、意味的類似性、およびLLM-as-judgeチェック (Groundedness、Conformity、LLMJudge) が含まれます。
(inputs) -> outputs (オプションで trace 付き)giskard.agents.Generator は、ワークフロー/ジャッジ用のLLMクライアントです。ユーザーメッセージを合成する giskard.checks の入力ジェネレーター (LLMGenerator) とは異なります。
import asyncio
from giskard.checks import Scenario, Groundedness
def get_answer(inputs: str) -> str:
return "Paris" # モデル / エージェントに置き換えてください
async def main() -> None:
scenario = (
Scenario("test_france_capital")
.interact(inputs="What is the capital of France?", outputs=get_answer)
.check(
Groundedness(
name="answer is grounded",
context="France is in Western Europe. Its capital is Paris.",
)
)
)
result = await scenario.run()
result.print_report()
asyncio.run(main())
Groundedness はLLMジャッジです。プロバイダーのextra (例: pip install "giskard[openai]") をインストールし、対応するAPIキーを設定してください。デフォルトモデル: openai/gpt-4o-mini。
Suites、LLMJudge、マルチターンシナリオなどについては、完全なドキュメント を参照してください。
pip install "giskard[scan]" # または: pip install giskard-scan
Giskard Scan は、エージェントシステムのレッドチーミングおよび脆弱性スキャンレイヤーです。エージェントの平易な英語での説明から、プロンプトインジェクション、有害コンテンツ、ステレオタイプ、誤情報などをカバーする敵対的テストスイートを自動的に生成します。
Giskard Scanを以下の用途に使用します:
ScenarioGenerator インスタンスを generate_suite に渡すか、vulnerability_suite_generator_registry に登録import asyncio
from giskard.scan import vulnerability_scan
async def my_agent(inputs: str) -> str:
# エージェント / モデルの呼び出しに置き換えてください
return f"Echo: {inputs}"
async def main() -> None:
await vulnerability_scan(
target=my_agent,
description="A customer support chatbot for an e-commerce platform.",
languages=["en"],
)
asyncio.run(main())
スキャンジェネレーターにも、上記のChecksジャッジと同様に、LLMプロバイダーのextraとAPIキーが必要です。
Giskard v2には、Scan (自動脆弱性検出) とRAGET (RAG評価テストセット生成) が含まれていました。
LLMエージェントの場合、両方ともv3では giskard-scan に置き換えられています: v2のLLMスキャンの代わりに vulnerability_scan を、RAGETの代わりに quality_scan (KnowledgeBase 付き) を使用してください。
v3はMLモデルでも動作します — モデルをターゲットとしてラップし、giskard-checks または giskard-scan で評価します。以下の例がカバーしているのは、v2専用の自動表形式スキャン — giskard.Model + giskard.Dataset を検査してパフォーマンス、バイアス、堅牢性の問題を自動検出する検出器スイート — と、giskard.testing MLテストスイート、およびGiskard Hubです。これらはv3では計画されていません。
pip install "giskard[llm]>2,<3"
モデルをラップしてスキャンを実行します:
import giskard
import pandas as pd
# my_llm_chain を実際のLLMチェーンまたはモデル推論ロジックに置き換えてください
def model_predict(df: pd.DataFrame):
"""この関数はDataFrameを受け取り、出力のリスト (行ごとに1つ) を返す必要があります。"""
return [my_llm_chain.run({"query": question}) for question in df["question"]]
giskard_model = giskard.Model(
model=model_predict,
model_type="text_generation",
name="My LLM Application",
description="A question answering assistant",
feature_names=["question"],
)
scan_results = giskard.scan(giskard_model)
display(scan_results)
ナレッジベースから質問、参照回答、コンテキストを自動生成します:
import pandas as pd
from giskard.rag import generate_testset, KnowledgeBase
# ナレッジベースのドキュメントを読み込む
df = pd.read_csv("path/to/your/knowledge_base.csv")
knowledge_base = KnowledgeBase.from_pandas(df, columns=["column_1", "column_2"])
testset = generate_testset(
knowledge_base,
num_questions=60,
language="en",
agent_description="A customer support chatbot for company X",
)
🌟 スターを残してください。プロジェクトが他の人に発見され、優れたオープンソースツールを構築し続けるモチベーションにつながります! 🌟
❤️ 私たちの作業が役に立つと思われたら、GitHubでスポンサーになることをご検討ください。毎月のスポンサーシップで、スポンサーバッジを取得し、このreadmeに会社を表示し、バグレポートを優先的に処理してもらうことができます。コンサルティングプロジェクトへの参加、ワークショップの開催、貴社での講演をご希望の場合は、一回限りのスポンサーシップも提供しています。