Strands 테스트
Contains, Trajectory, CI/CD 게이트, ToolSimulator
에이전트 테스트
Contains, Trajectory, CI/CD 게이트, ToolSimulator
에이전트 품질을 코드로 보장한다
테스트·평가·카오스 엔지니어링으로 에이전트 신뢰성 확보
테스트와 시뮬레이터
ToolSimulator · ExperimentGenerator · 시뮬레이터 유형
테스트와 시뮬레이터
외부 의존성 없는 mock 환경에서 Case Suite를 병렬 실행하고 일괄 평가
ToolSimulator · Experiment
실제 API 호출 없이 스키마 검증 mock으로 테스트 환경을 만들고, Experiment가 Case를 병렬 실행해 집계합니다.
- ToolSimulator — LLM 스키마 mock
- ActorSimulator — 사용자 시뮬레이션
- ExperimentGenerator — 입력 변이 자동 생성
- run_evaluations(task) — 병렬 실행·집계
외부 API가 없어도 테스트는 돌아가야 합니다 — mock으로 재현 가능하게, Experiment로 일괄로
ToolSimulator — 도구 mock 테스트
외부 API 의존성을 제거하고 스키마 검증 mock으로 재현 가능한 테스트 구성
핵심 포인트
- ToolSimulator()
- 실제 API 호출 없이 — LLM이 스키마에 맞는 mock 응답을 생성
- @tool_simulator.tool()
- mock으로 대체할 도구 등록 — tool()은 데코레이터 팩토리라 괄호 필수
- task(case)
- 케이스마다 호출되는 실행 함수 — mock 도구로 에이전트를 만들어 응답을 반환
- run_evaluations(task)
- task 함수 필수 — Case마다 task를 실행하고 Evaluator로 일괄 채점
코드
from strands import Agent
from strands_evals import Case, Experiment
from strands_evals.evaluators import OutputEvaluator
from strands_evals.simulation.tool_simulator import ToolSimulator
tool_simulator = ToolSimulator()
@tool_simulator.tool() # 괄호 필수 — tool()은 데코레이터 팩토리
def get_weather(city: str) -> dict:
"""도시의 현재 날씨를 조회합니다"""
def task(case): # 케이스마다 호출 — mock 도구로 에이전트 실행
agent = Agent(tools=[tool_simulator.get_tool("get_weather")])
return str(agent(case.input))
case = Case(input="서울 날씨 알려줘",
expected_output="서울의 현재 기온은 22도이며 맑습니다")
experiment = Experiment(cases=[case],
evaluators=[OutputEvaluator(rubric="날씨 정보가 정확한가")])
results = experiment.run_evaluations(task)
Experiment 실행 흐름
Case Suite를 병렬 실행하고 결과를 집계하는 Experiment 워크플로우
-
1
Suite 로드
JSON 또는 Python에서 Case 배열을 로드 — CLI의 strands-evals validate가 JSON 스키마를 검증. 태그로 필터링하여 부분 실행 가능 (예: tag="tool_use").
-
2
Agent 구성
task 함수가 케이스마다 테스트 대상 Agent를 구성하고 ToolSimulator를 바인딩. model_id, temperature 등 설정을 Experiment Config로 고정.
-
3
병렬 실행
asyncio 워커 큐로 Case를 병렬 실행. max_workers로 병렬도 제어 (run_evaluations_async 기본 10, 동기판 기본 1). 각 Case별 실행 시간과 토큰 수 측정.
-
4
평가 + 집계
각 Case의 actual을 Evaluator로 채점. 전체 통과율, 평균 점수, 실패 Case 목록을 EvaluationReport로 출력.
로드부터 집계까지 Experiment가 자동으로 — 결과는 EvaluationReport(통과율·평균 점수·실패 목록)로 받습니다.
실행 결과 — pass / fail 리포트
run_evaluations(task)가 끝나면 받는 것 — 케이스별 판정과 근거, 그리고 집계
터미널 — experiment.run_evaluations(task)
시뮬레이터 유형별 사용처
ToolSimulator · ActorSimulator · Chaos effects — 검증 목적에 맞는 시뮬레이터 선택
| 유형 | 동작 방식 | 사용 시나리오 | 장점 |
|---|---|---|---|
| ToolSimulator | LLM이 스키마에 맞는 mock 응답 생성 | 단위 테스트, 외부 도구 의존성 제거 | 실제 API 없이 재현 가능, 설정 간단 |
| ActorSimulator | LLM이 사용자 역할을 시뮬레이션 | 멀티턴 대화 시나리오 검증 | 실사용자 없이 대화 흐름 테스트 |
| ChaosPlugin effects | 에러/지연/필드 훼손 주입 — PART 4 상세 | 복원력 테스트, 엣지 케이스 | 장애 대응 능력 검증 |
| ExperimentGenerator (생성기) | 입력 변이 자동 생성 | 커버리지 확대, 퍼징 | 사람이 놓치는 엣지 케이스 발견 |
목적이 유형을 결정합니다 — 도구는 ToolSimulator, 사용자는 ActorSimulator, 복원력은 Chaos effects
Case · Experiment · Evaluator · Chaos — 에이전트 품질 보장의 4요소