Интеллектуальный агент-репетитор, созданный с использованием LangGraph и LangChain, который классифицирует вопросы пользователя и отвечает на них по математике, истории или английскому языку.
- Особенности
- Архитектура
- Установка
- Конфигурация
- Использование
- Структура проекта
- API Документация
- Разработка
- Вклад в проект
- Лицензия
- LLM-интеграция с Together AI для мощных языковых моделей
- Ветвление с помощью LangGraph для сложной логики принятия решений
- Память диалога (
RunnableWithMessageHistory) для контекстных бесед - Автоматическая классификация вопросов по предметам
- Математические операции (сложение, вычитание)
- Обучение истории Казахстана
- Изучение английского языка
- Расширяемая архитектура для добавления новых предметов и навыков
- Гибкая конфигурация через YAML файлы
Проект построен на основе графа состояний (StateGraph) с использованием LangGraph:
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Memory │───▶│ Main │───▶│ Classifier │
│ (История) │ │ (Классификатор) │ │ (Маршрутизатор) │
└─────────────┘ └─────────────┘ └─────────────┘
│
┌──────┴──────┐
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ Math │ │ History │
│ (Математика) │ │ (История) │
└─────┬─────┘ └─────┬─────┘
│ │
┌─────▼─────┐ ┌─────▼─────┐
│ Plus/Minus│ │ English │
│ (Операции) │ │(Английский)│
└───────────┘ └───────────┘
-
GraphState - центральное состояние графа с полями:
text- входящий текст пользователяmemory- история диалогаanswer- ответ агента
-
Классификатор - определяет тип вопроса (math/history/english)
-
Роутеры - направляют запросы к соответствующим инструментам
-
Инструменты - специализированные модули для каждого предмета
- Python 3.8 или выше
- API ключ Together AI
# Клонирование репозитория
git clone https://github.com/Kairatzh/langgraph-ai-tutor-agent.git
cd langgraph-ai-tutor-agent
# Установка зависимостей
pip install -r requirements.txt
# Или установка в режиме разработки
pip install -e ".[dev]"# Установка зависимостей
make install
# Установка для разработки
make install-devСкопируйте файл .env.example в .env:
cp env.example .envОтредактируйте .env файл:
# Together AI API ключ
TOGETHER_API_KEY=your_together_api_key_hereОтредактируйте configs/config.yml:
project:
name: "AgentPractic"
agent:
model: "meta-llama/Llama-2-7b-chat-hf" # Модель LLM
together_api_key: ${TOGETHER_API_KEY} # API ключ из переменной окружения
temperature: 0.6 # Креативность ответов (0.0-1.0)
max_tokens: 100 # Максимальная длина ответаfrom agent import agent_gen
# Простой вызов агента
result = agent_gen("Сколько будет 5 + 3?")
print(result.answer)
# Вопрос по истории
result = agent_gen("Расскажи о Чингисхане")
print(result.answer)
# Вопрос по английскому
result = agent_gen("Как сказать 'привет' по-английски?")
print(result.answer)# Прямой запуск
python agent.py
# Через Makefile
make runagent_gen("5 + 3") # Результат: 8
agent_gen("10 - 4") # Результат: 6agent_gen("Кто такой Абай Кунанбаев?")
agent_gen("Расскажи о Великой Отечественной войне")agent_gen("Как переводится слово 'computer'?")
agent_gen("Объясни Present Simple")AgentPractic/
├── agent.py # Основной скрипт агента
├── requirements.txt # Зависимости Python
├── pyproject.toml # Конфигурация проекта
├── Makefile # Команды для разработки
├── README.md # Документация
├── CHANGELOG.md # История изменений
├── LICENSE # Лицензия MIT
├── env.example # Пример переменных окружения
│
├── configs/ # Конфигурационные файлы
│ ├── config.yml # Основная конфигурация
│ └── settings.py # Загрузчик конфигурации
│
├── tools/ # Инструменты агента
│ ├── classifier_tools.py # Классификатор вопросов
│ ├── math_tools.py # Математические операции
│ ├── history_tools.py # Инструменты для истории
│ ├── english_tools.py # Инструменты для английского
│ └── memory.py # Система памяти диалога
│
└── utils/ # Утилиты
├── prompts.py # Шаблоны промптов
└── states.py # Определения состояний
Основная функция для взаимодействия с агентом.
Параметры:
text(str): Вопрос или запрос пользователя
Возвращает:
GraphState: Объект состояния с ответом агента
Пример:
result = agent_gen("Сколько будет 2 + 2?")
print(result.answer) # "4"class GraphState(BaseModel):
text: Optional[str] = None # Входящий текст
memory: Optional[List[Dict[str, str]]] = None # История диалога
answer: Optional[str] = None # Ответ агентаplus_tool: Сложение двух чиселminus_tool: Вычитание двух чисел
history: Ответы на вопросы по истории Казахстанаenglish_answer: Помощь в изучении английского языкаclassifier_tool: Классификация входящих вопросов
# Установка зависимостей для разработки
make install-dev
# Настройка pre-commit хуков
make setup-hooks# Запуск тестов
make test
# Проверка кода линтерами
make lint
# Форматирование кода
make format
# Очистка временных файлов
make clean
# Сборка пакета
make build# Запуск всех тестов
pytest tests/ -v
# Запуск с покрытием кода
pytest tests/ -v --cov=tools --cov=utils --cov-report=htmlПроект использует:
- Black - форматирование кода
- isort - сортировка импортов
- flake8 - проверка стиля
- mypy - статическая типизация
Автоматическая проверка кода при коммитах:
# Установка хуков
make setup-hooks
# Обновление хуков
make update-hooksМы приветствуем вклад в развитие проекта!
- Форкните репозиторий
- Создайте ветку для новой функции (
git checkout -b feature/amazing-feature) - Зафиксируйте изменения (
git commit -m 'Add amazing feature') - Отправьте в ветку (
git push origin feature/amazing-feature) - Откройте Pull Request
- Следуйте PEP 8
- Добавляйте типы для всех функций
- Пишите документацию для новых функций
- Добавляйте тесты для новой функциональности
Этот проект распространяется под лицензией MIT. См. файл LICENSE для получения дополнительной информации.
Kairat Zhaksylykov
- Email: [email protected]
- GitHub: @Kairatzh
- LangChain - фреймворк для работы с LLM
- LangGraph - библиотека для построения графов агентов
- Together AI - платформа для доступа к языковым моделям
- Pydantic - валидация данных
Если проект вам понравился, поставьте звезду на GitHub!