# 🤖 Агент решения домашних заданий Берёт задания из журнала через **MCP**, решает их с помощью LLM, заливает на **git.brojs.ru** и отправляет ссылку преподавателю. Общаться с агентом можно через чат на `localhost:8123` — так же, как у преподавателя. ## Структура проекта ``` homework_agent/ ├── agent.py # Граф агента + CLI (точка входа для langgraph dev) ├── llm.py # Фабрика LLM: openai (пары) ↔ gigachat (дома) ├── mcp_clients.py # Загрузка MCP-инструментов (journal + gitea) ├── gitea_rest.py # REST fallback для Gitea (если uvx недоступен) ├── langgraph.json # Конфиг для langgraph dev ├── requirements.txt ├── .env.example └── .env # ← создай сам, не коммить! ``` ## Установка ```bash # 1. Виртуальное окружение python -m venv .venv .venv\Scripts\activate # Windows # source .venv/bin/activate # Mac/Linux # 2. Зависимости pip install -r requirements.txt # 3. uv (нужен для Gitea MCP, если будешь использовать) pip install uv ``` ## Настройка .env ```bash cp .env.example .env # открой .env и заполни значения ``` ### Токен журнала — `JOURNAL_MCP_PAT` (самое важное!) Без него агент не видит задания. Спроси у преподавателя или найди сам: 1. Зайди на `https://platform.brojs.ru` (авторизуйся) 2. Открой DevTools (`F12`) → вкладка **Network** 3. Обнови страницу, кликни на любой запрос к `/jrnl-bh/api/...` 4. В заголовках найди `Authorization: Bearer <токен>` — это и есть `JOURNAL_MCP_PAT` ### Токен Gitea — `GITEA_TOKEN` 1. Зайди на https://git.brojs.ru (авторизуйся) 2. Аватарка → **Settings** → **Applications** → **Generate New Token** 3. Поставь права: `repository: read & write` 4. Скопируй в `.env` как `GITEA_TOKEN` 5. Туда же `GITEA_USERNAME` — твой логин на git.brojs.ru ### Переключение LLM **На парах (gpt-oss-20b):** ```env LLM_PROVIDER=openai OPENAI_BASE_URL=https://89fe241d-b6f4-4e49-b3d5-9ed3c91dbe2f.tunnel4.com/v1 OPENAI_MODEL=openi/gpt-oss-20b OPENAI_API_KEY=fake ``` > ⚠️ URL туннеля меняется каждый день — спрашивай актуальный у преподавателя **Дома (GigaChat, бесплатно):** ```env LLM_PROVIDER=gigachat GIGACHAT_CREDENTIALS=твои_credentials GIGACHAT_SCOPE=GIGACHAT_API_B2B ``` Получить credentials: https://developers.sber.ru/studio/workspaces/my-space/get-token/gigachat ## 🚀 Запуск чата (localhost:8123) ```bash langgraph dev ``` Открой в браузере `http://localhost:8123` — появится чат. Можно писать: - *«покажи мои задания»* - *«реши задание с id=abc123»* - *«какие задания есть в курсе xyz?»* ## Запуск из консоли (без чата) ```bash # Показать список заданий python agent.py --list # Решить конкретное задание python agent.py --task-id # Решить задания курса python agent.py --course-id # Посмотреть решение без отправки python agent.py --task-id --dry-run ``` ## Как это работает ``` Ты пишешь в чат ↓ agent_graph (LangGraph ReAct) ↓ читает задания mcp__journal-mcp__tasks_list / task_get ↓ пишет код (LLM) gpt-oss-20b / GigaChat ↓ заливает на Gitea upload_solution → git.brojs.ru/username/dz ↓ отправляет ссылку mcp__journal-mcp__submission_teacher_set_status ``` ## Частые проблемы | Ошибка | Решение | |--------|---------| | `JOURNAL_MCP_PAT не задан` | Добавь токен в `.env` | | `FileNotFoundError: uvx` | `pip install uv` или работает REST fallback | | LLM не отвечает | Проверь `OPENAI_BASE_URL` — URL туннеля мог смениться | | `langgraph: command not found` | `pip install langgraph-cli[inmem]` |