使用DeepSeek构建Camel多智能体框架:基本环境配置

前言

Hello,大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者,本系列是作者参加DataWhale2025年2月份组队学习的技术笔记文档,这里整理为博客,希望能帮助学习Agent的开发者少走弯路!


一、CAMEL Multi-Agent 框架介绍

1.框架概述

CAMEL Multi-Agent 是一个开源的灵活框架,专注于构建和模拟多智能体系统(MAS)。它提供了一套完整的工具链,支持从智能体角色定义、协作流程设计到复杂环境模拟的全流程开发。其核心优势在于 轻量级架构高度可定制化面向多角色协作的交互设计,特别适合需要模拟人类-智能体或智能体-智能体协作的场景。

2.核心作用

  1. 多角色协作模拟:支持定义不同角色的智能体(如「程序员」「产品经理」「医生」等),并通过角色扮演完成复杂任务。
  2. 自主决策与学习:提供基于大语言模型(LLM)的决策引擎,支持智能体的自主推理和行为优化。
  3. 环境交互:内置沙盒环境,允许智能体与外部工具(如Python解释器、API服务)安全交互。
  4. 可观测性:实时监控智能体状态、通信日志和任务执行轨迹。

3.与其他 Agent 框架对比

框架 核心定位 多智能体支持 角色定制化 环境交互 典型应用场景
CAMEL 多角色协作与模拟 ✅ 原生支持 ✅ 高度定制 ✅ 沙盒环境 社会模拟/复杂任务分解
LangChain LLM应用开发框架 ❌ 单智能体 ⚠️ 有限 ⚠️ 需扩展 文档问答/简单工具调用
AutoGen 多智能体对话系统 ✅ 支持 ⚠️ 中等 ✅ 集成工具 自动化工作流
MetaGPT SOP驱动的多智能体协作 ✅ 支持 ✅ 角色模板 ⚠️ 需扩展 软件项目开发
LlamaIndex 数据索引与检索增强 ❌ 无关 ❌ 无 ❌ 无 知识库问答
  1. 与 LangChain 的区别
    LangChain 侧重 单智能体场景下的工具链集成 ,而 CAMEL 专精于 多智能体的角色化协作 。例如在「产品需求评审」场景中:
    • LangChain 更适合构建一个能调用市场数据API的独立分析师智能体
    • CAMEL 则擅长模拟产品经理、工程师、测试人员的多方协作过程
  2. 与 MetaGPT 的区别
    MetaGPT 强调 标准化流程(SOP) ,通过预定义的工作流模板(如软件开发生命周期)驱动智能体协作;而 CAMEL 提供 更自由的交互模式,支持开放式的智能体对话和动态任务分解。
  3. 与 AutoGen 的区别
    AutoGen 提供更完善的外部工具集成,但 CAMEL 在以下方面更具优势:
    • 角色定义系统:支持细粒度的角色属性设置(知识背景、沟通风格等)
    • 对话管理:内置基于主题的对话路由机制
    • 训练接口:提供智能体行为微调API

二、环境配置

以下是 CAMEL Multi-Agent 的几种安装方式及其适用场景:

  • 基础安装
安装方式 适用场景 备注
PyPI 安装 快速体验基础功能 不含额外依赖
完整版安装 需要全部功能 使用清华源加速:-i https://pypi.tuna.tsinghua.edu.cn/simple
Conda 环境 已有Anaconda环境 避免依赖冲突
  • 开发者安装
安装方式 适用场景 备注
Poetry 安装 需要修改源码/参与开发 自动创建虚拟环境
源码安装 (Pip) 直接调试代码 需手动管理虚拟环境

这里有一些前置条件:

这里作者介绍两种安装方法!😉,个人推荐后者!

1.纯净pip直接安装

最简单的方式安装!

plain 复制代码
pip install camel-ai

如果下载卡顿,也可以配置清华源进行下载:

plain 复制代码
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple camel-ai

完整版本下载:

plain 复制代码
pip install "camel-ai[all]==0.2.19"

2.miniconda安装

当然,以上是纯净计算机下环境的安装教程,不过考虑到大多数用户更喜欢用conda,作者这里使用了miniconda配置环境,流程如下::

  1. 创建Conda虚拟环境
plain 复制代码
conda create --name camel python=3.10

这里记得输入y确认;🤔

  1. 激活Conda虚拟环境
plain 复制代码
conda activate camel
  1. 克隆Github仓库
plain 复制代码
git clone -b v0.2.19 https://github.com/camel-ai/camel.git

这里由于是clone GitHub上的项目,需要将自己的科学网络工具提前全局开代理;注意接口要根据科学工具调整,如果是国外网络则无需配置代理;

OK,拉取成功!

切换到项目目录,从源代码安装::

plain 复制代码
cd camel
pip install -e .[all]

安装完毕!本地环境配置完成!🎉👌

这里安装的东西比较多,需要耐心等待;


三、获取API及接口测试

接下来我们获取大模型的API Key,最近DeepSeek很火爆,并且DeepSeek的接口形式和OpenAI的兼容,因此我们选择DeepSeek为例进行测试:

1.登录注册deepseek:https://platform.deepseek.com/usage

这里新用户有免费的API Key额度,作者这里是老玩家了,已经充值了部分金额🙂;按照下面的截图依次创建API Key;

现在复制保存下来这个API Key即可;

注意这里保密,不要将自己的API Key外泄,以免造成经济损失;

其他平台接口申请可以参考作者之前的文章:

https://giserliu.blog.csdn.net/article/details/139667632?spm=1001.2014.3001.5502


四、接口测试与参数细节

1.参数介绍

好了,我们开始测试;🤔下面是一个Camel框架的测试代码:

python 复制代码
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType

model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type="deepseek-chat",
    url='https://api.deepseek.com',
    api_key='你的api_key'
)

agent = ChatAgent(
    model=model,
    output_language='中文'
)

response = agent.step("你好,你是谁?")
print(response.msgs[0].content)

可以看到这里model_platform指的是接口类型。为OpenAI类型接口,因此下面的模型参数比较统一:

  • model_type:模型名称或型号

  • url:接口请求地址

  • api_key:我们刚刚保存的token

这里我们可以参考deepseek的接口文档辅助理解:

运行一下测试看看:

没什么问题!

如果要测试其他接口,可以参考官方提供的文档链接:

官方链接:https://docs.camel-ai.org/key_modules/models.html#using-models-by-api-calling

2.环境变量配置

当然上面的代码总归是不安全的,我们一不小心就可以能将自己的api key泄露出去造成经济损失,因此作者推荐通过环境变量来访问API_KEY;

在当前根目录下创建一个.env文件,然后再其中设置环境变量;

我们也可以将这个模型名称和BaseURL也作为环境变量存储;

在当前环境中安装这个python-dotenv包,用于访问环境变量;

plain 复制代码
pip install python-dotenv

修改代码,实现访问:

python 复制代码
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType

from dotenv import load_dotenv
import os

load_dotenv()

model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
    model_type=os.getenv("MODEL_TYPE"),
    url=os.getenv("OPENAI_API_BASE"),
    api_key=os.getenv("OPENAI_API_KEY")
)

agent = ChatAgent(
    model=model,
    output_language='中文'
)

response = agent.step("你好,介绍一下AI Agent!")
print(response.msgs[0].content)

输出效果:


五、基于Camel框架开发股市交易Agent

1.代码实现

这里我们参考官方的脚本构建一个基于DeepSeek的股票交易Agent,先上代码:

python 复制代码
from colorama import Fore  # 导入colorama库,用于在控制台中输出彩色文本
from camel.societies import RolePlaying  # 导入RolePlaying类,用于角色扮演会话
from camel.utils import print_text_animated  # 导入print_text_animated函数,用于动画效果打印文本
from camel.models import ModelFactory  # 导入ModelFactory类,用于创建模型实例
from camel.types import ModelPlatformType  # 导入ModelPlatformType枚举,用于指定模型平台类型

from dotenv import load_dotenv  # 导入load_dotenv函数,用于加载环境变量
import os  # 导入os模块,用于操作系统相关功能

load_dotenv(dotenv_path='.env')  # 从.env文件中加载环境变量

# 使用ModelFactory创建DeepSeek模型实例
model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,  # 指定模型平台类型为OpenAI兼容模型
    model_type=os.getenv("MODEL_TYPE"),
    url=os.getenv("OPENAI_API_BASE"),
    api_key=os.getenv("OPENAI_API_KEY")
)

def main(model=model, chat_turn_limit=50) -> None:
    task_prompt = "为股票市场开发一个交易机器人"  # 设置任务目标
    role_play_session = RolePlaying(
        assistant_role_name="Python 程序员",  # 设置AI助手角色名
        assistant_agent_kwargs=dict(model=model),  # 传入模型参数
        user_role_name="股票交易员",  # 设置用户角色名,在roleplay中,user用于指导AI助手完成任务
        user_agent_kwargs=dict(model=model),  # 传入模型参数
        task_prompt=task_prompt,  # 传入任务提示
        with_task_specify=True,  # 启用任务细化
        task_specify_agent_kwargs=dict(model=model),  # 传入模型参数
        output_language='中文'  # 设置输出语言为中文
    )

    # 打印AI助手的系统消息
    print(
        Fore.GREEN
        + f"AI 助手系统消息:\n{role_play_session.assistant_sys_msg}\n"
    )
    # 打印AI用户的系统消息
    print(
        Fore.BLUE + f"AI 用户系统消息:\n{role_play_session.user_sys_msg}\n"
    )

    # 打印原始任务提示
    print(Fore.YELLOW + f"原始任务提示:\n{task_prompt}\n")
    # 打印细化后的任务提示
    print(
        Fore.CYAN
        + "指定的任务提示:"
        + f"\n{role_play_session.specified_task_prompt}\n"
    )
    # 打印最终任务提示
    print(Fore.RED + f"最终任务提示:\n{role_play_session.task_prompt}\n")

    n = 0  # 初始化对话轮次计数器
    input_msg = role_play_session.init_chat()  # 初始化聊天会话
    while n < chat_turn_limit:  # 限制对话轮次
        n += 1
        # 执行一步对话,获取AI助手和AI用户的响应
        assistant_response, user_response = role_play_session.step(input_msg)

        # 如果AI助手终止对话,打印终止原因并退出循环
        if assistant_response.terminated:
            print(
                Fore.GREEN
                + (
                    "AI 助手已终止。原因: "
                    f"{assistant_response.info['termination_reasons']}."
                )
            )
            break
        # 如果AI用户终止对话,打印终止原因并退出循环
        if user_response.terminated:
            print(
                Fore.GREEN
                + (
                    "AI 用户已终止。"
                    f"原因: {user_response.info['termination_reasons']}."
                )
            )
            break

        # 动画效果打印AI用户的响应
        print_text_animated(
            Fore.BLUE + f"AI 用户:\n\n{user_response.msg.content}\n"
        )
        # 动画效果打印AI助手的响应
        print_text_animated(
            Fore.GREEN + "AI 助手:\n\n"
            f"{assistant_response.msg.content}\n"
        )

        # 如果AI用户响应中包含任务完成标志,退出循环
        if "CAMEL_TASK_DONE" in user_response.msg.content:
            break

        input_msg = assistant_response.msg  # 更新输入消息为AI助手的响应

if __name__ == "__main__":
    main()  # 执行主函数

2.步骤简单分析

执行一下:

仔细分析不同的输出,可以看到这个框架Agent的思考逻辑,其内置一种多Agent默认框架,通过自我反思和协作完成任务,解决问题;

这里也可以看出这个框架的某个Agent对任务进行了分解,然后分别执行每个模块的需求,保证各个模块生成内容的完整;

这里重复了两次?是因为每次执行完毕后都要运行一下代码来测试模块是否运行成功吗?

不得不说,这里是一个比较有趣的设计,最后用户可以得到一个可以运行的版本,就是消耗的token会不少😂;

在下一篇文章中,我们会详细了解这部分的原理!

注意事项:

如果读者使用的是原版的openai的接口,这里建议打开自己科学网络软件的同时,开启全局代理:


六、Arivx论文下载Agent

代码实现

各位读者也可以根据自己的需求修改task_prompt、assistant_role_name及user_role_name信息;下面是作者自定义的Arivx论文爬取下载的Agent代码:

python 复制代码
from colorama import Fore  # 导入colorama库,用于在控制台中输出彩色文本
from camel.societies import RolePlaying  # 导入RolePlaying类,用于角色扮演会话
from camel.utils import print_text_animated  # 导入print_text_animated函数,用于动画效果打印文本
from camel.models import ModelFactory  # 导入ModelFactory类,用于创建模型实例
from camel.types import ModelPlatformType  # 导入ModelPlatformType枚举,用于指定模型平台类型

from dotenv import load_dotenv  # 导入load_dotenv函数,用于加载环境变量
import os  # 导入os模块,用于操作系统相关功能

load_dotenv(dotenv_path='.env')  # 从.env文件中加载环境变量

# 使用ModelFactory创建DeepSeek模型实例
model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,  # 指定模型平台类型为OpenAI兼容模型
    model_type=os.getenv("MODEL_TYPE"),  # 从环境变量中获取模型类型
    url=os.getenv("OPENAI_API_BASE"),  # 从环境变量中获取API基础URL
    api_key=os.getenv("OPENAI_API_KEY")  # 从环境变量中获取API密钥
)

def main(model=model, chat_turn_limit=50) -> None:
    task_prompt = "开发一个Arxiv论文爬取和下载的Agent,能够根据用户提供的关键词或主题自动搜索、筛选并下载相关论文"  # 设置任务目标
    role_play_session = RolePlaying(
        assistant_role_name="Python 爬虫开发工程师",  # 设置AI助手角色名
        assistant_agent_kwargs=dict(model=model),  # 传入模型参数
        user_role_name="学术研究员",  # 设置用户角色名,在roleplay中,user用于指导AI助手完成任务
        user_agent_kwargs=dict(model=model),  # 传入模型参数
        task_prompt=task_prompt,  # 传入任务提示
        with_task_specify=True,  # 启用任务细化
        task_specify_agent_kwargs=dict(model=model),  # 传入模型参数
        output_language='中文'  # 设置输出语言为中文
    )

    # 打印AI助手的系统消息
    print(
        Fore.GREEN
        + f"AI 助手系统消息:\n{role_play_session.assistant_sys_msg}\n"
    )
    # 打印AI用户的系统消息
    print(
        Fore.BLUE + f"AI 用户系统消息:\n{role_play_session.user_sys_msg}\n"
    )

    # 打印原始任务提示
    print(Fore.YELLOW + f"原始任务提示:\n{task_prompt}\n")
    # 打印细化后的任务提示
    print(
        Fore.CYAN
        + "指定的任务提示:"
        + f"\n{role_play_session.specified_task_prompt}\n"
    )
    # 打印最终任务提示
    print(Fore.RED + f"最终任务提示:\n{role_play_session.task_prompt}\n")

    n = 0  # 初始化对话轮次计数器
    input_msg = role_play_session.init_chat()  # 初始化聊天会话
    while n < chat_turn_limit:  # 限制对话轮次
        n += 1
        # 执行一步对话,获取AI助手和AI用户的响应
        assistant_response, user_response = role_play_session.step(input_msg)

        # 如果AI助手终止对话,打印终止原因并退出循环
        if assistant_response.terminated:
            print(
                Fore.GREEN
                + (
                    "AI 助手已终止。原因: "
                    f"{assistant_response.info['termination_reasons']}."
                )
            )
            break
        # 如果AI用户终止对话,打印终止原因并退出循环
        if user_response.terminated:
            print(
                Fore.GREEN
                + (
                    "AI 用户已终止。"
                    f"原因: {user_response.info['termination_reasons']}."
                )
            )
            break

        # 动画效果打印AI用户的响应
        print_text_animated(
            Fore.BLUE + f"AI 用户:\n\n{user_response.msg.content}\n"
        )
        # 动画效果打印AI助手的响应
        print_text_animated(
            Fore.GREEN + "AI 助手:\n\n"
            f"{assistant_response.msg.content}\n"
        )

        # 如果AI用户响应中包含任务完成标志,退出循环
        if "CAMEL_TASK_DONE" in user_response.msg.content:
            break

        input_msg = assistant_response.msg  # 更新输入消息为AI助手的响应

if __name__ == "__main__":
    main()  # 执行主函数

运行结果如下;

一切正常!没有问题!各位学习者可以一起尝试一下!

文章参考

项目地址


如果觉得我的文章对您有帮助,三连+关注便是对我创作的最大鼓励!或者一个star🌟也可以😂.

相关推荐
LucianaiB1 分钟前
深度对比析:DeepSeek服务优胜本地部署、网页版与蓝耘GPU智算云平台的较量以及删除本地部署的过程
python·ai·gpu·本地部署·deepseek
waterHBO13 分钟前
Leetcode 算法题 26 删除重复值。
python·算法·leetcode
霍格沃兹测试开发学社测试人社区35 分钟前
人工智能丨Deepseek vs 传统测试工具:谁将主导软件质量保障?
软件测试·人工智能·测试开发·测试工具·deepseek
AI-智能36 分钟前
DeepSeek入门到精通!(清华大学104页ppt下载)
人工智能·程序员·langchain·编程·llama·milvus·deepseek
drebander1 小时前
创建和管理 Conda 环境:环境隔离与依赖管理
python·conda·anaconda
Francek Chen1 小时前
【DeepSeek】在本地计算机上部署DeepSeek-R1大模型实战(完整版)
人工智能·深度学习·语言模型·ai编程·deepseek
coderlin_1 小时前
前端到AI,LangChain.Js(二)
前端·人工智能·langchain
2401_897605651 小时前
星动纪元ERA-42:端到端原生机器人大模型的里程碑式突破
前端·人工智能·机器人
FIT2CLOUD飞致云1 小时前
重要发布 | MaxKB开源知识库问答系统发布首个LTS版本
人工智能·开源
金融OG2 小时前
100.13 AI量化面试题:支持向量机(SVM)如何处理高维和复杂数据集?
人工智能·python·算法·机器学习·支持向量机·数学建模·金融