설치
선호하는 패키지 매니저를 사용하여 필요한 패키지를 설치하세요:Copy
pip install langsmith crewai openinference-instrumentation-crewai openinference-instrumentation-openai
설정
1. 환경 변수 구성
API key와 프로젝트 이름을 설정하세요:Copy
export LANGSMITH_API_KEY=<your_langsmith_api_key>
export LANGSMITH_PROJECT=<your_project_name>
export OPENAI_API_KEY=<your_openai_api_key>
2. OpenTelemetry 통합 구성
CrewAI 애플리케이션에서 LangSmith OpenTelemetry 통합을 CrewAI 및 OpenAI instrumentor와 함께 import하고 구성하세요:Copy
from langsmith.integrations.otel import OtelSpanProcessor
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from openinference.instrumentation.crewai import CrewAIInstrumentor
from openinference.instrumentation.openai import OpenAIInstrumentor
# Get or create tracer provider
tracer_provider = trace.get_tracer_provider()
if not isinstance(tracer_provider, TracerProvider):
tracer_provider = TracerProvider()
trace.set_tracer_provider(tracer_provider)
# Add OtelSpanProcessor to the tracer provider
tracer_provider.add_span_processor(OtelSpanProcessor())
# Instrument CrewAI and OpenAI
CrewAIInstrumentor().instrument()
OpenAIInstrumentor().instrument()
3. CrewAI 애플리케이션 생성 및 실행
구성이 완료되면 CrewAI 애플리케이션이 자동으로 LangSmith에 trace를 전송합니다: 이 예제는 agent와 task를 정의하고, crew를 생성하며, 이를 실행하여 추적된 활동을 생성하는 최소한의 앱을 포함합니다.Copy
from crewai import Agent, Task, Crew
from langsmith.integrations.otel import OtelSpanProcessor
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from openinference.instrumentation.crewai import CrewAIInstrumentor
from openinference.instrumentation.openai import OpenAIInstrumentor
import dotenv
# Load environment variables
dotenv.load_dotenv(".env.local")
# Configure OpenTelemetry
tracer_provider = trace.get_tracer_provider()
if not isinstance(tracer_provider, TracerProvider):
tracer_provider = TracerProvider()
trace.set_tracer_provider(tracer_provider)
# Add OtelSpanProcessor to the tracer provider
tracer_provider.add_span_processor(OtelSpanProcessor())
# Instrument CrewAI and OpenAI
CrewAIInstrumentor().instrument()
OpenAIInstrumentor().instrument()
# Define your agents
market_researcher = Agent(
role="Senior Market Researcher",
goal="Analyze market trends and consumer behavior in the tech industry",
backstory="""You are an experienced market researcher with 10+ years of experience
analyzing technology markets. You excel at identifying emerging trends and
understanding consumer needs.""",
verbose=True,
allow_delegation=False,
)
content_strategist = Agent(
role="Content Marketing Strategist",
goal="Create compelling marketing content based on research insights",
backstory="""You are a creative content strategist who transforms complex market
research into engaging marketing materials. You understand how to communicate
technical concepts to different audiences.""",
verbose=True,
allow_delegation=False,
)
data_analyst = Agent(
role="Data Analyst",
goal="Provide statistical analysis and data-driven insights",
backstory="""You are a skilled data analyst who can interpret complex datasets
and provide actionable insights. You excel at finding patterns and trends
in data that others might miss.""",
verbose=True,
allow_delegation=False,
)
# Define your tasks
research_task = Task(
description="""Conduct comprehensive research on the current state of AI adoption
in small to medium businesses. Focus on:
1. Current adoption rates and trends
2. Main barriers to adoption
3. Most popular AI tools and use cases
4. ROI and business impact metrics
Provide a detailed analysis with supporting data and statistics.""",
agent=market_researcher,
expected_output="A comprehensive market research report on AI adoption in SMBs with data, trends, and insights.",
)
analysis_task = Task(
description="""Analyze the research findings and identify key statistical patterns.
Create data visualizations and provide quantitative insights on:
1. Adoption rate trends over time
2. Industry-specific adoption patterns
3. ROI correlation analysis
4. Barrier impact assessment
Present findings in a clear, data-driven format.""",
agent=data_analyst,
expected_output="Statistical analysis report with key metrics, trends, and data-driven insights.",
context=[research_task],
)
content_task = Task(
description="""Based on the research and analysis, create a compelling marketing
strategy document that includes:
1. Executive summary of key findings
2. Target audience personas based on adoption patterns
3. Key messaging framework addressing main barriers
4. Content recommendations for different business segments
5. Campaign strategy to drive AI adoption
Make the content actionable and business-focused.""",
agent=content_strategist,
expected_output="Complete marketing strategy document with personas, messaging, and campaign recommendations.",
context=[research_task, analysis_task],
)
# Create and run the crew
crew = Crew(
agents=[market_researcher, data_analyst, content_strategist],
tasks=[research_task, analysis_task, content_task],
verbose=True,
process="sequential" # Tasks will be executed in order
)
def run_market_research_crew():
"""Run the market research crew and return results."""
result = crew.kickoff()
return result
if __name__ == "__main__":
print("Running CrewAI market research process...")
output = run_market_research_crew()
print("\n" + "="*50)
print("CrewAI Process Output:")
print("="*50)
print(output)
고급 사용법
커스텀 메타데이터 및 태그
CrewAI 애플리케이션에서 span attribute를 설정하여 trace에 커스텀 메타데이터를 추가할 수 있습니다:Copy
from opentelemetry import trace
# Get the current tracer
tracer = trace.get_tracer(__name__)
def run_market_research_crew():
with tracer.start_as_current_span("crewai_market_research") as span:
# Add custom metadata
span.set_attribute("langsmith.metadata.crew_type", "market_research")
span.set_attribute("langsmith.metadata.agent_count", "3")
span.set_attribute("langsmith.metadata.task_complexity", "high")
span.set_attribute("langsmith.span.tags", "crewai,market-research,multi-agent")
# Run your crew
result = crew.kickoff()
return result
다른 instrumentor와 결합
설정에 다른 instrumentor를 추가하여 CrewAI instrumentation과 결합할 수 있습니다:Copy
from openinference.instrumentation.crewai import CrewAIInstrumentor
from openinference.instrumentation.openai import OpenAIInstrumentor
from openinference.instrumentation.dspy import DSPyInstrumentor
# Initialize multiple instrumentors
CrewAIInstrumentor().instrument()
OpenAIInstrumentor().instrument()
DSPyInstrumentor().instrument()
Copy
---
<Callout icon="pen-to-square" iconType="regular">
[Edit the source of this page on GitHub.](https://github.com/langchain-ai/docs/edit/main/src/langsmith/trace-with-crewai.mdx)
</Callout>
<Tip icon="terminal" iconType="regular">
[Connect these docs programmatically](/use-these-docs) to Claude, VSCode, and more via MCP for real-time answers.
</Tip>