ARTKIT是由 BCG X 开发的 Python 框架,用于自动化 Gen AI 应用程序的基于提示的测试和评估。
ARTKIT 是一个 Python 框架,用于为 Gen AI 应用程序开发自动化的端到端测试和评估管道。通过利用灵活的 Gen AI 模型自动执行测试和评估过程中的关键步骤,ARTKIT 管道可以轻松适应各种 Gen AI 系统的测试和评估需求。
ARTKIT 还支持挑战者机器人和目标系统之间的自动多轮对话。与 Gen AI 系统进行长时间交互后更有可能出现问题和漏洞,因此多轮测试对于交互式应用程序至关重要。
我们建议从我们的用户指南开始学习 ARTKIT 的核心概念和功能。请访问我们的示例,了解如何使用 ARTKIT 来测试和评估 Gen AI 系统:
这些只是 ARTKIT 可用于测试和评估 Gen AI 系统的熟练程度、公平性、安全性和保障性的多种方式的几个示例。
ARTKIT 的美妙之处在于它可以让您用很少的资源做很多事情:一些简单的函数和类支持开发快速、灵活、适合用途的管道,用于测试和评估您的 Gen AI 系统。主要特点包括:
笔记
ARTKIT 旨在由数据科学家和工程师定制,以增强人在环测试和评估。我们故意不提供“按钮”解决方案,因为经验告诉我们,有效的测试和评估必须针对每个 Gen AI 用例进行定制。自动化是一种扩展和加速测试和评估的策略,而不是替代特定案例的风险景观图、领域专业知识和批判性思维。
ARTKIT 为以下模型提供者提供开箱即用的支持:
要连接到其他服务,用户可以开发新的模型类。
ARTKIT 支持 PyPI 和 Conda 安装。我们建议在专用的虚拟环境中安装 ARTKIT。
MacOS 和 Linux:
python -m venv artkit 源 artkit/bin/activate pip 安装 artkit
视窗:
python -m venv artkit artkit脚本activate.bat pip 安装 artkit
conda 安装-c conda-forge artkit
要启用管道流程图的可视化,请安装 GraphViz 并确保它位于系统的 PATH 变量中:
dot -V
以验证安装。 大多数 ARTKIT 用户需要访问外部模型提供商(例如 OpenAI 或 Hugging Face)的服务。
我们推荐的方法是:
pip
安装python-dotenv
:pip 安装 python-dotenv
或conda
:
conda 安装-c conda-forge python-dotenv
.env
的文件。.env
添加到您的.gitignore
以确保它不会提交到您的 Git 存储库。.env
中定义环境变量,例如API_KEY=your_api_key
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
:一组并行运行的步骤下面,我们通过以下步骤开发一个简单的示例管道:
首先,导入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标记讽刺反应有关 ARTKIT 的完整介绍,请访问我们的用户指南和示例。
欢迎并感谢对 ARTKIT 的贡献!请参阅贡献者指南部分以获取信息。
该项目根据 Apache 2.0 获得许可,允许免费使用、修改和分发,并增加了针对专利诉讼的保护。有关更多详细信息,请参阅许可证文件或访问 Apache 2.0。
BCG X 是波士顿咨询集团的技术构建和设计部门。
我们一直在寻找有才华的数据科学家和软件工程师加入我们的团队!请访问 BCG X 职业以了解更多信息。