2.1 智能体概述
智能体是一个能够感知环境并在环境中自主行动以实现特定目标的系统。
关键特征:
-
自主性 - 智能体可以在没有直接人为干预的情况下运作,能够自行决策和行动。
-
响应性 - 能够感知环境并对环境变化做出及时响应。
-
主动性 - 不仅被动响应环境,还可以主动采取行动来实现目标。
-
社交能力 - 能够与其他智能体或人类进行交互和协作。
从应用角度,智能体可以分为几类:
-
任务型智能体 - 专注于完成特定任务,如虚拟助手、智能客服等
-
学习型智能体 - 通过与环境交互不断学习和改进,如强化学习智能体
-
协作型智能体 - 多个智能体协同工作,形成多智能体系统
-
对话型智能体 - 专门用于自然语言交互的智能体,如我这样的语言模型
在实现方面,现代智能体通常基于以下技术:
-
大语言模型(LLM)作为认知和决策的核心
-
规划系统用于制定行动计划
-
记忆系统存储相关信息和经验
-
工具使用能力来扩展行动范围
2.2 Agent设计原则与方法
核心部分:
-
感知模块:处理输入信息
-
决策模块:制定行动计划
-
执行模块:实施具体行动
智能体的设计应该采用迭代开发的方式。首先实现基本功能,然后通过不断的测试和反馈来完善系统。在此过程中,要注重收集和分析性能数据,根据实际运行情况调整设计参数和策略。这种渐进式的开发方法可以帮助我们建立一个更加稳健和高效的智能体系统。
2.3 Models
ModelFactory的create方法通过以下参数调用不同的模型:
model_platform:型运行的平台类型 ModelPlatformType.OPENAI_COMPATIBLE_MODEL 表示使用与OpenAI API兼容的模型服务
model_type:指定具体使用的模型
url:模型API服务的端点地址
api_key:访问API服务所需的认证密钥
model_config_dict:用于提供模型特定的配置参数包含如温度(temperature)、最大token数(max_tokens)等推理参数
2.4 Messages
Agent的Message就是指系统中“智能体”或“代理者”之间互相传递的指令或数据包。当一个Agent收到Message后,会根据内容做出决策、执行任务或回复信息。
在 CAMEL 系统中,BaseMessage
是所有消息对象的基础类。无论是用户输入的一段文本,还是包含图片、视频等多模态信息的数据包,都可以通过其来统一表示和管理。
图片:
user_msg = BaseMessage.make_user_message(
role_name="User",
content="请描述这张图片的内容",
image_list=[img] # 将图片放入列表中
)
视频:
# 创建包含视频的用户消息
user_msg = BaseMessage.make_user_message(
role_name="User",
content="请描述这段视频的内容",
video_bytes=video_bytes # 将视频字节作为参数传入
)
BaseMessage通常具有以下参数:
role_name:发送消息的来源(如用户、系统、不同类型的 Agent)
role_type:角色类型,RoleType内存有,
-
RoleType.USER
:表示该消息来自用户 -
RoleType.ASSISTANT
:表示该消息来自智能助手
content:消息的核心载体,一般是文本,也可能是解析指令、问题描述或描述性文字。
image_list:图片信息。PIL.Image对象
video_bytes:视频信息。
此外,还可以通过make_user_message(),make_assistant_message()方法创建特定角色,无需再手动指定role_type。
# 创建用户消息
user_msg = BaseMessage.make_user_message(
role_name="User_1",
content="Hi, what can you do?"
)
# 创建助手消息
assistant_msg = BaseMessage.make_assistant_message(
role_name="Assistant_1",
content="I can help you with various tasks."
)
当你想基于之前某一条消息创建新消息时,可以使用create_new_instance()方法来实现:
# 基于用户消息创建一个新消息,内容稍作修改
updated_user_msg = user_msg.create_new_instance("Hi, can you tell me more about CAMEL?")
print("Updated User Message:", updated_user_msg)
通过to_dict()方法,你可以查看Message对象的内部结构。
msg_dict = assistant_msg.to_dict()
print("Message as dict:", msg_dict)
通过指定特定的AI接口,你可以将Message快速转化成符合其要求的格式。
如转为OpenAI格式的接口:
from camel.types import OpenAIBackendRole
# 将用户消息转化为OpenAI后端兼容的用户消息
openai_user_msg = user_msg.to_openai_message(role_at_backend=OpenAIBackendRole.USER)
print("OpenAI-compatible user message:", openai_user_msg)
# 将助手消息转化为OpenAI后端的助手消息
openai_assistant_msg = assistant_msg.to_openai_assistant_message()
print("OpenAI-compatible assistant message:", openai_assistant_msg)
2.4.4 chatagent
chat_agent可以将Message送入model,实现对话处理与智能回应。
2.4.5 Responses
ChatAgentResponse类用于封装聊天Agent的交互输出,结构化响应内容,便于开发者访问消息、会话状态等信息。
2.4.6 实践练习
暂时没搞懂meta_dict的作用,学会后补充
2.7 Tools
定义工具函数 FunctionTool
from camel.toolkits import FunctionTool
import math
def calculate_sqrt(x: float) -> float:
r"""计算一个数的平方根。
Args:
x (float): 需要计算平方根的数字。
Returns:
float: 输入数字的平方根。
"""
return math.sqrt(x)
# 用 FunctionTool 包装该函数
sqrt_tool = FunctionTool(calculate_sqrt)
工具名称是函数名
print(sqrt_tool.get_function_name())
>>> calculate_sqrt
工具的作用通过注释进行说明
print(sqrt_tool.get_function_description())
>>>
计算一个数的平方根。
使用工具
# 定义系统消息
sys_msg = "你是一个数学大师,擅长各种数学问题。当你遇到数学问题的时候,你要调用工具,将工具计算的结果作为答案"
tool_agent = ChatAgent(
tools = [sqrt_tool],
system_message=sys_msg,
model=model,
output_language="中文")
# 重新发送消息给toolagent
response = tool_agent.step(usr_msg)
print(response.msgs[0].content)
>>>
2的平方根是1.4142135623730951。