使用Giskard进行LLM的测试

Giskard是一个对AI模型进行测试的平台,可以执行功能验证、安全测试及合规扫描。工具主要分为两大块:Giskard Python库和一个server端Giskard Hub。其中Python库是开源的,github地址:https://github.com/Giskard-AI/giskard

使用Giskard的可以按照如下步骤进行测试:

1. 加载数据集进行功能验证;

2. 配置相关类型漏洞,进行安全漏洞扫描;

3. 生成测试报告,进行问题确认;

4. 针对问题生成测试用例;

5. 引入第三方LLM进行比对验证。

除了LLM,Giskard还支持NLP、视觉相关的模型测试,下面以LLM测试为例介绍Giskard的快速入门。使用Giskard Python库编写测试代码,就像把大象塞入冰箱一样“简单”:

  • 封装Giskard模型
  • 调用该模型的扫描
  • 生成测试报告

封装Giskard模型

不能直接对LLM进行测试,需要进行封装才能做下一步操作。首先下载依赖的库:

pip install "giskard[llm]" --upgrade
pip install "langchain<=0.0.301" "pypdf<=3.17.0" "faiss-cpu<=1.7.4" "openai<=0.28.1" "tiktoken<=0.5.1"

笔者实践中发现faiss的安装推荐Python版本是3.11以下,且在windows环境下装的是cpu版faiss。

设置好OpenAI API key如下:

import os# Set the OpenAI API Key environment variable.
os.environ["OPENAI_API_KEY"] = "sk-..."

此处的目的是使用OpenAI的API来进行用例或测试数据生成的模型,也可以使用其他比如ollama的模型,具体文档见这。

接下来就可以搭建自己的测试LLM,如下使用langchain搭建起来:

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# Prepare vector store (FAISS) with IPPC report
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())# Prepare QA chain
PROMPT_TEMPLATE = """You are the Climate Assistant, a helpful AI assistant made by Giskard.
Your task is to answer common questions on climate change.
You will be given a question and relevant excerpts from the IPCC Climate Change Synthesis Report (2023).
Please provide short and clear answers based on the provided context. Be polite and helpful.Context:
{context}Question:
{question}Your answer:
"""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)# Test that everything works
climate_qa_chain.run({"query": "Is sea level rise avoidable? When will it stop?"})

然后进行Giskard模型的封装:

import giskard
import pandas as pddef model_predict(df: pd.DataFrame):"""Wraps the LLM call in a simple Python function.The function takes a pandas.DataFrame containing the input variables neededby your model, and must return a list of the outputs (one for each row)."""return [climate_qa_chain.run({"query": question}) for question in df["question"]]# Don’t forget to fill the `name` and `description`: they are used by Giskard
# to generate domain-specific tests.
giskard_model = giskard.Model(model=model_predict,model_type="text_generation",name="Climate Change Question Answering",description="This model answers any question about climate change based on IPCC reports",feature_names=["question"],
)

调用扫描

调用giskard的scan方法进行扫描。only参数用来控制扫描漏洞的类别,文档中为了减少耗时,只设置了hallucination用来扫描LLM幻觉相关漏洞。如果不设置就是全范围的扫描。

report = giskard.scan(giskard_model, giskard_dataset, only="hallucination")

生成报告

简单调用方法就可以生成报告:

display(full_report)# Save it to a file
full_report.to_html("scan_report.html")

也可以生成markdown类型的报告:

display(full_report)# Save it to a file
full_report.to_markdown("scan_report.md")

还能通过报告生成针对的测试用例集:

test_suite = full_report.generate_test_suite(name="Test suite generated by scan")
test_suite.run()

Giskard的Python库还能和Pytest框架集成,编写测试用例脚本。具体可以查看文档:https://docs.giskard.ai/en/stable/integrations/pytest/index.html。

示例代码:

import pytestfrom giskard import Dataset, Model, Suite, demo
from giskard.testing import test_accuracy, test_f1model_raw, df = demo.titanic()wrapped_dataset = Dataset(name="Test Data Set",df=df,target="Survived",cat_columns=["Pclass", "Sex", "SibSp", "Parch", "Embarked"],
)wrapped_model = Model(model=model_raw, model_type="classification", name="Classifier v1")suite = (Suite(default_params={"model": wrapped_model,"dataset": wrapped_dataset,}).add_test(test_f1(threshold=0.6)).add_test(test_accuracy(threshold=1))  # Certain to fail
)@pytest.fixture
def dataset():return wrapped_dataset@pytest.fixture
def model():return wrapped_model# Single wrapped test
def test_only_accuracy(dataset, model):test_accuracy(model=model, dataset=dataset, threshold=1).assert_()# Parametrise tests from suite
@pytest.mark.parametrize("test_partial", suite.to_unittest(), ids=lambda t: t.fullname)
def test_giskard(test_partial):test_partial.assert_()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/10566.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(delphi11最新学习资料) Object Pascal 学习笔记---第11章第2节 (从接口引用中提取对象)

11.2.5 从接口引用中提取对象 ​ 在过去多个Object Pascal 语言版本中&#xff0c;当你将一个对象赋值给一个接口变量时&#xff0c;是无法访问原始对象的。有时&#xff0c;开发人员会在接口中添加一个 GetObject 方法来执行该操作&#xff0c;但这种设计非常奇怪。 ​ 在今…

华为校招机试 - 模拟汇编计算(20240508)

题目描述 要求设计一种虚拟机解释器,能解析并执行以下虚拟指令。 虚拟机约定: 32位的整型寄存器有 a0,a1,... ,a31 共 32 个寄存器整个虚拟机只有寄存器和立即数参与计算规则集: dst一定为寄存器src为寄存器或十进制正整数运算结果存在负数场景序号虚拟指令含义1MOV dst…

Unity读书系列《Unity高级编程:主程手记》——C#技术要点

文章目录 前言一、业务逻辑优化技巧二、Unity3d中C#的底层原理三、List底层源码剖析四、Dictionary底层源码剖析五、浮点数的精度问题六、委托、事件、装箱、拆箱七、算法总结 前言 本文旨在总结某一概念的性质&#xff0c;并引出相关的技术要点。如果读者希望深入了解相关技术…

docker部署调度程序

Dockerfile(构建初始镜像) # python:3.8-slim-buster为精简版的python FROM python:3.8-slim-buster # 1059为组的id,newgroup为组名,1088为用户的id,newuser为新用户 RUN groupadd -g 1059 newgroup && \useradd -g -u 1088 -g newgroup -m newuser USER newuser RUN…

Python函数和代码复用-课堂练习[python123题库]

函数和代码复用-课堂练习 1、来自计算机的问候-无参无返回值函数 类型&#xff1a;函数‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪…

react 屏幕信息滚动

1. 引入组件 import DoScrollingbar from @/components/basic/DoScrollingbar; 2.使用组件 <DoScrollingbar>{flightInfo.historytoday && flightInfo.historytoday.map(item => {return <div><div><span style={{ paddingRight: "10px&q…

如何根据招聘信息打造完美简历

如何根据招聘信息打造完美简历 招聘信息分析简历调整策略个性化与关键词结语 在求职过程中&#xff0c;简历是第一块敲门砖。它不仅展示了你的专业技能和工作经验&#xff0c;还体现了你对所申请职位的理解和热情。然而&#xff0c;如何从招聘信息中提炼关键点&#xff0c;打造…

如何在 Ubuntu 上创建一个 SSH CA 以验证主机和客户端

简介 在配置大量具有许多用户的服务器时&#xff0c;保持基础架构的 SSH 访问一致可能会变得复杂。有许多实现集中式身份验证机构的方法&#xff0c;例如 LDAP&#xff0c;但有时这些方法可能过于复杂。 SSH 实际上具有使用证书机构对服务器和客户端进行身份验证的功能。这种…

chatGLM或chatgpt:什么是tokens以及如何计算tokens长度?

token是什么? 简单的来说tokens就是大语言模型输入的向量数据,它是从原始的文本转化而来。 比如 输入:here is a text demo tokens为:[64790, 64792, 985, 323, 260, 2254, 16948] 解码:将tokens转化为文本 [‘[gMASK]’, ‘sop’, ‘▁here’, ‘▁is’, ‘▁a’, ‘▁…

mysql --- 内置函数

MySQL数据库提供了一系列内置函数&#xff0c;这些函数可以在SQL查询中使用&#xff0c;以执行计算、格式化数据、处理字符串、日期和时间等操作。这些函数可以大致分为几个类别&#xff1a;字符串函数、数值函数、日期和时间函数、控制流程函数、加密和压缩函数等。下面是一些…

神经网络模型与前向传播函数

1.概念 在神经网络中&#xff0c;模型和前向传播函数是紧密相关的概念。模型定义了网络的结构&#xff0c;而前向传播函数描述了数据通过网络的流动方式。以下是这两个概念的详细解释&#xff1a; 1.1 神经网络模型 神经网络模型是指构成神经网络的层、权重、偏置和连接的集…

SpringBoot拦截器中使用RedisTemplate

这几天想着把登陆拦截器的验证规则修改一下&#xff0c;验证介质由session中获取改为从redis中获取&#xff0c;结果发现redisTemplate一直为空&#xff0c; Configuration public class WebInterceptorConfig implements WebMvcConfigurer {Overridepublic void addIntercept…

源码知识付费系统,在线教学平台需要优化什么?

在线教育关于广大的关注者而言属于快捷度非常高的传达途径&#xff0c;尤其是白日没有过多时间的上班族或学习繁忙的学生&#xff0c;均能够通过可靠的在线教育完结自己的目的。如此巨大的市场潜力使得以在线教育为主的公司数量呈现出直线上升的趋势&#xff0c;很多的在线教育…

零基础掌握Kafka

Apache Kafka是当前最流行的分布式流处理平台之一&#xff0c;由LinkedIn开发并于2011年开源。它被设计用于高吞吐量、低延迟的场景&#xff0c;广泛应用于日志收集、流处理、事件源等多种场合。本文将带你从零开始学习Kafka&#xff0c;并通过Java代码示例展示如何发送消息。 …

scrapy的入门

今天我们先学习一下scrapy的入门,Scrapy是一个快速的高层次的网页爬取和网页抓取框架&#xff0c;用于爬取网站并从页面中提取结构化的数据。 1. scrapy的概念和流程 1.1 scrapy的概念 我们先来了解一下scrapy的概念,什么是scrapy: Scrapy是一个Python编写的开源网络爬虫框架…

AI学习指南概率论篇-贝叶斯推断

AI学习指南概率论篇-贝叶斯推断 概述 在人工智能中&#xff0c;贝叶斯推断是一种基于贝叶斯统计理论的推理方法。它通过使用概率论的知识&#xff0c;结合先验信息和观测数据&#xff0c;来更新对未知变量的推断。贝叶斯推断提供了一种合理的方法来处理不确定性&#xff0c;并…

ubuntu 相关操作

ubunt-desktop卸载重安 sudo apt-get purge ^gnome-.* sudo apt-get autoremove --purge sudo apt-get update sudo apt-get install ubuntu-desktop清理 # 检查日志大小 journalctl --disk-usage# 只保留一周的日志 sudo journalctl --vacuum-time1w# 只保留500MB的日志 …

JS遍历数组的十种方法总结

​​​ 目录 一、for 循环遍历 二、for ... of 方法 三、for...in循环 四、forEach 遍历 五、map 映射 六、filter方法 七、reduce高阶函数&#xff08;迭代&#xff08;累加器&#xff09;&#xff09; 八、every 九、some 十、find 一、for 循环遍历 for循环是最…

Mac 双网卡

Mac 使用了双网卡, 一个网线, 一个WIFI. 局域网走一个网卡, ip 段是 192.168.10.0/24外网走一个网卡, ip 段是 192.168.50.0/24 1. 添加静态路由 为局域网添加静态路由, 192.168.10.0/24 无需为自己这个段添加静态路由. 在局域网中, 如果还有其他的网段(例如 192.168.20.0/…

WebSocket前后端建立以及使用

1、什么是WebSocket WebSocket 是一种在 Web 应用程序中实现双向通信的协议。它提供了一种持久化的连接&#xff0c;允许服务器主动向客户端推送数据&#xff0c;同时也允许客户端向服务器发送数据&#xff0c;实现了实时的双向通信。 这部分直接说你可能听不懂&#xff1b;我…