指纹

了解如何使用 CrewAI 的指纹系统,在组件的整个生命周期中对其进行唯一标识和追踪。

概述

CrewAI 中的指纹提供了一种在组件整个生命周期内对其进行唯一标识和追踪的方式。每个 AgentCrewTask 在创建时都会自动获得一个唯一指纹,且该指纹不能被手动覆盖。

这些指纹可用于:

  • 审计和追踪组件使用情况
  • 确保组件身份完整性
  • 为组件附加元数据
  • 创建可追踪的操作链路

指纹如何工作

指纹是 crewai.security 模块中 Fingerprint 类的一个实例。每个指纹包含:

  • 一个 UUID 字符串:组件的唯一标识符,自动生成,不能手动设置
  • 一个创建时间戳:指纹生成的时间,自动设置,不能手动修改
  • 元数据:一个可自定义的附加信息字典

指纹会在组件创建时自动生成并分配。每个组件都通过一个只读属性暴露其指纹。

基础用法

访问指纹

  1. from crewai import Agent, Crew, Task
  2. # Create components - fingerprints are automatically generated
  3. agent = Agent(
  4. role="Data Scientist",
  5. goal="Analyze data",
  6. backstory="Expert in data analysis"
  7. )
  8. crew = Crew(
  9. agents=[agent],
  10. tasks=[]
  11. )
  12. task = Task(
  13. description="Analyze customer data",
  14. expected_output="Insights from data analysis",
  15. agent=agent
  16. )
  17. # Access the fingerprints
  18. agent_fingerprint = agent.fingerprint
  19. crew_fingerprint = crew.fingerprint
  20. task_fingerprint = task.fingerprint
  21. # Print the UUID strings
  22. print(f"Agent fingerprint: {agent_fingerprint.uuid_str}")
  23. print(f"Crew fingerprint: {crew_fingerprint.uuid_str}")
  24. print(f"Task fingerprint: {task_fingerprint.uuid_str}")

使用指纹元数据

你可以为指纹添加元数据,以提供更多上下文信息:

  1. # Add metadata to the agent's fingerprint
  2. agent.security_config.fingerprint.metadata = {
  3. "version": "1.0",
  4. "department": "Data Science",
  5. "project": "Customer Analysis"
  6. }
  7. # Access the metadata
  8. print(f"Agent metadata: {agent.fingerprint.metadata}")

指纹持久性

指纹被设计为在组件整个生命周期内保持持久且不变。如果你修改了组件,指纹仍然保持不变:

  1. original_fingerprint = agent.fingerprint.uuid_str
  2. # Modify the agent
  3. agent.goal = "New goal for analysis"
  4. # The fingerprint remains unchanged
  5. assert agent.fingerprint.uuid_str == original_fingerprint

确定性指纹

虽然你不能直接设置 UUID 和创建时间戳,但你可以使用带种子的 generate 方法创建确定性指纹:

  1. from crewai.security import Fingerprint
  2. # Create a deterministic fingerprint using a seed string
  3. deterministic_fingerprint = Fingerprint.generate(seed="my-agent-id")
  4. # The same seed always produces the same fingerprint
  5. same_fingerprint = Fingerprint.generate(seed="my-agent-id")
  6. assert deterministic_fingerprint.uuid_str == same_fingerprint.uuid_str
  7. # You can also set metadata
  8. custom_fingerprint = Fingerprint.generate(
  9. seed="my-agent-id",
  10. metadata={"version": "1.0"}
  11. )

高级用法

指纹结构

每个指纹具有以下结构:

  1. from crewai.security import Fingerprint
  2. fingerprint = agent.fingerprint
  3. # UUID string - the unique identifier (auto-generated)
  4. uuid_str = fingerprint.uuid_str # e.g., "123e4567-e89b-12d3-a456-426614174000"
  5. # Creation timestamp (auto-generated)
  6. created_at = fingerprint.created_at # A datetime object
  7. # Metadata - for additional information (can be customized)
  8. metadata = fingerprint.metadata # A dictionary, defaults to {}