Camel多智能体框架初探
<h2 id="camel介绍">Camel介绍</h2><p>CAMEL 是一个开源社区,致力于探索代理的扩展规律。我们相信,在大规模研究这些代理可以提供对其行为、能力和潜在风险的宝贵见解。为了促进该领域的研究,我们实现了并支持各种类型的代理、任务、提示、模型和模拟环境。</p>
<p>CAMEL :找到智能体的扩展规律。第一个也是最好的多智能体框架。</p>
<p><strong>CAMEL 框架设计原则</strong></p>
<p><strong>可演化性</strong></p>
<p>该框架通过生成数据并与环境交互,使多智能体系统能够持续进化。这种进化可以由可验证奖励驱动的强化学习或监督学习驱动。</p>
<p><strong>规模性</strong></p>
<p>该框架旨在支持百万级代理的系统,确保在大规模情况下实现高效的协调、通信和资源管理。</p>
<p><strong>有状态性</strong></p>
<p>代理保持状态记忆,使它们能够进行多步与环境的交互,并高效地应对复杂的任务。</p>
<p><strong>代码即提示</strong></p>
<p>每一行代码和注释都作为代理的提示。代码应编写得清晰易读,确保人类和代理都能有效解读。</p>
<p>GitHub地址:https://github.com/camel-ai/camel。</p>
<p><img src="https://img2024.cnblogs.com/blog/3288240/202503/3288240-20250320150711323-560478413.png"></p>
<h2 id="camel初探">Camel初探</h2>
<p>我使用从源代码中使用 uv 这种方式进行安装。</p>
<pre><code class="language-cmd">git clone https://github.com/camel-ai/camel.git
</code></pre>
<pre><code class="language-cmd">cd camel
</code></pre>
<p>如果没安装uv需要安装。</p>
<pre><code class="language-cmd">pip install uv
</code></pre>
<p>创建一个虚拟环境。</p>
<pre><code class="language-cmd">uv venv .venv --python=3.10
</code></pre>
<p>激活虚拟环境。</p>
<pre><code class="language-cmd">.venv\Scripts\activate
</code></pre>
<p>安装CAMEL及其依赖。</p>
<pre><code class="language-cmd">uv pip install -e "."
</code></pre>
<p>开发者可以安装pre-commit hooks 与 mypy。</p>
<pre><code class="language-cmd">uv pip install pre-commit mypy
</code></pre>
<pre><code class="language-cmd">pre-commit install
</code></pre>
<p>现在先随便跑个例子看看。</p>
<p>我想要使用硅基流动的模型,就可以在.env文件中这样写:</p>
<pre><code class="language-python">Silicon_Model_ID="Qwen/Qwen2.5-72B-Instruct"
SiliconCloud_API_KEY="你的api_key"
SiliconCloud_Base_URL="https://api.siliconflow.cn/v1"
</code></pre>
<p>我跑的例子是这个:camel\examples\ai_society\role_playing_multi_lingual.py</p>
<p>将代码修改为如下的形式即可:</p>
<pre><code class="language-python"># ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ========= Copyright 2023-2024 @ CAMEL-AI.org. All Rights Reserved. =========
from colorama import Fore
from camel.societies import RolePlaying
from camel.utils import print_text_animated
def main(model=None) -> None:
task_prompt = "Develop a trading bot for the stock market"
role_play_session = RolePlaying(
assistant_role_name="Python Programmer",
assistant_agent_kwargs=dict(model=model),
user_role_name="Stock Trader",
user_agent_kwargs=dict(model=model),
task_prompt=task_prompt,
with_task_specify=True,
task_specify_agent_kwargs=dict(model=model),
output_language="Chinese",# Arabic, French, Spanish, ...
)
print(
Fore.GREEN
+ f"AI Assistant sys message:\n{role_play_session.assistant_sys_msg}\n"
)
print(
Fore.BLUE + f"AI User sys message:\n{role_play_session.user_sys_msg}\n"
)
print(Fore.YELLOW + f"Original task prompt:\n{task_prompt}\n")
print(
Fore.CYAN
+ "Specified task prompt:"
+ f"\n{role_play_session.specified_task_prompt}\n"
)
print(Fore.RED + f"Final task prompt:\n{role_play_session.task_prompt}\n")
chat_turn_limit, n = 50, 0
input_msg = role_play_session.init_chat()
while n < chat_turn_limit:
n += 1
assistant_response, user_response = role_play_session.step(input_msg)
if assistant_response.terminated:
print(
Fore.GREEN
+ (
"AI Assistant terminated. Reason: "
f"{assistant_response.info['termination_reasons']}."
)
)
break
if user_response.terminated:
print(
Fore.GREEN
+ (
"AI User terminated. "
f"Reason: {user_response.info['termination_reasons']}."
)
)
break
print_text_animated(
Fore.BLUE + f"AI User:\n\n{user_response.msg.content}\n"
)
print_text_animated(
Fore.GREEN + "AI Assistant:\n\n"
f"{assistant_response.msg.content}\n"
)
if "CAMEL_TASK_DONE" in user_response.msg.content:
break
input_msg = assistant_response.msg
if __name__ == "__main__":
from camel.models import ModelFactory
from camel.types import ModelPlatformType, ModelType
import pathlib
import os
from dotenv import load_dotenv
base_dir = pathlib.Path(__file__).parent.parent.parent
env_path = base_dir / ".env"
load_dotenv(dotenv_path=str(env_path))
modeltype = os.getenv("Silicon_Model_ID")
api_key = os.getenv("SiliconCloud_API_KEY")
base_url = os.getenv("SiliconCloud_Base_URL")
siliconcloud_model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI_COMPATIBLE_MODEL,
model_type=modeltype,
api_key=api_key,
url=base_url,
model_config_dict={"temperature": 0.4, "max_tokens": 4096},
)
main(siliconcloud_model)
</code></pre>
<p>运行效果:</p>
<p><img src="https://img2024.cnblogs.com/blog/3288240/202503/3288240-20250320150711379-1027476830.png"></p>
<p>算是把环境搭建好了。</p>
<p>现在就可以开始学习Camel这个多智能体框架了。</p><br><br>
来源:https://www.cnblogs.com/mingupupu/p/18783069
頁:
[1]