? LLM 支援的應用程式的持續整合???
BenchLLM是一個基於 Python 的開源程式庫,可簡化大型語言模型 (LLM) 和人工智慧驅動的應用程式的測試。它透過法學碩士驗證任意數量的測試的回應來衡量模型、代理或鏈的準確性。
BenchLLM 在 V7 中被積極使用,以改進我們的 LLM 應用程序,現在根據 MIT 許可證開源,以便與更廣泛的社區共享
使用 BenchLLM 可以:
️ 注意: BenchLLM 處於開發的早期階段,將會快速變化。對於錯誤報告、功能請求或貢獻,請在我們的 GitHub 頁面上提出問題或提交拉取請求 (PR)。
BenchLLM 採用獨特的兩步驟方法來驗證您的機器學習模型:
測試:此階段涉及針對任意數量的預期回應執行程式碼,並擷取模型產生的預測,而無需立即判斷或比較。
評估:使用 LLM 將記錄的預測與預期輸出進行比較,以驗證事實相似性(或可選擇性地手動)。產生詳細的比較報告,包括通過/失敗狀態和其他指標。
這種有條不紊的分離提供了模型性能的全面視圖,並允許更好地控制和細化每個步驟。
要安裝 BenchLLM,我們使用 pip
pip install benchllm
首先導入庫並使用 @benchllm.test 裝飾器來標記您要測試的函數:
import benchllm
# Your custom model implementation
def run_my_model ( input ):
# Your model's logic goes here.
return some_result
@ benchllm . test ( suite = "/path/to/test/suite" ) # If the tests are in the same directory, just use @benchllm.test.
def invoke_model ( input : str ):
return run_my_model ( input )
接下來,準備測試。這些是 YAML/JSON 文件,結構如下:
input : What's 1+1? Be very terse, only numeric output
expected :
- 2
- 2.0
在上面的範例中, input
是模型將處理的查詢或指令, expected
包含模型應傳回的潛在回應。需要注意的是, input
可以是簡單的str
或更複雜的嵌套字典; BenchLLM 將提取 Python 程式碼中input
參數的類型,並相應地從 YAML 檔案中載入input
欄位。
預設情況下,BenchLLM 使用 OpenAI 的 GPT-3 模型作為semantic
評估器。這需要設定OPENAI_API_KEY
環境變數。如果您不想使用此預設評估器,則可以指定替代評估器(下面將進一步詳細討論):
export OPENAI_API_KEY= ' your-api-key '
將“your-api-key”替換為您的實際 OpenAI API 金鑰。
若要啟動測試,請使用bench run
指令:
$ bench run
預設情況下,bench run 指令會在目前目錄中尋找實作 @test 裝飾器的 Python 檔案。若要定位特定檔案或資料夾,請直接指定它:
$ bench run path/to/my/file.py or/path/to/folder/with/files
--retry-count
參數允許 BenchLLM 多次執行測試,這對於輸出可能有變化的模型很有用:
$ bench run --retry-count 5
BenchLLM 提供多種評估方法來確定預測是否與測試案例的預期值相符。您可以使用--evaluator
參數指定評估方法:
有多種方法可以評估測試函數預測是否與測試案例期望值相符。預設情況下,GPT-3 用於比較輸出。您可以使用--evaluator
來使用不同的方法
semantic
,使用 GPT-3、GPT-3.5 或 GPT-4( --model
參數)等語言模型檢查語義相似性。請注意,對於此評估器,您需要設定OPENAI_API_KEY
環境變數。embedding
,使用嵌入向量之間的餘弦距離。請注意,對於此評估器,您需要設定OPENAI_API_KEY
環境變數。string-match
,檢查字串是否符合(不區分大小寫)interactive
,使用者在終端機中手動接受或失敗測試web
,使用 pywebio 作為簡單的本機 Web 介面非互動式評估器也支援--workers N
平行運行評估
$ bench run --evaluator string-match --workers 5
為了加速評估過程,BenchLLM 使用快取。如果過去已經評估了(預測,預期)對並且使用了緩存,則評估輸出將被保存以供將來評估。快取有多種類型:
memory
,僅快取目前運行期間的輸出值。這在使用--retry-count N
運行時特別有用file
,在運行結束時將快取作為 JSON 檔案儲存在 output/cache.json 中。這是預設行為。none
,不使用任何快取。 $ bench run examples --cache memory
在開發鍊或訓練代理模型時,可能存在這些模型需要與外部函數互動的情況 - 例如,查詢天氣預報或執行 SQL 查詢。在這種情況下,BenchLLM 有助於模擬這些函數。這有助於您使測試更加可預測,並能夠發現意外的函數呼叫。
input : I live in London, can I expect rain today?
expected : ["no"]
calls :
- name : forecast.get_n_day_weather_forecast
returns : It's sunny in London.
arguments :
location : London
num_days : 1
在上面的範例中, forecast
模組中的函數get_n_day_weather_forecast
被模擬。換句話說,每次呼叫此函數時,模型都會收到"It's sunny in London"
。如果使用與get_n_day_weather_forecast(location=London, num_days=1)
不同的參數值呼叫函數,BenchLLM 也會發出警告。請注意,這些實參參數的提供是可選的。
雖然基準運行運行每個測試函數,然後評估其輸出,但將它們分為兩個步驟通常是有益的。例如,如果您希望有人手動進行評估,或者您想對相同功能嘗試多種評估方法。
$ bench run --no-eval
這將在output/latest/predictions
中產生 json 檔案然後您可以使用以下命令評估它們
$ bench eval output/latest/predictions
為了更詳細的控制,BenchLLM 提供了 API。您無需新增 YML/JSON 測試即可評估您的模型。您可以改為:
Test
對象Tester
物件產生預測Evaluator
物件來評估您的模型 from benchllm import StringMatchEvaluator , Test , Tester
# Instantiate your Test objects
tests = [
Test ( input = "What's 1+1?" , expected = [ "2" , "It's 2" ]),
Test ( input = "First rule of fight club?" , expected = [ "Do not talk about fight club" ]),
]
# Use a Tester object to generate predictions using any test functions
tester = Tester ( my_test_function )
tester . add_tests ( tests )
predictions = tester . run ()
# Use an Evaluator object to evaluate your model
evaluator = StringMatchEvaluator ()
evaluator . load ( predictions )
results = evaluator . run ()
print ( results )
如果您想合併快取並執行多個平行評估作業,您可以如下修改評估器:
from benchllm . cache import FileCache
...
evaluator = FileCache ( StringMatchEvaluator ( workers = 2 ), Path ( "path/to/cache.json" ))
evaluator . load ( predictions )
results = evaluator . run ()
在本例中, FileCache
用於啟用緩存, StringMatchEvaluator
的workers
參數設定為2
以允許並行評估。快取結果保存在Path("path/to/cache.json")
指定的檔案中。
bench add
:向套件新增測試。bench tests
:列出套件中的所有測試。bench run
:運行所有或目標測試套件。bench eval
:執行現有測試運行的評估。 BenchLLM 是為 Python 3.10 開發的,儘管它也可以與其他 Python 版本一起使用。我們建議使用 Python 3.10 環境和 pip >= 23。
$ conda create --name benchllm python=3.10
$ conda activate benchllm
$ pip install -e " .[dev] "
若要執行所有範例,請先安裝範例的額外相依性
$ pip install -e " .[examples] "
貢獻步驟:
我們遵守 PEP8 風格指南。貢獻時請遵循本指南。
如果您需要任何支持,請隨時在我們的 GitHub 頁面上提出問題。