代理#
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")