第二章:Agent 的构成组件


本章重点:

  1. 深入解析了智能体(Agent)的核心构成与实现方法。智能体是自主感知环境并行动以达成目标的系统,具备自主性、响应性、主动性和社交能力,可分为任务型、学习型、协作型和对话型。现代智能体通常基于大语言模型(LLM)、规划系统、记忆系统和工具使用能力构建。
  2. 智能体的设计需遵循目标导向性和模块化原则,通过迭代开发完善系统。其核心模块包括感知、决策和执行模块,形成完整的工作循环。模型作为智能体的大脑,负责处理输入和输出数据,CAMEL 提供了模型接口,支持多种模型平台和类型。
  3. 消息(Messages)是智能体之间传递信息的基础,BaseMessage 提供了统一的结构和处理方式。通过创建和使用 BaseMessage,开发者可以轻松管理不同类型的消息,包括文本、图片和元数据等。响应(Responses)部分介绍了 ChatAgentResponse 类,用于封装聊天智能体的交互输出,结构化响应内容。
  4. 提示工程(Prompt Engineering)是提升智能体交互效果的关键技术,包括设计有效的提示词、上下文学习(ICL)和思维链(CoT)。这些技术帮助智能体更好地理解用户需求,生成更精准的响应。

1. 智能体概述
1.1 智能体的定义
  • 自主性:无需人为干预,能够自行决策和行动。

  • 响应性:能够感知环境变化并及时响应。

  • 主动性:不仅能被动响应,还能主动采取行动实现目标。

  • 社交能力:能够与其他智能体或人类交互和协作。

1.2 智能体的分类
  • 任务型智能体:专注于完成特定任务,如虚拟助手、智能客服。

  • 学习型智能体:通过与环境交互不断学习和改进,如强化学习智能体。

  • 协作型智能体:多个智能体协同工作,形成多智能体系统。

  • 对话型智能体:用于自然语言交互的智能体,如语言模型。

1.3 智能体的实现技术
  • 大语言模型(LLM):作为认知和决策的核心。

  • 规划系统:用于制定行动计划。

  • 记忆系统:存储相关信息和经验。

  • 工具使用能力:扩展行动范围。

1.4 智能体的发展时间线
  • CAMEL:2023年3月21日发布,开源社区,研究自主和交流Agent。

  • AutoGPT:2023年3月30日发布,基于GPT-4,允许AI自主行动。

  • HuggingGPT:2023年3月30日发布,基于ChatGPT,解决跨领域和多模态任务。

  • Westworld模拟:2023年4月7日发布,研究AI在社会互动中的行为。

  • VOYAGER:2023年5月25日发布,展示大语言模型在游戏环境中的自主学习能力。

  • MetaGPT:2023年7月发布,将LLM转变为多个协作的软件公司角色。

  • ChatDev:2023年8月28日发布,支持增量开发和多智能体协作。

  • XAgent:2023年10月23日发布,具备工作记忆和自我反思能力。

  • Amazon Bedrock Agents:2023年11月发布,企业级AI Agent开发平台。

  • OpenAssistant Pythia:2024年1月发布,开源对话式AI框架。

  • Ray:2024版本,分布式计算框架,整合强化学习和分布式训练。

  • OpenAI Swarm:2024年初,实验性框架,协调多智能体系统。

2. Agent设计原则与方法
2.1 设计原则
  • 目标导向性:每个行为服务于预定目标。

  • 模块化设计:将不同功能划分为独立模块,提高可维护性和灵活性。

2.2 核心模块
  • 感知模块:处理输入信息。

  • 决策模块:制定行动计划。

  • 执行模块:实施具体行动。

2.3 开发方法
  • 迭代开发:先实现基本功能,通过测试和反馈完善系统。

  • 性能数据:收集和分析性能数据,调整设计参数和策略。

3. Models
3.1 模型的作用
  • 处理输入和输出数据:执行文本分析、图像识别和复杂推理等操作。

3.2 支持的模型
  • CAMEL支持的模型:通过ModelFactory创建不同模型。

3.3 API调用模型
  • 示例代码

    Python复制

    from camel.agents import ChatAgent
    from camel.configs import ZhipuAIConfig
    from camel.messages import BaseMessage
    from camel.models import ModelFactory
    from camel.types import ModelPlatformType, ModelType
    
    model = ModelFactory.create(
        model_platform=ModelPlatformType.ZHIPU,
        model_type=ModelType.GLM_4,
        model_config_dict=ZhipuAIConfig(temperature=0.2).as_dict(),
        api_key=os.environ.get("ZHIPUAI_API_KEY"),
        url=os.environ.get("ZHIPUAI_API_BASE_URL"),
    )
    
    sys_msg = BaseMessage.make_assistant_message(
        role_name="Assistant",
        content="You are a helpful assistant.",
    )
    
    camel_agent = ChatAgent(system_message=sys_msg, model=model, output_language="zh")
    
    user_msg = BaseMessage.make_user_message(
        role_name="User",
        content="Say hi to CAMEL AI.",
    )
    
    response = camel_agent.step(user_msg)
    print(response.msgs[0].content)
3.4 使用开源模型
  • Ollama:部署本地模型,支持多语言模型。

  • vLLM:高效的推理库,支持大规模语言模型。

4. Messages
4.1 消息的定义
  • BaseMessage:所有消息对象的基础类,提供统一的结构和处理方式。

4.2 创建和使用Message
  • 最小化示例

    Python复制

    from camel.messages import BaseMessage
    from camel.types import RoleType
    
    message = BaseMessage(
        role_name="example_user",
        role_type=RoleType.USER,
        content="Hello, CAMEL!",
        meta_dict={}
    )
    
    print(message)
4.3 多模态内容
  • 添加图片

    Python复制

    from PIL import Image
    from io import BytesIO
    import requests
    
    url = "https://raw.githubusercontent.com/camel-ai/camel/master/misc/logo_light.png"
    response = requests.get(url)
    img = Image.open(BytesIO(response.content))
    
    image_message = BaseMessage(
        role_name="User_with_image",
        role_type=RoleType.USER,
        content="Here is an image",
        meta_dict={},
        image_list=[img]
    )
    
    print(image_message)
4.4 不同类型消息的处理
  • 快速生成不同类型的消息

    Python复制

    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."
    )
    
    print("User Message:", user_msg)
    print("Assistant Message:", assistant_msg)
5. Responses
5.1 响应的定义
  • ChatAgentResponse:封装聊天Agent的交互输出,结构化响应内容。

5.2 使用ChatAgentResponse
  • 示例代码

    Python复制

    from camel.responses import ChatAgentResponse
    from camel.messages import BaseMessage
    from camel.types import RoleType
    
    response = ChatAgentResponse(
        msgs=[
            BaseMessage(
                role_name="Assistant",
                role_type=RoleType.ASSISTANT,
                content="你好,我可以帮您做什么?",
                meta_dict={}
            )
        ],
        terminated=False,
        info={"usage": {"prompt_tokens": 10, "completion_tokens": 15}}
    )
    
    messages = response.msgs
    is_terminated = response.terminated
    additional_info = response.info
    
    print("消息内容:", messages[0].content)
    print("会话是否终止:", is_terminated)
    print("附加信息:", additional_info)
6. Prompt Engineering
6.1 提示词的定义
  • Prompt Engineering:通过不改变模型内部参数或权重来引导大语言模型生成预期结果的技术。

6.2 如何写好提示词
  • 明确表达需求:清楚地表达需求,避免模糊。

  • 提出任务:直接用自然语言要求模型完成任务。

  • 描述细节:提供任务的具体细节,避免不明确或不稳定的输出。

  • 复杂任务的指导:逐步增加细节和明确性,构建有效的提示。

6.3 上下文学习 (ICL)
  • 定义:通过提供任务示例/说明,让预训练模型理解任务本身。

  • 类型

    • Few-shot Learning:提供多个示例。

    • One-shot Learning:提供一个示例。

    • Zero-shot Learning:无示例。

6.4 思维链 (CoT)
  • 定义:通过分解问题,逐步展示推理过程,提升模型在复杂推理任务中的表现。

  • 类型

    • Zero-Shot-CoT:没有提供具体的例子,只是在问题中加一句“让我们一步步思考”。

    • Few-Shot-CoT:给模型一些例子,每个例子都包含问题、推理过程和答案。

7. Memory
7.1 记忆模块的作用
  • 信息储存:高效存储多种形式的数据。

  • 信息检索:快速检索相关信息。

  • 记忆更新:动态更新存储内容。

  • 记忆管理:优化存储资源的使用。

7.2 ChatHistoryBlock
  • 定义:基于键值存储的聊天历史记忆块实现。

  • 初始化参数

    • storage:存储后端,默认使用InMemoryKeyValueStorage。

    • keep_rate:历史消息权重衰减率,默认0.9。

  • 方法

    • retrieve():获取最近的聊天记录。

    • write_records():将新记录写入聊天记录。

    • clear():删除所有聊天消息。

7.3 VectorDBBlock
  • 定义:基于向量数据库的语义记忆块实现。

  • 初始化参数

    • storage:可选BaseVectorStorage,默认QdrantStorage。

    • embedding:可选BaseEmbedding,默认OpenAIEmbedding。

  • 方法

    • retrieve():根据关键字获取相似记录。

    • write_records():将新记录转换并写入矢量数据库。

    • clear():从向量数据库中删除所有记录。

8. Tools
8.1 工具的作用
  • 获取实时信息:如天气、新闻。

  • 访问外部数据:如数据库、文件。

  • 执行具体操作:如发送邮件、控制设备。

  • 与其他系统交互:扩展模型的功能。

8.2 定义工具
  • 示例代码

    Python复制

    from camel.toolkits import FunctionTool
    
    def add(a: int, b: int) -> int:
        return a + b
    
    add_tool = FunctionTool(add)

以上是第二章的笔记,涵盖了智能体的构成组件、设计原则、模型、消息传递、响应处理、提示工程、记忆模块和工具使用等内容。通过这些内容的学习,可以更好地理解和应用智能体技术。

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐