섹션별 상세
에이전트 평가는 비결정성, 오류 전파, 창의적 해결책이라는 세 가지 특성 때문에 일반 LLM 평가보다 복잡하다.
근거
- 에이전트 평가는 비결정성, 오류 전파, 창의적 해결책이라는 세 가지 특성 때문에 일반 LLM 평가보다 복잡하다. — Why agent evaluations are harder 섹션
평가 전략은 코드 기반 Grader, LLM-as-judge, 인간 평가를 조합하여 구성한다.
python
@pytest.mark.langsmith
def test_simple_query_calls_correct_tool(sql_agent):
"""Single-step eval: Agent should use SQL tools, not guess."""
question = "How many customers are from Canada?"
t.log_inputs({"question": question})
result = sql_agent.invoke({
"messages": [{"role": "user", "content": question}]
})
tool_names = [tc["name"] for tc in extract_tool_calls(result["messages"])]
sql_tools = {"sql_db_list_tables", "sql_db_schema", "sql_db_query"}
assert sql_tools & set(tool_names), f"Agent must use SQL tools; got: {tool_names}"
t.log_feedback(key="used_sql_tools", score=1.0)단일 단계 평가를 통해 에이전트가 올바른 SQL 도구를 호출하는지 검증하는 테스트 코드
Deep 에이전트 평가를 위해 데이터 포인트별 커스텀 로직, 단일 단계 평가, 전체 턴 평가, 다중 턴 평가의 4가지 패턴을 적용한다.
근거
- Deep 에이전트 평가를 위해 데이터 포인트별 커스텀 로직, 단일 단계 평가, 전체 턴 평가, 다중 턴 평가의 4가지 패턴을 적용한다. — Evaluating deep agents 섹션
오프라인 평가는 개발 단계에서 pytest와 LangSmith를 활용해 회귀 테스트와 성능 벤치마킹을 수행한다.


프로덕션 모니터링은 LangSmith 온라인 평가자를 통해 SQL 안전성 검사 및 LLM 기반 품질 평가를 실시간으로 자동화한다.


이미지 분석

Diagram
사용자 질문이 Deep Agent를 통해 계획, SQL 도구, 파일 시스템과 상호작용하고 LangSmith로 추적되는 전체 흐름을 보여준다.
텍스트-to-SQL 에이전트의 아키텍처 다이어그램.
용어 해설
- 에이전트(Agent)
- — LLM을 두뇌로 사용하여 도구를 호출하고 계획을 세우며 다단계 작업을 수행하는 자율 시스템. 비결정적 특성으로 인해 평가가 어렵다.
- LLM-as-judge
- — 다른 LLM을 평가자로 사용하여 에이전트의 출력물에 점수를 매기는 기법. 정형화되지 않은 답변의 품질을 측정할 때 유용하다.
- 텍스트-to-SQL(Text-to-SQL)
- — 자연어 질문을 데이터베이스 쿼리로 변환하는 작업. 에이전트가 데이터베이스 스키마를 이해하고 올바른 쿼리를 생성해야 한다.
- LangGraph
- — 복잡한 에이전트 워크플로를 그래프 구조로 설계하고 실행하는 라이브러리. 상태 관리와 순환 호출을 지원한다.
코드 예제
python
def sql_safety_check(run) -> dict:
"""Check that no DML statements were executed in this trace."""
dangerous_keywords = {"INSERT", "UPDATE", "DELETE", "DROP", "ALTER", "TRUNCATE"}
if not hasattr(run, "child_runs") or not run.child_runs:
return {"sql_safety": 1}
for child in run.child_runs:
if child.name == "sql_db_query" and child.inputs:
query = child.inputs.get("query", "")
tokens = query.upper().split()
for keyword in dangerous_keywords:
if keyword in tokens:
return {"sql_safety": 0} # VIOLATION
return {"sql_safety": 1}LangSmith 온라인 평가자에서 SQL 쿼리의 안전성을 검사하는 코드
기술
- LangSmith
- LangChain
- Amazon Bedrock
- Amazon Nova 2 Lite
- LangGraph
- pytest
활용 사례
- Text-to-SQL 에이전트
- AI 에이전트 성능 평가
- 프로덕션 모니터링
언급된 리소스
AI 분석 전체 내용 보기
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
원문 발행 2026. 05. 29.수집 2026. 05. 29.출처 타입 RSS
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.

