? LLM 기반 애플리케이션을 위한 지속적인 통합 ???
BenchLLM 은 LLM(대형 언어 모델) 및 AI 기반 애플리케이션의 테스트를 간소화하는 Python 기반 오픈 소스 라이브러리입니다. LLM을 통해 여러 테스트에 대한 응답을 검증하여 모델, 에이전트 또는 체인의 정확성을 측정합니다.
BenchLLM은 LLM 애플리케이션 개선을 위해 V7에서 적극적으로 사용되며 이제 MIT 라이센스에 따라 오픈 소스화되어 더 넓은 커뮤니티와 공유됩니다.
BenchLLM을 사용하여 다음을 수행하십시오.
️ 참고: BenchLLM은 개발 초기 단계에 있으므로 급격한 변화가 있을 수 있습니다.버그 보고, 기능 요청 또는 기여의 경우 GitHub 페이지에서 문제를 열거나 PR(풀 요청)을 제출하세요.
BenchLLM은 기계 학습 모델을 검증하기 위한 고유한 2단계 방법론을 구현합니다.
테스트 : 이 단계에는 예상되는 응답 수에 대해 코드를 실행하고 즉각적인 판단이나 비교 없이 모델에서 생성된 예측을 캡처하는 작업이 포함됩니다.
평가 : 기록된 예측은 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은 semantic
평가자로 OpenAI의 GPT-3 모델을 사용합니다. 이를 위해서는 OPENAI_API_KEY
환경 변수를 설정해야 합니다. 이 기본 평가기를 사용하지 않으려면 대체 평가기를 지정할 수 있습니다(자세한 내용은 아래에서 설명).
export OPENAI_API_KEY= ' your-api-key '
'your-api-key'를 실제 OpenAI API 키로 바꾸세요.
테스트를 시작하려면 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를 사용합니다. 비대화형 평가자는 평가를 병렬로 실행할 수 있도록 --workers N
도 지원합니다.
$ bench run --evaluator string-match --workers 5
평가 프로세스를 가속화하기 위해 BenchLLM은 캐시를 사용합니다. (예측, 예상) 쌍이 과거에 평가되었고 캐시가 사용된 경우 향후 평가를 위해 평가 출력이 저장됩니다. 캐시에는 여러 유형이 있습니다.
memory
현재 실행 중에만 출력 값을 캐시합니다. 이는 --retry-count N
과 함께 실행할 때 특히 유용합니다.file
실행이 끝날 때 캐시를 출력/cache.json에 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"
메시지를 받게 됩니다. 또한 BenchLLM은 함수가 get_n_day_weather_forecast(location=London, num_days=1)
와 다른 인수 값으로 호출되는 경우 경고를 제공합니다. 이러한 인수 매개변수 제공은 선택사항입니다.
벤치 실행 에서는 각 테스트 기능을 실행한 다음 그 결과를 평가하지만 이를 두 단계로 분리하는 것이 종종 도움이 될 수 있습니다. 예를 들어, 사람이 수동으로 평가를 수행하도록 하려는 경우 또는 동일한 기능에 대해 여러 평가 방법을 시도하려는 경우입니다.
$ 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
: Suite에 새 테스트를 추가합니다.bench tests
: 제품군의 모든 테스트를 나열합니다.bench run
: 전체 또는 대상 테스트 스위트를 실행합니다.bench eval
: 기존 테스트 실행의 평가를 실행합니다. BenchLLM은 Python 3.10용으로 개발되었지만 다른 Python 버전에서도 작동할 수 있습니다. Python 3.10 환경과 pip >= 23을 사용하는 것이 좋습니다. conda 또는 다른 환경 관리자를 사용하여 환경을 설정할 수 있습니다.
$ conda create --name benchllm python=3.10
$ conda activate benchllm
$ pip install -e " .[dev] "
모든 예제를 실행하려면 먼저 예제 추가 종속성을 설치하십시오.
$ pip install -e " .[examples] "
기여 단계:
우리는 PEP8 스타일 가이드를 준수합니다. 기여할 때 이 가이드를 따르세요.
지원이 필요하시면 GitHub 페이지에서 언제든지 문제를 열어주세요.