ARTKIT es un marco de Python desarrollado por BCG X para automatizar pruebas y evaluaciones basadas en indicaciones de aplicaciones Gen AI.
ARTKIT es un marco de Python para desarrollar procesos automatizados de prueba y evaluación de un extremo a otro para aplicaciones Gen AI. Al aprovechar los modelos flexibles de Gen AI para automatizar pasos clave en el proceso de prueba y evaluación, los procesos de ARTKIT se adaptan fácilmente para satisfacer las necesidades de prueba y evaluación de una amplia variedad de sistemas Gen AI.
ARTKIT también admite conversaciones automatizadas de varios turnos entre un robot retador y un sistema objetivo. Es más probable que surjan problemas y vulnerabilidades después de interacciones prolongadas con sistemas Gen AI, por lo que las pruebas de múltiples turnos son fundamentales para las aplicaciones interactivas.
Recomendamos comenzar con nuestra Guía del usuario para aprender los conceptos básicos y la funcionalidad de ARTKIT. Visite nuestros Ejemplos para ver cómo se puede utilizar ARTKIT para probar y evaluar sistemas Gen AI para:
Estos son solo algunos ejemplos de las muchas formas en que se puede utilizar ARTKIT para probar y evaluar la competencia, la equidad y la seguridad de los sistemas Gen AI.
La belleza de ARTKIT es que le permite hacer mucho con poco: algunas funciones y clases simples respaldan el desarrollo de canales rápidos, flexibles y adecuados para probar y evaluar su sistema Gen AI. Las características clave incluyen:
Nota
ARTKIT está diseñado para ser personalizado por científicos e ingenieros de datos para mejorar las pruebas y evaluaciones humanas. Intencionalmente no proporcionamos una solución "pulsador" porque la experiencia nos ha enseñado que las pruebas y evaluaciones efectivas deben adaptarse a cada caso de uso de Gen AI. La automatización es una estrategia para ampliar y acelerar las pruebas y evaluaciones, no un sustituto del mapeo del panorama de riesgos, la experiencia en el dominio y el pensamiento crítico de casos específicos.
ARTKIT proporciona soporte listo para usar para los siguientes proveedores de modelos:
Para conectarse a otros servicios, los usuarios pueden desarrollar nuevas clases de modelos.
ARTKIT admite instalaciones de PyPI y Conda. Recomendamos instalar ARTKIT en un entorno virtual dedicado.
Mac OS y Linux:
python -m venv kit de arte fuente artkit/bin/activar kit de instalación de pip
Ventanas:
python -m venv kit de arte artkitScriptsactivate.bat kit de instalación de pip
instalación de conda -c kit de arte conda-forge
Para habilitar visualizaciones de diagramas de flujo de tuberías, instale GraphViz y asegúrese de que esté en la variable PATH de su sistema:
dot -V
en la Terminal o en el Símbolo del sistema para verificar la instalación. La mayoría de los usuarios de ARTKIT necesitarán acceder a servicios de proveedores de modelos externos como OpenAI o Hugging Face.
Nuestro enfoque recomendado es:
python-dotenv
usando pip
:pip instala python-dotenv
o conda
:
instalación de conda -c conda-forge python-dotenv
.env
en la raíz de su proyecto..env
a su .gitignore
para asegurarse de que no esté comprometido en su repositorio de Git..env
, por ejemplo, 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' )
El repositorio ARTKIT incluye un archivo de ejemplo llamado .env_example
en la raíz del proyecto que proporciona una plantilla para definir variables de entorno, incluidas las credenciales de marcador de posición para las API compatibles.
Para fomentar el almacenamiento seguro de credenciales, las clases de modelo ARTKIT no aceptan credenciales API directamente, sino que requieren que se definan variables ambientales. Por ejemplo, si su clave API de OpenAI está almacenada en una variable de entorno llamada OPENAI_API_KEY
, puede inicializar una clase de modelo OpenAI como esta:
import artkit . api as ak
ak . OpenAIChat (
model_id = "gpt-4o" ,
api_key_env = "OPENAI_API_KEY"
)
La variable api_key_env
acepta el nombre de la variable de entorno como una cadena en lugar de aceptar directamente una clave API como parámetro, lo que reduce el riesgo de exposición accidental de las claves API en los repositorios de código, ya que la clave no se almacena como un objeto Python que se pueda imprimir. .
Las funciones principales de ARTKIT son:
run
: ejecutar uno o más pasos de la canalizaciónstep
: un único paso de canalización que produce un diccionario o un iterable de diccionarioschain
: conjunto de pasos que se ejecutan en secuenciaparallel
: un conjunto de pasos que se ejecutan en paraleloA continuación, desarrollamos un ejemplo simple de canalización con los siguientes pasos:
Para comenzar, importe artkit.api
y configure una sesión con el modelo OpenAI GPT-4o. El siguiente código supone que tiene una clave API de OpenAI almacenada en una variable de entorno llamada OPENAI_API_KEY
y que desea almacenar en caché las respuestas en una base de datos llamada 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"
)
A continuación, defina algunas funciones que se utilizarán como pasos del proceso. ARTKIT está diseñado para funcionar con generadores asíncronos para permitir el procesamiento asíncrono, por lo que las funciones siguientes se definen con las palabras clave async
, await
y 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 ])}
A continuación, defina una canalización que reformule un mensaje de entrada de acuerdo con dos tonos diferentes (educado y sarcástico), envíe los mensajes reformulados a AskChad y, finalmente, evalúe las respuestas en busca de sarcasmo.
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 ()
Finalmente, ejecute la canalización con un mensaje de entrada y muestre los resultados en una tabla.
# 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 izquierda a derecha, la tabla de resultados muestra:
input
: el mensaje de entrada originaltone_rephraser
: mensajes reformulados, que reformulan el mensaje original para tener el tono especificadoask_chad
: La respuesta de AskChad, que refleja el tono del usuario.evaluation
: la puntuación de evaluación de la métrica SARCÁSTICO, que marca la respuesta sarcástica con un 1Para obtener una introducción completa a ARTKIT, visite nuestra Guía del usuario y ejemplos.
¡Las contribuciones a ARTKIT son bienvenidas y apreciadas! Consulte la sección Guía del colaborador para obtener información.
Este proyecto tiene licencia Apache 2.0, lo que permite su uso, modificación y distribución gratuitos con protecciones adicionales contra litigios de patentes. Consulte el archivo de LICENCIA para obtener más detalles o visite Apache 2.0.
BCG X es la unidad de diseño y construcción tecnológica de Boston Consulting Group.
¡Siempre estamos buscando científicos de datos e ingenieros de software talentosos para unirse a nuestro equipo! Visite BCG X Careers para obtener más información.