TrainForge
AI 에이전트를 위한 결정론적(Deterministic-first) 회귀 테스트.
에이전트(인프로세스 Python callable 또는 HTTP endpoint)를 대상으로 시나리오가 실행됩니다. 툴 호출과 스크립트된 텍스트는 Python 동등성 비교로 확인하며, 자유 형식 텍스트는 턴당 20개의 이진 NLP-consistency 질문으로 평가합니다. 0부터 1까지의 품질 점수는 없습니다. 심사위원(judge) 드리프트도 없습니다. CI가 통과했다고 말하면 실제로 통과한 것입니다.
TrainForge CLI catching an unsafe tool call
설치 (Install)
Python ≥ 3.10이 필요합니다.
60초 퀵스타트 (quickstart)
trainforge run \
--agent examples.quickstart.agent:run \
--scenarios examples/quickstart/scenarios/hello.json \
...
1/1 passed (100%)가 표시되어야 합니다. 이 시나리오는 사용자 지정 검사 없이 정확히 일치하는(exact-match) 방식을 사용하므로 LLM key가 필요하지 않습니다.
examples.quickstart.agent:run을 실제 에이전트를 테스트할 your_module:your_function으로 교체하십시오. callable의 형태는 다음과 같습니다:
async def run(messages: list[dict]) -> dict:
return {"response": "...", "tool_calls": [...]}
전체 워크스루에는 capture mode, hot-swap A/B 테스트, HTTP transport가 포함되어 있으니 Getting started를 참조하십시오.
왜 결정론적(deterministic-first)인가?
대부분의 에이전트 테스트 도구는 LLM judge를 사용하여 0-1 스케일로 품질 점수를 매기며, 이 점수는 동일한 입력에 대해 실행마다 드리프트합니다. TrainForge는 점수 대신 사용자가 작성한 이진 계약(binary contracts)으로 대체합니다. 모든 계약이 통과했거나, 또는 정확히 어떤 라인에서 깨졌는지 지적할 수 있습니다.
전체 포지셔닝, golden injection, 그리고 20가지 표준 NLP-consistency 검사에 대해서는 Concepts를 참조하십시오.
문서화 (Documentation)
| 페이지 | 내용 |
|---|
| Getting started | 설치 + 두 가지 퀵스타트(인프로세스 및 HTTP), capture mode, hot-swap. |
| ... | |
개발 (Developing)
pytest
pytest --cov=trainforge --cov-report=term-missing
테스트는 trainforge.cli._LLM_CLIENT_FACTORY를 통해 stub LLM을 주입하므로, CI에서 외부 LLM에 연결되지 않습니다.
라이선스 (License)
Apache 2.0