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 職業以了解更多資訊。