CAMEL for Multi-Agent Interaction
CAMEL (Communicative Agents for "Mind" Exploration of Large Scale Language Model Society) — исследовательский фреймворк для изучения ролевых взаимодействий между LLM-агентами. Ключевая концепция: Role-Playing с явно заданными ролями (AI User / AI Assistant), где агенты ведут структурированный диалог для решения задачи. Полезен для генерации синтетических диалогов, обучающих данных и multi-step reasoning.
Базовый Role-Playing
# pip install camel-ai
from camel.agents import ChatAgent, RolePlaying
from camel.configs import ChatGPTConfig
from camel.messages import BaseMessage
from camel.types import ModelType, RoleType, TaskType
# Конфигурация ролевой игры
role_play_session = RolePlaying(
assistant_role_name="Python разработчик",
user_role_name="Product Manager",
assistant_agent_kwargs={"model": ModelType.GPT_4O},
user_agent_kwargs={"model": ModelType.GPT_4O},
task_prompt="""Разработай план реализации API для сервиса уведомлений.
Требования: WebSocket для real-time, REST для CRUD, поддержка push/email/SMS каналов.""",
with_task_specify=True, # LLM уточняет задачу перед началом
task_type=TaskType.AI_SOCIETY,
)
# Инициализация
init_assistant_msg, init_user_msg = role_play_session.init_chat()
# Диалог
n_turns = 0
max_turns = 8
while n_turns < max_turns:
assistant_response, user_response = role_play_session.step(init_user_msg)
if assistant_response.terminated or user_response.terminated:
print("Диалог завершён")
break
print(f"\n=== Разработчик (ход {n_turns + 1}) ===")
print(assistant_response.msg.content)
print(f"\n=== PM (ход {n_turns + 1}) ===")
print(user_response.msg.content)
init_user_msg = user_response.msg
n_turns += 1
Кастомные агенты с инструментами
from camel.agents import ChatAgent
from camel.messages import BaseMessage
from camel.types import RoleType
from camel.toolkits import OpenAIFunction
# Определение инструментов
def search_codebase(query: str, file_pattern: str = "*.py") -> str:
"""Поиск по кодовой базе проекта."""
results = code_search.search(query=query, pattern=file_pattern)
return str(results[:5])
def run_tests(test_file: str) -> str:
"""Запустить тесты и вернуть результат."""
result = subprocess.run(["pytest", test_file, "-v"], capture_output=True, text=True)
return result.stdout[-2000:] # Последние 2000 символов
# Агент с инструментами
system_message = BaseMessage.make_assistant_message(
role_name="Senior Software Engineer",
content="""Ты — опытный инженер-программист.
Используй инструменты для анализа кода и написания решений.""",
)
engineer_agent = ChatAgent(
system_message=system_message,
model=ModelType.GPT_4O,
tools=[
OpenAIFunction(search_codebase),
OpenAIFunction(run_tests),
],
)
response = engineer_agent.step(
BaseMessage.make_user_message(
role_name="User",
content="Найди все места где используется устаревший метод `process_legacy_data` и предложи рефакторинг",
)
)
Генерация синтетических данных диалогов
Одно из ключевых применений CAMEL — генерация данных для fine-tuning:
from camel.synthetic_datagen import SyntheticDataGenerator
# Генерация диалогов для файнтюнинга
generator = SyntheticDataGenerator(
model=ModelType.GPT_4O,
output_format="sharegpt", # sharegpt, alpaca, openai
)
topics = [
"Объяснение паттернов проектирования на Python",
"Отладка асинхронного кода",
"Оптимизация SQL-запросов",
]
dataset = generator.generate(
topics=topics,
n_samples_per_topic=50,
assistant_role="Senior Python Developer",
user_role="Junior Developer",
max_turns_per_dialog=6,
)
dataset.save("training_data_software.jsonl")
Practical Case: генерация обучающих данных
Задача: компания файнтюнила корпоративного ассистента, но не хватало диалоговых данных для обучения — только документы.
Решение CAMEL: генерация синтетических диалогов вопрос-ответ по корпоративным документам.
# Из документов → диалоги
for doc in company_docs:
session = RolePlaying(
user_role_name="Новый сотрудник",
assistant_role_name="Опытный сотрудник компании",
task_prompt=f"Ответь на вопросы новичка по следующему документу:\n{doc[:2000]}",
max_num_messages=8,
)
dialogs.append(session.run())
Результат: 3 200 синтетических диалогов из 80 документов → fine-tuning на GPT-4o-mini → quality score +28% по сравнению с базовой моделью.
Сроки
- Базовый role-playing и первые эксперименты: 1–2 дня
- Кастомные агенты с инструментами: 3–5 дней
- Пайплайн генерации синтетических данных: 1 неделя







