ARTKIT 开源程序是由 BCG X 开发的 Python 框架,用于自动对 Gen AI 应用程序进行基于提示的测试和评估。
一、软件介绍
文末提供源码和程序下载
ARTKIT 是一个 Python 框架,用于为 Gen AI 应用程序开发自动化的端到端测试和评估管道。通过利用灵活的 Gen AI 模型来自动化测试和评估过程中的关键步骤,ARTKIT 管道很容易适应各种 Gen AI 系统的测试和评估需求。
ARTKIT 还支持挑战者机器人和目标系统之间的自动多轮次对话。在与 Gen AI 系统进行长时间交互后,更有可能出现问题和漏洞,因此多轮次测试对于交互式应用程序至关重要。
我们建议从我们的用户指南开始,了解 ARTKIT 的核心概念和功能。请访问我们的示例,了解如何使用 ARTKIT 来测试和评估 Gen AI 系统:
Q&A 准确性:
从真实文档生成 Q&A 黄金数据集,增强问题以模拟用户输入的变化,并评估系统响应的忠实度、完整性和相关性。
维护品牌价值观:
实施基于角色的测试,以模拟与您的系统交互的不同用户,并评估系统响应的品牌一致性。
公平性:
通过系统地修改一组文档中的人口统计指标来运行反事实实验,并统计评估系统响应是否存在不需要的人口统计偏差。
安全:
使用对抗性提示增强来加强从提示库中提取的对抗性提示,并评估系统响应是否拒绝与对抗性输入互动。
安全:
使用多轮次攻击者执行多轮次策略,从聊天机器人中提取系统提示,挑战系统对及时泄露的防御。
这些只是 ARTKIT 可用于测试和评估 Gen AI 系统熟练程度、公平性、安全性和保障性的众多方式中的几个示例。
二、主要特点
ARTKIT 的美妙之处在于,它允许您事半功倍:一些简单的函数和类支持开发快速、灵活、适合用途的管道,用于测试和评估您的 Gen AI 系统。主要功能包括:
- 简单的 API:ARTKIT 提供了一小部分简单但功能强大的功能,支持自定义管道来测试和评估几乎任何 Gen AI 系统。
- 异步:利用异步处理来加速严重依赖 API 调用的流程。
- 缓存:通过缓存 API 响应来管理开发成本,以减少对外部服务的调用次数。
- 与模型无关:ARTKIT 支持连接到主要的 Gen AI 模型提供商,并允许用户开发新的模型类以连接到任何 Gen AI 服务。
- 端到端管道:构建端到端流程以生成测试提示、与目标系统(即正在测试的系统)交互、执行定量评估以及构建结果以进行报告。
- 多轮对话:在目标系统和LLM编程为与目标系统交互以追求特定目标的角色之间创建自动交互式对话。
- 强大的数据流:通过测试和评估管道自动跟踪数据流,促进结果中数据沿袭的完全可追溯性。
- 可视化:生成流程图以可视化管道结构并验证通过系统的数据流。
注意
ARTKIT 旨在由数据科学家和工程师进行定制,以增强人在回路的测试和评估。我们特意不提供“按钮式”解决方案,因为经验告诉我们,必须针对每个 Gen AI 用例量身定制有效的测试和评估。自动化是一种扩展和加速测试和评估的策略,不能替代特定于案例的风险态势映射、领域专业知识和批判性思维。
支持的模型提供程序
ARTKIT provides out-of-the-box support for the following model providers:
- Anthropic
- AWS Bedrock
- Google's Gemini and Vertex AI
- Grok
- Hugging Face
- Microsoft Azure
- OpenAI
ARTKIT 还支持使用以下开源服务器部署的模型:- vLLM < https://docs.vllm.ai/en/latest/> - Ollama < https://ollama.com/>
要连接到其他服务,用户可以开发新的模型类。
三、安装
ARTKIT 支持 PyPI 和 Conda 安装。我们建议在专用虚拟环境中安装 ARTKIT。
果仁
MacOS 和 Linux:
python -m venv artkit
source artkit/bin/activate
pip install artkit
窗户:
python -m venv artkit
artkit\Scripts\activate.bat
pip install artkit
康达
conda install -c conda-forge artkit
可选依赖项
要启用管道流程图的可视化,请安装 GraphViz 并确保它位于系统的 PATH 变量中:
对于 MacOS 和 Linux 用户,GraphViz 下载中提供的说明会自动将 GraphViz 添加到您的路径中。
Windows 用户可能需要手动将 GraphViz 添加到您的 PATH 中(请参阅简化的 Windows 安装程序)。
在终端或命令提示符下运行 dot -V 以验证安装。
环境变量
大多数 ARTKIT 用户需要从外部模型提供商(如 OpenAI 或 Hugging Face)访问服务。
我们推荐的方法是:
安装 python-dotenv 方式 pip :
pip install python-dotenv
或 conda :
conda install -c conda-forge python-dotenv
创建一个在项目根目录中命名 .env 的文件。
Add .env to your .gitignore 以确保它不会提交到您的 Git 存储库。
在 中 .env 定义环境变量,例如, API_KEY=your_api_key
在 Python 脚本或笔记本中,使用以下命令加载环境变量:
from dotenv import load_dotenv
load_dotenv()
# Verify that the environment variable is loaded
import os
os.getenv('YOUR_API_KEY')
ARTKIT 存储库包括一个在项目根目录中调用 .env_example 的示例文件,该文件提供了用于定义环境变量的模板,包括受支持 API 的占位符凭据。
为了鼓励安全存储凭据,ARTKIT 模型类不直接接受 API 凭据,而是需要定义环境变量。例如,如果您的 OpenAI API 密钥存储在名为 OPENAI_API_KEY 的环境变量中,您可以像这样初始化 OpenAI 模型类:
import artkit.api as ak
ak.OpenAIChat(
model_id="gpt-4o",
api_key_env="OPENAI_API_KEY"
)
该 api_key_env 变量接受环境变量的名称作为字符串,而不是直接接受 API 密钥作为参数,这降低了 API 密钥在代码存储库中意外暴露的风险,因为密钥不会存储为可以打印的 Python 对象。
快速开始
ARTKIT 的核心功能包括:
- run :执行一个或多个管道步骤
- step :生成字典或字典可迭代对象的单个管道步骤
- chain :按顺序运行的一组步骤
- parallel :并行运行的一组步骤
下面,我们开发一个简单的示例管道,其中包含以下步骤:
- 将输入提示改写为具有指定的语气,“礼貌”或“讽刺”
- 将改写后的提示发送到名为 AskChad 的聊天机器人,该机器人经过编程以反映用户的语气
- 根据 “sarcasm” 指标评估响应
首先,导入 artkit.api 并使用 OpenAI GPT-4o 模型设置会话。下面的代码假设您有一个 OpenAI API 密钥存储在名为 OPENAI_API_KEY 的环境变量中,并且您希望将响应缓存在名为 cache/chat_llm.db .
import artkit.api as ak
# Set up a chat system with the OpenAI GPT-4o model
chat_llm = ak.CachedChatModel(
model=ak.OpenAIChat(model_id="gpt-4o"),
database="cache/chat_llm.db"
)
接下来,定义一些将用作管道步骤的函数。ARTKIT 旨在与异步生成器配合使用,以允许异步处理,因此以下函数使用 async 、 await 和 yield 关键字定义。
# A function that rephrases input prompts to have a specified tone
async def rephrase_tone(prompt: str, tone: str, llm: ak.ChatModel):
response = await llm.get_response(
message = (
f"Your job is to rephrase in input question to have a {tone} tone.\n"
f"This is the question you must rephrase:\n{prompt}"
)
)
yield {"prompt": response[0], "tone": tone}
# A function that behaves as a chatbot named AskChad who mirrors the user's tone
async def ask_chad(prompt: str, llm: ak.ChatModel):
response = await llm.get_response(
message = (
"You are AskChad, a chatbot that mirrors the user's tone. "
"For example, if the user is rude, you are rude. "
"Your responses contain no more than 10 words.\n"
f"Respond to this user input:\n{prompt}"
)
)
yield {"response": response[0]}
# A function that evaluates responses according to a specified metric
async def evaluate_metric(response: str, metric: str, llm: ak.ChatModel):
score = await llm.get_response(
message = (
f"Your job is to evaluate prompts according to whether they are {metric}. "
f"If the input prompt is {metric}, return 1, otherwise return 0.\n"
f"Please evaluate the following prompt:\n{response}"
)
)
yield {"evaluation_metric": metric, "score": int(score[0])}
接下来,定义一个管道,该管道根据两种不同的语气(礼貌和讽刺)重新表述输入提示,将重新表述的提示发送到 AskChad,最后评估响应是否具有讽刺意味。
pipeline = (
ak.chain(
ak.parallel(
ak.step("tone_rephraser", rephrase_tone, tone="POLITE", llm=chat_llm),
ak.step("tone_rephraser", rephrase_tone, tone="SARCASTIC", llm=chat_llm),
),
ak.step("ask_chad", ask_chad, llm=chat_llm),
ak.step("evaluation", evaluate_metric, metric="SARCASTIC", llm=chat_llm)
)
)
pipeline.draw()
最后,使用输入提示运行管道,并在表中显示结果。
# Input to run through the pipeline
prompt = {"prompt": "What is a fun activity to do in Boston?"}
# Run pipeline
result = ak.run(steps=pipeline, input=prompt)
# Convert results dictionary into a multi-column dataframe
result.to_frame()
结果表从左到右显示:
- input :原始输入提示
- tone_rephraser :改写后的提示,将原始提示改写为具有指定的语气
- ask_chad :来自 AskChad 的响应,它反映了用户的语气
- evaluation :SARCASTIC 指标的评估分数,该指标用 1 标记讽刺响应
软件下载
夸克网盘分享
本文信息来源于GitHub作者地址:https://github.com/BCG-X-Official/artkit