LLM 트랜잭션 설정
AI Agent Observability에서 워크플로우와 에이전트 패턴을 계측하기 위한 공개 API 사용 가이드입니다.
워크플로우 및 AI 에이전트의 영역만 선언하면, 해당 스코프 안에서 발생 하는 모든 LLM API 호출이 별도의 트랜잭션이 아니라 하나의 LLM 트랜잭션 아래 "스텝"으로 묶여 수집됩니다. 사용자가 할 일은 영역을 표시하는 것뿐입니다.
AI Agent Observability의 트랜잭션 종류
LLM 트랜잭션의 종류는 총 3종입니다.
-
Workflow(기본) —[Workflow] <name> -
Agent—[Agent] <name> -
LLMAPI— 워크플로우로 감싸지 않은 단독 호출은[LLMAPI] Pure LLM API로 수집됩니다.
워크플로우 안에서 다른 워크플로우가 실행되면 부모-자식 트랜잭션이 트라잭토리(Trajectory)로 연결되어 호출 관계를 추적할 수 있습니다.
워크플로우 트랜잭션 설정
데코레이터와 컨텍스트 매니저 두 가지 형태를 모두 지원합니다.
데코레이터
워크플로우 이름이 함수 단 위로 고정되어 있을 때 사용합니다.
from whatap.llm import workflow
@workflow("support_chat")
async def support_chat(conversation_id, message, history):
intent = await classify_intent(message) # 이 안의 LLM 호출들은
docs = await retrieve(message) # 전부 이 워크플로우의 "스텝"이 됩니다
answer = await generate(message, docs)
return {"intent": intent, "answer": answer}
컨텍스트 매니저
워크플로우 이름을 런타임에 결정하거나, 함수 일부 구간만 감싸고 싶을 때 사용합니다.
from whatap.llm import workflow
with workflow("ticket_triage"):
classification = await _classify(ticket_text)
entities = await _extract(ticket_text)
비동기 코드에서도 async with이 아니라 위와 같이 with를 사용하세요. workflow와 agent는 동기 컨텍스트 매니저이므로, 스코프 안에서 await하는 것은 문제가 없지만 async with으로 열면 에러가 발생합니다.
에이전트 트랜잭션 설정
사용법은 워크플로우 설정과 동일하며, 트랜잭션 이름의 접두어만 [Agent]로 바뀝니다. 데코레이터와 컨텍스트 매니저 두 가지 형태를 모두 지원합니다.
데코레이터
에이전트 실행 함수가 고정되어 있을 때 사용합니다.
from whatap.llm import agent
@agent("react_agent")
async def run_agent(task):
...
return result
컨텍스트 매니저
에이전트 이름을 런타임에 결정하거나, 실행 구간 일부만 감싸고 싶을 때 사용합니다.
from whatap.llm import agent
with agent("react_agent"):
result = await react_agent.run(task)
코드 수정 없이 영역 선언하기
애플리케이션 코드를 수정할 수 없을 때는 설정으로 워크플로우 경계를 지정할 수 있습니다. whatap.conf에 대상 메서드를 나열하면, 해당 메서드의 실행이 곧 워크플로우 경계가 됩니다. 워크플로우 이름은 메서드 이름이 사용됩니다.
workflow_method_patterns=myapp:RagService.run, myapp.agent:run_agent
모듈:클래스.메서드 또는 모듈:함수 형태로 쉼표로 구분합니다.
자동 계측 지원 프레임워크
다음 프레임워크는 별도의 영역 선언 없이 LLM 트랜잭션이 자동으로 수집됩니다.
| 프레임워크 | 수집 방식 |
|---|---|
| hermes-agent | 에이전트 실행 레이어(AIAgent.run_conversation)를 계측하여 [Agent] <name> 트랜잭션으로 등록합니다. 게이트웨이 인바운드(GatewayRunner._handle_message)는 [Workflow] gateway/<platform> 트랜잭션으로 등록되고, 그 안에서 실행된 에이전트가 자식 트랜잭션으로 연결됩니다. |
| LangGraph | 컴파일된 그래프의 실행 경계(Pregel.invoke / ainvoke / stream / astream)를 계측하여 그래프 1회 실행 = LLM 트랜잭션 1건으로 등록합니다. tools 노드를 가진 그래프(create_react_agent)는 [Agent], 그 외는 [Workflow]로 등록됩니다. 서브그래프는 자식 트랜잭션으로 중첩 연결됩니다. |