🐢 Библиотека с открытым исходным кодом для оценки и тестирования LLM-агентов
[!IMPORTANT] Giskard v3 — это полностью переписанная версия, предназначенная для динамического многоходового тестирования AI-агентов. Этот релиз отбрасывает тяжёлые зависимости ради повышения эффективности, одновременно внедряя более мощный сканер уязвимостей ИИ и улучшенную оценку RAG — обе функции теперь поставляются нативно в
giskard-scanбез зависимости от v2. Только устаревшее сканирование для табличных/ML-моделей остаётся доступным только в v2. Giskard v2 остаётся доступным, но больше не поддерживается активно. Следите за прогрессом → Прочитайте анонс v3 · Дорожная карта
pip install giskard # проверки (+ agents, llm, core)
pip install "giskard[scan]" # + сканирование уязвимостей / качества
pip install "giskard[openai]" # SDK провайдера для LLM-судей / генераторов
Требуется 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, black-box агента или многоэтапного конвейера.
| Статус | Пакет | Описание |
|---|---|---|
| ✅ Стабильный | giskard-checks | Тестирование и оценка — API сценариев, встроенные проверки, LLM-как-судья |
| ✅ Стабильный | giskard-scan | Сканер уязвимостей агентов + оценка RAG/качества — red teaming, prompt injection, jailbreaks и вредоносный контент (vulnerability_scan, преемник v2 Scan), а также оценка качества базы знаний (quality_scan, преемник v2 RAGET) |
Они построены на трёх фундаментальных библиотеках — giskard-core (общие утилиты и телеметрия), giskard-llm (независимая от провайдера маршрутизация LLM) и giskard-agents (оркестрация агентов и рабочих процессов) — которые подтягиваются автоматически и редко используются напрямую.
pip install giskard-checks
Giskard Checks — это лёгкая библиотека для создания оценок (эвалов), которые тестируют системы на основе LLM — от простых утверждений до оценок LLM-как-судья. В отличие от традиционных модульных тестов, эвалы предназначены для недетерминированных выходных данных, где один и тот же вход может давать разные допустимые ответы.
Используйте Giskard Checks для:
Встроенные эвалы включают сопоставление строк, сравнения, регулярные выражения, семантическое сходство и проверки LLM-как-судья (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 — это уровень red teaming и сканирования уязвимостей для агентных систем. Он автоматически генерирует наборы состязательных тестов на основе описания вашего агента на простом языке, охватывая prompt injection, вредоносный контент, стереотипы, дезинформацию и многое другое.
Используйте Giskard Scan для:
ScenarioGenerator в generate_suite или их регистрация в vulnerability_suite_generator_registryimport 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())
Генераторам сканирования также нужен extra LLM-провайдера и API-ключ (как и судьям Checks выше).
Giskard v2 включал Scan (автоматическое обнаружение уязвимостей) и RAGET (генерация тестовых наборов для оценки RAG).
Для LLM-агентов обе функции заменены в v3 на giskard-scan: используйте vulnerability_scan вместо сканирования LLM из v2 и quality_scan (с KnowledgeBase) вместо RAGET.
v3 также работает с ML-моделями — оберните одну как цель и оцените её с помощью giskard-checks или giskard-scan. Примеры ниже охватывают автоматическое табличное сканирование, доступное только в v2 — набор детекторов, который анализирует giskard.Model + giskard.Dataset для автоматического обнаружения проблем производительности, смещения и устойчивости, — а также набор ML-тестов giskard.testing и 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 и должна возвращать список выходных данных (по одному на строку)."""
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",
)
Мы приветствуем вклад от сообщества ИИ! Прочитайте это руководство, чтобы начать, и присоединяйтесь к нашему процветающему сообществу на Discord.
Следите за прогрессом и делитесь отзывами: Анонс v3 · Дорожная карта
🌟 Оставьте нам звезду, это помогает проекту стать известным для других и поддерживает нашу мотивацию создавать отличные инструменты с открытым исходным кодом! 🌟
❤️ Если вы находите нашу работу полезной, пожалуйста, рассмотрите возможность спонсирования нас на GitHub. При ежемесячном спонсировании вы можете получить значок спонсора, разместить свою компанию в этом readme и получить приоритет при обработке ваших отчётов об ошибках. Мы также предлагаем разовое спонсирование, если вы хотите, чтобы мы участвовали в консалтинговом проекте, проводили воркшоп или выступали с докладом в вашей компании.