LangSmith 可以捕获由 CrewAI 生成的跟踪记录。本指南展示了如何自动从 CrewAI 多代理工作流中捕获跟踪记录并将其发送到 LangSmith 进行监控和分析。
安装
使用您喜欢的包管理器安装所需的包:
pip install langsmith crewai opentelemetry-instrumentation-crewai opentelemetry-instrumentation-openai
uv add langsmith crewai opentelemetry-instrumentation-crewai opentelemetry-instrumentation-openai
设置
1. 配置环境变量
设置您的 API 密钥 和项目名称:
2. 配置 OpenTelemetry 集成
在您的 CrewAI 应用中,配置 LangSmith OpenTelemetry 集成以及 CrewAI 和 OpenAI 检测器:
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 发送跟踪记录:
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)
高级用法
自定义元数据和标签
您可以通过设置跨度属性来向跟踪记录添加自定义元数据:
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
与其他检测器结合使用
您可以将 CrewAI 检测与其他 OpenTelemetry 检测器结合使用:
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)