使用 CrewAI 构建的观察器

CrewAI 这是一个基于 Python 的框架,用于创建和管理能够协作完成任务的人工智能代理。 您可以使用 CrewAI 构建能够协同工作、执行工作流并优化决策的自主AI代理。 CrewAI 可与大型语言模型(LLMs)及外部工具集成,因此在自动化、研究、客户服务等领域均能发挥重要作用。

Instana 为基于 CrewAI, 构建的智能代理提供可观测性,支持对AI代理的工作流、任务执行以及大型语言模型(LLM)的性能进行实时监控。

先决条件

确保满足下列先决条件:

  • Python 3.8 或更高版本

  • 一个大语言模型(LLM) API 密钥(Anthropic、 OpenAI, 或 CrewAI 支持的任何 LLM 提供商)

  • Instana 已根据您的应用程序进行配置,请参阅 “入门指南”

对 CrewAI 应用程序进行性能监控

要为您的 CrewAI 应用程序配置 Instana ,请完成以下步骤:

  1. 安装 CrewAI 和 OpenLLMetry 所需的软件包。

    pip install crewai crewai-tools traceloop-sdk
  2. 设置您的 LLM 提供商凭据,并禁用 CrewAI's 的内部遥测功能。

    export ANTHROPIC_API_KEY="<your-api-key>"
    export CREWAI_DISABLE_TELEMETRY=true
    注:

    如果使用其他提供商,请将 ANTHROPIC_API_KEY 替换为您的 LLM 提供商的环境变量(例如, OpenAIOPENAI_API_KEY 对应 )。

    禁用 CrewAI's 的内部遥测功能可确保所有跟踪信息均通过 OpenLLMetry 捕获,从而实现一致的可观测性。

  3. 创建您的 CrewAI 应用程序。

    在下面的示例中,创建了两个代理(一名研究人员和一名作家)来协作完成一项任务:

    from crewai import Agent, Task, Crew, Process
    from crewai_tools import SerperDevTool
    from traceloop.sdk import Traceloop
    from traceloop.sdk.decorators import workflow
    
    # Initialize OpenLLMetry
    Traceloop.init(app_name="crewai_demo")
    
    # Initialize search tool
    search_tool = SerperDevTool()
    
    # Define agents
    researcher = Agent(
        role="Senior Research Analyst",
        goal="Uncover cutting-edge developments in AI and data science",
        backstory="You are a Senior Research Analyst at a leading tech think tank.",
        verbose=True,
        allow_delegation=False,
        tools=[search_tool]
    )
    
    writer = Agent(
        role="Tech Content Strategist",
        goal="Craft compelling content on tech advancements",
        backstory="You are a renowned Tech Content Strategist, known for insightful and engaging articles on technology and innovation.",
        verbose=True,
        allow_delegation=False,
        tools=[search_tool]
    )
    
    # Define tasks
    task1 = Task(
        description="Perform an in-depth analysis of the following topic: {topic}",
        expected_output="Comprehensive analysis report in bullet points",
        agent=researcher
    )
    
    task2 = Task(
        description="Using the insights from the researcher's report, develop an engaging blog post that highlights the most significant advancements",
        expected_output="A compelling 3-paragraph blog post formatted as markdown",
        agent=writer
    )
    
    # Create the crew
    crew = Crew(
        agents=[researcher, writer],
        tasks=[task1, task2],
        verbose=True,
        process=Process.sequential
    )
    
    # Wrap crew execution in a workflow for better tracing
    @workflow(name="crewai_workflow")
    def run_crew(topic):
        return crew.kickoff(inputs={"topic": topic})
    
    # Execute the crew
    if __name__ == "__main__":
        topics = ["Artificial Intelligence", "Machine Learning", "Neural Networks"]
    
        for topic in topics:
            result = run_crew(topic)
            print(f"\nCompleted analysis for: {topic}\n")
  4. 运行您的 CrewAI 应用程序。

    python crewai_app.py

    CrewAI 生成显示代理之间协作情况的输出:

    图 1. CrewAI 输出
    CrewAI 输出
  5. 在 Instana 中查看数据

    运行应用程序后,数据将显示在 Instana 的Gen AI可观测性仪表盘中:

    图 2. CrewAI Instana 中的痕迹
    CrewAI Instana 中的痕迹

故障诊断

关于使用 CrewAI 构建的代理的故障排除信息。

在 crewAI-telemetry 中显示的是“Traces”,而非预期的服务名称

问题 :跟踪信息未出现在预期的服务名称下(例如 crewai_demo),但可以在 crewAI-telemetry下看到。

原因 : CrewAI's 的内部遥测功能仍处于启用状态。

解决方案 :通过设置以下环境变量来禁用 CrewAI's 的内部遥测功能:

export CREWAI_DISABLE_TELEMETRY=true

设置此变量后,所有跟踪数据都将通过 OpenLLMetry 并以您配置的服务名称进行捕获和报告。