
🐢 用于 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+。
| 附加项 | 添加内容 |
|---|---|
| (无) | giskard-checks 及其依赖 |
遥测: 通过 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(智能体与工作流编排)——它们会被自动引入,很少直接使用。
pip install giskard-checks
Giskard Checks 是一个轻量级库,用于创建评估(evals)以测试基于 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 评判——安装提供商附加项(例如 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())
扫描生成器同样需要 LLM 提供商附加项和 API 密钥(与上述 Checks 评判相同)。
Giskard v2 包含 Scan(自动漏洞检测)和 RAGET(RAG 评估测试集生成)。
对于 LLM 智能体,两者在 v3 中均由 giskard-scan 取代:使用 vulnerability_scan 替代 v2 LLM 扫描,使用 quality_scan(配合 KnowledgeBase)替代 RAGET。
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,必须返回一个输出列表(每行一个)。"""
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",
)
我们欢迎 AI 社区的贡献!阅读此指南开始,并加入我们在 Discord 上蓬勃发展的社区。
🌟 给我们点个星,这有助于项目被更多人发现,并激励我们构建出色的开源工具!🌟
❤️ 如果您觉得我们的工作有用,请考虑在 GitHub 上赞助我们。通过月度赞助,您可以获得赞助徽章、在本文档中展示您的公司,并让您的 bug 报告获得优先处理。如果您希望我们参与咨询项目、举办工作坊或在贵公司进行演讲,我们也提供一次性赞助。
scan | giskard-scan |
openai / anthropic / … | 提供商 SDK(参见 pyproject.toml 可选依赖) |
| 状态 | 包 | 描述 |
|---|
| ✅ 稳定 | giskard-checks | 测试与评估——场景 API、内置检查、LLM 作为评判 |
| ✅ 稳定 | giskard-scan | 智能体漏洞扫描器 + RAG/质量评估——红队测试、提示注入、越狱与有害内容(vulnerability_scan,v2 Scan 的继任者),以及知识库质量评估(quality_scan,v2 RAGET 的继任者) |