消息#

1. 概念#

BaseMessage类是CAMEL聊天系统中消息对象的基类。它旨在为系统中的消息提供统一的结构,并允许在不同消息类型之间轻松转换。

所有代码也可以在colab笔记本中获取此处

2. 开始使用#

2.1 创建BaseMessage实例#

要创建一个BaseMessage实例,您需要提供以下参数:

  • role_name: 用户或助手角色的名称。

  • role_type: 角色类型,可以是RoleType.ASSISTANTRoleType.USER

  • meta_dict: 消息的可选元数据字典。

  • content: 消息的内容。

以下是您可以传递的可选参数:

  • video_bytes: 可选的消息关联视频字节数据。

  • image_list: 可选的消息关联PIL图像对象列表。

  • image_detail: 与消息关联图像的细节级别。默认为"auto"。

  • video_detail: 与消息关联的视频的详细级别。默认为"low"。

以下是一个创建 BaseMessage 实例的示例:

from camel.messages import BaseMessage
from camel.types import RoleType

message = BaseMessage(
    role_name="test_user",
    role_type=RoleType.USER,
    content="test content"
)

此外,BaseMessage类提供了便捷的类方法,用于轻松创建用户和智能代理消息:

  1. 创建用户代理消息:

    from camel.messages import BaseMessage
    
    user_message = BaseMessage.make_user_message(
        role_name="user_name", 
        content="test content for user",
    )
    
  2. 创建助理代理消息:

    from camel.messages import BaseMessage
    
    assistant_message = BaseMessage.make_assistant_message(
        role_name="assistant_name",
        content="test content for assistant",
    )
    

2.2 使用BaseMessage类的方法#

BaseMessage 类提供了以下几种方法:

  1. 创建带有更新内容的新实例:

    new_message = message.create_new_instance("new test content")
    print(isinstance(new_message, BaseMessage))
    >>> True
    
  2. 转换为OpenAIMessage对象:

    openai_message = message.to_openai_message(role_at_backend=OpenAIBackendRole.USER)
    print(openai_message == {"role": "user", "content": "test content"})
    >>> True
    
  3. 转换为OpenAISystemMessage对象:

    openai_system_message = message.to_openai_system_message()
    print(openai_system_message == {"role": "system", "content": "test content"})
    >>> True
    
  4. 转换为OpenAIUserMessage对象:

    openai_user_message = message.to_openai_user_message()
    print(openai_user_message == {"role": "user", "content": "test content"})
    >>> True
    
  5. 转换为OpenAIAssistantMessage对象:

    openai_assistant_message = message.to_openai_assistant_message()
    print(openai_assistant_message == {"role": "assistant", "content": "test content"})
    >>> True
    
  6. 转换为字典:

    message_dict = message.to_dict()
    print(message_dict == {
        "role_name": "test_user",
        "role_type": "USER",
        "content": "test content"
    })
    >>> True
    

这些方法允许您根据需求将BaseMessage实例转换为不同的消息类型。

3. 将BaseMessage提供给ChatAgent#

from io import BytesIO

import requests
from PIL import Image

from camel.agents import ChatAgent
from camel.messages import BaseMessage
# URL of the image
url = "https://raw.githubusercontent.com/camel-ai/camel/master/misc/logo_light.png"
response = requests.get(url)
img = Image.open(BytesIO(response.content))

# Define system message
sys_msg = BaseMessage.make_assistant_message(
    role_name="Assistant",
    content="You are a helpful assistant.",
)

# Set agent
camel_agent = ChatAgent(system_message=sys_msg)

# Set user message
user_msg = BaseMessage.make_user_message(
    role_name="User", content="""what's in the image?""", image_list=[img]
)

# Get response information
response = camel_agent.step(user_msg)
print(response.msgs[0].content)
>>> The image features a logo for "CAMEL-AI." It includes a stylized purple camel graphic alongside the text "CAMEL-AI," which is also in purple. The design appears modern and is likely related to artificial intelligence.

4. 结论#

在本环节中,我们介绍了BaseMessage类及其转换为不同类型消息的功能。这些组件在CAMEL聊天系统中扮演着关键角色,能够清晰高效地实现消息的创建、管理和解析。