代理#

1. 概念#

CAMEL中的代理(Agents)是能够通过与语言模型及其他组件交互来执行特定任务的自主实体。每个代理都被设计具有特定角色和能力,使它们能够独立或协作工作以实现复杂目标。

1.1. 基础代理架构#

所有CAMEL代理都继承自BaseAgent抽象类,该类定义了两个核心方法:

  • reset(): 将代理重置到初始状态

  • step(): 执行代理操作的单个步骤

1.2. 聊天代理#

ChatAgent 是处理与语言模型对话的主要实现。它支持:

  • 用于角色定义的系统消息配置

  • 对话历史的内存管理

  • 工具/函数调用能力

  • 响应格式化和结构化输出

  • 支持多种模型后端及调度策略

  • 异步操作支持

2. 类型#

2.1. ChatAgent#

用于处理与语言模型对话的主要代理实现。功能包括:

  • 工具集成与管理

  • 支持自定义窗口大小的内存管理

  • 输出语言控制

  • 响应终止处理

  • 通过Pydantic模型支持结构化输出

2.2. CriticAgent#

用于评估和评判响应或解决方案的专用代理。适用于需要质量评估或验证的场景。

2.3. DeductiveReasonerAgent#

专注于逻辑推理和演绎的代理。将复杂问题分解为更小、可管理的步骤。

2.4. EmbodiedAgent#

专为具身AI场景设计的智能体,能够理解并响应物理世界的情境。

2.5. KnowledgeGraphAgent#

专注于构建和利用知识图谱,以增强推理能力和信息管理。

2.6. MultiHopGeneratorAgent#

专为处理多跳推理任务而设计的代理,通过生成中间步骤来得出结论。

2.7. SearchAgent#

专注于跨多种数据源的信息检索和搜索任务。

2.8. TaskAgent#

处理任务分解和管理,将复杂任务拆分为可管理的子任务。

3. 使用#

3.1. 基础聊天代理使用#

from camel.agents import ChatAgent

# Create a chat agent with a system message
agent = ChatAgent(system_message="You are a helpful assistant.")

# Step through a conversation
response = agent.step("Hello, can you help me?")

3.2. 使用工具与Chat Agent交互#

from camel.agents import ChatAgent
from camel.toolkits import FunctionTool

# Define a tool
def calculator(a: int, b: int) -> int:
    return a + b

# Create agent with tool
agent = ChatAgent(tools=[calculator])

# The agent can now use the calculator tool in conversations
response = agent.step("What is 5 + 3?")

3.3. 结构化输出#

from pydantic import BaseModel
from typing import List

class ResponseFormat(BaseModel):
    points: List[str]
    summary: str

# Create agent with structured output
agent = ChatAgent()
response = agent.step("List benefits of exercise", response_format=ResponseFormat)

4. 最佳实践#

4.1. 内存管理#

  • 使用适当的窗口大小来管理对话历史记录

  • 处理长对话时考虑token限制

  • 利用内存系统来维护上下文

4.2. 工具集成#

  • 保持工具功能的专注性和良好文档记录

  • 优雅地处理工具错误

  • 对于应由用户处理的操作,使用外部工具

4.3. 响应处理#

  • 为对话控制实现适当的响应终止符

  • 当需要特定响应格式时使用结构化输出

  • 在处理长时间运行的任务时,正确管理异步操作

5. 高级功能#

5.1. 模型调度#

该代理支持多种模型后端,并具有可定制的调度策略:

def custom_strategy(models):
    # Custom model selection logic
    return models[0]

agent.add_model_scheduling_strategy("custom", custom_strategy)

5.2. 输出语言控制#

控制代理响应的语言:

agent.set_output_language("Spanish")