ARTKIT é uma estrutura Python desenvolvida pelo BCG X para automatizar testes e avaliações baseados em prompts de aplicativos Gen AI.
ARTKIT é uma estrutura Python para desenvolver testes automatizados de ponta a ponta e pipelines de avaliação para aplicativos Gen AI. Ao aproveitar modelos flexíveis de Gen AI para automatizar etapas importantes no processo de teste e avaliação, os pipelines ARTKIT são prontamente adaptados para atender às necessidades de teste e avaliação de uma ampla variedade de sistemas Gen AI.
ARTKIT também oferece suporte a conversas automatizadas em várias voltas entre um bot desafiador e um sistema alvo. É mais provável que problemas e vulnerabilidades surjam após interações prolongadas com sistemas Gen AI, portanto, testes multivoltas são essenciais para aplicações interativas.
Recomendamos começar com nosso Guia do usuário para aprender os principais conceitos e funcionalidades do ARTKIT. Visite nossos exemplos para ver como o ARTKIT pode ser usado para testar e avaliar sistemas Gen AI para:
Estes são apenas alguns exemplos das muitas maneiras pelas quais o ARTKIT pode ser usado para testar e avaliar sistemas Gen AI quanto à proficiência, equidade, segurança e proteção.
A beleza do ARTKIT é que ele permite que você faça muito com pouco: algumas funções e classes simples suportam o desenvolvimento de pipelines rápidos, flexíveis e adequados à finalidade para testar e avaliar seu sistema Gen AI. Os principais recursos incluem:
Observação
O ARTKIT foi projetado para ser personalizado por cientistas e engenheiros de dados para aprimorar testes e avaliações humanos. Intencionalmente, não fornecemos uma solução de “botão de ação” porque a experiência nos ensinou que testes e avaliações eficazes devem ser adaptados a cada caso de uso da Gen AI. A automação é uma estratégia para dimensionar e acelerar testes e avaliações, e não um substituto para o mapeamento do cenário de risco específico de cada caso, a experiência no domínio e o pensamento crítico.
ARTKIT fornece suporte pronto para uso para os seguintes fornecedores de modelos:
Para se conectar a outros serviços, os usuários podem desenvolver novas classes de modelo.
ARTKIT suporta instalações PyPI e Conda. Recomendamos instalar o ARTKIT em um ambiente virtual dedicado.
MacOS e Linux:
python -m venv kit de arte fonte artkit/bin/ativar pip instalar kit de arte
Windows:
python -m venv kit de arte artkitScriptsactivate.bat pip instalar kit de arte
conda install -c conda-forge artkit
Para habilitar visualizações de diagramas de fluxo de pipeline, instale o GraphViz e certifique-se de que ele esteja na variável PATH do seu sistema:
dot -V
no Terminal ou Prompt de Comando para verificar a instalação. A maioria dos usuários do ARTKIT precisará acessar serviços de provedores de modelos externos, como OpenAI ou Hugging Face.
Nossa abordagem recomendada é:
python-dotenv
usando pip
:pip instalar python-dotenv
ou conda
:
conda install -c conda-forge python-dotenv
.env
na raiz do seu projeto..env
ao seu .gitignore
para garantir que ele não esteja comprometido com seu repositório Git..env
, por exemplo, 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' )
O repositório ARTKIT inclui um arquivo de exemplo chamado .env_example
na raiz do projeto que fornece um modelo para definir variáveis de ambiente, incluindo credenciais de espaço reservado para APIs suportadas.
Para incentivar o armazenamento seguro de credenciais, as classes de modelo ARTKIT não aceitam credenciais de API diretamente, mas exigem a definição de variáveis ambientais. Por exemplo, se sua chave de API OpenAI estiver armazenada em uma variável de ambiente chamada OPENAI_API_KEY
, você poderá inicializar uma classe de modelo OpenAI como esta:
import artkit . api as ak
ak . OpenAIChat (
model_id = "gpt-4o" ,
api_key_env = "OPENAI_API_KEY"
)
A variável api_key_env
aceita o nome da variável de ambiente como uma string em vez de aceitar diretamente uma chave de API como parâmetro, o que reduz o risco de exposição acidental de chaves de API em repositórios de código, uma vez que a chave não é armazenada como um objeto Python que pode ser impresso .
As principais funções do ARTKIT são:
run
: executa uma ou mais etapas do pipelinestep
: Uma única etapa de pipeline que produz um dicionário ou um iterável de dicionárioschain
: um conjunto de etapas que são executadas em sequênciaparallel
: um conjunto de etapas executadas em paraleloAbaixo, desenvolvemos um pipeline de exemplo simples com as seguintes etapas:
Para começar, importe artkit.api
e configure uma sessão com o modelo OpenAI GPT-4o. O código abaixo pressupõe que você tenha uma chave de API OpenAI armazenada em uma variável de ambiente chamada OPENAI_API_KEY
e que deseja armazenar em cache as respostas em um banco de dados chamado 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 seguir, defina algumas funções que serão usadas como etapas do pipeline. ARTKIT foi projetado para funcionar com geradores assíncronos para permitir o processamento assíncrono, portanto, as funções abaixo são definidas com palavras-chave async
, await
e 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 ])}
Em seguida, defina um pipeline que reformule um prompt de entrada de acordo com dois tons diferentes (educado e sarcástico), envie os prompts reformulados para AskChad e, finalmente, avalie as respostas quanto ao 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 ()
Por fim, execute o pipeline com um prompt de entrada e exiba os resultados em uma tabela.
# 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 ()
Da esquerda para a direita, a tabela de resultados mostra:
input
: O prompt de entrada originaltone_rephraser
: Os prompts reformulados, que reformulam o prompt original para ter o tom especificadoask_chad
: A resposta do AskChad, que reflete o tom do usuárioevaluation
: a pontuação de avaliação da métrica SARCASTIC, que sinaliza a resposta sarcástica com 1Para uma introdução completa ao ARTKIT, visite nosso Guia do usuário e exemplos.
Contribuições para o ARTKIT são bem-vindas e apreciadas! Consulte a seção Guia do Colaborador para obter informações.
Este projeto é licenciado sob Apache 2.0, permitindo uso, modificação e distribuição gratuitos com proteções adicionais contra litígios de patentes. Consulte o arquivo LICENSE para obter mais detalhes ou visite Apache 2.0.
BCG X é a unidade de construção e design de tecnologia do Boston Consulting Group.
Estamos sempre em busca de cientistas de dados e engenheiros de software talentosos para se juntarem à nossa equipe! Visite Carreiras BCG X para saber mais.