Giskard-AI/giskard-oss · 上手攻略
- 仓库:Giskard-AI/giskard-oss
- 链接:https://github.com/Giskard-AI/giskard-oss
- 分类:AI · LLM Agent 测试与评估
- 作者:Tom
- 更新:2026-07-14
一、是什么
Giskard 是一个开源 Python 库,专为测试和评估 AI Agent 系统而设计,由法国团队 Giskard-AI 维护。它经历了从 v2 到 v3 的重大重写:v3 采用模块化架构,将功能拆分为 giskard-checks(轻量测试)、giskard-scan(红队漏洞扫描)和规划中的 giskard-rag(RAG 评估)三个独立包,去掉了 v2 中的重型依赖,专注于动态、多轮对话场景下的 AI 系统评测。
简言之:Giskard 解决的是「LLM 输出不稳定,如何写测试?」和「我的 Agent 有没有安全漏洞?」这两件事。
二、解决什么问题
- 非确定性输出的回归测试:传统单元测试依赖精确输出匹配,但 LLM 的同一输入可能产生多个正确答案,Giskard 用 LLM-as-Judge 方式绕过这个问题。
- Agent 安全漏洞扫描:自动生成对抗性测试用例,覆盖 OWASP LLM Top-10 威胁类别(提示注入、有害内容、刻板印象、虚假信息等)。
- RAG 质量验证:检查答案是否基于检索到的上下文,而非模型幻觉。
- 多轮对话场景测试:不同于单轮 QA,Giskard 支持模拟完整的多轮对话流程。
三、快速安装
v3(当前 Beta,主推):
pip install giskard-checks # 测试与评估(scenario API)
pip install giskard-scan # 红队漏洞扫描
v2(旧版,仍可用但不维护):
pip install "giskard[llm]>2,<3"
⚠️ 注意:v3 核心包要求 Python 3.12+。v2 则兼容更广但已停止维护,新项目强烈建议使用 v3。
📊 遥测提示:
giskard-checks默认发送可选的聚合使用统计,不包含任何 Prompt、输出或场景文本,可通过文档中的选项关闭。
四、核心用法
4.1 giskard-checks:编写测试(Eval)
使用 Scenario API 定义一个测试,输入问题并用 outputs 函数包装 LLM 调用:
from openai import OpenAI
from giskard.checks import Scenario, Groundedness
import asyncio
client = OpenAI()
def get_answer(inputs: str) -> str:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": inputs}],
)
return response.choices[0].message.content
scenario = (
Scenario("test_dynamic_output")
.interact(
inputs="What is the capital of France?",
outputs=get_answer,
)
.check(
Groundedness(
name="answer is grounded",
context="France is a country in Western Europe. Its capital is Paris.",
)
)
)
result = asyncio.run(scenario.run())
result.print_report()
内置 Check 类型:
- Groundedness:答案是否基于给定上下文
- LLMJudge:用另一个 LLM 评判输出质量
- 字符串匹配、正则、语义相似度等传统方法也有内置支持
⚠️
scenario.run()是异步的,在脚本中需要用asyncio.run()包装。
4.2 giskard-scan:漏洞扫描
用自然语言描述你的 Agent,系统自动生成对抗性测试套件:
import asyncio
from giskard.scan import vulnerability_scan
async def main():
await vulnerability_scan(
target=my_agent,
description="A customer support chatbot for an e-commerce platform.",
languages=["en"],
)
asyncio.run(main())
扫描覆盖的威胁类别(OWASP LLM Top-10): - 提示注入(Prompt Injection) - 有害内容生成 - 刻板印象与歧视 - 虚假信息 - 数据泄露 等
内置提供提示注入载荷数据集,支持扩展自定义 ScenarioGenerator。
4.3 giskard-rag(RAG 评估,尚未发布)
import pandas as pd
from giskard.rag import generate_testset, KnowledgeBase
df = pd.read_csv("path/to/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",
)
⚠️ v3 状态:目前
giskard-scan和 RAG 评估仍依赖 Giskard v2 引擎,giskard-rag尚在规划中,详见 v3 Announcement。
五、典型适用场景
| 场景 | 推荐模块 |
|---|---|
| 上线前回归测试(验证修改没有破坏 LLM 输出质量) | giskard-checks |
| 发现 Agent 安全漏洞(红队演练) | giskard-scan |
| RAG 系统答案质量评估 | giskard-rag(v3 规划中,用 v2 过渡) |
| 多轮对话流程测试 | giskard-checks + Scenario |
| 持续集成中自动跑 Evals | giskard-checks |
六、坑与注意
- Python 版本门槛:v3 核心包要求 Python 3.12+,旧项目升级前先确认环境。
- v3 功能不完整:
giskard-rag和完全脱离 v2 的 scan 功能仍在开发中,若需要完整的 RAGET 功能,暂时仍需用 v2。 - run() 是异步的:常见错误是在同步函数中忘记
asyncio.run(),导致只返回一个协程对象而非结果。 - 遥测数据:如在意隐私,注意查看并关闭可选的使用统计上传。
- LLM-as-Judge 成本:每次判断都会调用一次 Judge LLM,大批量测试时需留意 API 费用。
- 模型兼容性:示例中用的是 OpenAI API,理论上任何兼容 OpenAI 接口的模型(如本地部署的 vLLM)都可以,需要自行适配
base_url。
七、与同类对比
| 工具 | 定位 | 优点 | 缺点 |
|---|---|---|---|
| Giskard v3 | LLM/Agent 测试 + 漏洞扫描 | 模块化、轻量、v3 新架构现代化 | 功能不完全、RAG 评估依赖 v2 |
| LangSmith | 完整 MLOps + Eval | 完整链路、可视化强 | 主要是闭源 SaaS,免费额度有限 |
| Braintrust | LLMPrompt/Eval 平台 | 简单易用、开源 SDK | 偏托管,自托管功能弱 |
| Promptfoo | Prompt 对比 + 测试 | 强大、多模型对比 | 主要面向 Prompt 调优,非 Agent 专用 |
| Giskard v2 | 全套 ML + LLM 测试 | 功能完整 | 依赖重、不再维护 |
Giskard v3 在轻量级 Agent 测试 + 安全扫描这个交集点上最具竞争力,适合不想引入 LangSmith 等重型平台、但又需要对 Agent 行为做系统化评测的团队。
八、一句话推荐结论
如果你在做 LLM Agent 开发,需要为非确定性输出写测试、或者想做红队安全扫描,Giskard v3 是目前最值得关注的开源轻量方案——尤其它的模块化设计让按需引入成为可能,不会有依赖负担。(Python 3.12+ 环境优先,生产级 RAG 评估功能需等待 v3 完善或暂时用 v2 过渡。)
来源:GitHub README · Giskard v3 Announcement Discussion · Giskard v3 Roadmap Issue