主题
追踪 CrewAI 应用
LangSmith 可以使用 OpenTelemetry instrumentation 捕获 CrewAI 生成的追踪。本指南展示如何自动捕获 CrewAI 多代理工作流的追踪,并将其发送到 LangSmith 进行监控和分析。
安装
使用你偏好的包管理器安装所需依赖包:
bash
pip install langsmith crewai opentelemetry-instrumentation-crewai opentelemetry-instrumentation-openaibash
uv add langsmith crewai opentelemetry-instrumentation-crewai opentelemetry-instrumentation-openai设置
1. 配置环境变量
设置你的 API key 和项目名称:
bash
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:
python
from langsmith.integrations.otel import OtelSpanProcessor
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.instrumentation.crewai import CrewAIInstrumentor
from opentelemetry.instrumentation.openai import OpenAIInstrumentor
# Get or create tracer provider
current_provider = trace.get_tracer_provider()
if isinstance(current_provider, TracerProvider):
tracer_provider = current_provider
else:
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(tracer_provider=tracer_provider)
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)3. 创建并运行你的 CrewAI 应用
配置完成后,你的 CrewAI 应用会自动将追踪发送到 LangSmith:
python
from crewai import Agent, Crew, Task
from crewai.llm import LLM
from langsmith.integrations.otel import OtelSpanProcessor
from opentelemetry import trace
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.instrumentation.crewai import CrewAIInstrumentor
from opentelemetry.instrumentation.openai import OpenAIInstrumentor
# Configure OpenTelemetry
current_provider = trace.get_tracer_provider()
if isinstance(current_provider, TracerProvider):
tracer_provider = current_provider
else:
tracer_provider = TracerProvider()
trace.set_tracer_provider(tracer_provider)
tracer_provider.add_span_processor(OtelSpanProcessor())
# Instrument CrewAI and OpenAI
CrewAIInstrumentor().instrument(tracer_provider=tracer_provider)
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)
# Define your agent
llm = LLM(model="gpt-4o-mini")
coder = Agent(
role="Software developer",
goal="Write clear, concise code on demand",
backstory="An expert coder with a keen eye for software trends.",
verbose=True,
llm=llm,
)
# Define your task
task = Task(
description="Write a Python function that checks if a number is prime.",
expected_output="A clear and concise Python function with documentation.",
agent=coder,
)
# Create and run the crew
crew = Crew(
agents=[coder],
tasks=[task],
verbose=True,
)
def run_crew():
result = crew.kickoff()
return result
if __name__ == "__main__":
output = run_crew()
print(output)高级用法
自定义元数据和标签
你可以通过设置 span 属性为追踪添加自定义元数据:
python
from opentelemetry import trace
tracer = trace.get_tracer(__name__)
def run_crew_with_metadata():
with tracer.start_as_current_span("crewai_workflow") as span:
span.set_attribute("langsmith.metadata.crew_type", "code_generation")
span.set_attribute("langsmith.metadata.agent_count", "1")
span.set_attribute("langsmith.span.tags", "crewai,code-generation")
result = crew.kickoff()
return result与其他 instrumentor 组合使用
你可以将 CrewAI instrumentation 与其他 OpenTelemetry instrumentor 组合使用:
python
from opentelemetry.instrumentation.crewai import CrewAIInstrumentor
from opentelemetry.instrumentation.openai import OpenAIInstrumentor
# Initialize multiple instrumentors
CrewAIInstrumentor().instrument(tracer_provider=tracer_provider)
OpenAIInstrumentor().instrument(tracer_provider=tracer_provider)