用户提供了团队关于第一章的完整讨论和迭代记录。我的任务是基于这些内容,按照AgentBehavior类的指导原则(Nature风格、叙事性、不使用项目符号等),生成完整的章节Markdown。
分析请求:
用户要求我“根据团队讨论和迭代,整理成完整的章节 Markdown 内容”。输入是团队两轮的讨论记录。第一轮中,研究员提供了基础技术细节,作者写了故事草稿,但编辑认为过于简略。第二轮,研究员补充了多模型配置、日志功能和更多工具包的信息,作者扩展了故事,编辑最终确认“CHAPTERDONE”。因此,我需要综合这两轮的全部信息,产出最终章节。
制定策略:
自我纠正:
ModelFactory、AgentStepResult、step()循环等复杂概念使用Markdown引用块进行深入说明。这并非天方夜谭。当大语言模型(LLM)拥有了调用工具的能力,它便从一位“博学的隐士”转变为一位“行动派的学者”。今天,我们将与Alice一同踏上旅程,使用 CAMEL-AI 框架,亲手创造一个能联网思考的智能体,实现那个简单的愿望。
💎 核心隐喻:大脑与感官 一个基础的、只能对话的LLM,就像一个拥有强大“大脑”但被困在密室中的人。它知识渊博,却无法感知密室外的最新世界。工具(Tools) 就是为这个大脑打开的“感官”和“手脚”。通过CAMEL,我们可以自由地为LLM装配上搜索引擎(眼睛)、浏览器(双手)、代码解释器(专业工具)等各式“感官”,让它能基于实时信息进行思考和行动。
# 基础安装,包含核心的Agent、Model和基础工具
pip install camel-ai
# 如果你想像Alice一样,让智能体拥有“搜索”这个感官,推荐安装包含Web工具的版本
pip install 'camel-ai[web_tools]'
安装完成后,我们便拥有了构建智能体所需的核心“乐高积木”:
camel.agents:这里是智能体的家园。ChatAgent 是我们本章的主角,一个基础的、可装备工具的对话智能体。camel.models:模型的调度中心。ModelFactory 是这里的关键,它能让你用几行代码轻松切换OpenAI、DeepSeek、Ollama等不同来源的模型。camel.toolkits:工具的武器库。SearchToolkit、BrowserToolkit、TerminalToolkit等数十种工具等待被调用,未来你可以像在超市选购一样,为你独特的智能体搭配功能。camel.types:提供了严谨的类型定义(如ModelPlatformType),让代码更清晰、IDE提示更友好。🔧 深度注释:对于国内开发者,使用像DeepSeek这样的优秀国产模型非常简单:ModelFactory——统一的模型网关ModelFactory.create()方法是CAMEL中接入不同模型的统一网关。它抽象了各个模型平台API的差异,你只需要关心三个核心参数:model_platform(平台,如OPENAI或DEEPSEEK)、model_type(模型名称,如GPT4O或DEEPSEEK_CHAT)和一个可选的config_dict(模型参数配置,如温度)。这种方法让你无需为每个平台学习不同的SDK调用方式。
export DEEPSEEK_API_KEY='你的密钥'。ModelFactory指定平台为ModelPlatformType.DEEPSEEK即可。ollama pull llama3.2。ModelPlatformType.OLLAMA,并指定本地API地址。# -*- coding: utf-8 -*-
# 第一个CAMEL智能体:联网搜索助手
import os
from camel.agents import ChatAgent
from camel.models import ModelFactory
from camel.types import ModelPlatformType, ModelType
from camel.toolkits import SearchToolkit
# 1. 配置模型“大脑”
# 此处使用DeepSeek模型,你需要设置环境变量 DEEPSEEK_API_KEY
# 如果你想用OpenAI,将平台改为 ModelPlatformType.OPENAI,并设置 OPENAI_API_KEY
model = ModelFactory.create(
model_platform=ModelPlatformType.DEEPSEEK,
model_type=ModelType.DEEPSEEK_CHAT,
config_dict={"temperature": 0.2, "max_tokens": 2000} # 控制创造力和回复长度
)
# 2. 装备“感官”工具
# 从SearchToolkit中获取DuckDuckGo搜索函数。未来可以装备更多工具,如[tool1, tool2...]
search_tool = SearchToolkit().search_duckduckgo
# 3. 赋予生命:创建ChatAgent
# 将“大脑”(model)和“感官”(tools)组合起来,一个智能体就此诞生
agent = ChatAgent(model=model, tools=[search_tool])
# 4. 发出第一个指令
print("🧠 智能体‘小科’已启动,正在思考...")
question = "多智能体系统(Multi-Agent Systems)在2024年有哪些最新的研究趋势或突破性应用?"
response = agent.step(question)
# 5. 聆听它的回答
# response是一个AgentStepResult对象,其中包含本次交互的所有消息
answer = response.msgs[0].content
print(f"\n💡 问:{question}")
print(f"\n🔍 答:{answer}")
Alice运行了这段代码。几秒内,控制台开始滚动日志。她看到“小科”理解问题后,自动生成了一个搜索查询,调用了DuckDuckGo工具,获取了网页摘要,并最终整合成一段结构清晰、提及了最新会议和关键技术的回答。
📦 深度注释:AgentStepResult与智能体的“记忆”agent.step()的返回值AgentStepResult是理解智能体单次循环的关键快照。其核心属性msgs是一个列表,按顺序记录了“用户提问”、“LLM思考是否需要工具”、“工具调用与结果”、“LLM最终回复”等完整对话环节。这不仅是返回答案,更是透明的思考过程。未来,你可以利用这个结构实现复杂的多轮对话记忆(memory)功能。
step()的思考循环agent.step()的幕布:
search_duckduckgo(query=”2024 multi-agent systems breakthroughs”))。search_duckduckgo函数,并获取真实的搜索结果(JSON格式的标题、链接、摘要)。AgentStepResult对象中,以备查验或用于后续对话。export CAMEL_MODEL_LOG_ENABLED=true
export CAMEL_LOGGING_LEVEL=DEBUG
再次运行,你会在camel_logs目录下看到详细的JSON日志文件,里面记录了模型每次请求和响应的完整内容、工具调用的参数和结果。这对于调试复杂的工具使用逻辑或理解模型为何做出特定决策至关重要。
toolkits目录下是一个宝库。想象一下,你可以为智能体装备:
BrowserToolkit:让它能像人一样浏览网页、点击按钮、填写表单,处理需要登录或复杂交互的任务。TerminalToolkit(安全沙箱内):在受控环境下执行Shell命令,管理文件、运行脚本。CodeExecutionToolkit:执行Python代码片段并返回结果,让它能进行数学计算或数据分析。GitHubToolkit:读取仓库信息、管理Issue,打造你的编码助手。ChatAgent的tools参数传入一个包含多个工具的列表,如tools=[tool_a, tool_b],你的智能体就立刻获得了多项技能。
DEEPSEEK_API_KEY)。Model(大脑)、Agent(载体)、Tool(感官)三者解耦,自由组合。ChatAgent和SearchToolkit的组合,让代码真正“活”了过来,能基于实时信息进行思考。step()方法的ReAct循环原理,并掌握了利用日志调试、以及未来扩展更多工具的能力。还没有人回复