七、使用CamelAI实现代码助手Agent ——《动手学Agent应用开发》学习心得

七、使用CamelAI实现代码助手Agent ——《动手学Agent应用开发》学习心得

==================================================================================

最近参加了Datawhale开源组织举办的组队学习。
【教程地址】
https://gitlink.org.cn/datawhalechina/build_good_agents

==================================================================================

参考资料:

==================================================================================

魔搭创空间创建与搭建

通义千问3-30B-A3B-Instruct-2507 · 模型库 (modelscope.cn)

Camel官方文档

DeepSeek+Camel多智能体框架万字核心解析(附代码)_智能体camel-CSDN博客

==================================================================================

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

与 LangChain 的区别
LangChain 侧重 单智能体场景下的工具链集成,而 CAMEL 专精于 多智能体的角色化协作。例如在「产品需求评审」场景中:
LangChain 更适合构建一个能调用市场数据API的独立分析师智能体
CAMEL 则擅长模拟产品经理、工程师、测试人员的多方协作过程

1、在魔搭创建创空间

在站点页面完成创空间创建后,平台将为该创空间分配一个 Git 存储地址,可在“创空间详情-空间内容”页面获取。

启动魔搭notebook实例,在JupyterLab中使用git方式添加创空间文件。

2、安装 camel-ai

启动魔搭notebook实例,在Terminal中 pip直接安装

pip install camel-ai

3727f629-daa7-454d-8da2-6812dcbda4a0

3、接口测试与参数细节

3.1、新建test.py

from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType

model = ModelFactory.create(
    model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL, # 指定模型平台类型为OpenAI兼容模型
    model_type="Qwen/Qwen3-30B-A3B-Instruct-2507", #指定模型类型
    url="https://api-inference.modelscope.cn/v1", #指定API基础URL
    api_key="你的api_key" #指定API密钥
)

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

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

67cf2d76-8114-4f01-bd7e-00ce94bcb104

3.2、通过环境变量来访问API_KEY

在当前根目录下创建一个.env文件,然后再其中设置环境变量
9634c902-3d5b-4ace-944f-12f0d5f98a4e

也可以将这个模型名称和BaseURL也作为环境变量存储
6930f7e9-b2ee-4b95-b1d7-047095446355

3.3、安装python-dotenv访问环境变量

pip install python-dotenv

修改代码

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)

eb1cf242-1809-4029-933a-4358650942b7

4、完成一个下载京东商品信息的Agent

参考官方的脚本构建一个下载京东商品信息的Agent

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()  # 从.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=3) -> None:
    task_prompt = "开发一个京东紧固件商品信息爬取和下载的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()  # 执行主函数

b8c744cc-47de-4a6c-9fb0-e4c4295c59fd

4eec6cf9-3203-4fb0-960e-7bd412466c64

posted @ 2025-11-21 11:23  老羅  阅读(53)  评论(0)    收藏  举报