중요합니다
이 문서에 표시된 항목(미리 보기)은 현재 퍼블릭 미리 보기에서 확인할 수 있습니다. 이 미리 보기는 서비스 수준 계약 없이 제공되며, 프로덕션 워크로드에는 권장되지 않습니다. 특정 기능이 지원되지 않거나 기능이 제한될 수 있습니다. 자세한 내용은 Microsoft Azure Preview에 대한 추가 사용 약관을 참조하세요.
이 문서에서는 다음 방법을 알아봅니다.
- 주요 추적 개념 이해
- Foundry에서 AI 에이전트 추적 및 관찰
- 다중 에이전트 관찰 가능성을 사용하여 새로운 의미 체계 규칙 살펴보기
- 인기 있는 에이전트 프레임워크와 통합
- Foundry 포털 및 Azure Monitor에서 추적 보기
- 에이전트 플레이그라운드에서 에이전트 스레드 보기
에이전트 실행의 추론을 결정하는 것은 문제 해결 및 디버깅에 중요합니다. 그러나 복잡한 에이전트는 다음과 같은 여러 가지 이유로 어려울 수 있습니다.
- 응답을 생성하는 데 많은 단계가 관련될 수 있으므로 모든 단계를 추적하기가 어려울 수 있습니다.
- 단계 시퀀스는 사용자 입력에 따라 달라질 수 있습니다.
- 각 단계의 입력/출력은 길 수 있으며 보다 자세한 검사를 받을 자격이 있습니다.
- 에이전트 런타임의 각 단계에는 중첩도 포함될 수 있습니다. 예를 들어 에이전트는 다른 프로세스를 사용하는 도구를 호출한 다음 다른 도구를 호출할 수 있습니다. 최상위 에이전트 실행에서 이상하거나 잘못된 출력을 발견하면 실행에서 문제가 발생한 위치를 정확히 확인하기 어려울 수 있습니다.
추적 결과는 특정 에이전트 실행에 관련된 각 기본 형식의 입력 및 출력을 호출된 순서로 표시하여 AI 에이전트의 동작을 쉽게 이해하고 디버그할 수 있도록 하여 이 문제를 해결합니다.
핵심 개념 추적 개요
시작하기 전에 주요 개념에 대한 간략한 개요는 다음과 같습니다.
| 주요 개념 | 설명 |
|---|---|
| 흔적 | 추적은 이벤트 및 상태 변경 내용(함수 호출, 값, 시스템 이벤트)을 기록하여 애플리케이션을 통해 요청 또는 워크플로의 여정을 캡처합니다. OpenTelemetry 추적 기록을 참조하십시오. |
| 범위 | 스팬은 추적의 구성 요소로서, 추적 내에서 단일 작업을 나타냅니다. 각 범위는 시작 및 종료 시간, 특성을 캡처하며 계층 관계를 표시하도록 중첩될 수 있으므로 전체 호출 스택 및 작업 시퀀스를 볼 수 있습니다. |
| 특성 | 특성은 추적 및 범위에 연결된 키-값 쌍으로, 함수 매개 변수, 반환 값 또는 사용자 지정 주석과 같은 컨텍스트 메타데이터를 제공합니다. 이러한 추적 데이터를 보강하면 더 많은 정보를 제공하고 분석에 유용합니다. |
| 의미 체계 규칙 | OpenTelemetry는 추적 데이터 특성에 대한 이름과 형식을 표준화하는 의미 체계 규칙을 정의하여 도구 및 플랫폼에서 보다 쉽게 해석하고 분석할 수 있도록 합니다. 자세한 내용은 OpenTelemetry의 의미 체계 규칙을 참조하세요. |
| 추적 내보내기 도구 | 추적 내보내기는 스토리지 및 분석을 위해 백 엔드 시스템에 추적 데이터를 보냅니다. Azure AI는 추적을 Azure Monitor 및 기타 OpenTelemetry 호환 플랫폼으로 내보내 다양한 관찰 도구와 통합할 수 있도록 지원합니다. |
모범 사례
- 일관된 범위 특성을 사용합니다.
- 품질 + 성능 분석을 위해 평가 실행 ID의 상관 관계를 지정합니다.
- 중요한 콘텐츠를 수정합니다. 특성에 비밀을 저장하지 않습니다.
다중 에이전트 관찰성을 사용하여 OpenTelemetry 확장
Microsoft는 Cisco의 인큐베이션 엔진인 Outshift와 공동으로 개발한 OpenTelemetry에 새로운 의미 체계 규칙을 도입하여 다중 에이전트 관찰성을 향상하고 있습니다. OpenTelemetry 및 W3C 추적 컨텍스트를 기반으로 하는 이러한 추가는 다중 에이전트 시스템 내에서 추적 및 원격 분석에 대한 표준화된 사례를 수립하여 품질, 성능, 안전성 및 비용에 대한 주요 메트릭의 일관된 로깅을 용이하게 합니다. 이 체계적인 접근 방식을 사용하면 도구 호출 및 협업을 포함하여 다중 에이전트 워크플로를 보다 포괄적으로 볼 수 있습니다. 이러한 발전은 LangChain, LangGraph 및 OpenAI Agents SDK용 Microsoft Foundry, Microsoft 에이전트 프레임워크, 의미 체계 커널 및 Azure AI 패키지에 통합되어 고객이 Foundry와 함께 이러한 프레임워크를 사용하여 빌드된 에이전트 시스템에 대한 통합된 관찰 가능성을 얻을 수 있도록 합니다. 추적 통합에 대해 자세히 알아봅니다.
| 유형 | 컨텍스트/부모 범위 | 이름/속성/이벤트 | 목적 |
|---|---|---|---|
| 범위 | — | 작업 실행 | 태스크 계획 및 이벤트 전파를 캡처하여 태스크를 분해하고 배포하는 방법에 대한 인사이트를 제공합니다. |
| 자식 범위 | 에이전트 호출 | 에이전트 간 상호작용 | 에이전트 간의 통신을 추적합니다. |
| 자식 범위 | 에이전트 호출 | 에이전트 상태 관리 | 효과적인 컨텍스트, 단기 또는 장기 메모리 관리. |
| 자식 범위 | 에이전트 호출 | 에이전트_계획 | 에이전트의 내부 계획 단계를 기록합니다. |
| 자식 범위 | 에이전트 호출 | 에이전트 오케스트레이션 | 에이전트 간 오케스트레이션을 캡처합니다. |
| 특성 | 에이전트 호출 | 도구 정의 | 도구의 용도 또는 구성에 대해 설명합니다. |
| 특성 | 에이전트 호출 | llm_spans | 모델 호출 범위를 기록합니다. |
| 특성 | 도구_실행 | tool.call.arguments (도구 호출 인수) | 도구 호출 중에 전달된 인수를 기록합니다. |
| 특성 | 도구_실행 | 도구.호출.결과 | 도구에서 반환된 결과를 기록합니다. |
| Event | — | 평가(이름, 오류 유형, 레이블) | 에이전트 성능 및 의사 결정에 대한 구조적 평가를 사용하도록 설정합니다. |
Microsoft Foundry SDK에서 추적 설정
Foundry를 사용하여 채팅을 완료하거나 에이전트를 빌드하려면 다음을 설치합니다.
pip install azure-ai-projects azure-identity
추적 기능을 활성화하려면 다음 계측 라이브러리를 설치해야 합니다.
pip install azure-monitor-opentelemetry opentelemetry-sdk
Foundry에서 추적을 보려면 Application Insights 리소스를 Foundry 프로젝트에 연결해야 합니다.
- Foundry 포털의 왼쪽 탐색 창에서 추적 으로 이동합니다.
- 아직 없는 경우 새 Application Insights 리소스를 만듭니다.
- Foundry 프로젝트에 리소스를 연결합니다.
코드의 도구 추적
채팅 메시지의 콘텐츠를 추적하려면 환경 변수를 AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED true(대/소문자를 구분하지 않는 경우)로 설정합니다. 여기에는 개인 데이터가 포함될 수 있습니다. 자세한 내용은 Python용 Azure Core 추적 OpenTelemetry 클라이언트 라이브러리를 참조하세요.
import os
os.environ["AZURE_TRACING_GEN_AI_CONTENT_RECORDING_ENABLED"] = "true" # False by default
AIProjectClient를 사용한 Azure AI 프로젝트에 인증하고 연결하여 OpenTelemetry 추적을 사용해 에이전트를 계측하기 시작해 보겠습니다.
from azure.ai.projects import AIProjectClient
from azure.identity import DefaultAzureCredential
project_client = AIProjectClient(
credential=DefaultAzureCredential(),
endpoint=os.environ["PROJECT_ENDPOINT"],
)
다음으로, 프로젝트에 연결된 Application Insights 리소스에서 연결 문자열을 검색하고 Azure Monitor로 원격 분석을 보내도록 OTLP 내보내기를 설정합니다.
from azure.monitor.opentelemetry import configure_azure_monitor
connection_string = project_client.telemetry.get_application_insights_connection_string()
configure_azure_monitor(connection_string=connection_string) #enable telemetry collection
이제 Azure AI 프로젝트에서 에이전트 및 사용자 메시지를 만들고 실행하는 코드를 추적하여 문제 해결 또는 모니터링에 대한 자세한 단계를 확인할 수 있습니다.
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("example-tracing"):
agent = project_client.agents.create_agent(
model=os.environ["MODEL_DEPLOYMENT_NAME"],
name="my-assistant",
instructions="You are a helpful assistant"
)
thread = project_client.agents.threads.create()
message = project_client.agents.messages.create(
thread_id=thread.id, role="user", content="Tell me a joke"
)
run = project_client.agents.runs.create_and_process(thread_id=thread.id, agent_id=agent.id)
에이전트를 실행한 후 Foundry 포털에서 추적을 볼 수 있습니다.
로컬에서 로그 추적 수행
Aspire 대시보드 또는 다른 OpenTelemetry 호환 백 엔드에 연결하려면 OTLP(OpenTelemetry Protocol) 내보내기를 설치합니다. 이렇게 하면 추적을 콘솔에 인쇄하거나 Aspire 대시보드와 같은 로컬 뷰어를 사용할 수 있습니다.
pip install azure-core-tracing-opentelemetry opentelemetry-exporter-otlp opentelemetry-sdk
다음으로 콘솔 출력에 대한 추적을 구성합니다.
from azure.core.settings import settings
settings.tracing_implementation = "opentelemetry"
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor, ConsoleSpanExporter
# Setup tracing to console
span_exporter = ConsoleSpanExporter()
tracer_provider = TracerProvider()
tracer_provider.add_span_processor(SimpleSpanProcessor(span_exporter))
trace.set_tracer_provider(tracer_provider)
또는 Aspire 대시보드에 따라 위의 코드를 수정하여 로컬 OTLP 뷰어로 추적합니다.
이제 에이전트 계측을 사용하도록 설정하고 에이전트를 실행합니다.
from azure.ai.agents.telemetry import AIAgentsInstrumentor
AIAgentsInstrumentor().instrument()
# Start tracing
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("example-tracing"):
agent = project_client.agents.create_agent(
model=os.environ["MODEL_DEPLOYMENT_NAME"],
name="my-assistant",
instructions="You are a helpful assistant"
)
thread = project_client.agents.threads.create()
message = project_client.agents.messages.create(
thread_id=thread.id, role="user", content="Tell me a joke"
)
run = project_client.agents.runs.create_and_process(thread_id=thread.id, agent_id=agent.id)
대안: VS Code용 AI 도구 키트
AI 도구 키트는 VS Code에서 로컬로 추적하는 간단한 방법을 제공합니다. 로컬 OTLP 호환 수집기를 사용하므로 개발 및 디버깅에 이상적입니다.
도구 키트는 OpenTelemetry를 통해 Foundry Agents Service, OpenAI, Anthropic 및 LangChain과 같은 AI 프레임워크를 지원합니다. 클라우드 액세스 없이 VS Code에서 즉시 추적을 볼 수 있습니다.
자세한 설정 지침 및 SDK 관련 코드 예제는 AI 도구 키트의 추적을 참조하세요.
사용자 지정 함수 추적
사용자 지정 함수를 추적하려면 OpenTelemetry SDK를 사용하여 코드를 계측합니다.
- 추적 프로그램 공급자 설정: 추적 프로그램 공급자를 초기화하여 범위를 관리하고 만듭니다.
- 범위 만들기: 추적하려는 코드를 범위로 래핑합니다. 각 범위는 작업 단위를 나타내며 중첩되어 추적 트리를 형성할 수 있습니다.
- 특성 추가: 특성으로 범위를 보강하여 추적 데이터에 대한 더 많은 컨텍스트를 제공합니다.
- 내보내기 구성: 분석 및 시각화를 위해 추적 데이터를 백 엔드로 보냅니다.
다음은 사용자 지정 함수를 추적하는 예제입니다.
from opentelemetry import trace
from opentelemetry.trace import SpanKind
# Initialize tracer
tracer = trace.get_tracer(__name__)
def custom_function():
with tracer.start_as_current_span("custom_function") as span:
span.set_attribute("custom_attribute", "value")
# Your function logic here
print("Executing custom function")
custom_function()
자세한 지침 및 고급 사용법은 OpenTelemetry 설명서를 참조 하세요.
추적에 사용자 피드백 첨부
애플리케이션을 계측하여 OpenTelemetry의 의미 체계를 사용함으로써 사용자 피드백을 추적에 첨부하고 이를 Foundry 포털에서 시각화할 수 있으며, 사용자 피드백 로그를 기록할 수 있습니다.
응답 ID 또는 스레드 ID를 사용하여 피드백 추적을 해당 채팅 요청 추적과 상호 연결하면 Foundry 포털에서 이러한 추적을 보고 관리할 수 있습니다. OpenTelemetry의 사양을 사용하면 성능 최적화 및 사용자 환경 인사이트를 위해 Foundry 포털에서 분석할 수 있는 표준화되고 보강된 추적 데이터를 사용할 수 있습니다. 이 방법을 사용하면 애플리케이션에서 향상된 가시성을 위해 OpenTelemetry의 모든 기능을 사용할 수 있습니다.
사용자 피드백을 기록하려면 다음 형식을 따릅니다.
사용자가 GenAI 모델 응답에 대한 반응을 제공한 경우에만 사용자 피드백 평가 이벤트를 캡처할 수 있습니다. 가능하다면 해당 응답을 설명하는 GenAI 범위에 부모로 지정해야 합니다.
사용자 피드백 이벤트 본문의 구조는 다음과 같습니다.
| 본문 필드 | 유형 | 설명 | 예시 | 요구 사항 수준 |
|---|---|---|---|---|
comment |
문자열 | 사용자 피드백에 대한 추가 세부 정보 | "I did not like it" |
Opt-in |
추적 데이터에 서비스 이름 사용
Application Insights에서 고유 ID를 통해 서비스를 식별하려면 추적 데이터에서 서비스 이름 OpenTelemetry 속성을 사용할 수 있습니다. 이는 여러 애플리케이션에서 동일한 Application Insights 리소스로 데이터를 로깅하고 이를 구분하려는 경우에 유용합니다.
예를 들어 동일한 Application Insights 리소스에 데이터를 기록하도록 구성된 추적이 포함된 App-1 및 App-2의 두 애플리케이션이 있다고 가정해 보겠습니다.
App-1을 Relevance에 의해 지속적으로 평가되도록 설정하고 App-2을 Relevance에 의해 지속적으로 평가되도록 설정할 수 있습니다. 서비스 이름을 사용하여 Foundry 포털에서 애플리케이션을 모니터링할 때 Application로 필터링할 수 있습니다.
서비스 이름 속성을 설정하려면 단계에 따라 애플리케이션 코드에서 직접 수행할 수 있습니다. 리소스가 다른 여러 추적 프로그램 공급자 사용을 참조하세요. 또는 앱을 배포하기 전에 환경 변수 OTEL_SERVICE_NAME 를 설정할 수 있습니다. 서비스 이름을 사용하는 방법에 대한 자세한 내용은 OTEL 환경 변수 및서비스 리소스 의미 체계 규칙을 참조하세요.
지정된 서비스 이름에 대한 추적 데이터를 쿼리하려면 속성을 쿼리합니다 cloud_roleName .
| where cloud_RoleName == "service_name"
Integrations
Foundry를 사용하면 Microsoft 에이전트 프레임워크, 의미 체계 커널, LangChain, LangGraph 및 OpenAI 에이전트 SDK와의 추적 통합을 사용하여 최소한의 변경 내용으로 추적을 쉽게 기록할 수 있습니다.
Microsoft 에이전트 프레임워크 및 의미 체계 커널을 기반으로 하는 추적 에이전트
Foundry에는 Microsoft 에이전트 프레임워크 및 의미 체계 커널과 네이티브 통합이 있습니다. 이 두 프레임워크를 기반으로 구축된 에이전트는 Observability에서 기본 제공되는 추적 기능을 받을 수 있습니다.
- 의미 체계 커널 및 Microsoft 에이전트 프레임워크의 추적 및 관찰 가능성에 대해 자세히 알아봅니다.
LangChain 및 LangGraph 기반 에이전트의 추적을 활성화합니다.
비고
여기에 설명된 LangChain 및 LangGraph에 대한 추적 통합은 현재 Python에서만 사용할 수 있습니다.
opentelemetry-instrumentation-langchain에 따라 OpenTelemetry 표준을 따르는 LangChain에 대해 추적을 사용하도록 설정할 수 있습니다.
필요한 패키지가 설치되면 코드에서 계측 추적을 쉽게 시작할 수 있습니다.
비고
LangChain 및 LangGraph "v1" 릴리스는 현재 활성 개발 중입니다. API 표면 및 추적 동작은 이 릴리스의 일부로 변경될 수 있습니다. LangChain v1.0 릴리스 정보 페이지에서 업데이트 추적
샘플: Azure AI 추적을 사용하는 LangChain v1 에이전트
이 엔드투엔드 샘플을 사용하여 langchain-azure-ai 추적기를 사용해 LangChain v1 에이전트를 계측합니다. 이 추적기는 최신 OpenTelemetry (OTel) 사양을 구현하므로, 관측성에서 풍부한 추적을 확인할 수 있습니다.
패키지 설치
pip install \
langchain-azure-ai \
langchain \
langgraph \
langchain-openai \
azure-identity \
python-dotenv \
rich
환경 구성
-
APPLICATION_INSIGHTS_CONNECTION_STRING: 추적을 위한 Azure Monitor Application Insights 연결 문자열입니다. -
AZURE_OPENAI_ENDPOINT: Azure OpenAI 엔드포인트 URL입니다. -
AZURE_OPENAI_CHAT_DEPLOYMENT: 채팅 모델 배포 이름입니다. -
AZURE_OPENAI_VERSION: API 버전(예2024-08-01-preview: .) - Azure 자격 증명은 환경 변수, 관리 ID, VS Code 로그인 등을 지원하는
DefaultAzureCredential를 통해 해결됩니다.
로컬 개발을 위해 .env 파일에 이것들을 저장할 수 있습니다.
추적 프로그램 설정
from dotenv import load_dotenv
import os
from langchain_azure_ai.callbacks.tracers import AzureAIOpenTelemetryTracer
load_dotenv(override=True)
azure_tracer = AzureAIOpenTelemetryTracer(
connection_string=os.environ.get("APPLICATION_INSIGHTS_CONNECTION_STRING"),
enable_content_recording=True,
name="Weather information agent",
id="weather_info_agent_771929",
)
tracers = [azure_tracer]
모델 설정(Azure OpenAI)
import os
import azure.identity
from langchain_openai import AzureChatOpenAI
token_provider = azure.identity.get_bearer_token_provider(
azure.identity.DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default",
)
model = AzureChatOpenAI(
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
azure_deployment=os.environ.get("AZURE_OPENAI_CHAT_DEPLOYMENT"),
openai_api_version=os.environ.get("AZURE_OPENAI_VERSION"),
azure_ad_token_provider=token_provider,
)
도구 및 프롬프트 정의
from dataclasses import dataclass
from langchain_core.tools import tool
system_prompt = """You are an expert weather forecaster, who speaks in puns.
You have access to two tools:
- get_weather_for_location: use this to get the weather for a specific ___location
- get_user_location: use this to get the user's ___location
If a user asks you for the weather, make sure you know the ___location.
If you can tell from the question that they mean wherever they are,
use the get_user_location tool to find their ___location."""
# Mock user locations keyed by user id (string)
USER_LOCATION = {
"1": "Florida",
"2": "SF",
}
@dataclass
class UserContext:
user_id: str
@tool
def get_weather(city: str) -> str:
"""Get weather for a given city."""
return f"It's always sunny in {city}!"
런타임 컨텍스트 사용 및 사용자 정보 도구 정의
from langgraph.runtime import get_runtime
from langchain_core.runnables import RunnableConfig
@tool
def get_user_info(config: RunnableConfig) -> str:
"""Retrieve user information based on user ID."""
runtime = get_runtime(UserContext)
user_id = runtime.context.user_id
return USER_LOCATION[user_id]
에이전트 만들기
from langchain.agents import create_agent
from langgraph.checkpoint.memory import InMemorySaver
from dataclasses import dataclass
@dataclass
class WeatherResponse:
conditions: str
punny_response: str
checkpointer = InMemorySaver()
agent = create_agent(
model=model,
prompt=system_prompt,
tools=[get_user_info, get_weather],
response_format=WeatherResponse,
checkpointer=checkpointer,
)
추적을 사용하여 에이전트 실행
from rich import print
def main():
config = {"configurable": {"thread_id": "1"}, "callbacks": [azure_tracer]}
context = UserContext(user_id="1")
r1 = agent.invoke(
{"messages": [{"role": "user", "content": "what is the weather outside?"}]},
config=config,
context=context,
)
print(r1.get("structured_response"))
r2 = agent.invoke(
{"messages": [{"role": "user", "content": "Thanks"}]},
config=config,
context=context,
)
print(r2.get("structured_response"))
if __name__ == "__main__":
main()
사용하도록 설정하면 langchain-azure-ai 모든 LangChain v1 작업(LLM 호출, 도구 호출, 에이전트 단계)이 최신 OpenTelemetry 의미 체계 규칙을 사용하여 추적되고 Application Insights 리소스에 연결된 Observability에 표시됩니다.
샘플: Azure AI 추적을 사용하는 LangGraph 에이전트
이 샘플은 Graph 단계, 도구 호출 및 모델 호출에 대한 OpenTelemetry 호환 추적을 내보내기 위해 langchain-azure-ai로 계측된 간단한 LangGraph 에이전트를 보여 줍니다.
패키지 설치
pip install \
langchain-azure-ai \
langgraph==1.0.0a4 \
langchain==1.0.0a10 \
langchain-openai \
azure-identity \
python-dotenv
환경 구성
-
APPLICATION_INSIGHTS_CONNECTION_STRING: 추적을 위한 Azure Monitor Application Insights 연결 문자열입니다. -
AZURE_OPENAI_ENDPOINT: Azure OpenAI 엔드포인트 URL입니다. -
AZURE_OPENAI_CHAT_DEPLOYMENT: 채팅 모델 배포 이름입니다. -
AZURE_OPENAI_VERSION: API 버전(예2024-08-01-preview: .)
로컬 개발을 위해 .env 파일에 이것들을 저장할 수 있습니다.
추적 프로그램 설정
import os
from dotenv import load_dotenv
from langchain_azure_ai.callbacks.tracers import AzureAIOpenTelemetryTracer
load_dotenv(override=True)
azure_tracer = AzureAIOpenTelemetryTracer(
connection_string=os.environ.get("APPLICATION_INSIGHTS_CONNECTION_STRING"),
enable_content_recording=os.getenv("OTEL_RECORD_CONTENT", "true").lower() == "true",
name="Music Player Agent",
)
Tools
from langchain_core.tools import tool
@tool
def play_song_on_spotify(song: str):
"""Play a song on Spotify"""
# Integrate with Spotify API here.
return f"Successfully played {song} on Spotify!"
@tool
def play_song_on_apple(song: str):
"""Play a song on Apple Music"""
# Integrate with Apple Music API here.
return f"Successfully played {song} on Apple Music!"
tools = [play_song_on_apple, play_song_on_spotify]
모델 설정(Azure OpenAI)
import os
import azure.identity
from langchain_openai import AzureChatOpenAI
token_provider = azure.identity.get_bearer_token_provider(
azure.identity.DefaultAzureCredential(),
"https://cognitiveservices.azure.com/.default",
)
model = AzureChatOpenAI(
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
azure_deployment=os.environ.get("AZURE_OPENAI_CHAT_DEPLOYMENT"),
openai_api_version=os.environ.get("AZURE_OPENAI_VERSION"),
azure_ad_token_provider=token_provider,
).bind_tools(tools, parallel_tool_calls=False)
LangGraph 워크플로 빌드
from langgraph.graph import END, START, MessagesState, StateGraph
from langgraph.prebuilt import ToolNode
from langgraph.checkpoint.memory import MemorySaver
tool_node = ToolNode(tools)
def should_continue(state: MessagesState):
messages = state["messages"]
last_message = messages[-1]
return "continue" if getattr(last_message, "tool_calls", None) else "end"
def call_model(state: MessagesState):
messages = state["messages"]
response = model.invoke(messages)
return {"messages": [response]}
workflow = StateGraph(MessagesState)
workflow.add_node("agent", call_model)
workflow.add_node("action", tool_node)
workflow.add_edge(START, "agent")
workflow.add_conditional_edges(
"agent",
should_continue,
{
"continue": "action",
"end": END,
},
)
workflow.add_edge("action", "agent")
memory = MemorySaver()
app = workflow.compile(checkpointer=memory)
추적을 사용하여 실행
from langchain_core.messages import HumanMessage
config = {"configurable": {"thread_id": "1"}, "callbacks": [azure_tracer]}
input_message = HumanMessage(content="Can you play Taylor Swift's most popular song?")
for event in app.stream({"messages": [input_message]}, config, stream_mode="values"):
event["messages"][-1].pretty_print()
langchain-azure-ai 사용하도록 설정하면 LangGraph 실행은 모델 호출, 도구 호출 및 그래프 전환에 대한 OpenTelemetry 규격 범위를 내보낸다. 이러한 추적은 Application Insights로 전송되고 관찰 가능성에 표시됩니다.
샘플: Azure AI 추적을 사용한 LangChain 0.3 설정
이 최소 설정은 langchain-azure-ai 추적 프로그램과 AzureChatOpenAI를 사용하여 LangChain 0.3 애플리케이션에서 Azure AI 추적을 사용하도록 설정하는 방법을 보여 줍니다.
패키지 설치
pip install \
"langchain>=0.3,<0.4" \
langchain-openai \
langchain-azure-ai \
python-dotenv
환경 구성
-
APPLICATION_INSIGHTS_CONNECTION_STRING: 추적을 위한 Application Insights 연결 문자열입니다. -
AZURE_OPENAI_ENDPOINT: Azure OpenAI 엔드포인트 URL입니다. -
AZURE_OPENAI_CHAT_DEPLOYMENT: 채팅 모델 배포 이름입니다. -
AZURE_OPENAI_VERSION: API 버전(예2024-08-01-preview: .) -
AZURE_OPENAI_API_KEY: Azure OpenAI API 키입니다.
추적 프로그램 및 모델 설정
import os
from dotenv import load_dotenv
from langchain_azure_ai.callbacks.tracers import AzureAIOpenTelemetryTracer
from langchain_openai import AzureChatOpenAI
load_dotenv(override=True)
# Tracer: emits spans conforming to updated OTel spec
azure_tracer = AzureAIOpenTelemetryTracer(
connection_string=os.environ.get("APPLICATION_INSIGHTS_CONNECTION_STRING"),
enable_content_recording=True,
name="Trip Planner Orchestrator",
id="trip_planner_orchestrator_v3",
)
tracers = [azure_tracer]
# Model: Azure OpenAI with callbacks for tracing
llm = AzureChatOpenAI(
azure_deployment=os.environ.get("AZURE_OPENAI_CHAT_DEPLOYMENT"),
api_key=os.environ.get("AZURE_OPENAI_API_KEY"),
azure_endpoint=os.environ.get("AZURE_OPENAI_ENDPOINT"),
api_version=os.environ.get("AZURE_OPENAI_VERSION"),
temperature=0.2,
callbacks=tracers,
)
체인, 도구 또는 에이전트에 연결 callbacks=[azure_tracer] 하여 LangChain 0.3 작업이 추적되고 Observability에 표시되도록 합니다.
OpenAI 에이전트 SDK를 사용하는 에이전트에 대한 추적 기능 활성화
이 코드 조각을 사용하여 OpenAI 에이전트 SDK에 대한 OpenTelemetry 추적을 구성하고 프레임워크를 계측합니다. 설정된 경우 APPLICATION_INSIGHTS_CONNECTION_STRING Azure Monitor로 내보내고, 그렇지 않으면 콘솔로 돌아갑니다.
import os
from opentelemetry import trace
from opentelemetry.instrumentation.openai_agents import OpenAIAgentsInstrumentor
from opentelemetry.sdk.resources import Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
# Configure tracer provider + exporter
resource = Resource.create({
"service.name": os.getenv("OTEL_SERVICE_NAME", "openai-agents-app"),
})
provider = TracerProvider(resource=resource)
conn = os.getenv("APPLICATION_INSIGHTS_CONNECTION_STRING")
if conn:
from azure.monitor.opentelemetry.exporter import AzureMonitorTraceExporter
provider.add_span_processor(
BatchSpanProcessor(AzureMonitorTraceExporter.from_connection_string(conn))
)
else:
provider.add_span_processor(BatchSpanProcessor(ConsoleSpanExporter()))
trace.set_tracer_provider(provider)
# Instrument the OpenAI Agents SDK
OpenAIAgentsInstrumentor().instrument(tracer_provider=trace.get_tracer_provider())
# Example: create a session span around your agent run
tracer = trace.get_tracer(__name__)
with tracer.start_as_current_span("agent_session[openai.agents]"):
# ... run your agent here
pass
Foundry 포털에서 추적 보기
프로젝트에서 추적 탭으로 이동하여 추적을 원하는 대로 필터링할 수 있습니다.
추적을 선택하면 애플리케이션이 응답하는 방식을 관찰하면서 각 범위를 단계별로 실행하고 문제를 식별할 수 있습니다. 이렇게 하면 애플리케이션의 문제를 디버그하고 정확하게 파악할 수 있습니다.
Azure Monitor에서 추적 보기
이전 코드 조각을 사용하여 추적을 기록한 경우 Azure Monitor Application Insights에서 추적을 볼 수 있습니다. 데이터 원본 관리에서 Application Insights를 열고 엔드투엔드 트랜잭션 세부 정보 보기를 사용하여 추가로 조사할 수 있습니다.
Azure MONITOR에 Azure AI 유추 추적을 보내고 Azure Monitor 리소스를 만드는 방법에 대한 자세한 내용은 Azure Monitor OpenTelemetry 설명서를 참조하세요.
Foundry Agents 플레이그라운드에서 스레드 결과 보기
Foundry 포털의 에이전트 플레이그라운드를 사용하면 에이전트가 생성하는 스레드 및 실행에 대한 결과를 볼 수 있습니다. 스레드 결과를 보려면 활성 스레드에서 스레드 로그 를 선택합니다. 또한 선택적으로 메트릭을 선택하여 여러 차원의 AI 품질 및 위험 및 안전성에서 모델의 성능을 자동으로 평가할 수 있습니다.
비고
플레이그라운드에서의 "평가"는 가격 책정 페이지의 "신뢰 및 관찰성" 항목에 설명된 대로 청구됩니다. 결과는 만료되기 전에 24시간 동안 사용할 수 있습니다. 평가 결과를 얻으려면 원하는 메트릭을 선택하고 에이전트와 채팅합니다.
- 평가는 다음 지역에서 사용할 수 없습니다.
australiaeastjapaneastsouthindiauksouth
스레드 로그를 선택한 후 다음을 검토합니다.
- 스레드 세부 정보
- 실행 정보
- 순서가 지정된 실행 단계 및 도구 호출
- 사용자와 에이전트 간의 입력 및 출력
- 연결된 평가 메트릭(사용하도록 설정된 경우)
팁 (조언)
이전 스레드의 스레드 결과를 보려면 에이전트 화면에서 내 스레드를 선택합니다. 스레드를 선택한 다음, 플레이그라운드에서 시도를 선택합니다.
화면 맨 위에 스레드 로그 단추를 표시하여 추적 결과를 볼 수 있습니다.
비고
위험 및 안전 평가와 같은 관찰 기능의 요금은 Azure 가격 책정 페이지에 나열된 소비량에 따라 청구됩니다.