跳转到内容

Braintrust 集成

本指南演示如何使用 OpenTelemetry 将 BraintrustCrewAI 集成,以实现全面追踪和评估。读完本指南后,你将能够追踪 CrewAI 代理、监控其性能,并使用 Braintrust 强大的可观测性平台评估其输出。

什么是 Braintrust? Braintrust 是一个 AI 评估与可观测性平台,提供面向 AI 应用的全面追踪、评估和监控,并内置实验跟踪和性能分析功能。

我们将通过一个简单示例,展示如何使用 CrewAI 并通过 OpenTelemetry 将其与 Braintrust 集成,以实现全面可观测性和评估。

Terminal window
uv add braintrust[otel] crewai crewai-tools opentelemetry-instrumentation-openai opentelemetry-instrumentation-crewai python-dotenv

设置 Braintrust API keys,并配置 OpenTelemetry 将追踪发送到 Braintrust。你需要一个 Braintrust API key 和你的 OpenAI API key。

import os
from getpass import getpass
# 获取你的 Braintrust 凭据
BRAINTRUST_API_KEY = getpass("🔑 Enter your Braintrust API Key: ")
# 获取各项服务的 API keys
OPENAI_API_KEY = getpass("🔑 Enter your OpenAI API key: ")
# 设置环境变量
os.environ["BRAINTRUST_API_KEY"] = BRAINTRUST_API_KEY
os.environ["BRAINTRUST_PARENT"] = "project_name:crewai-demo"
os.environ["OPENAI_API_KEY"] = OPENAI_API_KEY

步骤 3:使用 Braintrust 初始化 OpenTelemetry

Section titled “步骤 3:使用 Braintrust 初始化 OpenTelemetry”

初始化 Braintrust OpenTelemetry 检测,以开始捕获追踪并将其发送到 Braintrust。

import os
from typing import Any, Dict
from braintrust.otel import BraintrustSpanProcessor
from crewai import Agent, Crew, Task
from crewai.llm import LLM
from opentelemetry import trace
from opentelemetry.instrumentation.crewai import CrewAIInstrumentor
from opentelemetry.instrumentation.openai import OpenAIInstrumentor
from opentelemetry.sdk.trace import TracerProvider
def setup_tracing() -> None:
"""使用 Braintrust 设置 OpenTelemetry 追踪。"""
current_provider = trace.get_tracer_provider()
if isinstance(current_provider, TracerProvider):
provider = current_provider
else:
provider = TracerProvider()
trace.set_tracer_provider(provider)
provider.add_span_processor(BraintrustSpanProcessor())
CrewAIInstrumentor().instrument(tracer_provider=provider)
OpenAIInstrumentor().instrument(tracer_provider=provider)
setup_tracing()

我们将创建一个 CrewAI 应用,其中两个代理协作研究并撰写一篇关于 AI 进展的博客文章,并启用全面追踪。

from crewai import Agent, Crew, Process, Task
from crewai_tools import SerperDevTool
def create_crew() -> Crew:
"""创建一个带有多个代理的 crew,以实现全面追踪。"""
llm = LLM(model="gpt-4o-mini")
search_tool = SerperDevTool()
# 定义具有特定角色的代理
researcher = Agent(
role="Senior Research Analyst",
goal="Uncover cutting-edge developments in AI and data science",
backstory="""You work at a leading tech think tank.
Your expertise lies in identifying emerging trends.
You have a knack for dissecting complex data and presenting actionable insights.""",
verbose=True,
allow_delegation=False,
llm=llm,
tools=[search_tool],
)
writer = Agent(
role="Tech Content Strategist",
goal="Craft compelling content on tech advancements",
backstory="""You are a renowned Content Strategist, known for your insightful and engaging articles.
You transform complex concepts into compelling narratives.""",
verbose=True,
allow_delegation=True,
llm=llm,
)
# 为你的代理创建任务
research_task = Task(
description="""Conduct a comprehensive analysis of the latest advancements in {topic}.
Identify key trends, breakthrough technologies, and potential industry impacts.""",
expected_output="Full analysis report in bullet points",
agent=researcher,
)
writing_task = Task(
description="""Using the insights provided, develop an engaging blog
post that highlights the most significant {topic} advancements.
Your post should be informative yet accessible, catering to a tech-savvy audience.
Make it sound cool, avoid complex words so it doesn't sound like AI.""",
expected_output="Full blog post of at least 4 paragraphs",
agent=writer,
context=[research_task],
)
# 使用顺序流程实例化你的 crew
crew = Crew(
agents=[researcher, writer],
tasks=[research_task, writing_task],
verbose=True,
process=Process.sequential
)
return crew
def run_crew():
"""运行 crew 并返回结果。"""
crew = create_crew()
result = crew.kickoff(inputs={"topic": "AI developments"})
return result
# 运行你的 crew
if __name__ == "__main__":
# 上面的模块中已经初始化了检测
result = run_crew()
print(result)

运行你的 crew 后,你可以通过不同视图在 Braintrust 中查看全面追踪:

Trace
Braintrust 追踪视图
Timeline
Braintrust 时间线视图
Thread
Braintrust 线程视图

步骤 6:通过 SDK 进行评估(实验)

Section titled “步骤 6:通过 SDK 进行评估(实验)”

你还可以使用 Braintrust 的 Eval SDK 进行评估。这对于比较版本或离线评分输出非常有用。下面是一个 Python 示例,使用我们上面创建的 Eval 类:

eval_crew.py
from braintrust import Eval
from autoevals import Levenshtein
def evaluate_crew_task(input_data):
"""包装我们的 crew 用于评估的任务函数。"""
crew = create_crew()
result = crew.kickoff(inputs={"topic": input_data["topic"]})
return str(result)
Eval(
"AI Research Crew", # 项目名称
{
"data": lambda: [
{"topic": "artificial intelligence trends 2024"},
{"topic": "machine learning breakthroughs"},
{"topic": "AI ethics and governance"},
],
"task": evaluate_crew_task,
"scores": [Levenshtein],
},
)

设置你的 API key 并运行:

Terminal window
export BRAINTRUST_API_KEY="YOUR_API_KEY"
braintrust eval eval_crew.py

查看 Braintrust Eval SDK 指南 获取更多详情。

  • 全面追踪:跟踪所有代理交互、工具使用和 LLM 调用
  • 性能监控:监控执行时间、token 使用量和成功率
  • 实验跟踪:比较不同的 crew 配置和模型
  • 自动评估:为 crew 输出设置自定义评估指标
  • 错误跟踪:监控并调试整个 crew 执行中的失败
  • 成本分析:跟踪 token 使用量及相关成本
  • Python 3.8+
  • CrewAI >= 0.86.0
  • Braintrust >= 0.1.0
  • OpenTelemetry SDK >= 1.31.0