## 🌌 缘起:一个简单的愿望
深夜,屏幕上跳动的代码映照着开发者Alice疲惫的脸。她刚结束了与数十篇学术论文的搏斗,手指在键盘与鼠标间切换,只为从中筛选出几个关键论点。搜索引擎的标签页堆满了浏览器,每一次手动打开、复制、粘贴、总结,都在消耗着她宝贵的创造力。一个念头在她脑中变得无比清晰,像黑夜中的一道光:**如果有一个助手,能在我提问时,主动去互联网上搜索、阅读并整合答案,该多好?**
这并非天方夜谭。当大语言模型(LLM)拥有了调用工具的能力,它便从一位“博学的隐士”转变为一位“行动派的学者”。今天,我们将与Alice一同踏上旅程,使用 **CAMEL-AI** 框架,亲手创造一个能联网思考的智能体,实现那个简单的愿望。
> **💎 核心隐喻:大脑与感官**
> 一个基础的、只能对话的LLM,就像一个拥有强大“大脑”但被困在密室中的人。它知识渊博,却无法感知密室外的最新世界。**工具(Tools)** 就是为这个大脑打开的“感官”和“手脚”。通过CAMEL,我们可以自由地为LLM装配上搜索引擎(眼睛)、浏览器(双手)、代码解释器(专业工具)等各式“感官”,让它能基于实时信息进行思考和行动。
## 🧱 搭建:准备你的智能体工坊
在开始“创造生命”之前,我们需要一个整洁有序的“工坊”——你的Python开发环境。CAMEL的设计哲学是**极简入门**与**深度可扩展**并存。
### 📦 安装与核心模块
通过pip,你可以一键获取CAMEL的核心能力。根据你的需求,有两种选择:
```bash
# 基础安装,包含核心的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提示更友好。
### 🔑 模型选择:多样化的“大脑”供给
CAMEL的“乐高式”设计体现在其对模型的广泛支持上。无论你使用国际服务、国内云模型,还是在本地运行大模型,都能无缝接入。
> **🔧 深度注释:`ModelFactory`——统一的模型网关**
> `ModelFactory.create()` 方法是CAMEL中接入不同模型的**统一网关**。它抽象了各个模型平台API的差异,你只需要关心三个核心参数:`model_platform`(平台,如OPENAI或DEEPSEEK)、`model_type`(模型名称,如GPT_4O或DEEPSEEK_CHAT)和一个可选的`config_dict`(模型参数配置,如温度)。这种方法让你无需为每个平台学习不同的SDK调用方式。
对于国内开发者,使用像DeepSeek这样的优秀国产模型非常简单:
1. 在DeepSeek官网获取API密钥。
2. 在环境中设置:`export DEEPSEEK_API_KEY='你的密钥'`。
3. 在代码中,通过`ModelFactory`指定平台为`ModelPlatformType.DEEPSEEK`即可。
如果你追求完全的数据隐私和离线能力,可以使用 **Ollama** 在本地运行模型:
1. 安装Ollama并拉取模型:`ollama pull llama3.2`。
2. 在代码中,将平台设为`ModelPlatformType.OLLAMA`,并指定本地API地址。
## 🤖 创造:第一个联网智能体诞生记
现在,Alice的工坊已准备就绪。她深吸一口气,在编辑器中写下了赋予代码生命的咒语。
### 🧩 完整脚本:搜索助手“小科”
以下是Alice创建的第一个智能体“小科”的完整、可运行的代码。它的使命是回答任何需要最新信息的问题。
```python
# -*- 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()`的思考循环
智能体看似简单的一问一答,内部却进行了一场精巧的“ReAct”(推理+行动)舞蹈。让我们揭开`agent.step()`的幕布:
1. **接收与推理**:智能体收到Alice的问题。模型“大脑”首先判断:**“要回答这个问题,我需要最新的外部信息吗?”** 如果需要,它会规划行动,生成一个结构化的工具调用请求(如`search_duckduckgo(query=”2024 multi-agent systems breakthroughs”)`)。
2. **行动**:CAMEL框架接收到这个调用意图,立即执行对应的`search_duckduckgo`函数,并获取真实的搜索结果(JSON格式的标题、链接、摘要)。
3. **综合与回答**:框架将**原始问题**和**工具返回的结果**一并再次提交给模型“大脑”。大脑此时扮演“分析师”的角色,综合所有信息,生成最终给Alice的、带有依据的友好回答。
4. **记录**:整个过程的每一步,都被封装进`AgentStepResult`对象中,以备查验或用于后续对话。
这个过程,正是**智能体(Agent)** 区别于**简单聊天机器人(Chatbot)** 的核心:自主规划、调用工具、基于结果再决策的能力。
## ⚙️ 精进:调试、优化与扩展
你的第一个智能体成功运行了!但在更复杂的创造之路上,你会需要更得力的工具。
### 📝 开启洞察之眼:日志系统
当智能体的行为不符合预期时,CAMEL内置的详细日志是你的“诊断仪”。在运行脚本前设置环境变量:
```bash
export CAMEL_MODEL_LOG_ENABLED=true
export CAMEL_LOGGING_LEVEL=DEBUG
```
再次运行,你会在`camel_logs`目录下看到详细的JSON日志文件,里面记录了模型每次请求和响应的完整内容、工具调用的参数和结果。这对于调试复杂的工具使用逻辑或理解模型为何做出特定决策至关重要。
### 🛠️ 扩展工具箱:超越搜索
搜索只是开始。CAMEL的`toolkits`目录下是一个宝库。想象一下,你可以为智能体装备:
- **`BrowserToolkit`**:让它能像人一样浏览网页、点击按钮、填写表单,处理需要登录或复杂交互的任务。
- **`TerminalToolkit`**(安全沙箱内):在受控环境下执行Shell命令,管理文件、运行脚本。
- **`CodeExecutionToolkit`**:执行Python代码片段并返回结果,让它能进行数学计算或数据分析。
- **`GitHubToolkit`**:读取仓库信息、管理Issue,打造你的编码助手。
为`ChatAgent`的`tools`参数传入一个包含多个工具的列表,如`tools=[tool_a, tool_b]`,你的智能体就立刻获得了多项技能。
### ⚠️ 常见挑战与应对
- **API密钥错误**:请务必确认环境变量名称正确且已导出(如`DEEPSEEK_API_KEY`)。
- **网络或超时问题**:部分工具(如搜索)依赖外部网络,请确保运行环境可访问相关服务,或在代码中配置合理的超时参数。
- **工具调用不触发**:如果问题过于简单或模型认为自身知识足以回答,它可能不会调用工具。尝试更明确地要求它“请搜索网络信息来回答”,或调整你的问题。
## 🎯 本章回顾:从愿望到现实
跟随Alice的脚步,我们完成了一次从0到1的创造:
1. 我们从一个**具体的需求场景**(自动搜索与总结)出发,理解了为何需要智能体。
2. 我们搭建了环境,并理解了CAMEL**乐高式模块化**的核心设计:`Model`(大脑)、`Agent`(载体)、`Tool`(感官)三者解耦,自由组合。
3. 我们亲手编写并运行了第一个**联网搜索智能体**,通过`ChatAgent`和`SearchToolkit`的组合,让代码真正“活”了过来,能基于实时信息进行思考。
4. 我们深入了`step()`方法的**ReAct循环原理**,并掌握了利用日志调试、以及未来扩展更多工具的能力。
Alice看着“小科”输出的、带有最新研究动态的答案,最初的疲惫被兴奋取代。她意识到,这不仅仅是一个脚本,而是一个**可进化、可扩展的伙伴原型**。搜索功能只是第一块积木。在接下来的章节中,我们将为这个伙伴添加更多的“感官”和“技能”,并让多个这样的伙伴相互协作,解决前所未有的复杂问题。旅程,才刚刚开始。
登录后可参与表态
讨论回复
0 条回复还没有人回复,快来发表你的看法吧!