ARTKIT est un framework Python développé par BCG X pour automatiser les tests et l'évaluation basés sur des invites des applications Gen AI.
ARTKIT est un framework Python permettant de développer des pipelines de tests et d'évaluation automatisés de bout en bout pour les applications Gen AI. En tirant parti de modèles flexibles de Gen AI pour automatiser les étapes clés du processus de test et d’évaluation, les pipelines ARTKIT s’adaptent facilement pour répondre aux besoins de test et d’évaluation d’une grande variété de systèmes Gen AI.
ARTKIT prend également en charge les conversations automatisées à plusieurs tours entre un robot challenger et un système cible. Les problèmes et les vulnérabilités sont plus susceptibles de survenir après des interactions prolongées avec les systèmes Gen AI. Les tests multitours sont donc essentiels pour les applications interactives.
Nous vous recommandons de commencer par notre guide de l'utilisateur pour découvrir les concepts et fonctionnalités de base d'ARTKIT. Consultez nos exemples pour voir comment ARTKIT peut être utilisé pour tester et évaluer les systèmes Gen AI pour :
Ce ne sont là que quelques exemples des nombreuses façons dont ARTKIT peut être utilisé pour tester et évaluer les systèmes Gen AI en termes de compétence, d’équité, de sûreté et de sécurité.
La beauté d'ARTKIT est qu'il vous permet de faire beaucoup avec peu : quelques fonctions et classes simples prennent en charge le développement de pipelines rapides, flexibles et adaptés pour tester et évaluer votre système Gen AI. Les principales fonctionnalités incluent :
Note
ARTKIT est conçu pour être personnalisé par des scientifiques des données et des ingénieurs afin d'améliorer les tests et l'évaluation de l'humain dans la boucle. Nous ne proposons intentionnellement pas de solution « bouton-poussoir », car l'expérience nous a appris que des tests et des évaluations efficaces doivent être adaptés à chaque cas d'utilisation de la génération IA. L'automatisation est une stratégie visant à faire évoluer et à accélérer les tests et l'évaluation, et ne remplace pas la cartographie du paysage des risques spécifiques à un cas, l'expertise du domaine et la pensée critique.
ARTKIT fournit une prise en charge prête à l'emploi pour les fournisseurs de modèles suivants :
Pour se connecter à d'autres services, les utilisateurs peuvent développer de nouvelles classes de modèles.
ARTKIT prend en charge les installations PyPI et Conda. Nous vous recommandons d'installer ARTKIT dans un environnement virtuel dédié.
MacOS et Linux :
python -m venv artkit source artkit/bin/activer pip installer artkit
Fenêtres :
python -m venv artkit artkitScriptsactivate.bat pip installer artkit
conda install -c conda-forge artkit
Pour activer les visualisations des diagrammes de flux de pipeline, installez GraphViz et assurez-vous qu'il se trouve dans la variable PATH de votre système :
dot -V
dans le terminal ou l'invite de commande pour vérifier l'installation. La plupart des utilisateurs d'ARTKIT devront accéder aux services de fournisseurs de modèles externes tels que OpenAI ou Hugging Face.
Notre approche recommandée est la suivante :
python-dotenv
en utilisant pip
:pip installer python-dotenv
ou conda
:
conda install -c conda-forge python-dotenv
.env
à la racine de votre projet..env
à votre .gitignore
pour vous assurer qu'il n'est pas validé dans votre dépôt Git..env
, par exemple, 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' )
Le référentiel ARTKIT inclut un exemple de fichier appelé .env_example
à la racine du projet qui fournit un modèle pour définir les variables d'environnement, y compris les informations d'identification d'espace réservé pour les API prises en charge.
Pour encourager le stockage sécurisé des informations d'identification, les classes de modèles ARTKIT n'acceptent pas directement les informations d'identification de l'API, mais nécessitent plutôt la définition de variables environnementales. Par exemple, si votre clé API OpenAI est stockée dans une variable d'environnement appelée OPENAI_API_KEY
, vous pouvez initialiser une classe de modèle OpenAI comme ceci :
import artkit . api as ak
ak . OpenAIChat (
model_id = "gpt-4o" ,
api_key_env = "OPENAI_API_KEY"
)
La variable api_key_env
accepte le nom de la variable d'environnement sous forme de chaîne au lieu d'accepter directement une clé API comme paramètre, ce qui réduit le risque d'exposition accidentelle des clés API dans les référentiels de code puisque la clé n'est pas stockée en tant qu'objet Python pouvant être imprimé. .
Les fonctions principales d'ARTKIT sont :
run
: Exécuter une ou plusieurs étapes du pipelinestep
: une seule étape de pipeline qui produit un dictionnaire ou un itérable de dictionnaireschain
: un ensemble d'étapes qui s'exécutent en séquenceparallel
: un ensemble d'étapes exécutées en parallèleCi-dessous, nous développons un exemple simple de pipeline avec les étapes suivantes :
Pour commencer, importez artkit.api
et configurez une session avec le modèle OpenAI GPT-4o. Le code ci-dessous suppose que vous disposez d'une clé API OpenAI stockée dans une variable d'environnement appelée OPENAI_API_KEY
et que vous souhaitez mettre en cache les réponses dans une base de données appelée 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"
)
Ensuite, définissez quelques fonctions qui seront utilisées comme étapes du pipeline. ARTKIT est conçu pour fonctionner avec des générateurs asynchrones afin de permettre un traitement asynchrone. Les fonctions ci-dessous sont donc définies avec les mots-clés async
, await
et 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 ])}
Ensuite, définissez un pipeline qui reformule une invite de saisie selon deux tons différents (poli et sarcastique), envoie les invites reformulées à AskChad et enfin évalue les réponses pour le sarcasme.
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 ()
Enfin, exécutez le pipeline avec une invite de saisie et affichez les résultats dans un tableau.
# 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 ()
De gauche à droite, le tableau des résultats montre :
input
: l'invite de saisie d'originetone_rephraser
: les invites reformulées, qui reformulent l'invite d'origine pour avoir le ton spécifiéask_chad
: La réponse d'AskChad, qui reflète le ton de l'utilisateurevaluation
: Le score d'évaluation pour la métrique SARCASTIC, qui signale la réponse sarcastique avec un 1Pour une introduction complète à ARTKIT, veuillez consulter notre guide de l'utilisateur et nos exemples.
Les contributions à ARTKIT sont les bienvenues et appréciées ! Veuillez consulter la section Guide du contributeur pour plus d'informations.
Ce projet est sous licence Apache 2.0, permettant une utilisation, une modification et une distribution gratuites avec des protections supplémentaires contre les litiges en matière de brevets. Consultez le fichier LICENSE pour plus de détails ou visitez Apache 2.0.
BCG X est l'unité de construction et de conception technologique du Boston Consulting Group.
Nous sommes toujours à la recherche de data scientists et d'ingénieurs logiciels talentueux pour rejoindre notre équipe ! Visitez BCG X Careers pour en savoir plus.