Создание надежного многоагентного пайплайна с CAMEL
Изучите сложный рабочий процесс с использованием фреймворка CAMEL для совместной работы агентов.
Обзор
В этом учебном пособии мы строим продвинутый, сквозной исследовательский рабочий процесс с использованием фреймворка CAMEL. Мы проектируем скоординированное общество агентов—Планировщик, Исследователь, Писатель, Критик и Финализатор—которые совместно преобразуют высокоуровневую тему в отточенный, обоснованный фактами исследовательский бриф.
Интеграция OpenAI API
Мы надежно интегрируем OpenAI API, программно организуем взаимодействия агентов и добавляем легковесную постоянную память для сохранения знаний между запусками. Структурируя систему вокруг четких ролей, контрактов на основе JSON и итеративной доработки, мы показываем, как CAMEL можно использовать для создания надежных, контролируемых и масштабируемых многоагентных пайплайнов.
Настройка окружения
Мы настраиваем окружение выполнения и надежно загружаем ключ API OpenAI, используя секреты Colab или скрытый запрос. Мы обеспечиваем готовность среды выполнения, устанавливая зависимости и настраивая аутентификацию.
!pip -q install "camel-ai[all]" "python-dotenv" "rich"
import os
import json
import time
from typing import Dict, Any
from rich import print as rprint
def load_openai_key() -> str:
key = None
try:
from google.colab import userdata
key = userdata.get("OPENAI_API_KEY")
except Exception:
key = None
if not key:
import getpass
key = getpass.getpass("Введите OPENAI_API_KEY (скрыто): ").strip()
if not key:
raise ValueError("OPENAI_API_KEY необходим.")
return key
os.environ["OPENAI_API_KEY"] = load_openai_key()Инициализация модели CAMEL
Мы инициализируем конфигурацию модели CAMEL и создаем общую языковую модель с помощью абстракции ModelFactory. Мы стандартизируем поведение модели для всех агентов, чтобы обеспечить согласованное и воспроизводимое мышление на протяжении всего многоагентного пайплайна.
from camel.models import ModelFactory
from camel.types import ModelPlatformType, ModelType
from camel.agents import ChatAgent
from camel.toolkits import SearchToolkit
MODEL_CFG = {"temperature": 0.2}
model = ModelFactory.create(
model_platform=ModelPlatformType.OPENAI,
model_type=ModelType.GPT_4O,
model_config_dict=MODEL_CFG,
)Реализация постоянной памяти
Мы реализуем легковесный слой постоянной памяти на основе JSON, который сохраняет артефакты из каждого запуска и извлекает резюме предыдущих выполнений, позволяя нам вводить непрерывность и исторический контекст между сессиями.
MEM_PATH = "camel_memory.json"
def mem_load() -> Dict[str, Any]:
if not os.path.exists(MEM_PATH):
return {"runs": []}
with open(MEM_PATH, "r", encoding="utf-8") as f:
return json.load(f)
def mem_save(mem: Dict[str, Any]) -> None:
with open(MEM_PATH, "w", encoding="utf-8") as f:
json.dump(mem, f, ensure_ascii=False, indent=2)
def mem_add_run(topic: str, artifacts: Dict[str, str]) -> None:
mem = mem_load()
mem["runs"].append({"ts": int(time.time()), "topic": topic, "artifacts": artifacts})
mem_save(mem)Определение ролей агентов
Мы определяем основные роли агентов и их обязанности в рабочем процессе. Каждый агент специализирован с четкими целями и контрактами на выход, улучшая продуктивность и сотрудничество между ними.
def make_agent(role: str, goal: str, extra_rules: str = "") -> ChatAgent:
system = (
f"Вы {role}.
"
f"Цель: {goal}
"
f"{extra_rules}
"
"Выход должен быть четким, структурированным и непосредственно используемым следующим агентом."
)
return ChatAgent(model=model, system_message=system)Оркестровка рабочего процесса
Весь многоагентный рабочий процесс оркеструется от планирования до финализации, последовательно передавая артефакты между агентами для получения завершенного исследовательского брифа, готового к использованию.
def run_workflow(topic: str) -> Dict[str, str]:
rprint(mem_last_summaries(3))
plan = step_json(
planner,
f"Тема: {topic}\nСоздать компактный план и исследовательские вопросы."
)
research = step_json(
researcher,
f"Исследовать тему с помощью веб-поиска.\n{json.dumps(plan)}"
)
draft = step_text(
writer,
f"Написать исследовательский бриф с использованием:\n{json.dumps(research)}"
)
critique = step_json(
critic,
f"Критиковать черновик:\n{draft}"
)
final = step_text(
finalizer,
f"Переписать с учетом критики:\n{json.dumps(critique)}\nЧерновик:\n{draft}"
)
artifacts = {
"plan_json": json.dumps(plan, indent=2),
"research_json": json.dumps(research, indent=2),
"draft_md": draft,
"critique_json": json.dumps(critique, indent=2),
"final_md": final,
}
mem_add_run(topic, artifacts)
return artifactsЗаключение
Мы реализовали практическую многоагентную систему на основе CAMEL, которая отражает реальные исследовательские и обзорные рабочие процессы. Четко определенные роли агентов и доработка, основанная на критике, ведут к более качественным результатам, устраняя эффекты галлюцинации и структурные слабости.
Полные коды
Посмотрите ПОЛНЫЕ КОДЫ здесь.
Switch Language
Read this article in English