LLMs 和 ML 模型的评估和测试框架
控制 AI 模型中的性能、偏见和安全问题的风险
文档 • 博客 • 网站 • Discord
安装 Giskard 🐢
使用 pip 从 PyPi 安装最新版本的 Giskard:
pip install "giskard[llm]" -U
我们官方支持 Python 3.9、3.10 和 3.11。
在 Colab 中试用 📙
Giskard 是一个开源的 Python 库,自动检测 AI 应用中的性能、偏见和安全问题。该库涵盖基于 LLM 的应用程序(如 RAG 代理),以及传统的用于表格数据的 ML 模型。
扫描:自动评估基于 LLM 的代理的性能、偏见和安全问题 ⤵️
检测到的问题包括:
- 幻觉
- 有害内容生成
- 提示注入
- 鲁棒性问题
- 敏感信息泄露
- 刻板印象和歧视
- 以及更多...
RAG 评估工具包 (RAGET):自动生成评估数据集并评估 RAG 应用的答案 ⤵️
如果你正在测试一个 RAG 应用程序,你可以通过 RAGET(Giskard 的 RAG 评估工具包)获得更深入的评估。
-
RAGET 可以从 RAG 的知识库中自动生成
问题
、参考答案
和参考背景
的列表。然后你可以使用这个生成的测试集来评估你的 RAG 代理。 -
RAGET 为每个 RAG 代理组件计算分数。这些分数是通过汇总代理在不同问题类型上的答案正确性来计算的。
- 这是使用 RAGET 评估的组件列表:
生成器
:RAG 内部用来生成答案的 LLM检索器
:根据用户查询从知识库中获取相关文档重写器
:重写用户查询以使其更符合知识库或考虑聊天历史路由器
:根据用户的意图过滤查询知识库
:提供给 RAG 生成答案的一组文档
- 这是使用 RAGET 评估的组件列表:
Giskard 适用于任何模型、任何环境,并与你喜欢的工具无缝集成 ⤵️
寻找评估计算机视觉模型的解决方案?请查看 giskard-vision,这是专为计算机视觉任务设计的库。
目录
- 🤸♀️ 快速开始
- 1. 🏗️ 构建一个 LLM 代理
- 2. 🔎 扫描你的模型是否存在问题
- 3. 🪄 为你的 RAG 应用自动生成评估数据集
- 👋 社区
🤸♀️ 快速开始
1. 🏗️ 构建一个 LLM 代理
让我们构建一个基于 IPCC 2023 年气候变化综合报告的代理,该代理可以回答关于气候变化的问题。
在开始之前,让我们安装所需的库:
pip install langchain tiktoken "pypdf<=3.17.0"
from langchain import OpenAI, FAISS, PromptTemplate
from langchain.embeddings import OpenAIEmbeddings
from langchain.document_loaders import PyPDFLoader
from langchain.chains import RetrievalQA
from langchain.text_splitter import RecursiveCharacterTextSplitter
# 准备带有 IPCC 报告的向量存储(FAISS)
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=100, add_start_index=True)
loader = PyPDFLoader("https://www.ipcc.ch/report/ar6/syr/downloads/report/IPCC_AR6_SYR_LongerReport.pdf")
db = FAISS.from_documents(loader.load_and_split(text_splitter), OpenAIEmbeddings())
# 准备 QA 链
PROMPT_TEMPLATE = """您是气候助理,由 Giskard 制作的有用的 AI 助理。
您的任务是回答有关气候变化的常见问题。
您将收到一个问题和来自 IPCC 气候变化综合报告(2023)的相关摘录。
请根据提供的上下文提供简短而清晰的回答。要礼貌和乐于助人。
上下文:
{context}
问题:
{question}
您的回答:
"""
llm = OpenAI(model="gpt-3.5-turbo-instruct", temperature=0)
prompt = PromptTemplate(template=PROMPT_TEMPLATE, input_variables=["question", "context"])
climate_qa_chain = RetrievalQA.from_llm(llm=llm, retriever=db.as_retriever(), prompt=prompt)
2. 🔎 扫描您的模型以查找问题
接下来,将您的代理包装以准备对 Giskard 进行扫描:
import giskard
import pandas as pd
def model_predict(df: pd.DataFrame):
"""将 LLM 调用包装在一个简单的 Python 函数中。
该函数需要一个包含模型所需输入变量的 pandas.DataFrame,并且必须返回输出的列表(每行一个输出)。
"""
return [climate_qa_chain.run({"query": question}) for question in df["question"]]
# 别忘了填写 `name` 和 `description`:Giskard 会用它们来生成特定领域的测试。
giskard_model = giskard.Model(
model=model_predict,
model_type="text_generation",
name="气候变化问答",
description="该模型根据 IPCC 报告回答有关气候变化的任何问题",
feature_names=["question"],
)
✨✨✨ 然后运行 Giskard 的神奇扫描 ✨✨✨
scan_results = giskard.scan(giskard_model)
扫描完成后,您可以直接在笔记本中显示结果:
display(scan_results)
# 或将其保存到文件
scan_results.to_html("scan_results.html")
如果遇到问题,请查阅我们的 文档 以获取更多信息。
3. 🪄 自动为 RAG 应用生成评估数据集
如果扫描发现了模型中的问题,您可以根据发现的问题自动提取评估数据集:
test_suite = scan_results.generate_test_suite("我的第一个测试套件")
默认情况下,RAGET 自动生成 6 种不同类型的问题(如有需要可以选择,见高级问题生成)。问题的总数在每种问题类型之间平均分配。为使问题生成更加相关和准确,您还可以提供描述代理的描述。
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"])
# 为每种问题类型生成 10 个问题和答案的测试集(这将需要一些时间)
testset = generate_testset(
knowledge_base,
num_questions=60,
language='en', # 可选,如果未提供,我们将自动检测
agent_description="一个为公司 X 设计的客户支持聊天机器人", # 有助于生成更好的问题
)
根据生成问题的数量,这可能需要一些时间。完成后,您可以将生成的测试集保存以供将来使用:
# 保存生成的测试集
testset.save("my_testset.jsonl")
您可以轻松加载它
from giskard.rag import QATestset
loaded_testset = QATestset.load("my_testset.jsonl")
# 将其转换为 pandas dataframe
df = loaded_testset.to_pandas()
以下是生成的问题示例:
question | reference_context | reference_answer | metadata |
---|---|---|---|
我可以追踪哪些国家的货物? | 文件 1:我们对所有超过 50 美元的订单提供免费送货。对于低于 50 美元的订单,我们收取 5.99 美元的固定费用。我们为居住在美国所有 50 个州的客户提供送货服务,此外还提供到加拿大和墨西哥的送货选项。文件 2:一旦您的购买成功确认并发货,您将收到包含跟踪号码的确认电子邮件。您只需点击电子邮件中提供的链接或访问我们网站的订单跟踪页面。 | 我们向美国所有 50 个州以及加拿大和墨西哥发货。我们为所有货物提供追踪。 | {"question_type": "simple", "seed_document_id": 1, "topic": "Shipping policy"} |
测试集的每一行包含 5 列:
question
:生成的问题reference_context
:可用于回答问题的上下文reference_answer
:问题的答案(由 GPT-4 生成)conversation_history
:未在上表中显示,包含与代理的对话历史作为列表,仅对对话问题相关,否则包含一个空列表。metadata
:一个包含有关问题的各种元数据的字典,这包括 question_type,seed_document_id 用于生成问题的文档的 id 和问题的主题
👋 社区
我们欢迎来自 AI 社区的贡献!阅读本 指南 以开始,并加入我们的 Discord 上蓬勃发展的社区。
🌟 给我们一个星星,这有助于其他人发现这个项目,并激励我们构建出色的开源工具!🌟
❤️ 如果您发现我们的工作有用,请考虑在 GitHub 上 赞助我们。通过每月赞助,您可以获得赞助徽章,在此 readme 中显示您的公司,并优先处理您的错误报告。如果您希望我们参与咨询项目、举办工作坊或在您的公司进行演讲,我们还提供一次性赞助。